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

Commit ac5afb05 authored by Hsin-chen Chuang's avatar Hsin-chen Chuang
Browse files

BleScanner: SetScanParameters: Allow passing scan type from btif

GD API actually has the scan type argument but it's always passed a
0x01 (Active). This patch wires the API to btif thus allows Floss to
configure the parameter. In JNI, still hard-code it as 0x01.

Bug: 323979740
Tag: #floss
Test: mmm packages/modules/Bluetooth
Test: Manual test on Cherry/Tomato, no behavior change
Flag: EXEMPT, no behavior change on Android; Floss-only changes
Change-Id: I137ea5fed075e80fda7d5b0383b03001ac414852
parent ba211efa
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1551,8 +1551,8 @@ static void gattSetScanParametersNative(JNIEnv* /* env */, jobject /* object */,
                                        jint scan_window_unit) {
  if (!sGattIf) return;
  sGattIf->scanner->SetScanParameters(
      client_if, scan_interval_unit, scan_window_unit,
      base::Bind(&set_scan_params_cmpl_cb, client_if));
      client_if, /* use active scan */ 0x01, scan_interval_unit,
      scan_window_unit, base::Bind(&set_scan_params_cmpl_cb, client_if));
}

void scan_filter_param_cb(uint8_t client_if, uint8_t avbl_space, uint8_t action,
+24 −15
Original line number Diff line number Diff line
@@ -1189,20 +1189,26 @@ pub struct ScanSettings {
}

impl ScanSettings {
    fn extract_scan_parameters(self) -> Option<(u16, u16)> {
        let interval = u16::try_from(self.interval);
        if interval.is_err() {
            println!("Invalid scan interval {}", self.interval);
    fn extract_scan_parameters(self) -> Option<(u8, u16, u16)> {
        let scan_type = match self.scan_type {
            ScanType::Passive => 0x00,
            ScanType::Active => 0x01,
        };
        let interval = match u16::try_from(self.interval) {
            Ok(i) => i,
            Err(e) => {
                println!("Invalid scan interval {}: {}", self.interval, e);
                return None;
            }

        let window = u16::try_from(self.window);
        if window.is_err() {
            println!("Invalid scan window {}", self.window);
        };
        let window = match u16::try_from(self.window) {
            Ok(w) => w,
            Err(e) => {
                println!("Invalid scan window {}: {}", self.window, e);
                return None;
            }

        return Some((interval.unwrap(), window.unwrap()));
        };
        return Some((scan_type, interval, window));
    }
}

@@ -1357,9 +1363,12 @@ impl GattAsyncIntf {
            // toggle. Also improve toggling API into 1 operation that guarantees correct ordering.
            self.gatt.as_ref().unwrap().lock().unwrap().scanner.stop_scan();
            if let Some(settings) = scan_settings {
                if let Some((scan_interval, scan_window)) = settings.extract_scan_parameters() {
                if let Some((scan_type, scan_interval, scan_window)) =
                    settings.extract_scan_parameters()
                {
                    self.gatt.as_ref().unwrap().lock().unwrap().scanner.set_scan_parameters(
                        scanner_id,
                        scan_type,
                        scan_interval,
                        scan_window,
                    );
+1 −1
Original line number Diff line number Diff line
@@ -364,7 +364,7 @@ impl GattService for GattServiceImpl {

    fn set_scan_parameters(&mut self, ctx: RpcContext<'_>, _req: Empty, sink: UnarySink<Empty>) {
        let scanner = &mut self.gatt.lock().unwrap().scanner;
        scanner.set_scan_parameters(0, 0, 0);
        scanner.set_scan_parameters(0, 0, 0, 0);
        ctx.spawn(async move {
            sink.success(Empty::default()).await.unwrap();
        })
+3 −1
Original line number Diff line number Diff line
@@ -272,9 +272,11 @@ void BleScannerIntf::MsftAdvMonitorEnable(uint32_t call_id, bool enable) {
      enable, base::Bind(&BleScannerIntf::OnMsftAdvMonitorEnableCallback, base::Unretained(this), call_id));
}

void BleScannerIntf::SetScanParameters(uint8_t scanner_id, uint16_t scan_interval, uint16_t scan_window) {
void BleScannerIntf::SetScanParameters(
    uint8_t scanner_id, uint8_t scan_type, uint16_t scan_interval, uint16_t scan_window) {
  scanner_intf_->SetScanParameters(
      scanner_id,
      scan_type,
      scan_interval,
      scan_window,
      base::Bind(&BleScannerIntf::OnStatusCallback, base::Unretained(this), scanner_id));
+2 −1
Original line number Diff line number Diff line
@@ -117,7 +117,8 @@ class BleScannerIntf : public ScanningCallbacks {

  // Sets the LE scan interval and window in units of N * 0.625 msec. The result
  // of this action is returned via |OnStatusCallback|.
  void SetScanParameters(uint8_t scanner_id, uint16_t scan_interval, uint16_t scan_window);
  void SetScanParameters(
      uint8_t scanner_id, uint8_t scan_type, uint16_t scan_interval, uint16_t scan_window);

  // Configure the batchscan storage and get a response via |OnStatusCallback|.
  void BatchscanConfigStorage(
Loading