Reload and apply settings if config file externally changed

This commit is contained in:
Luke D. Jones
2024-01-24 12:19:34 +13:00
parent 84183288ec
commit b1b809834b
4 changed files with 79 additions and 30 deletions

26
Cargo.lock generated
View File

@@ -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",

View File

@@ -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]

View File

@@ -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(())
}
}

View File

@@ -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<Output = Result<(), RogError>> + Send;
}