diff --git a/Cargo.lock b/Cargo.lock index 326217cc..43fa5d08 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,7 +29,7 @@ checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" [[package]] name = "asus-nb" -version = "2.0.0" +version = "2.0.1" dependencies = [ "ctrl-gfx", "dbus", @@ -46,7 +46,7 @@ dependencies = [ [[package]] name = "asus-nb-ctrl" -version = "2.0.0" +version = "2.0.1" dependencies = [ "asus-nb", "ctrl-gfx", @@ -69,7 +69,7 @@ dependencies = [ [[package]] name = "asus-notify" -version = "1.0.0" +version = "1.0.1" dependencies = [ "asus-nb", "asus-nb-ctrl", diff --git a/asus-nb-ctrl/Cargo.toml b/asus-nb-ctrl/Cargo.toml index b9688e08..a0975183 100644 --- a/asus-nb-ctrl/Cargo.toml +++ b/asus-nb-ctrl/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "asus-nb-ctrl" -version = "2.0.0" +version = "2.0.1" license = "MPL-2.0" readme = "README.md" authors = ["Luke "] diff --git a/asus-nb-ctrl/src/lib.rs b/asus-nb-ctrl/src/lib.rs index f7d704d0..72bf9f3e 100644 --- a/asus-nb-ctrl/src/lib.rs +++ b/asus-nb-ctrl/src/lib.rs @@ -19,7 +19,7 @@ use config::Config; use crate::error::RogError; use zbus::ObjectServer; -pub static VERSION: &str = "2.0.0"; +pub static VERSION: &str = "2.0.1"; pub trait Reloadable { fn reload(&mut self) -> Result<(), RogError>; diff --git a/asus-nb/Cargo.toml b/asus-nb/Cargo.toml index 1018673f..541c7a71 100644 --- a/asus-nb/Cargo.toml +++ b/asus-nb/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "asus-nb" -version = "2.0.0" +version = "2.0.1" license = "MPL-2.0" readme = "README.md" authors = ["Luke "] diff --git a/asus-nb/src/core_dbus.rs b/asus-nb/src/core_dbus.rs index a61629cb..10093bd0 100644 --- a/asus-nb/src/core_dbus.rs +++ b/asus-nb/src/core_dbus.rs @@ -11,14 +11,15 @@ use std::sync::{ }; use std::{thread, time::Duration}; -use crate::dbus_gfx::OrgAsuslinuxDaemonNotifyGfx; +use crate::dbus_gfx::{OrgAsuslinuxDaemonNotifyGfx, OrgAsuslinuxDaemonNotifyAction}; use crate::dbus_ledmode::OrgAsuslinuxDaemonNotifyLed; use crate::dbus_profile::OrgAsuslinuxDaemonNotifyProfile; use crate::dbus_charge::OrgAsuslinuxDaemonNotifyCharge; // Signals separated out pub struct CtrlSignals { - pub gfx_signal: Arc>>, + pub gfx_vendor_signal: Arc>>, + pub gfx_action_signal: Arc>>, pub profile_signal: Arc>>, pub ledmode_signal: Arc>>, pub charge_signal: Arc>>, @@ -33,8 +34,8 @@ impl CtrlSignals { Duration::from_millis(5000), ); - let gfx_signal = Arc::new(Mutex::new(None)); - let gfx_res1 = gfx_signal.clone(); + let gfx_vendor_signal = Arc::new(Mutex::new(None)); + let gfx_res1 = gfx_vendor_signal.clone(); let _x = proxy.match_signal( move |sig: OrgAsuslinuxDaemonNotifyGfx, _: &Connection, _: &Message| { @@ -45,6 +46,18 @@ impl CtrlSignals { }, )?; + let gfx_action_signal = Arc::new(Mutex::new(None)); + let gfx_res1 = gfx_action_signal.clone(); + + let _x = proxy.match_signal( + move |sig: OrgAsuslinuxDaemonNotifyAction, _: &Connection, _: &Message| { + if let Ok(mut lock) = gfx_res1.lock() { + *lock = Some(sig.action); + } + true + }, + )?; + // let proxy = connection.with_proxy( "org.asuslinux.Daemon", @@ -105,7 +118,8 @@ impl CtrlSignals { )?; Ok(CtrlSignals { - gfx_signal, + gfx_vendor_signal, + gfx_action_signal, profile_signal, ledmode_signal, charge_signal, @@ -149,7 +163,7 @@ impl AuraDbusClient { pub fn wait_gfx_changed(&self) -> Result> { loop { self.connection.process(Duration::from_micros(500))?; - if let Ok(lock) = self.signals.gfx_signal.lock() { + if let Ok(lock) = self.signals.gfx_action_signal.lock() { if let Some(stuff) = lock.as_ref() { return Ok(stuff.to_string()); } diff --git a/asus-nb/src/dbus_gfx.rs b/asus-nb/src/dbus_gfx.rs index c492290a..c227fcba 100644 --- a/asus-nb/src/dbus_gfx.rs +++ b/asus-nb/src/dbus_gfx.rs @@ -1,5 +1,5 @@ // This code was autogenerated with `dbus-codegen-rust -s -d org.asuslinux.Daemon -p /org/asuslinux/Gfx -m None -f org.asuslinux.Daemon -c blocking`, see https://github.com/diwic/dbus-rs -use dbus; +use dbus as dbus; #[allow(unused_imports)] use dbus::arg; use dbus::blocking; @@ -8,11 +8,10 @@ pub trait OrgAsuslinuxDaemon { fn set_vendor(&self, vendor: &str) -> Result<(), dbus::Error>; } -impl<'a, T: blocking::BlockingSender, C: ::std::ops::Deref> OrgAsuslinuxDaemon - for blocking::Proxy<'a, C> -{ +impl<'a, T: blocking::BlockingSender, C: ::std::ops::Deref> OrgAsuslinuxDaemon for blocking::Proxy<'a, C> { + fn set_vendor(&self, vendor: &str) -> Result<(), dbus::Error> { - self.method_call("org.asuslinux.Daemon", "SetVendor", (vendor,)) + self.method_call("org.asuslinux.Daemon", "SetVendor", (vendor, )) } } @@ -29,7 +28,9 @@ impl arg::AppendAll for OrgAsuslinuxDaemonNotifyGfx { impl arg::ReadAll for OrgAsuslinuxDaemonNotifyGfx { fn read(i: &mut arg::Iter) -> Result { - Ok(OrgAsuslinuxDaemonNotifyGfx { vendor: i.read()? }) + Ok(OrgAsuslinuxDaemonNotifyGfx { + vendor: i.read()?, + }) } } @@ -37,3 +38,27 @@ impl dbus::message::SignalArgs for OrgAsuslinuxDaemonNotifyGfx { const NAME: &'static str = "NotifyGfx"; const INTERFACE: &'static str = "org.asuslinux.Daemon"; } + +#[derive(Debug)] +pub struct OrgAsuslinuxDaemonNotifyAction { + pub action: String, +} + +impl arg::AppendAll for OrgAsuslinuxDaemonNotifyAction { + fn append(&self, i: &mut arg::IterAppend) { + arg::RefArg::append(&self.action, i); + } +} + +impl arg::ReadAll for OrgAsuslinuxDaemonNotifyAction { + fn read(i: &mut arg::Iter) -> Result { + Ok(OrgAsuslinuxDaemonNotifyAction { + action: i.read()?, + }) + } +} + +impl dbus::message::SignalArgs for OrgAsuslinuxDaemonNotifyAction { + const NAME: &'static str = "NotifyAction"; + const INTERFACE: &'static str = "org.asuslinux.Daemon"; +} diff --git a/asus-notify/Cargo.toml b/asus-notify/Cargo.toml index 5c1203a7..4edbd96d 100644 --- a/asus-notify/Cargo.toml +++ b/asus-notify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "asus-notify" -version = "1.0.0" +version = "1.0.1" authors = ["Luke D Jones "] edition = "2018" diff --git a/asus-notify/src/main.rs b/asus-notify/src/main.rs index cda4cbf3..b6e7cc85 100644 --- a/asus-notify/src/main.rs +++ b/asus-notify/src/main.rs @@ -21,7 +21,7 @@ fn main() -> Result<(), Box> { std::thread::sleep(Duration::from_millis(100)); connection.process(std::time::Duration::from_millis(200))?; - if let Ok(mut lock) = signals.gfx_signal.lock() { + if let Ok(mut lock) = signals.gfx_vendor_signal.lock() { if let Some(vendor) = lock.take() { if let Some(notif) = last_gfx_notif.take() { notif.close(); diff --git a/ctrl-gfx/src/ctrl_gfx.rs b/ctrl-gfx/src/ctrl_gfx.rs index d3ca94d0..9ca77403 100644 --- a/ctrl-gfx/src/ctrl_gfx.rs +++ b/ctrl-gfx/src/ctrl_gfx.rs @@ -25,6 +25,7 @@ pub struct CtrlGraphics { trait Dbus { fn set_vendor(&mut self, vendor: String); fn notify_gfx(&self, vendor: &str) -> zbus::Result<()>; + fn notify_action(&self, action: &str) -> zbus::Result<()>; } #[cfg(feature = "use-zbus")] @@ -35,17 +36,22 @@ use std::convert::TryInto; impl Dbus for CtrlGraphics { fn set_vendor(&mut self, vendor: String) { if let Ok(tmp) = GfxVendors::from_str(&vendor) { - self.set(tmp).unwrap_or_else(|err| { + let action = self.set(tmp).unwrap_or_else(|err| { warn!("{}", err); format!("Failed: {}", err.to_string()) }); self.notify_gfx(&vendor) .unwrap_or_else(|err| warn!("{}", err)); + self.notify_action(&action) + .unwrap_or_else(|err| warn!("{}", err)); } } #[dbus_interface(signal)] fn notify_gfx(&self, vendor: &str) -> zbus::Result<()>; + + #[dbus_interface(signal)] + fn notify_action(&self, action: &str) -> zbus::Result<()>; } impl CtrlGraphics { diff --git a/ctrl-gfx/src/lib.rs b/ctrl-gfx/src/lib.rs index 2608af44..bdeb88a8 100644 --- a/ctrl-gfx/src/lib.rs +++ b/ctrl-gfx/src/lib.rs @@ -55,4 +55,4 @@ static PRIMARY_GPU_NVIDIA: &[u8] = br#" Option "PrimaryGPU" "true""#; static PRIMARY_GPU_END: &[u8] = br#" -EndSection"#; +EndSection"#; \ No newline at end of file