pub struct Settings { /* private fields */ }Expand description
Lossless, read-only representation of a GetData(Settings) payload.
Unknown fields remain available through Self::settings_a_raw and
Self::settings_b_raw. Only fields whose meanings are corroborated by
KM003C V1.9.9 firmware consumers have semantic accessors.
Implementations§
Source§impl Settings
impl Settings
Sourcepub fn from_bytes(bytes: &[u8]) -> Result<Self, KMError>
pub fn from_bytes(bytes: &[u8]) -> Result<Self, KMError>
Parse both settings blocks and validate their independent CRC-32 values.
Sourcepub fn to_bytes(&self) -> [u8; 180]
pub fn to_bytes(&self) -> [u8; 180]
Serialize the exact captured settings payload, including unknown fields.
Sourcepub fn settings_a_raw(&self) -> &[u8] ⓘ
pub fn settings_a_raw(&self) -> &[u8] ⓘ
Return the complete first persisted settings block.
Sourcepub fn settings_b_raw(&self) -> &[u8] ⓘ
pub fn settings_b_raw(&self) -> &[u8] ⓘ
Return the complete second persisted settings block.
Sourcepub fn settings_a_flags(&self) -> u32
pub fn settings_a_flags(&self) -> u32
Raw settings-A flags, including fields whose meanings remain unknown.
Sourcepub fn settings_b_flags(&self) -> u32
pub fn settings_b_flags(&self) -> u32
Raw settings-B flags, including fields whose meanings remain unknown.
Sourcepub fn language_selection(&self) -> u8
pub fn language_selection(&self) -> u8
Firmware language-table selection, encoded as 0 or 1.
The mapping from these indices to a particular language is not yet independently confirmed, so this accessor deliberately returns the stored index rather than guessing an enum variant.
Examples found in repository?
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 let mut device = KM003C::new(DeviceConfig::vendor().skip_reset()).await?;
8 let settings = device.request_settings().await?;
9
10 println!("Device name: {}", settings.device_name().unwrap_or("<invalid UTF-8>"));
11 println!("Language selection: {}", settings.language_selection());
12 println!("Uncalibrated: {}", settings.is_uncalibrated());
13 println!("Brightness: {}%", settings.brightness().get::<percent>());
14 println!(
15 "Sample interval: {} us",
16 settings.sample_interval().get::<microsecond>()
17 );
18 println!("Screen orientation: {}", settings.screen_orientation());
19 println!("Mtools device mode: {}", settings.mtools_device_mode());
20 println!("Selected main page: {}", settings.selected_main_page());
21
22 Ok(())
23}Sourcepub fn is_uncalibrated(&self) -> bool
pub fn is_uncalibrated(&self) -> bool
Whether firmware marks the device as requiring calibration.
Examples found in repository?
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 let mut device = KM003C::new(DeviceConfig::vendor().skip_reset()).await?;
8 let settings = device.request_settings().await?;
9
10 println!("Device name: {}", settings.device_name().unwrap_or("<invalid UTF-8>"));
11 println!("Language selection: {}", settings.language_selection());
12 println!("Uncalibrated: {}", settings.is_uncalibrated());
13 println!("Brightness: {}%", settings.brightness().get::<percent>());
14 println!(
15 "Sample interval: {} us",
16 settings.sample_interval().get::<microsecond>()
17 );
18 println!("Screen orientation: {}", settings.screen_orientation());
19 println!("Mtools device mode: {}", settings.mtools_device_mode());
20 println!("Selected main page: {}", settings.selected_main_page());
21
22 Ok(())
23}Sourcepub fn brightness(&self) -> Ratio
pub fn brightness(&self) -> Ratio
Display brightness as applied by firmware, in percent.
The stored field is seven bits wide; firmware clamps values above 100.
Examples found in repository?
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 let mut device = KM003C::new(DeviceConfig::vendor().skip_reset()).await?;
8 let settings = device.request_settings().await?;
9
10 println!("Device name: {}", settings.device_name().unwrap_or("<invalid UTF-8>"));
11 println!("Language selection: {}", settings.language_selection());
12 println!("Uncalibrated: {}", settings.is_uncalibrated());
13 println!("Brightness: {}%", settings.brightness().get::<percent>());
14 println!(
15 "Sample interval: {} us",
16 settings.sample_interval().get::<microsecond>()
17 );
18 println!("Screen orientation: {}", settings.screen_orientation());
19 println!("Mtools device mode: {}", settings.mtools_device_mode());
20 println!("Selected main page: {}", settings.selected_main_page());
21
22 Ok(())
23}Sourcepub fn sample_interval(&self) -> Time
pub fn sample_interval(&self) -> Time
ADC sample interval stored in the settings block.
Examples found in repository?
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 let mut device = KM003C::new(DeviceConfig::vendor().skip_reset()).await?;
8 let settings = device.request_settings().await?;
9
10 println!("Device name: {}", settings.device_name().unwrap_or("<invalid UTF-8>"));
11 println!("Language selection: {}", settings.language_selection());
12 println!("Uncalibrated: {}", settings.is_uncalibrated());
13 println!("Brightness: {}%", settings.brightness().get::<percent>());
14 println!(
15 "Sample interval: {} us",
16 settings.sample_interval().get::<microsecond>()
17 );
18 println!("Screen orientation: {}", settings.screen_orientation());
19 println!("Mtools device mode: {}", settings.mtools_device_mode());
20 println!("Selected main page: {}", settings.selected_main_page());
21
22 Ok(())
23}Sourcepub fn screen_orientation(&self) -> u8
pub fn screen_orientation(&self) -> u8
Display orientation index stored by firmware, in the range 0..=3.
Examples found in repository?
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 let mut device = KM003C::new(DeviceConfig::vendor().skip_reset()).await?;
8 let settings = device.request_settings().await?;
9
10 println!("Device name: {}", settings.device_name().unwrap_or("<invalid UTF-8>"));
11 println!("Language selection: {}", settings.language_selection());
12 println!("Uncalibrated: {}", settings.is_uncalibrated());
13 println!("Brightness: {}%", settings.brightness().get::<percent>());
14 println!(
15 "Sample interval: {} us",
16 settings.sample_interval().get::<microsecond>()
17 );
18 println!("Screen orientation: {}", settings.screen_orientation());
19 println!("Mtools device mode: {}", settings.mtools_device_mode());
20 println!("Selected main page: {}", settings.selected_main_page());
21
22 Ok(())
23}Sourcepub fn mtools_device_mode(&self) -> u8
pub fn mtools_device_mode(&self) -> u8
Mtools device-mode index stored by firmware, in the range 0..=3.
Examples found in repository?
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 let mut device = KM003C::new(DeviceConfig::vendor().skip_reset()).await?;
8 let settings = device.request_settings().await?;
9
10 println!("Device name: {}", settings.device_name().unwrap_or("<invalid UTF-8>"));
11 println!("Language selection: {}", settings.language_selection());
12 println!("Uncalibrated: {}", settings.is_uncalibrated());
13 println!("Brightness: {}%", settings.brightness().get::<percent>());
14 println!(
15 "Sample interval: {} us",
16 settings.sample_interval().get::<microsecond>()
17 );
18 println!("Screen orientation: {}", settings.screen_orientation());
19 println!("Mtools device mode: {}", settings.mtools_device_mode());
20 println!("Selected main page: {}", settings.selected_main_page());
21
22 Ok(())
23}Sourcepub fn selected_main_page(&self) -> u8
pub fn selected_main_page(&self) -> u8
Persisted main-page index, in the range 0..=15.
Examples found in repository?
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 let mut device = KM003C::new(DeviceConfig::vendor().skip_reset()).await?;
8 let settings = device.request_settings().await?;
9
10 println!("Device name: {}", settings.device_name().unwrap_or("<invalid UTF-8>"));
11 println!("Language selection: {}", settings.language_selection());
12 println!("Uncalibrated: {}", settings.is_uncalibrated());
13 println!("Brightness: {}%", settings.brightness().get::<percent>());
14 println!(
15 "Sample interval: {} us",
16 settings.sample_interval().get::<microsecond>()
17 );
18 println!("Screen orientation: {}", settings.screen_orientation());
19 println!("Mtools device mode: {}", settings.mtools_device_mode());
20 println!("Selected main page: {}", settings.selected_main_page());
21
22 Ok(())
23}Sourcepub fn device_name_raw(&self) -> &[u8] ⓘ
pub fn device_name_raw(&self) -> &[u8] ⓘ
Raw 64-byte device-name field, including trailing zero padding.
Sourcepub fn device_name(&self) -> Option<&str>
pub fn device_name(&self) -> Option<&str>
UTF-8 device name when the stored bytes are valid UTF-8.
Examples found in repository?
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 let mut device = KM003C::new(DeviceConfig::vendor().skip_reset()).await?;
8 let settings = device.request_settings().await?;
9
10 println!("Device name: {}", settings.device_name().unwrap_or("<invalid UTF-8>"));
11 println!("Language selection: {}", settings.language_selection());
12 println!("Uncalibrated: {}", settings.is_uncalibrated());
13 println!("Brightness: {}%", settings.brightness().get::<percent>());
14 println!(
15 "Sample interval: {} us",
16 settings.sample_interval().get::<microsecond>()
17 );
18 println!("Screen orientation: {}", settings.screen_orientation());
19 println!("Mtools device mode: {}", settings.mtools_device_mode());
20 println!("Selected main page: {}", settings.selected_main_page());
21
22 Ok(())
23}Sourcepub fn settings_a_checksum(&self) -> u32
pub fn settings_a_checksum(&self) -> u32
Stored CRC-32 for the first settings block.
Sourcepub fn settings_b_checksum(&self) -> u32
pub fn settings_b_checksum(&self) -> u32
Stored CRC-32 for the second settings block.