diff --git a/daemon/src/ctrl_profiles/zbus.rs b/daemon/src/ctrl_profiles/zbus.rs index b3d4b317..91fdcd08 100644 --- a/daemon/src/ctrl_profiles/zbus.rs +++ b/daemon/src/ctrl_profiles/zbus.rs @@ -174,6 +174,30 @@ impl ProfileZbus { Ok(()) } + /// Reset the stored (self) and device curve to the defaults of the platform. + /// + /// Each platform_profile has a different default and the defualt can be read + /// only for the currently active profile. + fn reset_profile_curves(&self, profile: Profile) -> zbus::fdo::Result<()> { + if let Ok(mut ctrl) = self.inner.try_lock() { + ctrl.config.read(); + let active = Profile::get_active_profile().unwrap_or(Profile::Balanced); + + Profile::set_profile(profile) + .map_err(|e| warn!("set_profile, {}", e)) + .ok(); + ctrl.set_active_curve_to_defaults() + .map_err(|e| warn!("Profile::set_active_curve_to_defaults, {}", e)) + .ok(); + + Profile::set_profile(active) + .map_err(|e| warn!("set_profile, {}", e)) + .ok(); + ctrl.save_config(); + } + Ok(()) + } + #[dbus_interface(signal)] async fn notify_profile(signal_ctxt: &SignalContext<'_>, profile: Profile) -> zbus::Result<()> { } diff --git a/rog-control-center/src/pages/fan_curve_page.rs b/rog-control-center/src/pages/fan_curve_page.rs index d289e31e..82389b71 100644 --- a/rog-control-center/src/pages/fan_curve_page.rs +++ b/rog-control-center/src/pages/fan_curve_page.rs @@ -27,7 +27,7 @@ impl<'a> RogApp<'a> { ui, ); - fan_graphs(&mut states.profiles, &mut states.fan_curves, dbus, &mut states.error, ui); + fan_graphs(supported, &mut states.profiles, &mut states.fan_curves, dbus, &mut states.error, ui); }); } diff --git a/rog-control-center/src/widgets/fan_graph.rs b/rog-control-center/src/widgets/fan_graph.rs index 748a8872..354ebc55 100644 --- a/rog-control-center/src/widgets/fan_graph.rs +++ b/rog-control-center/src/widgets/fan_graph.rs @@ -1,4 +1,5 @@ use egui::{plot::Points, Ui}; +use rog_platform::supported::SupportedFunctions; use rog_profiles::{FanCurvePU, Profile}; use crate::{ @@ -7,6 +8,7 @@ use crate::{ }; pub fn fan_graphs( + supported: &SupportedFunctions, profiles: &mut ProfilesState, curves: &mut FanCurvesState, dbus: &RogDbusClientBlocking, @@ -108,15 +110,36 @@ pub fn fan_graphs( plot_ui.points(points) }); + let mut set = false; + let mut reset = false; ui.with_layout(egui::Layout::right_to_left(egui::Align::TOP), |ui| { - if ui.add(egui::Button::new("Apply Fan-curve")).clicked() { - dbus.proxies() - .profile() - .set_fan_curve(profiles.current, data.clone()) - .map_err(|err| { - *do_error = Some(err.to_string()); - }) - .ok(); - } + set = ui.add(egui::Button::new("Apply Fan-curve")).clicked(); + reset = ui.add(egui::Button::new("Reset Profile")).clicked(); }); + + if set { + dbus.proxies() + .profile() + .set_fan_curve(profiles.current, data.clone()) + .map_err(|err| { + *do_error = Some(err.to_string()); + }) + .ok(); + } + + if reset { + dbus.proxies() + .profile() + .reset_profile_curves(profiles.current) + .map_err(|err| { + *do_error = Some(err.to_string()); + }) + .ok(); + + let notif = curves.was_notified.clone(); + match FanCurvesState::new(notif, supported, dbus) { + Ok(f) => *curves = f, + Err(e) => *do_error = Some(e.to_string()), + } + } } diff --git a/rog-control-center/src/widgets/side_panel.rs b/rog-control-center/src/widgets/side_panel.rs index 3d1f3d38..911887f3 100644 --- a/rog-control-center/src/widgets/side_panel.rs +++ b/rog-control-center/src/widgets/side_panel.rs @@ -53,7 +53,10 @@ impl<'a> RogApp<'a> { ui.horizontal(|ui| { ui.spacing_mut().item_spacing.x = 0.0; ui.label("Source code "); - ui.hyperlink_to("rog-gui.", "https://gitlab.com/asus-linux/asusctl/-/tree/main/rog-control-center"); + ui.hyperlink_to( + "rog-gui.", + "https://gitlab.com/asus-linux/asusctl/-/tree/main/rog-control-center", + ); }); }); }); diff --git a/rog-dbus/src/zbus_profile.rs b/rog-dbus/src/zbus_profile.rs index 613592b3..8beb1750 100644 --- a/rog-dbus/src/zbus_profile.rs +++ b/rog-dbus/src/zbus_profile.rs @@ -62,6 +62,12 @@ trait Profile { /// only for the currently active profile. fn set_active_curve_to_defaults(&self) -> zbus::Result<()>; + /// Reset the stored (self) and device curve to the defaults of the platform. + /// + /// Each platform_profile has a different default and the defualt can be read + /// only for the currently active profile. + fn reset_profile_curves(&self, profile: Profile) -> zbus::fdo::Result<()>; + /// NotifyProfile signal #[dbus_proxy(signal)] fn notify_profile(&self, profile: Profile) -> zbus::Result;