Merge branch 'work/whiting/usestrings' into 'master'

Draft: Bump from ScreenReader0 to ScreenReader1.

See merge request holo/steamos-manager!21
This commit is contained in:
Jeremy Whiting 2025-07-11 19:36:27 -06:00
commit e5e3fcbaf1
5 changed files with 50 additions and 50 deletions

View file

@ -305,7 +305,7 @@
This interface is considered unstable and may change between verisons. This interface is considered unstable and may change between verisons.
Once it is considered stable it will be renamed to ScreenReader1 Once it is considered stable it will be renamed to ScreenReader1
--> -->
<interface name="com.steampowered.SteamOSManager1.ScreenReader0"> <interface name="com.steampowered.SteamOSManager1.ScreenReader1">
<!-- <!--
Enabled Enabled
@ -339,9 +339,9 @@
Which mode the screen reader should operate in. Which mode the screen reader should operate in.
Valid modes: 0 - Browse mode, 1 - Focus mode. Valid modes: browse - Browse mode, focus - Focus mode.
--> -->
<property name="Mode" type="u" access="readwrite"/> <property name="Mode" type="s" access="readwrite"/>
<!-- <!--
Voice Voice
@ -370,16 +370,16 @@
Forward a user interaction event to the screen reader service. Forward a user interaction event to the screen reader service.
@action: The action genereated via user input. Valid values: @action: The action genereated via user input. Valid values:
0 = Stop Talking stop_talking = Stop Talking
1 = Read Next Word, read_next_word = Read Next Word,
2 = Read Previous Word, read_previous_word = Read Previous Word,
3 = Read Next Item, read_next_item = Read Next Item,
4 = Read Previous Item, read_previous_item = Read Previous Item,
5 = Move To Next Landmark, move_to_next_landmark = Move To Next Landmark,
6 = Move To Previous Landmark, move_to_previous_landmark = Move To Previous Landmark,
7 = Move To Next Heading, move_to_next_heading = Move To Next Heading,
8 = Move To Previous Heading, move_to_previous_heading = Move To Previous Heading,
9 = Toggle between Browse mode and Focus mode, toggle_mode = Toggle between Browse mode and Focus mode,
@timestamp: refers to the time the user interaction event @timestamp: refers to the time the user interaction event
that triggered this event happened. E.g. when the user pressed that triggered this event happened. E.g. when the user pressed
@ -387,7 +387,7 @@
start of CLOCK_MONOTONIC_RAW). start of CLOCK_MONOTONIC_RAW).
--> -->
<method name="TriggerAction"> <method name="TriggerAction">
<arg type="u" name="action" direction="in"/> <arg type="s" name="action" direction="in"/>
<arg type="t" name="timestamp" direction="in"/> <arg type="t" name="timestamp" direction="in"/>
</method> </method>

View file

@ -25,7 +25,7 @@ mod hdmi_cec1;
mod low_power_mode1; mod low_power_mode1;
mod manager2; mod manager2;
mod performance_profile1; mod performance_profile1;
mod screenreader0; mod screenreader1;
mod storage1; mod storage1;
mod tdp_limit1; mod tdp_limit1;
mod update_bios1; mod update_bios1;
@ -44,7 +44,7 @@ pub use crate::hdmi_cec1::HdmiCec1Proxy;
pub use crate::low_power_mode1::LowPowerMode1Proxy; pub use crate::low_power_mode1::LowPowerMode1Proxy;
pub use crate::manager2::Manager2Proxy; pub use crate::manager2::Manager2Proxy;
pub use crate::performance_profile1::PerformanceProfile1Proxy; pub use crate::performance_profile1::PerformanceProfile1Proxy;
pub use crate::screenreader0::ScreenReader0Proxy; pub use crate::screenreader1::ScreenReader1Proxy;
pub use crate::storage1::Storage1Proxy; pub use crate::storage1::Storage1Proxy;
pub use crate::tdp_limit1::TdpLimit1Proxy; pub use crate::tdp_limit1::TdpLimit1Proxy;
pub use crate::update_bios1::UpdateBios1Proxy; pub use crate::update_bios1::UpdateBios1Proxy;

