Loading system/gd/rust/linux/stack/src/battery_service.rs +10 −10 Original line number Diff line number Diff line Loading @@ -54,8 +54,8 @@ pub enum BatteryServiceActions { OnCharacteristicRead(String, GattStatus, i32, Vec<u8>), /// Params: addr, handle, value OnNotify(String, i32, Vec<u8>), /// Params: remote_device Connect(BluetoothDevice), /// Params: remote_device, transport Connect(BluetoothDevice, BtTransport), /// Params: remote_device Disconnect(BluetoothDevice), } Loading Loading @@ -227,8 +227,11 @@ impl BatteryService { }); } BatteryServiceActions::Connect(device) => { self.init_device(device.address); BatteryServiceActions::Connect(device, transport) => { if transport != BtTransport::Le { return; } self.init_device(device.address, transport); } BatteryServiceActions::Disconnect(device) => { Loading Loading @@ -256,7 +259,7 @@ impl BatteryService { battery_set.clone() } fn init_device(&self, remote_address: String) { fn init_device(&self, remote_address: String, transport: BtTransport) { let client_id = match self.client_id { Some(id) => id, None => return, Loading @@ -266,7 +269,7 @@ impl BatteryService { client_id, remote_address, false, BtTransport::Le, transport, false, LePhy::Phy1m, ); Loading Loading @@ -307,10 +310,7 @@ impl BatteryService { }; let handle = match self.handles.get(&remote_address) { Some(id) => *id, None => { self.init_device(remote_address); return true; } None => return false, }; self.gatt.lock().unwrap().read_characteristic(client_id, remote_address.clone(), handle, 0); true Loading system/gd/rust/linux/stack/src/bluetooth.rs +24 −2 Original line number Diff line number Diff line Loading @@ -1179,13 +1179,22 @@ impl BtifBluetoothCallbacks for Bluetooth { match state { BtAclState::Connected => { let bluetooth_device = found.info.clone(); let acl_reported_transport = found.acl_reported_transport.clone(); Bluetooth::send_metrics_remote_device_info(found); self.connection_callbacks.for_all_callbacks(|callback| { callback.on_device_connected(device.clone()); }); let tx = self.tx.clone(); let transport = match self.get_remote_type(bluetooth_device.clone()) { BtDeviceType::Bredr => BtTransport::Bredr, BtDeviceType::Ble => BtTransport::Le, _ => acl_reported_transport, }; tokio::spawn(async move { let _ = tx.send(Message::OnAclConnected(device.clone())).await; let _ = tx .send(Message::OnAclConnected(bluetooth_device, transport)) .await; }); } BtAclState::Disconnected => { Loading Loading @@ -1812,11 +1821,24 @@ impl IBluetooth for Bluetooth { Profile::Bas => { let tx = self.tx.clone(); let transport = match self.get_remote_device_if_found(&device.address) { Some(context) => context.acl_reported_transport, None => return false, }; let device_to_send = device.clone(); let transport = match self.get_remote_type(device.clone()) { BtDeviceType::Bredr => BtTransport::Bredr, BtDeviceType::Ble => BtTransport::Le, _ => transport, }; topstack::get_runtime().spawn(async move { let _ = tx .send(Message::BatteryService( BatteryServiceActions::Connect(device_to_send), BatteryServiceActions::Connect( device_to_send, transport, ), )) .await; }); Loading system/gd/rust/linux/stack/src/lib.rs +11 −17 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ use crate::bluetooth_media::{BluetoothMedia, MediaActions}; use crate::socket_manager::{BluetoothSocketManager, SocketActions}; use crate::suspend::Suspend; use bt_topshim::{ btif::{BaseCallbacks, BtDeviceType}, btif::{BaseCallbacks, BtTransport}, profiles::{ a2dp::A2dpCallbacks, avrcp::AvrcpCallbacks, gatt::GattAdvCallbacks, gatt::GattAdvInbandCallbacks, gatt::GattClientCallbacks, gatt::GattScannerCallbacks, Loading Loading @@ -84,7 +84,7 @@ pub enum Message { // Follows IBluetooth's on_device_(dis)connected callback but doesn't require depending on // Bluetooth. OnAclConnected(BluetoothDevice), OnAclConnected(BluetoothDevice, BtTransport), OnAclDisconnected(BluetoothDevice), // Suspend related Loading Loading @@ -239,27 +239,21 @@ impl Stack { // Any service needing an updated list of devices can have an // update method triggered from here rather than needing a // reference to Bluetooth. Message::OnAclConnected(device) => { let dev_type = bluetooth.lock().unwrap().get_remote_type(device.clone()); if dev_type == BtDeviceType::Ble { Message::OnAclConnected(device, transport) => { battery_service .lock() .unwrap() .handle_action(BatteryServiceActions::Connect(device)); } .handle_action(BatteryServiceActions::Connect(device, transport)); } // For battery service, use this to clean up internal handles. GATT connection is // already dropped if ACL disconnect has occurred. Message::OnAclDisconnected(device) => { let dev_type = bluetooth.lock().unwrap().get_remote_type(device.clone()); if dev_type == BtDeviceType::Ble { battery_service .lock() .unwrap() .handle_action(BatteryServiceActions::Disconnect(device)); } } Message::SuspendCallbackRegistered(id) => { suspend.lock().unwrap().callback_registered(id); Loading Loading
system/gd/rust/linux/stack/src/battery_service.rs +10 −10 Original line number Diff line number Diff line Loading @@ -54,8 +54,8 @@ pub enum BatteryServiceActions { OnCharacteristicRead(String, GattStatus, i32, Vec<u8>), /// Params: addr, handle, value OnNotify(String, i32, Vec<u8>), /// Params: remote_device Connect(BluetoothDevice), /// Params: remote_device, transport Connect(BluetoothDevice, BtTransport), /// Params: remote_device Disconnect(BluetoothDevice), } Loading Loading @@ -227,8 +227,11 @@ impl BatteryService { }); } BatteryServiceActions::Connect(device) => { self.init_device(device.address); BatteryServiceActions::Connect(device, transport) => { if transport != BtTransport::Le { return; } self.init_device(device.address, transport); } BatteryServiceActions::Disconnect(device) => { Loading Loading @@ -256,7 +259,7 @@ impl BatteryService { battery_set.clone() } fn init_device(&self, remote_address: String) { fn init_device(&self, remote_address: String, transport: BtTransport) { let client_id = match self.client_id { Some(id) => id, None => return, Loading @@ -266,7 +269,7 @@ impl BatteryService { client_id, remote_address, false, BtTransport::Le, transport, false, LePhy::Phy1m, ); Loading Loading @@ -307,10 +310,7 @@ impl BatteryService { }; let handle = match self.handles.get(&remote_address) { Some(id) => *id, None => { self.init_device(remote_address); return true; } None => return false, }; self.gatt.lock().unwrap().read_characteristic(client_id, remote_address.clone(), handle, 0); true Loading
system/gd/rust/linux/stack/src/bluetooth.rs +24 −2 Original line number Diff line number Diff line Loading @@ -1179,13 +1179,22 @@ impl BtifBluetoothCallbacks for Bluetooth { match state { BtAclState::Connected => { let bluetooth_device = found.info.clone(); let acl_reported_transport = found.acl_reported_transport.clone(); Bluetooth::send_metrics_remote_device_info(found); self.connection_callbacks.for_all_callbacks(|callback| { callback.on_device_connected(device.clone()); }); let tx = self.tx.clone(); let transport = match self.get_remote_type(bluetooth_device.clone()) { BtDeviceType::Bredr => BtTransport::Bredr, BtDeviceType::Ble => BtTransport::Le, _ => acl_reported_transport, }; tokio::spawn(async move { let _ = tx.send(Message::OnAclConnected(device.clone())).await; let _ = tx .send(Message::OnAclConnected(bluetooth_device, transport)) .await; }); } BtAclState::Disconnected => { Loading Loading @@ -1812,11 +1821,24 @@ impl IBluetooth for Bluetooth { Profile::Bas => { let tx = self.tx.clone(); let transport = match self.get_remote_device_if_found(&device.address) { Some(context) => context.acl_reported_transport, None => return false, }; let device_to_send = device.clone(); let transport = match self.get_remote_type(device.clone()) { BtDeviceType::Bredr => BtTransport::Bredr, BtDeviceType::Ble => BtTransport::Le, _ => transport, }; topstack::get_runtime().spawn(async move { let _ = tx .send(Message::BatteryService( BatteryServiceActions::Connect(device_to_send), BatteryServiceActions::Connect( device_to_send, transport, ), )) .await; }); Loading
system/gd/rust/linux/stack/src/lib.rs +11 −17 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ use crate::bluetooth_media::{BluetoothMedia, MediaActions}; use crate::socket_manager::{BluetoothSocketManager, SocketActions}; use crate::suspend::Suspend; use bt_topshim::{ btif::{BaseCallbacks, BtDeviceType}, btif::{BaseCallbacks, BtTransport}, profiles::{ a2dp::A2dpCallbacks, avrcp::AvrcpCallbacks, gatt::GattAdvCallbacks, gatt::GattAdvInbandCallbacks, gatt::GattClientCallbacks, gatt::GattScannerCallbacks, Loading Loading @@ -84,7 +84,7 @@ pub enum Message { // Follows IBluetooth's on_device_(dis)connected callback but doesn't require depending on // Bluetooth. OnAclConnected(BluetoothDevice), OnAclConnected(BluetoothDevice, BtTransport), OnAclDisconnected(BluetoothDevice), // Suspend related Loading Loading @@ -239,27 +239,21 @@ impl Stack { // Any service needing an updated list of devices can have an // update method triggered from here rather than needing a // reference to Bluetooth. Message::OnAclConnected(device) => { let dev_type = bluetooth.lock().unwrap().get_remote_type(device.clone()); if dev_type == BtDeviceType::Ble { Message::OnAclConnected(device, transport) => { battery_service .lock() .unwrap() .handle_action(BatteryServiceActions::Connect(device)); } .handle_action(BatteryServiceActions::Connect(device, transport)); } // For battery service, use this to clean up internal handles. GATT connection is // already dropped if ACL disconnect has occurred. Message::OnAclDisconnected(device) => { let dev_type = bluetooth.lock().unwrap().get_remote_type(device.clone()); if dev_type == BtDeviceType::Ble { battery_service .lock() .unwrap() .handle_action(BatteryServiceActions::Disconnect(device)); } } Message::SuspendCallbackRegistered(id) => { suspend.lock().unwrap().callback_registered(id); Loading