libmonado_rs/
sys.rs

1use dlopen2::wrapper::WrapperApi;
2use std::fmt::Debug;
3use std::os::raw::c_char;
4use std::{ffi::c_void, fmt::Display};
5
6use crate::space::{MndPose, ReferenceSpaceType};
7
8#[repr(i32)]
9#[doc = " Result codes for operations, negative are errors, zero or positives are\n success."]
10#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
11pub enum MndResult {
12	Success = 0,
13	ErrorInvalidVersion = -1,
14	ErrorInvalidValue = -2,
15	ErrorConnectingFailed = -3,
16	ErrorOperationFailed = -4,
17	ErrorRecenteringNotSupported = -5,
18	ErrorInvalidProperty = -6,
19	ErrorInvalidOperation = -7,
20}
21impl MndResult {
22	pub fn to_result(self) -> Result<(), MndResult> {
23		if self == MndResult::Success {
24			Ok(())
25		} else {
26			Err(self)
27		}
28	}
29}
30
31impl std::error::Error for MndResult {
32	fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
33		None
34	}
35	fn cause(&self) -> Option<&dyn std::error::Error> {
36		None
37	}
38	fn description(&self) -> &str {
39		"std::error::Error::description() is deprecated, use the Display impl instead."
40	}
41}
42
43impl Display for MndResult {
44	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
45		write!(f, "{:?}", self)
46	}
47}
48
49flagset::flags! {
50	#[doc = " Bitflags for client application state."]
51	pub enum ClientState: u32 {
52		ClientPrimaryApp = 1,
53		ClientSessionActive = 2,
54		ClientSessionVisible = 4,
55		ClientSessionFocused = 8,
56		ClientSessionOverlay = 16,
57		ClientIoActive = 32,
58	}
59}
60
61#[repr(i32)]
62#[doc = " A property to get from a thing (currently only devices)."]
63#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
64pub enum MndProperty {
65	PropertyNameString = 0,
66	PropertySerialString = 1,
67	PropertyTrackingOriginU32 = 2,
68	PropertySupportsPositionBool = 3,
69	PropertySupportsOrientationBool = 4,
70}
71
72#[doc = " Opaque type for libmonado state"]
73pub type MndRootPtr = *mut c_void;
74
75#[derive(WrapperApi)]
76pub struct MonadoApi {
77	mnd_api_get_version:
78		unsafe extern "C" fn(out_major: *mut u32, out_minor: *mut u32, out_patch: *mut u32),
79	mnd_root_create: unsafe extern "C" fn(out_root: *mut MndRootPtr) -> MndResult,
80	mnd_root_destroy: unsafe extern "C" fn(out_root: *mut MndRootPtr),
81	mnd_root_update_client_list: unsafe extern "C" fn(root: MndRootPtr) -> MndResult,
82	mnd_root_get_number_clients:
83		unsafe extern "C" fn(root: MndRootPtr, out_num: *mut u32) -> MndResult,
84	mnd_root_get_client_id_at_index:
85		unsafe extern "C" fn(root: MndRootPtr, index: u32, out_client_id: *mut u32) -> MndResult,
86	mnd_root_get_client_name: unsafe extern "C" fn(
87		root: MndRootPtr,
88		client_id: u32,
89		out_name: *mut *const ::std::os::raw::c_char,
90	) -> MndResult,
91	mnd_root_get_client_state:
92		unsafe extern "C" fn(root: MndRootPtr, client_id: u32, out_flags: *mut u32) -> MndResult,
93	mnd_root_set_client_primary:
94		unsafe extern "C" fn(root: MndRootPtr, client_id: u32) -> MndResult,
95	mnd_root_set_client_focused:
96		unsafe extern "C" fn(root: MndRootPtr, client_id: u32) -> MndResult,
97	mnd_root_toggle_client_io_active:
98		unsafe extern "C" fn(root: MndRootPtr, client_id: u32) -> MndResult,
99	mnd_root_get_device_count:
100		unsafe extern "C" fn(root: MndRootPtr, out_device_count: *mut u32) -> MndResult,
101	mnd_root_get_device_info: unsafe extern "C" fn(
102		root: MndRootPtr,
103		device_index: u32,
104		out_index: *mut u32,
105		out_dev_name: *mut *const ::std::os::raw::c_char,
106	) -> MndResult,
107	mnd_root_get_device_from_role: unsafe extern "C" fn(
108		root: MndRootPtr,
109		role_name: *const ::std::os::raw::c_char,
110		out_index: *mut i32,
111	) -> MndResult,
112	mnd_root_recenter_local_spaces: unsafe extern "C" fn(root: MndRootPtr) -> MndResult,
113	mnd_root_get_device_info_bool: unsafe extern "C" fn(
114		root: MndRootPtr,
115		device_index: u32,
116		mnd_property_t: MndProperty,
117		out_bool: *mut bool,
118	) -> MndResult,
119	mnd_root_get_device_info_i32: unsafe extern "C" fn(
120		root: MndRootPtr,
121		device_index: u32,
122		mnd_property_t: MndProperty,
123		out_i32: *mut i32,
124	) -> MndResult,
125	mnd_root_get_device_info_u32: unsafe extern "C" fn(
126		root: MndRootPtr,
127		device_index: u32,
128		mnd_property_t: MndProperty,
129		out_u32: *mut u32,
130	) -> MndResult,
131	mnd_root_get_device_info_float: unsafe extern "C" fn(
132		root: MndRootPtr,
133		device_index: u32,
134		mnd_property_t: MndProperty,
135		out_float: *mut f32,
136	) -> MndResult,
137	mnd_root_get_device_info_string: unsafe extern "C" fn(
138		root: MndRootPtr,
139		device_index: u32,
140		mnd_property_t: MndProperty,
141		out_string: *mut *mut ::std::os::raw::c_char,
142	) -> MndResult,
143
144	mnd_root_get_reference_space_offset: unsafe extern "C" fn(
145		root: MndRootPtr,
146		type_: ReferenceSpaceType,
147		out_offset: *mut MndPose,
148	) -> MndResult,
149	mnd_root_set_reference_space_offset: unsafe extern "C" fn(
150		root: MndRootPtr,
151		type_: ReferenceSpaceType,
152		offset: *const MndPose,
153	) -> MndResult,
154	mnd_root_get_tracking_origin_offset: unsafe extern "C" fn(
155		root: MndRootPtr,
156		origin_id: u32,
157		out_offset: *mut MndPose,
158	) -> MndResult,
159	mnd_root_set_tracking_origin_offset:
160		unsafe extern "C" fn(root: MndRootPtr, origin_id: u32, offset: *const MndPose) -> MndResult,
161	mnd_root_get_tracking_origin_count:
162		unsafe extern "C" fn(root: MndRootPtr, out_track_count: *mut u32) -> MndResult,
163	mnd_root_get_tracking_origin_name: unsafe extern "C" fn(
164		root: MndRootPtr,
165		origin_id: u32,
166		out_string: *mut *const c_char,
167	) -> MndResult,
168	mnd_root_get_device_battery_status: unsafe extern "C" fn(
169		root: MndRootPtr,
170		device_index: u32,
171		out_present: *mut bool,
172		out_charging: *mut bool,
173		out_charge: *mut f32,
174	) -> MndResult,
175}