Loading system/gd/rust/linux/stack/src/bluetooth_gatt.rs +195 −1 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ use bt_topshim::profiles::gatt::{ BtGattDbElement, BtGattNotifyParams, BtGattReadParams, Gatt, GattAdvCallbacks, GattAdvCallbacksDispatcher, GattAdvInbandCallbacksDispatcher, GattClientCallbacks, GattClientCallbacksDispatcher, GattScannerCallbacks, GattScannerCallbacksDispatcher, GattScannerInbandCallbacks, GattScannerInbandCallbacksDispatcher, GattServerCallbacksDispatcher, GattStatus, }; use bt_topshim::topstack; Loading Loading @@ -704,7 +705,7 @@ impl BluetoothGatt { /// Constructs a new IBluetoothGatt implementation. pub fn new(intf: Arc<Mutex<BluetoothInterface>>, tx: Sender<Message>) -> BluetoothGatt { BluetoothGatt { intf: intf, intf, gatt: None, adapter: None, context_map: ContextMap::new(), Loading Loading @@ -747,6 +748,16 @@ impl BluetoothGatt { }), }; let tx_clone = tx.clone(); let gatt_scanner_inband_callbacks_dispatcher = GattScannerInbandCallbacksDispatcher { dispatch: Box::new(move |cb| { let tx_clone = tx_clone.clone(); topstack::get_runtime().spawn(async move { let _ = tx_clone.send(Message::LeScannerInband(cb)).await; }); }), }; let tx_clone = tx.clone(); let gatt_adv_inband_callbacks_dispatcher = GattAdvInbandCallbacksDispatcher { dispatch: Box::new(move |cb| { Loading @@ -771,6 +782,7 @@ impl BluetoothGatt { gatt_client_callbacks_dispatcher, gatt_server_callbacks_dispatcher, gatt_scanner_callbacks_dispatcher, gatt_scanner_inband_callbacks_dispatcher, gatt_adv_inband_callbacks_dispatcher, gatt_adv_callbacks_dispatcher, ); Loading Loading @@ -2074,6 +2086,188 @@ pub(crate) trait BtifGattScannerCallbacks { ); } #[btif_callbacks_dispatcher( BluetoothGatt, dispatch_le_scanner_inband_callbacks, GattScannerInbandCallbacks )] pub(crate) trait BtifGattScannerInbandCallbacks { #[btif_callback(RegisterCallback)] fn inband_register_callback(&mut self, app_uuid: Uuid, scanner_id: u8, btm_status: u8); #[btif_callback(StatusCallback)] fn inband_status_callback(&mut self, scanner_id: u8, btm_status: u8); #[btif_callback(EnableCallback)] fn inband_enable_callback(&mut self, action: u8, btm_status: u8); #[btif_callback(FilterParamSetupCallback)] fn inband_filter_param_setup_callback( &mut self, scanner_id: u8, available_space: u8, action_type: u8, btm_status: u8, ); #[btif_callback(FilterConfigCallback)] fn inband_filter_config_callback( &mut self, filter_index: u8, filter_type: u8, available_space: u8, action: u8, btm_status: u8, ); #[btif_callback(StartSyncCallback)] fn inband_start_sync_callback( &mut self, status: u8, sync_handle: u16, advertising_sid: u8, address_type: u8, address: RawAddress, phy: u8, interval: u16, ); #[btif_callback(SyncReportCallback)] fn inband_sync_report_callback( &mut self, sync_handle: u16, tx_power: i8, rssi: i8, status: u8, data: Vec<u8>, ); #[btif_callback(SyncLostCallback)] fn inband_sync_lost_callback(&mut self, sync_handle: u16); #[btif_callback(SyncTransferCallback)] fn inband_sync_transfer_callback(&mut self, status: u8, address: RawAddress); } impl BtifGattScannerInbandCallbacks for BluetoothGatt { fn inband_register_callback(&mut self, app_uuid: Uuid, scanner_id: u8, btm_status: u8) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::RegisterCallback(app_uuid, scanner_id, btm_status) ); } fn inband_status_callback(&mut self, scanner_id: u8, btm_status: u8) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::StatusCallback(scanner_id, btm_status) ); } fn inband_enable_callback(&mut self, action: u8, btm_status: u8) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::EnableCallback(action, btm_status) ); } fn inband_filter_param_setup_callback( &mut self, scanner_id: u8, available_space: u8, action_type: u8, btm_status: u8, ) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::FilterParamSetupCallback( scanner_id, available_space, action_type, btm_status ) ); } fn inband_filter_config_callback( &mut self, filter_index: u8, filter_type: u8, available_space: u8, action: u8, btm_status: u8, ) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::FilterConfigCallback( filter_index, filter_type, available_space, action, btm_status, ) ); } fn inband_start_sync_callback( &mut self, status: u8, sync_handle: u16, advertising_sid: u8, address_type: u8, address: RawAddress, phy: u8, interval: u16, ) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::StartSyncCallback( status, sync_handle, advertising_sid, address_type, address, phy, interval, ) ); } fn inband_sync_report_callback( &mut self, sync_handle: u16, tx_power: i8, rssi: i8, status: u8, data: Vec<u8>, ) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::SyncReportCallback( sync_handle, tx_power, rssi, status, data ) ); } fn inband_sync_lost_callback(&mut self, sync_handle: u16) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::SyncLostCallback(sync_handle,) ); } fn inband_sync_transfer_callback(&mut self, status: u8, address: RawAddress) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::SyncTransferCallback(status, address) ); } } impl BtifGattScannerCallbacks for BluetoothGatt { fn on_scanner_registered(&mut self, uuid: Uuid, scanner_id: u8, status: GattStatus) { log::debug!( Loading system/gd/rust/linux/stack/src/lib.rs +7 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,8 @@ use bt_topshim::{ profiles::{ a2dp::A2dpCallbacks, avrcp::AvrcpCallbacks, gatt::GattAdvCallbacks, gatt::GattAdvInbandCallbacks, gatt::GattClientCallbacks, gatt::GattScannerCallbacks, gatt::GattServerCallbacks, hfp::HfpCallbacks, hid_host::HHCallbacks, sdp::SdpCallbacks, gatt::GattScannerInbandCallbacks, gatt::GattServerCallbacks, hfp::HfpCallbacks, hid_host::HHCallbacks, sdp::SdpCallbacks, }, }; Loading @@ -45,6 +46,7 @@ pub enum Message { GattClient(GattClientCallbacks), GattServer(GattServerCallbacks), LeScanner(GattScannerCallbacks), LeScannerInband(GattScannerInbandCallbacks), LeAdvInband(GattAdvInbandCallbacks), LeAdv(GattAdvCallbacks), HidHost(HHCallbacks), Loading Loading @@ -128,6 +130,10 @@ impl Stack { bluetooth_gatt.lock().unwrap().dispatch_le_scanner_callbacks(m); } Message::LeScannerInband(m) => { bluetooth_gatt.lock().unwrap().dispatch_le_scanner_inband_callbacks(m); } Message::LeAdvInband(m) => { debug!("Received LeAdvInband message: {:?}. This is unexpected!", m); } Loading system/gd/rust/topshim/facade/src/gatt_service.rs +7 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,8 @@ use bt_topshim::profiles::gatt::{ }; use bt_topshim::profiles::gatt::{ GattAdvCallbacksDispatcher, GattAdvInbandCallbacksDispatcher, GattClientCallbacksDispatcher, GattScannerCallbacksDispatcher, GattServerCallbacksDispatcher, GattScannerCallbacksDispatcher, GattScannerInbandCallbacksDispatcher, GattServerCallbacksDispatcher, }; use bt_topshim_facade_protobuf::empty::Empty; //use bt_topshim_facade_protobuf::facade::{ Loading Loading @@ -68,6 +69,11 @@ impl GattServiceImpl { println!("received Gatt scanner callback: {:?}", cb); }), }, GattScannerInbandCallbacksDispatcher { dispatch: Box::new(move |cb| { println!("received Gatt scanner inband callback: {:?}", cb); }), }, GattAdvInbandCallbacksDispatcher { dispatch: Box::new(move |cb| { println!("received Gatt advertiser inband callback: {:?}", cb); Loading system/gd/rust/topshim/src/profiles/gatt.rs +7 −0 Original line number Diff line number Diff line Loading @@ -1648,6 +1648,7 @@ impl Gatt { gatt_client_callbacks_dispatcher: GattClientCallbacksDispatcher, gatt_server_callbacks_dispatcher: GattServerCallbacksDispatcher, gatt_scanner_callbacks_dispatcher: GattScannerCallbacksDispatcher, gatt_scanner_inband_callbacks_dispatcher: GattScannerInbandCallbacksDispatcher, gatt_adv_inband_callbacks_dispatcher: GattAdvInbandCallbacksDispatcher, gatt_adv_callbacks_dispatcher: GattAdvCallbacksDispatcher, ) -> bool { Loading Loading @@ -1676,6 +1677,12 @@ impl Gatt { panic!("Tried to set dispatcher for GattScannerCallbacks but it already existed"); } if get_dispatchers().lock().unwrap().set::<GDScannerInbandCb>(Arc::new(Mutex::new( gatt_scanner_inband_callbacks_dispatcher, ))) { panic!("Tried to set dispatcher for GattScannerInbandCallbacks but it already existed"); } if get_dispatchers() .lock() .unwrap() Loading Loading
system/gd/rust/linux/stack/src/bluetooth_gatt.rs +195 −1 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ use bt_topshim::profiles::gatt::{ BtGattDbElement, BtGattNotifyParams, BtGattReadParams, Gatt, GattAdvCallbacks, GattAdvCallbacksDispatcher, GattAdvInbandCallbacksDispatcher, GattClientCallbacks, GattClientCallbacksDispatcher, GattScannerCallbacks, GattScannerCallbacksDispatcher, GattScannerInbandCallbacks, GattScannerInbandCallbacksDispatcher, GattServerCallbacksDispatcher, GattStatus, }; use bt_topshim::topstack; Loading Loading @@ -704,7 +705,7 @@ impl BluetoothGatt { /// Constructs a new IBluetoothGatt implementation. pub fn new(intf: Arc<Mutex<BluetoothInterface>>, tx: Sender<Message>) -> BluetoothGatt { BluetoothGatt { intf: intf, intf, gatt: None, adapter: None, context_map: ContextMap::new(), Loading Loading @@ -747,6 +748,16 @@ impl BluetoothGatt { }), }; let tx_clone = tx.clone(); let gatt_scanner_inband_callbacks_dispatcher = GattScannerInbandCallbacksDispatcher { dispatch: Box::new(move |cb| { let tx_clone = tx_clone.clone(); topstack::get_runtime().spawn(async move { let _ = tx_clone.send(Message::LeScannerInband(cb)).await; }); }), }; let tx_clone = tx.clone(); let gatt_adv_inband_callbacks_dispatcher = GattAdvInbandCallbacksDispatcher { dispatch: Box::new(move |cb| { Loading @@ -771,6 +782,7 @@ impl BluetoothGatt { gatt_client_callbacks_dispatcher, gatt_server_callbacks_dispatcher, gatt_scanner_callbacks_dispatcher, gatt_scanner_inband_callbacks_dispatcher, gatt_adv_inband_callbacks_dispatcher, gatt_adv_callbacks_dispatcher, ); Loading Loading @@ -2074,6 +2086,188 @@ pub(crate) trait BtifGattScannerCallbacks { ); } #[btif_callbacks_dispatcher( BluetoothGatt, dispatch_le_scanner_inband_callbacks, GattScannerInbandCallbacks )] pub(crate) trait BtifGattScannerInbandCallbacks { #[btif_callback(RegisterCallback)] fn inband_register_callback(&mut self, app_uuid: Uuid, scanner_id: u8, btm_status: u8); #[btif_callback(StatusCallback)] fn inband_status_callback(&mut self, scanner_id: u8, btm_status: u8); #[btif_callback(EnableCallback)] fn inband_enable_callback(&mut self, action: u8, btm_status: u8); #[btif_callback(FilterParamSetupCallback)] fn inband_filter_param_setup_callback( &mut self, scanner_id: u8, available_space: u8, action_type: u8, btm_status: u8, ); #[btif_callback(FilterConfigCallback)] fn inband_filter_config_callback( &mut self, filter_index: u8, filter_type: u8, available_space: u8, action: u8, btm_status: u8, ); #[btif_callback(StartSyncCallback)] fn inband_start_sync_callback( &mut self, status: u8, sync_handle: u16, advertising_sid: u8, address_type: u8, address: RawAddress, phy: u8, interval: u16, ); #[btif_callback(SyncReportCallback)] fn inband_sync_report_callback( &mut self, sync_handle: u16, tx_power: i8, rssi: i8, status: u8, data: Vec<u8>, ); #[btif_callback(SyncLostCallback)] fn inband_sync_lost_callback(&mut self, sync_handle: u16); #[btif_callback(SyncTransferCallback)] fn inband_sync_transfer_callback(&mut self, status: u8, address: RawAddress); } impl BtifGattScannerInbandCallbacks for BluetoothGatt { fn inband_register_callback(&mut self, app_uuid: Uuid, scanner_id: u8, btm_status: u8) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::RegisterCallback(app_uuid, scanner_id, btm_status) ); } fn inband_status_callback(&mut self, scanner_id: u8, btm_status: u8) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::StatusCallback(scanner_id, btm_status) ); } fn inband_enable_callback(&mut self, action: u8, btm_status: u8) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::EnableCallback(action, btm_status) ); } fn inband_filter_param_setup_callback( &mut self, scanner_id: u8, available_space: u8, action_type: u8, btm_status: u8, ) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::FilterParamSetupCallback( scanner_id, available_space, action_type, btm_status ) ); } fn inband_filter_config_callback( &mut self, filter_index: u8, filter_type: u8, available_space: u8, action: u8, btm_status: u8, ) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::FilterConfigCallback( filter_index, filter_type, available_space, action, btm_status, ) ); } fn inband_start_sync_callback( &mut self, status: u8, sync_handle: u16, advertising_sid: u8, address_type: u8, address: RawAddress, phy: u8, interval: u16, ) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::StartSyncCallback( status, sync_handle, advertising_sid, address_type, address, phy, interval, ) ); } fn inband_sync_report_callback( &mut self, sync_handle: u16, tx_power: i8, rssi: i8, status: u8, data: Vec<u8>, ) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::SyncReportCallback( sync_handle, tx_power, rssi, status, data ) ); } fn inband_sync_lost_callback(&mut self, sync_handle: u16) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::SyncLostCallback(sync_handle,) ); } fn inband_sync_transfer_callback(&mut self, status: u8, address: RawAddress) { log::debug!( "Callback received: {:#?}", GattScannerInbandCallbacks::SyncTransferCallback(status, address) ); } } impl BtifGattScannerCallbacks for BluetoothGatt { fn on_scanner_registered(&mut self, uuid: Uuid, scanner_id: u8, status: GattStatus) { log::debug!( Loading
system/gd/rust/linux/stack/src/lib.rs +7 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,8 @@ use bt_topshim::{ profiles::{ a2dp::A2dpCallbacks, avrcp::AvrcpCallbacks, gatt::GattAdvCallbacks, gatt::GattAdvInbandCallbacks, gatt::GattClientCallbacks, gatt::GattScannerCallbacks, gatt::GattServerCallbacks, hfp::HfpCallbacks, hid_host::HHCallbacks, sdp::SdpCallbacks, gatt::GattScannerInbandCallbacks, gatt::GattServerCallbacks, hfp::HfpCallbacks, hid_host::HHCallbacks, sdp::SdpCallbacks, }, }; Loading @@ -45,6 +46,7 @@ pub enum Message { GattClient(GattClientCallbacks), GattServer(GattServerCallbacks), LeScanner(GattScannerCallbacks), LeScannerInband(GattScannerInbandCallbacks), LeAdvInband(GattAdvInbandCallbacks), LeAdv(GattAdvCallbacks), HidHost(HHCallbacks), Loading Loading @@ -128,6 +130,10 @@ impl Stack { bluetooth_gatt.lock().unwrap().dispatch_le_scanner_callbacks(m); } Message::LeScannerInband(m) => { bluetooth_gatt.lock().unwrap().dispatch_le_scanner_inband_callbacks(m); } Message::LeAdvInband(m) => { debug!("Received LeAdvInband message: {:?}. This is unexpected!", m); } Loading
system/gd/rust/topshim/facade/src/gatt_service.rs +7 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,8 @@ use bt_topshim::profiles::gatt::{ }; use bt_topshim::profiles::gatt::{ GattAdvCallbacksDispatcher, GattAdvInbandCallbacksDispatcher, GattClientCallbacksDispatcher, GattScannerCallbacksDispatcher, GattServerCallbacksDispatcher, GattScannerCallbacksDispatcher, GattScannerInbandCallbacksDispatcher, GattServerCallbacksDispatcher, }; use bt_topshim_facade_protobuf::empty::Empty; //use bt_topshim_facade_protobuf::facade::{ Loading Loading @@ -68,6 +69,11 @@ impl GattServiceImpl { println!("received Gatt scanner callback: {:?}", cb); }), }, GattScannerInbandCallbacksDispatcher { dispatch: Box::new(move |cb| { println!("received Gatt scanner inband callback: {:?}", cb); }), }, GattAdvInbandCallbacksDispatcher { dispatch: Box::new(move |cb| { println!("received Gatt advertiser inband callback: {:?}", cb); Loading
system/gd/rust/topshim/src/profiles/gatt.rs +7 −0 Original line number Diff line number Diff line Loading @@ -1648,6 +1648,7 @@ impl Gatt { gatt_client_callbacks_dispatcher: GattClientCallbacksDispatcher, gatt_server_callbacks_dispatcher: GattServerCallbacksDispatcher, gatt_scanner_callbacks_dispatcher: GattScannerCallbacksDispatcher, gatt_scanner_inband_callbacks_dispatcher: GattScannerInbandCallbacksDispatcher, gatt_adv_inband_callbacks_dispatcher: GattAdvInbandCallbacksDispatcher, gatt_adv_callbacks_dispatcher: GattAdvCallbacksDispatcher, ) -> bool { Loading Loading @@ -1676,6 +1677,12 @@ impl Gatt { panic!("Tried to set dispatcher for GattScannerCallbacks but it already existed"); } if get_dispatchers().lock().unwrap().set::<GDScannerInbandCb>(Arc::new(Mutex::new( gatt_scanner_inband_callbacks_dispatcher, ))) { panic!("Tried to set dispatcher for GattScannerInbandCallbacks but it already existed"); } if get_dispatchers() .lock() .unwrap() Loading