1 // Copyright 2020 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 use std::string::String;
5 
6 use dsm::{self, Error, Result};
7 use serde::Deserialize;
8 
9 /// `DeviceSettings` includes the settings of max98390. It currently includes:
10 /// * the settings of amplifier calibration.
11 /// * the path of dsm_param.
12 #[derive(Debug, Default, PartialEq, Deserialize, Clone)]
13 pub struct DeviceSettings {
14     pub amp_calibrations: AmpCalibSettings,
15 }
16 #[derive(Debug, Default, PartialEq, Deserialize, Clone)]
17 pub struct AmpCalibCtrl {
18     // Mixer control to get/set rdc value.
19     pub rdc_ctrl: String,
20     // Mixer control to get/set ambient temperature value.
21     pub temp_ctrl: String,
22     // Mixer control to trigger calibration.
23     pub calib_ctrl: String,
24     // Mixer control to adjust volume.
25     pub volume_ctrl: String,
26 }
27 
28 /// `AmpCalibSettings` includes the settings needed for amplifier calibration.
29 #[derive(Debug, Default, PartialEq, Deserialize, Clone)]
30 pub struct AmpCalibSettings {
31     // Mixer control to get/set rdc value.
32     pub controls: Vec<AmpCalibCtrl>,
33     // Path of the dsm_param.bin file.
34     pub dsm_param: String,
35 }
36 
37 impl AmpCalibSettings {
38     /// Returns the number of channels.
num_channels(&self) -> usize39     pub fn num_channels(&self) -> usize {
40         self.controls.len()
41     }
42 }
43 
44 impl DeviceSettings {
45     /// Creates a `DeviceSettings` from a yaml str.
from_yaml_str(conf: &str) -> Result<DeviceSettings>46     pub fn from_yaml_str(conf: &str) -> Result<DeviceSettings> {
47         let settings: DeviceSettings = serde_yaml::from_str(conf)
48             .map_err(|e| Error::DeserializationFailed("DeviceSettings".to_owned(), e))?;
49         Ok(settings)
50     }
51 }
52