manager/user: Expose device and variant info over DBus

This commit is contained in:
Vicki Pfau 2025-03-11 17:34:54 -07:00
parent b1dc04daa8
commit 2555b95258
4 changed files with 31 additions and 1 deletions

View file

@ -219,6 +219,15 @@
--> -->
<method name="ReloadConfig"/> <method name="ReloadConfig"/>
<!--
DeviceModel:
A tuple of the device model and variant that SteamOS Manager is running
on. If the device or variant isn't known the applicable fields will be
"unknown" instead.
-->
<property name="DeviceModel" type="ss" access="read"/>
</interface> </interface>
<!-- <!--

View file

@ -184,6 +184,9 @@ enum Commands {
/// Reload the configuration from disk /// Reload the configuration from disk
ReloadConfig, ReloadConfig,
/// Get the model and variant of this device, if known
GetDeviceModel,
} }
async fn get_all_properties(conn: &Connection) -> Result<()> { async fn get_all_properties(conn: &Connection) -> Result<()> {
@ -462,6 +465,12 @@ async fn main() -> Result<()> {
let proxy = Manager2Proxy::new(&conn).await?; let proxy = Manager2Proxy::new(&conn).await?;
proxy.reload_config().await?; proxy.reload_config().await?;
} }
Commands::GetDeviceModel => {
let proxy = Manager2Proxy::new(&conn).await?;
let (device, variant) = proxy.device_model().await?;
println!("Model: {device}");
println!("Variant: {variant}");
}
} }
Ok(()) Ok(())

View file

@ -19,7 +19,9 @@ use crate::cec::{HdmiCecControl, HdmiCecState};
use crate::daemon::user::Command; use crate::daemon::user::Command;
use crate::daemon::DaemonCommand; use crate::daemon::DaemonCommand;
use crate::error::{to_zbus_error, to_zbus_fdo_error, zbus_to_zbus_fdo}; use crate::error::{to_zbus_error, to_zbus_fdo_error, zbus_to_zbus_fdo};
use crate::hardware::{device_type, steam_deck_variant, DeviceType, SteamDeckVariant}; use crate::hardware::{
device_type, device_variant, steam_deck_variant, DeviceType, SteamDeckVariant,
};
use crate::job::JobManagerCommand; use crate::job::JobManagerCommand;
use crate::platform::platform_config; use crate::platform::platform_config;
use crate::power::{ use crate::power::{
@ -440,6 +442,12 @@ impl Manager2 {
.map_err(to_zbus_fdo_error)?; .map_err(to_zbus_fdo_error)?;
method!(self, "ReloadConfig") method!(self, "ReloadConfig")
} }
#[zbus(property(emits_changed_signal = "const"))]
async fn device_model(&self) -> fdo::Result<(String, String)> {
let (device, variant) = device_variant().await.map_err(to_zbus_fdo_error)?;
Ok((device.to_string(), variant))
}
} }
#[interface(name = "com.steampowered.SteamOSManager1.Storage1")] #[interface(name = "com.steampowered.SteamOSManager1.Storage1")]

View file

@ -21,4 +21,8 @@ use zbus::proxy;
pub trait Manager2 { pub trait Manager2 {
/// ReloadConfig method /// ReloadConfig method
fn reload_config(&self) -> zbus::Result<()>; fn reload_config(&self) -> zbus::Result<()>;
/// DeviceModel property
#[zbus(property)]
fn device_model(&self) -> zbus::Result<(String, String)>;
} }