View file

@ -1,4 +1,4 @@
//! # D-Bus interface proxy for: `com.steampowered.SteamOSManager1.ScreenReader0` //! # D-Bus interface proxy for: `com.steampowered.SteamOSManager1.ScreenReader1`
//! //!
//! This code was generated by `zbus-xmlgen` `5.1.0` from D-Bus introspection data. //! This code was generated by `zbus-xmlgen` `5.1.0` from D-Bus introspection data.
//! Source: `com.steampowered.SteamOSManager1.xml`. //! Source: `com.steampowered.SteamOSManager1.xml`.
@ -13,14 +13,14 @@
//! [D-Bus standard interfaces]: https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces, //! [D-Bus standard interfaces]: https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces,
use zbus::proxy; use zbus::proxy;
#[proxy( #[proxy(
interface = "com.steampowered.SteamOSManager1.ScreenReader0", interface = "com.steampowered.SteamOSManager1.ScreenReader1",
default_service = "com.steampowered.SteamOSManager1", default_service = "com.steampowered.SteamOSManager1",
default_path = "/com/steampowered/SteamOSManager1", default_path = "/com/steampowered/SteamOSManager1",
assume_defaults = true assume_defaults = true
)] )]
pub trait ScreenReader0 { pub trait ScreenReader1 {
/// TriggerAction method /// TriggerAction method
fn trigger_action(&self, action: u32, timestamp: u64) -> zbus::Result<()>; fn trigger_action(&self, action: &str, timestamp: u64) -> zbus::Result<()>;
/// Enabled property /// Enabled property
#[zbus(property)] #[zbus(property)]
@ -30,9 +30,9 @@ pub trait ScreenReader0 {
/// Mode property /// Mode property
#[zbus(property)] #[zbus(property)]
fn mode(&self) -> zbus::Result<u32>; fn mode(&self) -> zbus::Result<String>;
#[zbus(property)] #[zbus(property)]
fn set_mode(&self, value: u32) -> zbus::Result<()>; fn set_mode(&self, value: &str) -> zbus::Result<()>;
/// Pitch property /// Pitch property
#[zbus(property)] #[zbus(property)]

View file

@ -17,7 +17,7 @@ use steamos_manager::power::{CPUScalingGovernor, GPUPerformanceLevel, GPUPowerPr
use steamos_manager::proxy::{ use steamos_manager::proxy::{
AmbientLightSensor1Proxy, BatteryChargeLimit1Proxy, CpuScaling1Proxy, FactoryReset1Proxy, AmbientLightSensor1Proxy, BatteryChargeLimit1Proxy, CpuScaling1Proxy, FactoryReset1Proxy,
FanControl1Proxy, GpuPerformanceLevel1Proxy, GpuPowerProfile1Proxy, HdmiCec1Proxy, FanControl1Proxy, GpuPerformanceLevel1Proxy, GpuPowerProfile1Proxy, HdmiCec1Proxy,
LowPowerMode1Proxy, Manager2Proxy, PerformanceProfile1Proxy, ScreenReader0Proxy, Storage1Proxy, LowPowerMode1Proxy, Manager2Proxy, PerformanceProfile1Proxy, ScreenReader1Proxy, Storage1Proxy,
TdpLimit1Proxy, UpdateBios1Proxy, UpdateDock1Proxy, WifiDebug1Proxy, WifiDebugDump1Proxy, TdpLimit1Proxy, UpdateBios1Proxy, UpdateDock1Proxy, WifiDebug1Proxy, WifiDebugDump1Proxy,
WifiPowerManagement1Proxy, WifiPowerManagement1Proxy,
}; };
@ -601,72 +601,72 @@ async fn main() -> Result<()> {
println!("Variant: {variant}"); println!("Variant: {variant}");
} }
Commands::GetScreenReaderEnabled => { Commands::GetScreenReaderEnabled => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
let enabled = proxy.enabled().await?; let enabled = proxy.enabled().await?;
println!("Enabled: {enabled}"); println!("Enabled: {enabled}");
} }
Commands::SetScreenReaderEnabled { enable } => { Commands::SetScreenReaderEnabled { enable } => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
proxy.set_enabled(*enable).await?; proxy.set_enabled(*enable).await?;
} }
Commands::GetScreenReaderRate => { Commands::GetScreenReaderRate => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
let rate = proxy.rate().await?; let rate = proxy.rate().await?;
println!("Rate: {rate}"); println!("Rate: {rate}");
} }
Commands::SetScreenReaderRate { rate } => { Commands::SetScreenReaderRate { rate } => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
proxy.set_rate(*rate).await?; proxy.set_rate(*rate).await?;
} }
Commands::GetScreenReaderPitch => { Commands::GetScreenReaderPitch => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
let pitch = proxy.pitch().await?; let pitch = proxy.pitch().await?;
println!("Pitch: {pitch}"); println!("Pitch: {pitch}");
} }
Commands::SetScreenReaderPitch { pitch } => { Commands::SetScreenReaderPitch { pitch } => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
proxy.set_pitch(*pitch).await?; proxy.set_pitch(*pitch).await?;
} }
Commands::GetScreenReaderVolume => { Commands::GetScreenReaderVolume => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
let volume = proxy.volume().await?; let volume = proxy.volume().await?;
println!("Volume: {volume}"); println!("Volume: {volume}");
} }
Commands::SetScreenReaderVolume { volume } => { Commands::SetScreenReaderVolume { volume } => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
proxy.set_volume(*volume).await?; proxy.set_volume(*volume).await?;
} }
Commands::GetScreenReaderMode => { Commands::GetScreenReaderMode => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
let mode = proxy.mode().await?; let mode = proxy.mode().await?;
match ScreenReaderMode::try_from(mode) { match ScreenReaderMode::try_from(mode.as_str()) {
Ok(s) => println!("Screen Reader Mode: {s}"), Ok(s) => println!("Screen Reader Mode: {s}"),
Err(_) => println!("Got unknown screen reader mode value {mode} from backend"), Err(_) => println!("Got unknown screen reader mode value {mode} from backend"),
} }
} }
Commands::SetScreenReaderMode { mode } => { Commands::SetScreenReaderMode { mode } => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
proxy.set_mode(*mode as u32).await?; proxy.set_mode(mode.to_string().as_str()).await?;
} }
Commands::TriggerScreenReaderAction { action } => { Commands::TriggerScreenReaderAction { action } => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
let timestamp = clock_gettime(ClockId::CLOCK_MONOTONIC_RAW)?; let timestamp = clock_gettime(ClockId::CLOCK_MONOTONIC_RAW)?;
let now = timestamp.tv_sec() * 1000000000 + timestamp.tv_nsec(); let now = timestamp.tv_sec() * 1000000000 + timestamp.tv_nsec();
proxy proxy
.trigger_action(*action as u32, now.try_into()?) .trigger_action(action.to_string().as_str(), now.try_into()?)
.await?; .await?;
} }
Commands::GetScreenReaderVoice => { Commands::GetScreenReaderVoice => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
let voice = proxy.voice().await?; let voice = proxy.voice().await?;
println!("Voice: {voice}"); println!("Voice: {voice}");
} }
Commands::SetScreenReaderVoice { voice } => { Commands::SetScreenReaderVoice { voice } => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
proxy.set_voice(voice).await?; proxy.set_voice(voice).await?;
} }
Commands::GetScreenReaderLocales => { Commands::GetScreenReaderLocales => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
let locales = proxy.voice_locales().await?; let locales = proxy.voice_locales().await?;
println!("Locales:\n"); println!("Locales:\n");
for locale in locales.into_iter().sorted() { for locale in locales.into_iter().sorted() {
@ -674,7 +674,7 @@ async fn main() -> Result<()> {
} }
} }
Commands::GetScreenReaderVoicesForLocale { locale } => { Commands::GetScreenReaderVoicesForLocale { locale } => {
let proxy = ScreenReader0Proxy::new(&conn).await?; let proxy = ScreenReader1Proxy::new(&conn).await?;
let voice_list = proxy.voices_for_locale().await?; let voice_list = proxy.voices_for_locale().await?;
let voices = voice_list let voices = voice_list
.get(locale) .get(locale)

View file

@ -157,7 +157,7 @@ struct PerformanceProfile1 {
tdp_limit_manager: Option<UnboundedSender<TdpManagerCommand>>, tdp_limit_manager: Option<UnboundedSender<TdpManagerCommand>>,
} }
struct ScreenReader0 { struct ScreenReader1 {
screen_reader: OrcaManager<'static>, screen_reader: OrcaManager<'static>,
} }
@ -624,15 +624,15 @@ impl PerformanceProfile1 {
} }
} }
impl ScreenReader0 { impl ScreenReader1 {
async fn new(connection: &Connection) -> Result<ScreenReader0> { async fn new(connection: &Connection) -> Result<ScreenReader1> {
let screen_reader = OrcaManager::new(connection).await?; let screen_reader = OrcaManager::new(connection).await?;
Ok(ScreenReader0 { screen_reader }) Ok(ScreenReader1 { screen_reader })
} }
} }
#[interface(name = "com.steampowered.SteamOSManager1.ScreenReader0")] #[interface(name = "com.steampowered.SteamOSManager1.ScreenReader1")]
impl ScreenReader0 { impl ScreenReader1 {
#[zbus(property)] #[zbus(property)]
async fn enabled(&self) -> bool { async fn enabled(&self) -> bool {
self.screen_reader.enabled() self.screen_reader.enabled()
@ -693,7 +693,7 @@ impl ScreenReader0 {
#[zbus(property)] #[zbus(property)]
async fn set_mode( async fn set_mode(
&mut self, &mut self,
m: u32, m: &str,
#[zbus(signal_emitter)] ctx: SignalEmitter<'_>, #[zbus(signal_emitter)] ctx: SignalEmitter<'_>,
) -> fdo::Result<()> { ) -> fdo::Result<()> {
let mode = match ScreenReaderMode::try_from(m) { let mode = match ScreenReaderMode::try_from(m) {
@ -735,7 +735,7 @@ impl ScreenReader0 {
self.screen_reader.get_voices().clone() self.screen_reader.get_voices().clone()
} }
async fn trigger_action(&mut self, a: u32, timestamp: u64) -> fdo::Result<()> { async fn trigger_action(&mut self, a: &str, timestamp: u64) -> fdo::Result<()> {
let action = match ScreenReaderAction::try_from(a) { let action = match ScreenReaderAction::try_from(a) {
Ok(action) => action, Ok(action) => action,
Err(err) => return Err(fdo::Error::InvalidArgs(err.to_string())), Err(err) => return Err(fdo::Error::InvalidArgs(err.to_string())),
@ -1110,7 +1110,7 @@ pub(crate) async fn create_interfaces(
proxy: proxy.clone(), proxy: proxy.clone(),
channel: daemon, channel: daemon,
}; };
let screen_reader = ScreenReader0::new(&session).await?; let screen_reader = ScreenReader1::new(&session).await?;
let wifi_power_management = WifiPowerManagement1 { let wifi_power_management = WifiPowerManagement1 {
proxy: proxy.clone(), proxy: proxy.clone(),
}; };