mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
Add notification of dGPU state change
This commit is contained in:
507
Cargo.lock
generated
507
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -11,8 +11,8 @@ concat-idents = "1.1.3"
|
||||
dirs = "^4.0"
|
||||
smol = "^1.2"
|
||||
|
||||
zbus = "^3.2"
|
||||
zbus_macros = "^3.2"
|
||||
zbus = "3.4.0"
|
||||
zbus_macros = "3.4.0"
|
||||
zvariant = "^3.2"
|
||||
zvariant_derive = "^3.2"
|
||||
logind-zbus = { version = "^3.0" } #, default-features = false, features = ["non_blocking"] }
|
||||
|
||||
@@ -18,7 +18,8 @@ rog_dbus = { path = "../rog-dbus" }
|
||||
rog_aura = { path = "../rog-aura" }
|
||||
rog_profiles = { path = "../rog-profiles" }
|
||||
rog_platform = { path = "../rog-platform" }
|
||||
# supergfxctl = { git = "https://gitlab.com/asus-linux/supergfxctl.git" }
|
||||
#supergfxctl = { git = "https://gitlab.com/asus-linux/supergfxctl.git" }
|
||||
supergfxctl = { path = "../../supergfxctl" }
|
||||
|
||||
smol.workspace = true
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ use std::{
|
||||
},
|
||||
thread::spawn,
|
||||
};
|
||||
use supergfxctl::pci_device::GfxPower;
|
||||
use zbus::export::futures_util::StreamExt;
|
||||
|
||||
const NOTIF_HEADER: &str = "ROG Control";
|
||||
@@ -69,6 +70,42 @@ pub fn start_notifications(
|
||||
})
|
||||
.detach();
|
||||
|
||||
let notifs_enabled1 = notifs_enabled.clone();
|
||||
let last_notif = last_notification.clone();
|
||||
let bios_notified1 = bios_notified.clone();
|
||||
executor
|
||||
.spawn(async move {
|
||||
let conn = zbus::Connection::system().await.unwrap();
|
||||
let proxy = supergfxctl::zbus_proxy::DaemonProxy::new(&conn)
|
||||
.await
|
||||
.unwrap();
|
||||
if let Ok(p) = proxy.receive_notify_gfx_status().await {
|
||||
p.for_each(|e| {
|
||||
if let Ok(out) = e.args() {
|
||||
if notifs_enabled1.load(Ordering::SeqCst) {
|
||||
let status = out.status();
|
||||
if *status != GfxPower::Unknown {
|
||||
// Required check because status cycles through active/unknown/suspended
|
||||
if let Ok(ref mut lock) = last_notif.try_lock() {
|
||||
notify!(
|
||||
do_notification(
|
||||
"dGPU status changed:",
|
||||
&format!("{status:?}",)
|
||||
),
|
||||
lock
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
bios_notified1.store(true, Ordering::SeqCst);
|
||||
future::ready(())
|
||||
})
|
||||
.await;
|
||||
};
|
||||
})
|
||||
.detach();
|
||||
|
||||
let bios_notified1 = bios_notified.clone();
|
||||
executor
|
||||
.spawn(async move {
|
||||
|
||||
Reference in New Issue
Block a user