gui_server_api/msg/
simulator.rs

1// SPDX-FileCopyrightText: 2024 Foundation Devices, Inc. <hello@foundation.xyz>
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4use server::{AsScalar, FromScalar, SimpleMemoryMessage};
5use xous::MemoryRange;
6
7#[derive(Debug, server::Message)]
8#[response(())]
9pub struct GetDeviceFrame(pub MemoryRange);
10
11impl From<SimpleMemoryMessage> for GetDeviceFrame {
12    fn from(value: SimpleMemoryMessage) -> Self { Self(value.buf) }
13}
14
15impl From<GetDeviceFrame> for SimpleMemoryMessage {
16    fn from(val: GetDeviceFrame) -> Self { SimpleMemoryMessage { buf: val.0, arg1: 0, arg2: 0 } }
17}
18
19#[derive(Debug, server::Message)]
20pub struct SetScaleFactor(pub usize);
21
22#[derive(Debug, server::Message)]
23pub struct SimulatePowerButton(pub bool);
24
25#[derive(Debug, server::Message)]
26pub struct SimulateKey {
27    pub key: crate::Key,
28    pub is_pressed: bool,
29}
30
31impl FromScalar<4> for SimulateKey {
32    fn from_scalar([k1, k2, is_pressed, _]: [u32; 4]) -> Self {
33        Self { key: crate::Key::from_scalar([k1, k2]), is_pressed: is_pressed != 0 }
34    }
35}
36
37impl AsScalar<4> for SimulateKey {
38    fn as_scalar(&self) -> [u32; 4] {
39        let [k1, k2] = self.key.as_scalar();
40        [k1, k2, self.is_pressed as u32, 0]
41    }
42}
43
44/// Scroll delta from the host mouse/trackpad.
45/// Position is in physical pixels; deltas are f32 scroll amounts (pixels).
46#[derive(Debug, server::Message)]
47pub struct SimulateScroll {
48    pub x: u32,
49    pub y: u32,
50    pub delta_x: f32,
51    pub delta_y: f32,
52}
53
54impl FromScalar<4> for SimulateScroll {
55    fn from_scalar([x, y, dx, dy]: [u32; 4]) -> Self {
56        Self { x, y, delta_x: f32::from_bits(dx), delta_y: f32::from_bits(dy) }
57    }
58}
59
60impl AsScalar<4> for SimulateScroll {
61    fn as_scalar(&self) -> [u32; 4] { [self.x, self.y, self.delta_x.to_bits(), self.delta_y.to_bits()] }
62}