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"
|
dirs = "^4.0"
|
||||||
smol = "^1.2"
|
smol = "^1.2"
|
||||||
|
|
||||||
zbus = "^3.2"
|
zbus = "3.4.0"
|
||||||
zbus_macros = "^3.2"
|
zbus_macros = "3.4.0"
|
||||||
zvariant = "^3.2"
|
zvariant = "^3.2"
|
||||||
zvariant_derive = "^3.2"
|
zvariant_derive = "^3.2"
|
||||||
logind-zbus = { version = "^3.0" } #, default-features = false, features = ["non_blocking"] }
|
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_aura = { path = "../rog-aura" }
|
||||||
rog_profiles = { path = "../rog-profiles" }
|
rog_profiles = { path = "../rog-profiles" }
|
||||||
rog_platform = { path = "../rog-platform" }
|
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
|
smol.workspace = true
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ use std::{
|
|||||||
},
|
},
|
||||||
thread::spawn,
|
thread::spawn,
|
||||||
};
|
};
|
||||||
|
use supergfxctl::pci_device::GfxPower;
|
||||||
use zbus::export::futures_util::StreamExt;
|
use zbus::export::futures_util::StreamExt;
|
||||||
|
|
||||||
const NOTIF_HEADER: &str = "ROG Control";
|
const NOTIF_HEADER: &str = "ROG Control";
|
||||||
@@ -69,6 +70,42 @@ pub fn start_notifications(
|
|||||||
})
|
})
|
||||||
.detach();
|
.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();
|
let bios_notified1 = bios_notified.clone();
|
||||||
executor
|
executor
|
||||||
.spawn(async move {
|
.spawn(async move {
|
||||||
|
|||||||
Reference in New Issue
Block a user