mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
Reload and apply settings if config file externally changed
This commit is contained in:
26
Cargo.lock
generated
26
Cargo.lock
generated
@@ -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",
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user