Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 96030897 authored by Sonny Sasaka's avatar Sonny Sasaka Committed by Automerger Merge Worker
Browse files

Merge "Floss: Wire GattScannerInbandCallbacks" am: 26714b5d am: 02cbc0b6 am: b4eb4342

parents 90c09eb2 b4eb4342
Loading
Loading
Loading
Loading
+195 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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(),
@@ -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| {
@@ -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,
        );
@@ -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!(
+7 −1
Original line number Diff line number Diff line
@@ -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,
    },
};

@@ -45,6 +46,7 @@ pub enum Message {
    GattClient(GattClientCallbacks),
    GattServer(GattServerCallbacks),
    LeScanner(GattScannerCallbacks),
    LeScannerInband(GattScannerInbandCallbacks),
    LeAdvInband(GattAdvInbandCallbacks),
    LeAdv(GattAdvCallbacks),
    HidHost(HHCallbacks),
@@ -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);
                }
+7 −1
Original line number Diff line number Diff line
@@ -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::{
@@ -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);
+7 −0
Original line number Diff line number Diff line
@@ -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 {
@@ -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()