extern crate bt_shim; use bt_topshim::btif::{BtDeviceType, BtSspVariant, BtTransport, Uuid128Bit}; use btstack::bluetooth::{ BluetoothDevice, IBluetooth, IBluetoothCallback, IBluetoothConnectionCallback, }; use btstack::uuid::Profile; use btstack::RPCProxy; use dbus::arg::RefArg; use dbus::nonblock::SyncConnection; use dbus::strings::Path; use dbus_macros::{dbus_method, dbus_propmap, dbus_proxy_obj, generate_dbus_exporter}; use dbus_projection::DisconnectWatcher; use dbus_projection::{dbus_generated, impl_dbus_arg_enum}; use num_traits::cast::{FromPrimitive, ToPrimitive}; use std::sync::Arc; use crate::dbus_arg::{DBusArg, DBusArgError, RefArgToRust}; #[dbus_propmap(BluetoothDevice)] pub struct BluetoothDeviceDBus { address: String, name: String, } #[allow(dead_code)] struct BluetoothCallbackDBus {} #[dbus_proxy_obj(BluetoothCallback, "org.chromium.bluetooth.BluetoothCallback")] impl IBluetoothCallback for BluetoothCallbackDBus { #[dbus_method("OnAddressChanged")] fn on_address_changed(&self, addr: String) { dbus_generated!() } #[dbus_method("OnNameChanged")] fn on_name_changed(&self, name: String) { dbus_generated!() } #[dbus_method("OnDiscoverableChanged")] fn on_discoverable_changed(&self, discoverable: bool) { dbus_generated!() } #[dbus_method("OnDeviceFound")] fn on_device_found(&self, remote_device: BluetoothDevice) { dbus_generated!() } #[dbus_method("OnDeviceCleared")] fn on_device_cleared(&self, remote_device: BluetoothDevice) { dbus_generated!() } #[dbus_method("OnDiscoveringChanged")] fn on_discovering_changed(&self, discovering: bool) { dbus_generated!() } #[dbus_method("OnSspRequest")] fn on_ssp_request( &self, remote_device: BluetoothDevice, cod: u32, variant: BtSspVariant, passkey: u32, ) { dbus_generated!() } #[dbus_method("OnBondStateChanged")] fn on_bond_state_changed(&self, status: u32, address: String, state: u32) { dbus_generated!() } } impl_dbus_arg_enum!(BtDeviceType); impl_dbus_arg_enum!(BtSspVariant); impl_dbus_arg_enum!(BtTransport); impl_dbus_arg_enum!(Profile); #[allow(dead_code)] struct BluetoothConnectionCallbackDBus {} #[dbus_proxy_obj(BluetoothConnectionCallback, "org.chromium.bluetooth.BluetoothConnectionCallback")] impl IBluetoothConnectionCallback for BluetoothConnectionCallbackDBus { #[dbus_method("OnDeviceConnected")] fn on_device_connected(&self, remote_device: BluetoothDevice) { dbus_generated!() } #[dbus_method("OnDeviceDisconnected")] fn on_device_disconnected(&self, remote_device: BluetoothDevice) { dbus_generated!() } } #[allow(dead_code)] struct IBluetoothDBus {} #[generate_dbus_exporter(export_bluetooth_dbus_obj, "org.chromium.bluetooth.Bluetooth")] impl IBluetooth for IBluetoothDBus { #[dbus_method("RegisterCallback")] fn register_callback(&mut self, callback: Box) { dbus_generated!() } #[dbus_method("RegisterConnectionCallback")] fn register_connection_callback( &mut self, callback: Box, ) -> u32 { dbus_generated!() } #[dbus_method("UnregisterConnectionCallback")] fn unregister_connection_callback(&mut self, id: u32) -> bool { dbus_generated!() } // Not exposed over D-Bus. The stack is automatically enabled when the daemon starts. fn enable(&mut self) -> bool { dbus_generated!() } // Not exposed over D-Bus. The stack is automatically disabled when the daemon exits. // TODO(b/189495858): Handle shutdown properly when SIGTERM is received. fn disable(&mut self) -> bool { dbus_generated!() } #[dbus_method("GetAddress")] fn get_address(&self) -> String { dbus_generated!() } #[dbus_method("GetUuids")] fn get_uuids(&self) -> Vec { dbus_generated!() } #[dbus_method("GetName")] fn get_name(&self) -> String { dbus_generated!() } #[dbus_method("SetName")] fn set_name(&self, name: String) -> bool { dbus_generated!() } #[dbus_method("GetBluetoothClass")] fn get_bluetooth_class(&self) -> u32 { dbus_generated!() } #[dbus_method("SetBluetoothClass")] fn set_bluetooth_class(&self, cod: u32) -> bool { dbus_generated!() } #[dbus_method("GetDiscoverable")] fn get_discoverable(&self) -> bool { dbus_generated!() } #[dbus_method("GetDiscoverableTimeout")] fn get_discoverable_timeout(&self) -> u32 { dbus_generated!() } #[dbus_method("SetDiscoverable")] fn set_discoverable(&self, mode: bool, duration: u32) -> bool { dbus_generated!() } #[dbus_method("IsMultiAdvertisementSupported")] fn is_multi_advertisement_supported(&self) -> bool { dbus_generated!() } #[dbus_method("IsLeExtendedAdvertisingSupported")] fn is_le_extended_advertising_supported(&self) -> bool { dbus_generated!() } #[dbus_method("StartDiscovery")] fn start_discovery(&self) -> bool { dbus_generated!() } #[dbus_method("CancelDiscovery")] fn cancel_discovery(&self) -> bool { dbus_generated!() } #[dbus_method("IsDiscovering")] fn is_discovering(&self) -> bool { dbus_generated!() } #[dbus_method("GetDiscoveryEndMillis")] fn get_discovery_end_millis(&self) -> u64 { dbus_generated!() } #[dbus_method("CreateBond")] fn create_bond(&self, device: BluetoothDevice, transport: BtTransport) -> bool { dbus_generated!() } #[dbus_method("CancelBondProcess")] fn cancel_bond_process(&self, device: BluetoothDevice) -> bool { dbus_generated!() } #[dbus_method("RemoveBond")] fn remove_bond(&self, device: BluetoothDevice) -> bool { dbus_generated!() } #[dbus_method("GetBondedDevices")] fn get_bonded_devices(&self) -> Vec { dbus_generated!() } #[dbus_method("GetBondState")] fn get_bond_state(&self, device: BluetoothDevice) -> u32 { dbus_generated!() } #[dbus_method("SetPin")] fn set_pin(&self, device: BluetoothDevice, accept: bool, pin_code: Vec) -> bool { dbus_generated!() } #[dbus_method("SetPasskey")] fn set_passkey(&self, device: BluetoothDevice, accept: bool, passkey: Vec) -> bool { dbus_generated!() } #[dbus_method("SetPairingConfirmation")] fn set_pairing_confirmation(&self, device: BluetoothDevice, accept: bool) -> bool { dbus_generated!() } #[dbus_method("GetRemoteName")] fn get_remote_name(&self, _device: BluetoothDevice) -> String { dbus_generated!() } #[dbus_method("GetRemoteType")] fn get_remote_type(&self, _device: BluetoothDevice) -> BtDeviceType { dbus_generated!() } #[dbus_method("GetRemoteAlias")] fn get_remote_alias(&self, _device: BluetoothDevice) -> String { dbus_generated!() } #[dbus_method("SetRemoteAlias")] fn set_remote_alias(&mut self, _device: BluetoothDevice, new_alias: String) { dbus_generated!() } #[dbus_method("GetRemoteClass")] fn get_remote_class(&self, _device: BluetoothDevice) -> u32 { dbus_generated!() } #[dbus_method("GetConnectionState")] fn get_connection_state(&self, device: BluetoothDevice) -> u32 { dbus_generated!() } #[dbus_method("GetProfileConnectionState")] fn get_profile_connection_state(&self, profile: Profile) -> u32 { dbus_generated!() } #[dbus_method("GetRemoteUuids")] fn get_remote_uuids(&self, device: BluetoothDevice) -> Vec { dbus_generated!() } #[dbus_method("FetchRemoteUuids")] fn fetch_remote_uuids(&self, device: BluetoothDevice) -> bool { dbus_generated!() } #[dbus_method("SdpSearch")] fn sdp_search(&self, device: BluetoothDevice, uuid: Uuid128Bit) -> bool { dbus_generated!() } #[dbus_method("ConnectAllEnabledProfiles")] fn connect_all_enabled_profiles(&mut self, device: BluetoothDevice) -> bool { dbus_generated!() } #[dbus_method("DisconnectAllEnabledProfiles")] fn disconnect_all_enabled_profiles(&mut self, device: BluetoothDevice) -> bool { dbus_generated!() } }