diff --git a/daemon/src/ctrl_aura/zbus.rs b/daemon/src/ctrl_aura/zbus.rs index 4abc406e..5392ef08 100644 --- a/daemon/src/ctrl_aura/zbus.rs +++ b/daemon/src/ctrl_aura/zbus.rs @@ -65,25 +65,28 @@ impl CtrlKbdLedZbus { enabled: bool, ) -> zbus::fdo::Result<()> { let mut states = None; - if let Ok(mut ctrl) = self.0.try_lock() { - for p in options.tuf { - ctrl.config.enabled.set_tuf(p, enabled); - } - for p in options.x1866 { - ctrl.config.enabled.set_0x1866(p, enabled); - } - for p in options.x19b6 { - ctrl.config.enabled.set_0x19b6(p, enabled); - } + loop { + if let Ok(mut ctrl) = self.0.try_lock() { + for p in options.tuf { + ctrl.config.enabled.set_tuf(p, enabled); + } + for p in options.x1866 { + ctrl.config.enabled.set_0x1866(p, enabled); + } + for p in options.x19b6 { + ctrl.config.enabled.set_0x19b6(p, enabled); + } - ctrl.config.write(); + ctrl.config.write(); - ctrl.set_power_states().map_err(|e| { - warn!("{}", e); - e - })?; + ctrl.set_power_states().map_err(|e| { + warn!("{}", e); + e + })?; - states = Some(AuraPowerDev::from(&ctrl.config.enabled)); + states = Some(AuraPowerDev::from(&ctrl.config.enabled)); + } + break; } // Need to pull state out like this due to MutexGuard if let Some(states) = states { @@ -100,13 +103,16 @@ impl CtrlKbdLedZbus { effect: AuraEffect, ) -> zbus::fdo::Result<()> { let mut led = None; - if let Ok(mut ctrl) = self.0.try_lock() { - ctrl.set_effect(effect).map_err(|e| { - warn!("{}", e); - e - })?; - if let Some(mode) = ctrl.config.builtins.get(&ctrl.config.current_mode) { - led = Some(mode.clone()); + loop { + if let Ok(mut ctrl) = self.0.try_lock() { + ctrl.set_effect(effect).map_err(|e| { + warn!("{}", e); + e + })?; + if let Some(mode) = ctrl.config.builtins.get(&ctrl.config.current_mode) { + led = Some(mode.clone()); + } + break; } } if let Some(led) = led { @@ -122,14 +128,17 @@ impl CtrlKbdLedZbus { #[zbus(signal_context)] ctxt: SignalContext<'_>, ) -> zbus::fdo::Result<()> { let mut led = None; - if let Ok(mut ctrl) = self.0.lock() { - ctrl.toggle_mode(false).map_err(|e| { - warn!("{}", e); - e - })?; + loop { + if let Ok(mut ctrl) = self.0.try_lock() { + ctrl.toggle_mode(false).map_err(|e| { + warn!("{}", e); + e + })?; - if let Some(mode) = ctrl.config.builtins.get(&ctrl.config.current_mode) { - led = Some(mode.clone()); + if let Some(mode) = ctrl.config.builtins.get(&ctrl.config.current_mode) { + led = Some(mode.clone()); + } + break; } } if let Some(led) = led { @@ -137,6 +146,7 @@ impl CtrlKbdLedZbus { .await .unwrap_or_else(|err| warn!("{}", err)); } + Ok(()) } @@ -145,14 +155,17 @@ impl CtrlKbdLedZbus { #[zbus(signal_context)] ctxt: SignalContext<'_>, ) -> zbus::fdo::Result<()> { let mut led = None; - if let Ok(mut ctrl) = self.0.lock() { - ctrl.toggle_mode(true).map_err(|e| { - warn!("{}", e); - e - })?; + loop { + if let Ok(mut ctrl) = self.0.try_lock() { + ctrl.toggle_mode(true).map_err(|e| { + warn!("{}", e); + e + })?; - if let Some(mode) = ctrl.config.builtins.get(&ctrl.config.current_mode) { - led = Some(mode.clone()); + if let Some(mode) = ctrl.config.builtins.get(&ctrl.config.current_mode) { + led = Some(mode.clone()); + } + break; } } if let Some(led) = led { @@ -164,21 +177,27 @@ impl CtrlKbdLedZbus { } async fn next_led_brightness(&self) -> zbus::fdo::Result<()> { - if let Ok(mut ctrl) = self.0.try_lock() { - ctrl.next_brightness().map_err(|e| { - warn!("{}", e); - e - })?; + loop { + if let Ok(mut ctrl) = self.0.try_lock() { + ctrl.next_brightness().map_err(|e| { + warn!("{}", e); + e + })?; + break; + } } Ok(()) } async fn prev_led_brightness(&self) -> zbus::fdo::Result<()> { - if let Ok(mut ctrl) = self.0.try_lock() { - ctrl.prev_brightness().map_err(|e| { - warn!("{}", e); - e - })?; + loop { + if let Ok(mut ctrl) = self.0.try_lock() { + ctrl.prev_brightness().map_err(|e| { + warn!("{}", e); + e + })?; + break; + } } Ok(()) } @@ -195,10 +214,11 @@ impl CtrlKbdLedZbus { /// Return the current mode data async fn led_mode(&self) -> AuraModeNum { - if let Ok(ctrl) = self.0.try_lock() { - return ctrl.config.current_mode; + loop { + if let Ok(ctrl) = self.0.try_lock() { + return ctrl.config.current_mode; + } } - AuraModeNum::Static } /// Return a list of available modes @@ -211,8 +231,11 @@ impl CtrlKbdLedZbus { } async fn per_key_raw(&self, data: PerKeyRaw) -> zbus::fdo::Result<()> { - if let Ok(mut ctrl) = self.0.try_lock() { - ctrl.write_effect_block(&data)?; + loop { + if let Ok(mut ctrl) = self.0.try_lock() { + ctrl.write_effect_block(&data)?; + break; + } } Ok(()) } @@ -220,11 +243,11 @@ impl CtrlKbdLedZbus { /// Return the current LED brightness #[dbus_interface(property)] async fn led_brightness(&self) -> i8 { - if let Ok(ctrl) = self.0.try_lock() { - return ctrl.get_brightness().map(|n| n as i8).unwrap_or(-1); + loop { + if let Ok(ctrl) = self.0.try_lock() { + return ctrl.get_brightness().map(|n| n as i8).unwrap_or(-1); + } } - warn!("SetKeyBacklight could not serialise"); - -1 } #[dbus_interface(signal)]