• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 extern crate bt_shim;
2 
3 use bt_topshim::btif::{BtDeviceType, BtSspVariant, BtTransport, Uuid128Bit};
4 
5 use btstack::bluetooth::{
6     BluetoothDevice, IBluetooth, IBluetoothCallback, IBluetoothConnectionCallback,
7 };
8 use btstack::uuid::Profile;
9 use btstack::RPCProxy;
10 
11 use dbus::arg::RefArg;
12 
13 use dbus::nonblock::SyncConnection;
14 use dbus::strings::Path;
15 
16 use dbus_macros::{dbus_method, dbus_propmap, dbus_proxy_obj, generate_dbus_exporter};
17 
18 use dbus_projection::DisconnectWatcher;
19 use dbus_projection::{dbus_generated, impl_dbus_arg_enum};
20 
21 use num_traits::cast::{FromPrimitive, ToPrimitive};
22 
23 use std::sync::Arc;
24 
25 use crate::dbus_arg::{DBusArg, DBusArgError, RefArgToRust};
26 
27 #[dbus_propmap(BluetoothDevice)]
28 pub struct BluetoothDeviceDBus {
29     address: String,
30     name: String,
31 }
32 
33 #[allow(dead_code)]
34 struct BluetoothCallbackDBus {}
35 
36 #[dbus_proxy_obj(BluetoothCallback, "org.chromium.bluetooth.BluetoothCallback")]
37 impl IBluetoothCallback for BluetoothCallbackDBus {
38     #[dbus_method("OnAddressChanged")]
on_address_changed(&self, addr: String)39     fn on_address_changed(&self, addr: String) {
40         dbus_generated!()
41     }
42     #[dbus_method("OnNameChanged")]
on_name_changed(&self, name: String)43     fn on_name_changed(&self, name: String) {
44         dbus_generated!()
45     }
46     #[dbus_method("OnDiscoverableChanged")]
on_discoverable_changed(&self, discoverable: bool)47     fn on_discoverable_changed(&self, discoverable: bool) {
48         dbus_generated!()
49     }
50     #[dbus_method("OnDeviceFound")]
on_device_found(&self, remote_device: BluetoothDevice)51     fn on_device_found(&self, remote_device: BluetoothDevice) {
52         dbus_generated!()
53     }
54     #[dbus_method("OnDeviceCleared")]
on_device_cleared(&self, remote_device: BluetoothDevice)55     fn on_device_cleared(&self, remote_device: BluetoothDevice) {
56         dbus_generated!()
57     }
58     #[dbus_method("OnDiscoveringChanged")]
on_discovering_changed(&self, discovering: bool)59     fn on_discovering_changed(&self, discovering: bool) {
60         dbus_generated!()
61     }
62     #[dbus_method("OnSspRequest")]
on_ssp_request( &self, remote_device: BluetoothDevice, cod: u32, variant: BtSspVariant, passkey: u32, )63     fn on_ssp_request(
64         &self,
65         remote_device: BluetoothDevice,
66         cod: u32,
67         variant: BtSspVariant,
68         passkey: u32,
69     ) {
70         dbus_generated!()
71     }
72     #[dbus_method("OnBondStateChanged")]
on_bond_state_changed(&self, status: u32, address: String, state: u32)73     fn on_bond_state_changed(&self, status: u32, address: String, state: u32) {
74         dbus_generated!()
75     }
76 }
77 
78 impl_dbus_arg_enum!(BtDeviceType);
79 impl_dbus_arg_enum!(BtSspVariant);
80 impl_dbus_arg_enum!(BtTransport);
81 impl_dbus_arg_enum!(Profile);
82 
83 #[allow(dead_code)]
84 struct BluetoothConnectionCallbackDBus {}
85 
86 #[dbus_proxy_obj(BluetoothConnectionCallback, "org.chromium.bluetooth.BluetoothConnectionCallback")]
87 impl IBluetoothConnectionCallback for BluetoothConnectionCallbackDBus {
88     #[dbus_method("OnDeviceConnected")]
on_device_connected(&self, remote_device: BluetoothDevice)89     fn on_device_connected(&self, remote_device: BluetoothDevice) {
90         dbus_generated!()
91     }
92 
93     #[dbus_method("OnDeviceDisconnected")]
on_device_disconnected(&self, remote_device: BluetoothDevice)94     fn on_device_disconnected(&self, remote_device: BluetoothDevice) {
95         dbus_generated!()
96     }
97 }
98 
99 #[allow(dead_code)]
100 struct IBluetoothDBus {}
101 
102 #[generate_dbus_exporter(export_bluetooth_dbus_obj, "org.chromium.bluetooth.Bluetooth")]
103 impl IBluetooth for IBluetoothDBus {
104     #[dbus_method("RegisterCallback")]
register_callback(&mut self, callback: Box<dyn IBluetoothCallback + Send>)105     fn register_callback(&mut self, callback: Box<dyn IBluetoothCallback + Send>) {
106         dbus_generated!()
107     }
108 
109     #[dbus_method("RegisterConnectionCallback")]
register_connection_callback( &mut self, callback: Box<dyn IBluetoothConnectionCallback + Send>, ) -> u32110     fn register_connection_callback(
111         &mut self,
112         callback: Box<dyn IBluetoothConnectionCallback + Send>,
113     ) -> u32 {
114         dbus_generated!()
115     }
116 
117     #[dbus_method("UnregisterConnectionCallback")]
unregister_connection_callback(&mut self, id: u32) -> bool118     fn unregister_connection_callback(&mut self, id: u32) -> bool {
119         dbus_generated!()
120     }
121 
122     // Not exposed over D-Bus. The stack is automatically enabled when the daemon starts.
enable(&mut self) -> bool123     fn enable(&mut self) -> bool {
124         dbus_generated!()
125     }
126 
127     // Not exposed over D-Bus. The stack is automatically disabled when the daemon exits.
128     // TODO(b/189495858): Handle shutdown properly when SIGTERM is received.
disable(&mut self) -> bool129     fn disable(&mut self) -> bool {
130         dbus_generated!()
131     }
132 
133     #[dbus_method("GetAddress")]
get_address(&self) -> String134     fn get_address(&self) -> String {
135         dbus_generated!()
136     }
137 
138     #[dbus_method("GetUuids")]
get_uuids(&self) -> Vec<Uuid128Bit>139     fn get_uuids(&self) -> Vec<Uuid128Bit> {
140         dbus_generated!()
141     }
142 
143     #[dbus_method("GetName")]
get_name(&self) -> String144     fn get_name(&self) -> String {
145         dbus_generated!()
146     }
147 
148     #[dbus_method("SetName")]
set_name(&self, name: String) -> bool149     fn set_name(&self, name: String) -> bool {
150         dbus_generated!()
151     }
152 
153     #[dbus_method("GetBluetoothClass")]
get_bluetooth_class(&self) -> u32154     fn get_bluetooth_class(&self) -> u32 {
155         dbus_generated!()
156     }
157 
158     #[dbus_method("SetBluetoothClass")]
set_bluetooth_class(&self, cod: u32) -> bool159     fn set_bluetooth_class(&self, cod: u32) -> bool {
160         dbus_generated!()
161     }
162 
163     #[dbus_method("GetDiscoverable")]
get_discoverable(&self) -> bool164     fn get_discoverable(&self) -> bool {
165         dbus_generated!()
166     }
167 
168     #[dbus_method("GetDiscoverableTimeout")]
get_discoverable_timeout(&self) -> u32169     fn get_discoverable_timeout(&self) -> u32 {
170         dbus_generated!()
171     }
172 
173     #[dbus_method("SetDiscoverable")]
set_discoverable(&self, mode: bool, duration: u32) -> bool174     fn set_discoverable(&self, mode: bool, duration: u32) -> bool {
175         dbus_generated!()
176     }
177 
178     #[dbus_method("IsMultiAdvertisementSupported")]
is_multi_advertisement_supported(&self) -> bool179     fn is_multi_advertisement_supported(&self) -> bool {
180         dbus_generated!()
181     }
182 
183     #[dbus_method("IsLeExtendedAdvertisingSupported")]
is_le_extended_advertising_supported(&self) -> bool184     fn is_le_extended_advertising_supported(&self) -> bool {
185         dbus_generated!()
186     }
187 
188     #[dbus_method("StartDiscovery")]
start_discovery(&self) -> bool189     fn start_discovery(&self) -> bool {
190         dbus_generated!()
191     }
192 
193     #[dbus_method("CancelDiscovery")]
cancel_discovery(&self) -> bool194     fn cancel_discovery(&self) -> bool {
195         dbus_generated!()
196     }
197 
198     #[dbus_method("IsDiscovering")]
is_discovering(&self) -> bool199     fn is_discovering(&self) -> bool {
200         dbus_generated!()
201     }
202 
203     #[dbus_method("GetDiscoveryEndMillis")]
get_discovery_end_millis(&self) -> u64204     fn get_discovery_end_millis(&self) -> u64 {
205         dbus_generated!()
206     }
207 
208     #[dbus_method("CreateBond")]
create_bond(&self, device: BluetoothDevice, transport: BtTransport) -> bool209     fn create_bond(&self, device: BluetoothDevice, transport: BtTransport) -> bool {
210         dbus_generated!()
211     }
212 
213     #[dbus_method("CancelBondProcess")]
cancel_bond_process(&self, device: BluetoothDevice) -> bool214     fn cancel_bond_process(&self, device: BluetoothDevice) -> bool {
215         dbus_generated!()
216     }
217 
218     #[dbus_method("RemoveBond")]
remove_bond(&self, device: BluetoothDevice) -> bool219     fn remove_bond(&self, device: BluetoothDevice) -> bool {
220         dbus_generated!()
221     }
222 
223     #[dbus_method("GetBondedDevices")]
get_bonded_devices(&self) -> Vec<BluetoothDevice>224     fn get_bonded_devices(&self) -> Vec<BluetoothDevice> {
225         dbus_generated!()
226     }
227 
228     #[dbus_method("GetBondState")]
get_bond_state(&self, device: BluetoothDevice) -> u32229     fn get_bond_state(&self, device: BluetoothDevice) -> u32 {
230         dbus_generated!()
231     }
232 
233     #[dbus_method("SetPin")]
set_pin(&self, device: BluetoothDevice, accept: bool, pin_code: Vec<u8>) -> bool234     fn set_pin(&self, device: BluetoothDevice, accept: bool, pin_code: Vec<u8>) -> bool {
235         dbus_generated!()
236     }
237 
238     #[dbus_method("SetPasskey")]
set_passkey(&self, device: BluetoothDevice, accept: bool, passkey: Vec<u8>) -> bool239     fn set_passkey(&self, device: BluetoothDevice, accept: bool, passkey: Vec<u8>) -> bool {
240         dbus_generated!()
241     }
242 
243     #[dbus_method("SetPairingConfirmation")]
set_pairing_confirmation(&self, device: BluetoothDevice, accept: bool) -> bool244     fn set_pairing_confirmation(&self, device: BluetoothDevice, accept: bool) -> bool {
245         dbus_generated!()
246     }
247 
248     #[dbus_method("GetRemoteName")]
get_remote_name(&self, _device: BluetoothDevice) -> String249     fn get_remote_name(&self, _device: BluetoothDevice) -> String {
250         dbus_generated!()
251     }
252 
253     #[dbus_method("GetRemoteType")]
get_remote_type(&self, _device: BluetoothDevice) -> BtDeviceType254     fn get_remote_type(&self, _device: BluetoothDevice) -> BtDeviceType {
255         dbus_generated!()
256     }
257 
258     #[dbus_method("GetRemoteAlias")]
get_remote_alias(&self, _device: BluetoothDevice) -> String259     fn get_remote_alias(&self, _device: BluetoothDevice) -> String {
260         dbus_generated!()
261     }
262 
263     #[dbus_method("SetRemoteAlias")]
set_remote_alias(&mut self, _device: BluetoothDevice, new_alias: String)264     fn set_remote_alias(&mut self, _device: BluetoothDevice, new_alias: String) {
265         dbus_generated!()
266     }
267 
268     #[dbus_method("GetRemoteClass")]
get_remote_class(&self, _device: BluetoothDevice) -> u32269     fn get_remote_class(&self, _device: BluetoothDevice) -> u32 {
270         dbus_generated!()
271     }
272 
273     #[dbus_method("GetConnectionState")]
get_connection_state(&self, device: BluetoothDevice) -> u32274     fn get_connection_state(&self, device: BluetoothDevice) -> u32 {
275         dbus_generated!()
276     }
277 
278     #[dbus_method("GetProfileConnectionState")]
get_profile_connection_state(&self, profile: Profile) -> u32279     fn get_profile_connection_state(&self, profile: Profile) -> u32 {
280         dbus_generated!()
281     }
282 
283     #[dbus_method("GetRemoteUuids")]
get_remote_uuids(&self, device: BluetoothDevice) -> Vec<Uuid128Bit>284     fn get_remote_uuids(&self, device: BluetoothDevice) -> Vec<Uuid128Bit> {
285         dbus_generated!()
286     }
287 
288     #[dbus_method("FetchRemoteUuids")]
fetch_remote_uuids(&self, device: BluetoothDevice) -> bool289     fn fetch_remote_uuids(&self, device: BluetoothDevice) -> bool {
290         dbus_generated!()
291     }
292 
293     #[dbus_method("SdpSearch")]
sdp_search(&self, device: BluetoothDevice, uuid: Uuid128Bit) -> bool294     fn sdp_search(&self, device: BluetoothDevice, uuid: Uuid128Bit) -> bool {
295         dbus_generated!()
296     }
297 
298     #[dbus_method("ConnectAllEnabledProfiles")]
connect_all_enabled_profiles(&mut self, device: BluetoothDevice) -> bool299     fn connect_all_enabled_profiles(&mut self, device: BluetoothDevice) -> bool {
300         dbus_generated!()
301     }
302 
303     #[dbus_method("DisconnectAllEnabledProfiles")]
disconnect_all_enabled_profiles(&mut self, device: BluetoothDevice) -> bool304     fn disconnect_all_enabled_profiles(&mut self, device: BluetoothDevice) -> bool {
305         dbus_generated!()
306     }
307 }
308