diff --git a/daemon/src/ctrl_leds.rs b/daemon/src/ctrl_leds.rs index ee612213..80d2c128 100644 --- a/daemon/src/ctrl_leds.rs +++ b/daemon/src/ctrl_leds.rs @@ -22,7 +22,7 @@ use zvariant::ObjectPath; use crate::GetSupported; -impl GetSupported for CtrlKbdBacklight { +impl GetSupported for CtrlKbdLed { type A = LedSupportedFunctions; fn get_supported() -> Self::A { @@ -37,7 +37,7 @@ impl GetSupported for CtrlKbdBacklight { }; LedSupportedFunctions { - brightness_set: CtrlKbdBacklight::get_kbd_bright_path().is_some(), + brightness_set: CtrlKbdLed::get_kbd_bright_path().is_some(), stock_led_modes, multizone_led_mode, per_key_led_mode, @@ -45,7 +45,7 @@ impl GetSupported for CtrlKbdBacklight { } } -pub struct CtrlKbdBacklight { +pub struct CtrlKbdLed { led_node: Option, pub bright_node: String, supported_modes: LaptopLedData, @@ -53,9 +53,9 @@ pub struct CtrlKbdBacklight { config: AuraConfig, } -pub struct CtrlKbdBacklightTask(pub Arc>); +pub struct CtrlKbdLedTask(pub Arc>); -impl crate::CtrlTask for CtrlKbdBacklightTask { +impl crate::CtrlTask for CtrlKbdLedTask { fn do_task(&self) -> Result<(), RogError> { if let Ok(mut lock) = self.0.try_lock() { let mut file = OpenOptions::new() @@ -84,22 +84,36 @@ impl crate::CtrlTask for CtrlKbdBacklightTask { } } -pub struct DbusKbdBacklight { - inner: Arc>, +pub struct CtrlKbdLedReloader(pub Arc>); + +impl crate::Reloadable for CtrlKbdLedReloader { + fn reload(&mut self) -> Result<(), RogError> { + if let Ok(mut lock) = self.0.try_lock() { + let current = lock.config.current_mode; + if let Some(mode) = lock.config.builtins.get(¤t).cloned() { + lock.do_command(mode).ok(); + } + } + Ok(()) + } } -impl DbusKbdBacklight { - pub fn new(inner: Arc>) -> Self { +pub struct CtrlKbdLedZbus { + inner: Arc>, +} + +impl CtrlKbdLedZbus { + pub fn new(inner: Arc>) -> Self { Self { inner } } } -impl crate::ZbusAdd for DbusKbdBacklight { +impl crate::ZbusAdd for CtrlKbdLedZbus { fn add_to_server(self, server: &mut zbus::ObjectServer) { server .at(&ObjectPath::from_str_unchecked("/org/asuslinux/Led"), self) .map_err(|err| { - error!("DbusKbdBacklight: add_to_server {}", err); + error!("DbusKbdLed: add_to_server {}", err); }) .ok(); } @@ -109,7 +123,7 @@ impl crate::ZbusAdd for DbusKbdBacklight { /// /// LED commands are split between Brightness, Modes, Per-Key #[dbus_interface(name = "org.asuslinux.Daemon")] -impl DbusKbdBacklight { +impl CtrlKbdLedZbus { fn set_brightness(&mut self, brightness: LedBrightness) { if let Ok(ctrl) = self.inner.try_lock() { ctrl.set_brightness(brightness) @@ -200,7 +214,7 @@ impl DbusKbdBacklight { fn notify_led(&self, data: &str) -> zbus::Result<()>; } -impl CtrlKbdBacklight { +impl CtrlKbdLed { #[inline] pub fn new(supported_modes: LaptopLedData, config: AuraConfig) -> Result { // TODO: return error if *all* nodes are None @@ -230,7 +244,7 @@ impl CtrlKbdBacklight { )); } - let ctrl = CtrlKbdBacklight { + let ctrl = CtrlKbdLed { led_node, bright_node: bright_node.unwrap(), // If was none then we already returned above supported_modes, diff --git a/daemon/src/ctrl_supported.rs b/daemon/src/ctrl_supported.rs index fe7967bc..829df503 100644 --- a/daemon/src/ctrl_supported.rs +++ b/daemon/src/ctrl_supported.rs @@ -5,7 +5,7 @@ use zvariant::ObjectPath; use crate::{ ctrl_anime::CtrlAnime, ctrl_charge::CtrlCharge, ctrl_fan_cpu::CtrlFanAndCpu, - ctrl_leds::CtrlKbdBacklight, ctrl_rog_bios::CtrlRogBios, GetSupported, + ctrl_leds::CtrlKbdLed, ctrl_rog_bios::CtrlRogBios, GetSupported, }; use rog_types::supported::{ @@ -49,7 +49,7 @@ impl GetSupported for SupportedFunctions { fn get_supported() -> Self::A { SupportedFunctions { - keyboard_led: CtrlKbdBacklight::get_supported(), + keyboard_led: CtrlKbdLed::get_supported(), anime_ctrl: CtrlAnime::get_supported(), charge_ctrl: CtrlCharge::get_supported(), fan_cpu_ctrl: CtrlFanAndCpu::get_supported(), diff --git a/daemon/src/daemon.rs b/daemon/src/daemon.rs index 5d7f5eff..68483734 100644 --- a/daemon/src/daemon.rs +++ b/daemon/src/daemon.rs @@ -1,4 +1,4 @@ -use daemon::ctrl_leds::{CtrlKbdBacklight, CtrlKbdBacklightTask, DbusKbdBacklight}; +use daemon::ctrl_leds::{CtrlKbdLed, CtrlKbdLedTask, CtrlKbdLedZbus, CtrlKbdLedReloader}; use daemon::{ config::Config, ctrl_supported::SupportedFunctions, laptops::print_board_info, GetSupported, }; @@ -120,11 +120,17 @@ fn start_daemon() -> Result<(), Box> { let laptop = LaptopLedData::get_data(); let aura_config = AuraConfig::load(&laptop); - match CtrlKbdBacklight::new(laptop, aura_config) { + match CtrlKbdLed::new(laptop, aura_config) { Ok(ctrl) => { - let tmp = Arc::new(Mutex::new(ctrl)); - DbusKbdBacklight::new(tmp.clone()).add_to_server(&mut object_server); - let task = CtrlKbdBacklightTask(tmp); + let inner = Arc::new(Mutex::new(ctrl)); + + let mut reload = CtrlKbdLedReloader(inner.clone()); + reload + .reload() + .unwrap_or_else(|err| warn!("Keyboard LED control: {}", err)); + + CtrlKbdLedZbus::new(inner.clone()).add_to_server(&mut object_server); + let task = CtrlKbdLedTask(inner); tasks.push(Box::new(task)); } Err(err) => {