From 688e3a73587898a1df15ae0059a85acbb1e86789 Mon Sep 17 00:00:00 2001 From: "Luke D. Jones" Date: Sun, 6 Nov 2022 12:48:19 +1300 Subject: [PATCH] Send signals using the correct context for each --- daemon/src/ctrl_power.rs | 16 +++++++-------- daemon/src/ctrl_profiles/trait_impls.rs | 1 - daemon/src/daemon.rs | 26 ++++++++++++++++--------- daemon/src/lib.rs | 3 ++- rog-dbus/src/zbus_profile.rs | 2 +- rog-platform/src/macros.rs | 2 +- 6 files changed, 29 insertions(+), 21 deletions(-) diff --git a/daemon/src/ctrl_power.rs b/daemon/src/ctrl_power.rs index 9c7f1232..2983d1fc 100644 --- a/daemon/src/ctrl_power.rs +++ b/daemon/src/ctrl_power.rs @@ -52,13 +52,15 @@ impl CtrlPower { err }) .ok(); - Self::notify_charge_control_end_threshold(&ctxt, limit).await?; + Self::notify_charge_control_end_threshold(&ctxt, limit) + .await + .ok(); Ok(()) } fn charge_control_end_threshold(&self) -> u8 { loop { - if let Some(config) = self.config.try_lock() { + if let Some(mut config) = self.config.try_lock() { let limit = self .power .get_charge_control_end_threshold() @@ -67,11 +69,10 @@ impl CtrlPower { err }) .unwrap_or(100); - if let Some(mut config) = self.config.try_lock() { - config.read(); - config.bat_charge_limit = limit; - config.write(); - } + + config.read(); + config.bat_charge_limit = limit; + config.write(); return config.bat_charge_limit; } @@ -207,7 +208,6 @@ impl CtrlTask for CtrlPower { .await?; let ctrl = self.clone(); - dbg!("CtrlPower"); tokio::spawn(async move { let mut online = 10; loop { diff --git a/daemon/src/ctrl_profiles/trait_impls.rs b/daemon/src/ctrl_profiles/trait_impls.rs index 5d57333f..4598f274 100644 --- a/daemon/src/ctrl_profiles/trait_impls.rs +++ b/daemon/src/ctrl_profiles/trait_impls.rs @@ -216,7 +216,6 @@ impl CtrlTask for ProfileZbus { lock.write_profile_curve_to_platform().unwrap(); lock.save_config(); } - Self::notify_profile(&signal_ctxt.clone(), lock.config.active_profile) .await .ok(); diff --git a/daemon/src/daemon.rs b/daemon/src/daemon.rs index 2667736c..f3d81144 100644 --- a/daemon/src/daemon.rs +++ b/daemon/src/daemon.rs @@ -10,6 +10,7 @@ use daemon::ctrl_anime::CtrlAnime; use log::LevelFilter; use log::{error, info, warn}; use tokio::time::sleep; +use zbus::SignalContext; use daemon::ctrl_anime::{config::AnimeConfig, trait_impls::CtrlAnimeZbus}; use daemon::ctrl_aura::{config::AuraConfig, controller::CtrlKbdLed, trait_impls::CtrlKbdLedZbus}; @@ -78,7 +79,8 @@ async fn start_daemon() -> Result<(), Box> { match CtrlPlatform::new(config.clone()) { Ok(ctrl) => { - start_tasks(ctrl, &mut connection).await?; + let sig_ctx = CtrlPlatform::signal_context(&connection)?; + start_tasks(ctrl, &mut connection, sig_ctx).await?; } Err(err) => { error!("CtrlPlatform: {}", err); @@ -87,7 +89,8 @@ async fn start_daemon() -> Result<(), Box> { match CtrlPower::new(config.clone()) { Ok(ctrl) => { - start_tasks(ctrl, &mut connection).await?; + let sig_ctx = CtrlPower::signal_context(&connection)?; + start_tasks(ctrl, &mut connection, sig_ctx).await?; } Err(err) => { error!("CtrlPower: {}", err); @@ -99,7 +102,8 @@ async fn start_daemon() -> Result<(), Box> { match CtrlPlatformProfile::new(profile_config) { Ok(ctrl) => { let zbus = ProfileZbus(Arc::new(Mutex::new(ctrl))); - start_tasks(zbus, &mut connection).await?; + let sig_ctx = ProfileZbus::signal_context(&connection)?; + start_tasks(zbus, &mut connection, sig_ctx).await?; } Err(err) => { error!("Profile control: {}", err); @@ -112,7 +116,8 @@ async fn start_daemon() -> Result<(), Box> { match CtrlAnime::new(AnimeConfig::load()) { Ok(ctrl) => { let zbus = CtrlAnimeZbus(Arc::new(Mutex::new(ctrl))); - start_tasks(zbus, &mut connection).await?; + let sig_ctx = CtrlAnimeZbus::signal_context(&connection)?; + start_tasks(zbus, &mut connection, sig_ctx).await?; } Err(err) => { info!("AniMe control: {}", err); @@ -124,7 +129,8 @@ async fn start_daemon() -> Result<(), Box> { match CtrlKbdLed::new(laptop, aura_config) { Ok(ctrl) => { let zbus = CtrlKbdLedZbus(Arc::new(Mutex::new(ctrl))); - start_tasks(zbus, &mut connection).await?; + let sig_ctx = CtrlKbdLedZbus::signal_context(&connection)?; + start_tasks(zbus, &mut connection, sig_ctx).await?; } Err(err) => { error!("Keyboard control: {}", err); @@ -140,7 +146,11 @@ async fn start_daemon() -> Result<(), Box> { } } -async fn start_tasks(mut zbus: T, connection: &mut Connection) -> Result<(), Box> +async fn start_tasks( + mut zbus: T, + connection: &mut Connection, + signal_ctx: SignalContext<'static>, +) -> Result<(), Box> where T: ZbusRun + Reloadable + CtrlTask + Clone, { @@ -151,8 +161,6 @@ where .unwrap_or_else(|err| warn!("Controller error: {}", err)); zbus.add_to_server(connection).await; - task.create_tasks(CtrlKbdLedZbus::signal_context(connection)?) - .await - .ok(); + task.create_tasks(signal_ctx).await.ok(); Ok(()) } diff --git a/daemon/src/lib.rs b/daemon/src/lib.rs index d9ebd0b6..fcdfb8e7 100644 --- a/daemon/src/lib.rs +++ b/daemon/src/lib.rs @@ -64,8 +64,9 @@ macro_rules! task_watch_item { let mut buffer = [0; 32]; watch.event_stream(&mut buffer).unwrap().for_each(|_| async { let value = ctrl.$name(); + dbg!(&value); concat_idents::concat_idents!(notif_fn = notify_, $name { - Self::notif_fn(&signal_ctxt, value).await.unwrap(); + Self::notif_fn(&signal_ctxt, value).await.ok(); }); }).await; }); diff --git a/rog-dbus/src/zbus_profile.rs b/rog-dbus/src/zbus_profile.rs index 8beb1750..74cf36f2 100644 --- a/rog-dbus/src/zbus_profile.rs +++ b/rog-dbus/src/zbus_profile.rs @@ -70,5 +70,5 @@ trait Profile { /// NotifyProfile signal #[dbus_proxy(signal)] - fn notify_profile(&self, profile: Profile) -> zbus::Result; + async fn notify_profile(&self, profile: Profile) -> zbus::Result; } diff --git a/rog-platform/src/macros.rs b/rog-platform/src/macros.rs index 386402e9..9be9efa5 100644 --- a/rog-platform/src/macros.rs +++ b/rog-platform/src/macros.rs @@ -23,7 +23,7 @@ macro_rules! watch_attr { path.push($attr_name); if let Some(path) = path.to_str() { let mut inotify = inotify::Inotify::init()?; - inotify.add_watch(path, inotify::WatchMask::MODIFY) + inotify.add_watch(path, inotify::WatchMask::CLOSE_WRITE) .map_err(|e| { if e.kind() == std::io::ErrorKind::NotFound { PlatformError::AttrNotFound(format!("{}", $attr_name))