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}