diff --git a/CHANGELOG.md b/CHANGELOG.md index 77fcbaec..ffadf763 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed +- Anime: force power/wakeup disabled to prevent idiotic random wakes + ## [v5.0.1] ### Changed - Fix setting next fan profile diff --git a/Cargo.lock b/Cargo.lock index b85fc8b0..b56d8224 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -199,7 +199,7 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "asusctl" -version = "5.0.0" +version = "5.0.1" dependencies = [ "asusd", "cargo-husky", @@ -218,7 +218,7 @@ dependencies = [ [[package]] name = "asusd" -version = "5.0.0" +version = "5.0.1" dependencies = [ "async-trait", "cargo-husky", @@ -237,12 +237,13 @@ dependencies = [ "serde_derive", "systemd-zbus", "tokio", + "udev", "zbus", ] [[package]] name = "asusd-user" -version = "5.0.0" +version = "5.0.1" dependencies = [ "cargo-husky", "config-traits", @@ -845,7 +846,7 @@ dependencies = [ [[package]] name = "config-traits" -version = "5.0.0" +version = "5.0.1" dependencies = [ "cargo-husky", "log", @@ -898,7 +899,7 @@ dependencies = [ [[package]] name = "cpuctl" -version = "5.0.0" +version = "5.0.1" [[package]] name = "cpufeatures" @@ -1025,7 +1026,7 @@ dependencies = [ [[package]] name = "dmi_id" -version = "5.0.0" +version = "5.0.1" dependencies = [ "log", "udev", @@ -2845,7 +2846,7 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "rog-control-center" -version = "5.0.0" +version = "5.0.1" dependencies = [ "asusd", "cargo-husky", @@ -2878,7 +2879,7 @@ dependencies = [ [[package]] name = "rog_anime" -version = "5.0.0" +version = "5.0.1" dependencies = [ "cargo-husky", "dmi_id", @@ -2895,7 +2896,7 @@ dependencies = [ [[package]] name = "rog_aura" -version = "5.0.0" +version = "5.0.1" dependencies = [ "cargo-husky", "dmi_id", @@ -2909,7 +2910,7 @@ dependencies = [ [[package]] name = "rog_dbus" -version = "5.0.0" +version = "5.0.1" dependencies = [ "asusd", "cargo-husky", @@ -2922,7 +2923,7 @@ dependencies = [ [[package]] name = "rog_platform" -version = "5.0.0" +version = "5.0.1" dependencies = [ "cargo-husky", "concat-idents", @@ -2939,7 +2940,7 @@ dependencies = [ [[package]] name = "rog_profiles" -version = "5.0.0" +version = "5.0.1" dependencies = [ "cargo-husky", "log", @@ -2953,7 +2954,7 @@ dependencies = [ [[package]] name = "rog_simulators" -version = "5.0.0" +version = "5.0.1" dependencies = [ "glam", "log", diff --git a/asusd/Cargo.toml b/asusd/Cargo.toml index 5c12db49..bd0b9058 100644 --- a/asusd/Cargo.toml +++ b/asusd/Cargo.toml @@ -21,6 +21,7 @@ rog_platform = { path = "../rog-platform" } rog_profiles = { path = "../rog-profiles" } dmi_id = { path = "../dmi-id" } futures-lite = "*" +udev.workspace = true async-trait.workspace = true tokio.workspace = true diff --git a/asusd/src/ctrl_anime/mod.rs b/asusd/src/ctrl_anime/mod.rs index 8aaca9af..b846f4f9 100644 --- a/asusd/src/ctrl_anime/mod.rs +++ b/asusd/src/ctrl_anime/mod.rs @@ -73,6 +73,20 @@ impl CtrlAnime { return Err(RogError::Anime(AnimeError::NoDevice)); }; + // TODO: something better to set wakeups disabled + if matches!(node, Node::Usb(_)) { + if let Ok(mut enumerator) = udev::Enumerator::new() { + enumerator.match_subsystem("usb").ok(); + enumerator.match_attribute("idProduct", "193b").ok(); + + if let Ok(mut enumer) = enumerator.scan_devices() { + if let Some(mut dev) = enumer.next() { + dev.set_attribute_value("power/wakeup", "disabled").ok(); + } + } + } + } + let mut anime_type = get_anime_type()?; if let AnimeType::Unknown = anime_type { if let Some(model) = config.model_override { diff --git a/asusd/src/ctrl_anime/trait_impls.rs b/asusd/src/ctrl_anime/trait_impls.rs index 0bc5b1f5..d6e2ae89 100644 --- a/asusd/src/ctrl_anime/trait_impls.rs +++ b/asusd/src/ctrl_anime/trait_impls.rs @@ -277,6 +277,15 @@ impl crate::CtrlTask for CtrlAnimeZbus { async move { let lock = inner.lock().await; if lock.config.display_enabled { + lock.node + .write_bytes(&pkt_set_enable_powersave_anim( + !(sleeping && lock.config.off_when_suspended), + )) + .map_err(|err| { + warn!("create_sys_event_tasks::off_when_suspended {}", err); + }) + .ok(); + lock.thread_exit.store(true, Ordering::Release); // ensure clean slate lock.node .write_bytes(&pkt_set_enable_display( @@ -316,8 +325,16 @@ impl crate::CtrlTask for CtrlAnimeZbus { async move { let lock = inner.lock().await; if lock.config.off_when_lid_closed { + if lock.config.builtin_anims_enabled { + lock.node + .write_bytes(&pkt_set_enable_powersave_anim(!lid_closed)) + .map_err(|err| { + warn!("create_sys_event_tasks::off_when_suspended {}", err); + }) + .ok(); + } lock.node - .write_bytes(&pkt_set_enable_display(lid_closed)) + .write_bytes(&pkt_set_enable_display(!lid_closed)) .map_err(|err| { warn!("create_sys_event_tasks::off_when_lid_closed {}", err); }) @@ -331,6 +348,14 @@ impl crate::CtrlTask for CtrlAnimeZbus { async move { let lock = inner.lock().await; if lock.config.off_when_unplugged { + if lock.config.builtin_anims_enabled { + lock.node + .write_bytes(&pkt_set_enable_powersave_anim(power_plugged)) + .map_err(|err| { + warn!("create_sys_event_tasks::off_when_suspended {}", err); + }) + .ok(); + } lock.node .write_bytes(&pkt_set_enable_display(power_plugged)) .map_err(|err| { diff --git a/rog-platform/src/hid_raw.rs b/rog-platform/src/hid_raw.rs index bc7ff508..42715d6f 100644 --- a/rog-platform/src/hid_raw.rs +++ b/rog-platform/src/hid_raw.rs @@ -4,6 +4,7 @@ use std::io::Write; use std::path::PathBuf; use log::{info, warn}; +use udev::Device; use crate::error::{PlatformError, Result}; @@ -88,4 +89,10 @@ impl HidRaw { file.write_all(message) .map_err(|e| PlatformError::IoPath(path.to_string_lossy().to_string(), e)) } + + pub fn set_wakeup_disabled(&self) -> Result<()> { + let path = unsafe { &*(self.path.get()) }; + let mut dev = Device::from_syspath(path)?; + Ok(dev.set_attribute_value("power/wakeup", "disabled")?) + } }