From b1b809834b712968a77b398ace810a9dfb979fae Mon Sep 17 00:00:00 2001 From: "Luke D. Jones" Date: Wed, 24 Jan 2024 12:19:34 +1300 Subject: [PATCH] Reload and apply settings if config file externally changed --- Cargo.lock | 26 ++++++------- Cargo.toml | 2 +- asusd/src/ctrl_platform.rs | 76 ++++++++++++++++++++++++++++++-------- asusd/src/lib.rs | 5 ++- 4 files changed, 79 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9c74b68f..17d9b886 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -199,7 +199,7 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "asusctl" -version = "5.0.8-RC1" +version = "5.0.8-RC2" dependencies = [ "asusd", "cargo-husky", @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "asusd" -version = "5.0.8-RC1" +version = "5.0.8-RC2" dependencies = [ "cargo-husky", "concat-idents", @@ -244,7 +244,7 @@ dependencies = [ [[package]] name = "asusd-user" -version = "5.0.8-RC1" +version = "5.0.8-RC2" dependencies = [ "cargo-husky", "config-traits", @@ -847,7 +847,7 @@ dependencies = [ [[package]] name = "config-traits" -version = "5.0.8-RC1" +version = "5.0.8-RC2" dependencies = [ "cargo-husky", "log", @@ -900,7 +900,7 @@ dependencies = [ [[package]] name = "cpuctl" -version = "5.0.8-RC1" +version = "5.0.8-RC2" [[package]] name = "cpufeatures" @@ -1024,7 +1024,7 @@ dependencies = [ [[package]] name = "dmi_id" -version = "5.0.8-RC1" +version = "5.0.8-RC2" dependencies = [ "log", "udev", @@ -2834,7 +2834,7 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "rog-control-center" -version = "5.0.8-RC1" +version = "5.0.8-RC2" dependencies = [ "asusd", "cargo-husky", @@ -2867,7 +2867,7 @@ dependencies = [ [[package]] name = "rog_anime" -version = "5.0.8-RC1" +version = "5.0.8-RC2" dependencies = [ "cargo-husky", "dmi_id", @@ -2884,7 +2884,7 @@ dependencies = [ [[package]] name = "rog_aura" -version = "5.0.8-RC1" +version = "5.0.8-RC2" dependencies = [ "cargo-husky", "dmi_id", @@ -2898,7 +2898,7 @@ dependencies = [ [[package]] name = "rog_dbus" -version = "5.0.8-RC1" +version = "5.0.8-RC2" dependencies = [ "asusd", "cargo-husky", @@ -2911,7 +2911,7 @@ dependencies = [ [[package]] name = "rog_platform" -version = "5.0.8-RC1" +version = "5.0.8-RC2" dependencies = [ "cargo-husky", "concat-idents", @@ -2928,7 +2928,7 @@ dependencies = [ [[package]] name = "rog_profiles" -version = "5.0.8-RC1" +version = "5.0.8-RC2" dependencies = [ "cargo-husky", "log", @@ -2942,7 +2942,7 @@ dependencies = [ [[package]] name = "rog_simulators" -version = "5.0.8-RC1" +version = "5.0.8-RC2" dependencies = [ "glam", "log", diff --git a/Cargo.toml b/Cargo.toml index 3ef3b581..dd3673fa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ default-members = ["asusctl", "asusd", "asusd-user", "cpuctl", "rog-control-cent resolver = "2" [workspace.package] -version = "5.0.8-RC1" +version = "5.0.8-RC2" rust-version = "1.75" [workspace.dependencies] diff --git a/asusd/src/ctrl_platform.rs b/asusd/src/ctrl_platform.rs index 46aa40fa..0f104b04 100644 --- a/asusd/src/ctrl_platform.rs +++ b/asusd/src/ctrl_platform.rs @@ -16,7 +16,7 @@ use crate::ctrl_anime::trait_impls::{CtrlAnimeZbus, ANIME_ZBUS_NAME, ANIME_ZBUS_ use crate::ctrl_aura::trait_impls::{CtrlAuraZbus, AURA_ZBUS_NAME, AURA_ZBUS_PATH}; use crate::ctrl_fancurves::{CtrlFanCurveZbus, FAN_CURVE_ZBUS_NAME, FAN_CURVE_ZBUS_PATH}; use crate::error::RogError; -use crate::{task_watch_item, task_watch_item_notify, CtrlTask, ReloadAndNotify, Reloadable}; +use crate::{task_watch_item, task_watch_item_notify, CtrlTask, ReloadAndNotify}; const PLATFORM_ZBUS_NAME: &str = "Platform"; const PLATFORM_ZBUS_PATH: &str = "/org/asuslinux/Platform"; @@ -183,18 +183,10 @@ impl CtrlPlatform { let res = config1.lock().await.read_new(); if let Some(new_cfg) = res { - let mut old_cfg = config1.lock().await; - if *old_cfg != new_cfg { - info!( - "asusd.ron updated externally, updating internal copy and \ - reloading" - ); - *old_cfg = new_cfg; - inotify_self - .reload_and_notify(signal_context.clone()) - .await - .unwrap(); - } + inotify_self + .reload_and_notify(&signal_context, new_cfg) + .await + .unwrap(); } } } @@ -706,11 +698,65 @@ impl crate::ZbusRun for CtrlPlatform { } impl ReloadAndNotify for CtrlPlatform { + type Data = Config; + async fn reload_and_notify( &mut self, - _signal_context: SignalContext<'static>, + signal_context: &SignalContext<'static>, + data: Self::Data, ) -> Result<(), RogError> { - self.reload().await + let mut config = self.config.lock().await; + if *config != data { + info!("asusd.ron updated externally, reloading and updating internal copy"); + + if self.power.has_charge_control_end_threshold() { + self.power + .set_charge_control_end_threshold(data.charge_control_end_threshold)?; + self.charge_control_end_threshold_changed(signal_context) + .await?; + } + + if self.platform.has_panel_od() && config.panel_od != data.panel_od { + self.platform.set_panel_od(data.panel_od)?; + self.panel_od_changed(signal_context).await?; + } + + if self.platform.has_mini_led_mode() && config.mini_led_mode != data.mini_led_mode { + self.platform.set_mini_led_mode(data.mini_led_mode)?; + self.mini_led_mode_changed(signal_context).await?; + } + + if self.platform.has_throttle_thermal_policy() + && config.throttle_policy_linked_epp != data.throttle_policy_linked_epp + { + // TODO: extra stuff + } + + macro_rules! ppt_reload_and_notify { + ($property:tt, $prop_name:literal) => { + concat_idents::concat_idents!(has = has_, $property { + if self.platform.has() && config.$property != data.$property { + concat_idents::concat_idents!(set = set_, $property { + self.platform + .set_ppt_pl1_spl(data.$property.unwrap_or_default())?;}); + concat_idents::concat_idents!(changed = $property, _changed { + self.ppt_pl1_spl_changed(signal_context).await?;}); + } + }) + } + } + ppt_reload_and_notify!(ppt_pl1_spl, "ppt_pl1_spl"); + ppt_reload_and_notify!(ppt_pl2_sppt, "ppt_pl2_sppt"); + ppt_reload_and_notify!(ppt_fppt, "ppt_fppt"); + ppt_reload_and_notify!(ppt_apu_sppt, "ppt_apu_sppt"); + ppt_reload_and_notify!(ppt_platform_sppt, "ppt_platform_sppt"); + ppt_reload_and_notify!(nv_dynamic_boost, "nv_dynamic_boost"); + ppt_reload_and_notify!(nv_temp_target, "nv_temp_target"); + + *config = data; + } + + Ok(()) } } diff --git a/asusd/src/lib.rs b/asusd/src/lib.rs index 205444bd..1e22307c 100644 --- a/asusd/src/lib.rs +++ b/asusd/src/lib.rs @@ -134,9 +134,12 @@ pub trait Reloadable { } pub trait ReloadAndNotify { + type Data: Send; + fn reload_and_notify( &mut self, - signal_context: SignalContext<'static>, + signal_context: &SignalContext<'static>, + data: Self::Data, ) -> impl std::future::Future> + Send; }