mirror of
https://gitlab.steamos.cloud/holo/steamos-manager.git
synced 2025-07-15 18:56:49 -04:00
wip: allow custom InputPlumber target devices in configuration file
Some devices may need more than only one InputPlumber target device, i.e. the MSI Claw series needs a `keyboard` target in order to grab the volume keys. To account for this, lets add the ability to specify multiple targets within the device configuration files.
This commit is contained in:
parent
631f30bc94
commit
fcf10c393b
3 changed files with 48 additions and 7 deletions
|
@ -71,6 +71,7 @@ pub(crate) struct DeviceConfig {
|
||||||
pub gpu_clocks: Option<RangeConfig<u32>>,
|
pub gpu_clocks: Option<RangeConfig<u32>>,
|
||||||
pub battery_charge_limit: Option<BatteryChargeLimitConfig>,
|
pub battery_charge_limit: Option<BatteryChargeLimitConfig>,
|
||||||
pub performance_profile: Option<PerformanceProfileConfig>,
|
pub performance_profile: Option<PerformanceProfileConfig>,
|
||||||
|
pub inputplumber: Option<InputPlumberConfig>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Deserialize, Debug)]
|
#[derive(Clone, Deserialize, Debug)]
|
||||||
|
@ -100,6 +101,11 @@ pub(crate) struct FirmwareAttributeConfig {
|
||||||
pub performance_profile: Option<String>,
|
pub performance_profile: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Deserialize, Debug)]
|
||||||
|
pub struct InputPlumberConfig {
|
||||||
|
pub target_devices: Option<Vec<String>>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Deserialize, Debug)]
|
#[derive(Clone, Deserialize, Debug)]
|
||||||
pub(crate) struct PerformanceProfileConfig {
|
pub(crate) struct PerformanceProfileConfig {
|
||||||
pub suggested_default: String,
|
pub suggested_default: String,
|
||||||
|
|
|
@ -15,6 +15,7 @@ use zbus::proxy::CacheProperties;
|
||||||
use zbus::zvariant::ObjectPath;
|
use zbus::zvariant::ObjectPath;
|
||||||
use zbus::Connection;
|
use zbus::Connection;
|
||||||
|
|
||||||
|
use crate::hardware;
|
||||||
use crate::Service;
|
use crate::Service;
|
||||||
|
|
||||||
#[zbus::proxy(
|
#[zbus::proxy(
|
||||||
|
@ -100,13 +101,44 @@ impl DeckService {
|
||||||
.path(path)?
|
.path(path)?
|
||||||
.build()
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
if !self.is_deck(&proxy).await? {
|
|
||||||
debug!("Changing CompositeDevice {} into `deck-uhid` type", path);
|
let configured_target_devices: Option<Vec<String>> = match hardware::device_config().await {
|
||||||
proxy.set_target_devices(&["deck-uhid"]).await
|
Ok(Some(config)) => config
|
||||||
|
.inputplumber
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|inputplumber_settings| inputplumber_settings.target_devices.clone()),
|
||||||
|
Ok(None) => {
|
||||||
|
debug!("No device_config found for inputplumber settings at path: {path}",);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
tracing::warn!(
|
||||||
|
"Failed to load device_config for inputplumber settings at path {path}: {e}",
|
||||||
|
);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let current_targets = proxy.target_devices().await?;
|
||||||
|
|
||||||
|
if let Some(targets_from_config) = configured_target_devices {
|
||||||
|
if current_targets != targets_from_config {
|
||||||
|
let target_devices: Vec<&str> =
|
||||||
|
targets_from_config.iter().map(AsRef::as_ref).collect();
|
||||||
|
debug!("Changing CompositeDevice {path} to configured targets: {target_devices:?}",);
|
||||||
|
proxy.set_target_devices(&target_devices).await?;
|
||||||
|
} else {
|
||||||
|
let target_devices: Vec<&str> =
|
||||||
|
targets_from_config.iter().map(AsRef::as_ref).collect();
|
||||||
|
debug!("CompositeDevice {path} already has configured targets: {target_devices:?}",);
|
||||||
|
}
|
||||||
|
} else if !self.is_deck(&proxy).await? {
|
||||||
|
debug!("CompositeDevice {path} not configured, setting to default 'deck-uhid'",);
|
||||||
|
proxy.set_target_devices(&["deck-uhid"]).await?;
|
||||||
} else {
|
} else {
|
||||||
debug!("CompositeDevice {} is already `deck-uhid` type", path);
|
debug!("CompositeDevice {path} not configured, already 'deck-uhid' or custom state",);
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1121,8 +1121,8 @@ mod test {
|
||||||
use crate::daemon::user::UserContext;
|
use crate::daemon::user::UserContext;
|
||||||
use crate::hardware::test::fake_model;
|
use crate::hardware::test::fake_model;
|
||||||
use crate::hardware::{
|
use crate::hardware::{
|
||||||
BatteryChargeLimitConfig, DeviceConfig, DeviceMatch, DmiMatch, PerformanceProfileConfig,
|
BatteryChargeLimitConfig, DeviceConfig, DeviceMatch, DmiMatch, InputPlumberConfig,
|
||||||
RangeConfig, SteamDeckVariant, TdpLimitConfig,
|
PerformanceProfileConfig, RangeConfig, SteamDeckVariant, TdpLimitConfig,
|
||||||
};
|
};
|
||||||
use crate::platform::{
|
use crate::platform::{
|
||||||
FormatDeviceConfig, PlatformConfig, ResetConfig, ScriptConfig, ServiceConfig, StorageConfig,
|
FormatDeviceConfig, PlatformConfig, ResetConfig, ScriptConfig, ServiceConfig, StorageConfig,
|
||||||
|
@ -1187,6 +1187,9 @@ mod test {
|
||||||
platform_profile_name: String::from("power-driver"),
|
platform_profile_name: String::from("power-driver"),
|
||||||
suggested_default: String::from("balanced"),
|
suggested_default: String::from("balanced"),
|
||||||
}),
|
}),
|
||||||
|
inputplumber: Some(InputPlumberConfig {
|
||||||
|
target_devices: Some(vec![String::from("deck-uhid")]),
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue