Fix many small bugs in refactor of laptop LED mode handling

Closes issue #27
This commit is contained in:
Luke
2020-07-05 21:20:25 +12:00
parent 98ffa817e6
commit 8da748bf7f
6 changed files with 41 additions and 14 deletions

4
Cargo.lock generated
View File

@@ -697,7 +697,7 @@ checksum = "cabe4fa914dec5870285fa7f71f602645da47c486e68486d2b4ceb4a343e90ac"
[[package]] [[package]]
name = "rog-client" name = "rog-client"
version = "0.14.0" version = "0.14.3"
dependencies = [ dependencies = [
"dbus", "dbus",
"gumdrop", "gumdrop",
@@ -710,7 +710,7 @@ dependencies = [
[[package]] [[package]]
name = "rog-daemon" name = "rog-daemon"
version = "0.14.0" version = "0.14.3"
dependencies = [ dependencies = [
"dbus", "dbus",
"dbus-tokio", "dbus-tokio",

6
debian/changelog vendored
View File

@@ -1,3 +1,9 @@
rog-core (0.14.3) focal; urgency=medium
- Proper fix of laptop mode conversion bug
-- Luke Jones <luke@ljones.dev> Sun, 05 Jul 2020 21:22:05 +1200
rog-core (0.14.2) focal; urgency=medium rog-core (0.14.2) focal; urgency=medium
- Try to correct how laptop modes are handled - Try to correct how laptop modes are handled

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "rog-client" name = "rog-client"
version = "0.14.0" version = "0.14.3"
license = "MPL-2.0" license = "MPL-2.0"
readme = "README.md" readme = "README.md"
authors = ["Luke <luke@ljones.dev>"] authors = ["Luke <luke@ljones.dev>"]

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "rog-daemon" name = "rog-daemon"
version = "0.14.0" version = "0.14.3"
license = "MPL-2.0" license = "MPL-2.0"
readme = "README.md" readme = "README.md"
authors = ["Luke <luke@ljones.dev>"] authors = ["Luke <luke@ljones.dev>"]

View File

@@ -63,7 +63,7 @@ pub async fn start_daemon() -> Result<(), Box<dyn Error>> {
laptop.supported_modes().to_owned(), laptop.supported_modes().to_owned(),
); );
led_writer led_writer
.reload_last_builtin(&config) .reload_last_builtin(&mut config)
.await .await
.unwrap_or_else(|err| warn!("Reload settings: {}", err)); .unwrap_or_else(|err| warn!("Reload settings: {}", err));

View File

@@ -9,7 +9,7 @@ static LED_APPLY: [u8; 17] = [0x5d, 0xb4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
static LED_SET: [u8; 17] = [0x5d, 0xb5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; static LED_SET: [u8; 17] = [0x5d, 0xb5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
use crate::{config::Config, error::RogError}; use crate::{config::Config, error::RogError};
use log::{error, info}; use log::{error, info, warn};
use rog_client::{ use rog_client::{
aura_brightness_bytes, aura_modes::AuraModes, fancy::KeyColourArray, LED_MSG_LEN, aura_brightness_bytes, aura_modes::AuraModes, fancy::KeyColourArray, LED_MSG_LEN,
}; };
@@ -181,17 +181,38 @@ where
} }
#[inline] #[inline]
pub async fn reload_last_builtin(&mut self, config: &Config) -> Result<(), RogError> { pub async fn reload_last_builtin(&mut self, config: &mut Config) -> Result<(), RogError> {
self.initialise().await?; self.initialise().await?;
// set current mode (if any) // set current mode (if any)
if self.supported_modes.len() > 1 { if self.supported_modes.len() > 1 {
let mode = config if self.supported_modes.contains(&config.current_mode) {
.get_led_mode_data(config.current_mode) let mode = config
.ok_or(RogError::NotSupported)? .get_led_mode_data(config.current_mode)
.to_owned(); .ok_or(RogError::NotSupported)?
let mode: [u8; LED_MSG_LEN] = mode.into(); .to_owned();
self.write_bytes(&mode).await?; self.write_mode(&mode).await?;
info!("Reloaded last used mode"); info!("Reloaded last used mode");
} else {
warn!(
"An unsupported mode was set: {}, reset to first mode available",
<&str>::from(&<AuraModes>::from(config.current_mode))
);
for (idx, mode) in config.builtin_modes.iter_mut().enumerate() {
if !self.supported_modes.contains(&mode.into()) {
config.builtin_modes.remove(idx);
config.write();
break;
}
}
config.current_mode = self.supported_modes[0];
// TODO: do a recursive call with a boxed dyn future later
let mode = config
.get_led_mode_data(config.current_mode)
.ok_or(RogError::NotSupported)?
.to_owned();
self.write_mode(&mode).await?;
info!("Reloaded last used mode");
}
} }
// Reload brightness // Reload brightness