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

Commit e94c97f8 authored by Brian Delwiche's avatar Brian Delwiche Committed by Automerger Merge Worker
Browse files

Merge "Plumb PHY settings down to native layer" into main am: 60966263

parents 92d41d61 60966263
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -1546,11 +1546,12 @@ void set_scan_params_cmpl_cb(int client_if, uint8_t status) {

static void gattSetScanParametersNative(JNIEnv* /* env */, jobject /* object */,
                                        jint client_if, jint scan_interval_unit,
                                        jint scan_window_unit) {
                                        jint scan_window_unit, jint scan_phy) {
  if (!sGattIf) return;
  sGattIf->scanner->SetScanParameters(
      client_if, /* use active scan */ 0x01, scan_interval_unit,
      scan_window_unit, base::Bind(&set_scan_params_cmpl_cb, client_if));
      scan_window_unit, scan_phy,
      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,
@@ -2615,7 +2616,7 @@ static int register_com_android_bluetooth_gatt_scan(JNIEnv* env) {
       (void*)gattClientScanFilterClearNative},
      {"gattClientScanFilterEnableNative", "(IZ)V",
       (void*)gattClientScanFilterEnableNative},
      {"gattSetScanParametersNative", "(III)V",
      {"gattSetScanParametersNative", "(IIII)V",
       (void*)gattSetScanParametersNative},
  };
  const int result = REGISTER_NATIVE_METHODS(
+11 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.RequiresPermission;
import android.app.ActivityManager;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.le.ScanCallback;
import android.bluetooth.le.ScanFilter;
@@ -1091,6 +1092,7 @@ public class ScanManager {
                    // convert scanWindow and scanInterval from ms to LE scan units(0.625ms)
                    int scanWindow = Utils.millsToUnit(scanWindowMs);
                    int scanInterval = Utils.millsToUnit(scanIntervalMs);
                    int scanPhy = getScanPhy(client.settings);
                    mNativeInterface.gattClientScan(false);
                    if (!AppScanStats.recordScanRadioStop()) {
                        Log.w(TAG, "There is no scan radio to stop");
@@ -1103,8 +1105,8 @@ public class ScanManager {
                                + ", in scan unit: " + scanInterval + " / " + scanWindow + " )"
                                + client);
                    }
                    mNativeInterface.gattSetScanParameters(client.scannerId, scanInterval,
                            scanWindow);
                    mNativeInterface.gattSetScanParameters(
                            client.scannerId, scanInterval, scanWindow, scanPhy);
                    mNativeInterface.gattClientScan(true);
                    if (!AppScanStats.recordScanRadioStart(curScanSetting)) {
                        Log.w(TAG, "Scan radio already started");
@@ -1789,6 +1791,13 @@ public class ScanManager {
            }
        }

        private int getScanPhy(ScanSettings settings) {
            if (settings == null) {
                return BluetoothDevice.PHY_LE_1M;
            }
            return settings.getPhy();
        }

        private int getOnFoundOnLostTimeoutMillis(ScanSettings settings, boolean onFound) {
            int factor;
            int timeout = ONLOST_ONFOUND_BASE_TIMEOUT_MS;
+7 −7
Original line number Diff line number Diff line
@@ -78,8 +78,10 @@ public class ScanNativeInterface {
    private native void registerScannerNative(long appUuidLsb, long appUuidMsb);
    private native void unregisterScannerNative(int scannerId);
    private native void gattClientScanNative(boolean start);
    private native void gattSetScanParametersNative(int clientIf, int scanInterval,
            int scanWindow);

    private native void gattSetScanParametersNative(
            int clientIf, int scanInterval, int scanWindow, int scanPhy);

    /************************** Filter related native methods ********************************/
    private native void gattClientScanFilterAddNative(int clientId,
            ScanFilterQueue.Entry[] entries, int filterIndex);
@@ -119,11 +121,9 @@ public class ScanNativeInterface {
        gattClientScanNative(start);
    }

    /**
     * Configure BLE scan parameters
     */
    public void gattSetScanParameters(int clientIf, int scanInterval, int scanWindow) {
        gattSetScanParametersNative(clientIf, scanInterval, scanWindow);
    /** Configure BLE scan parameters */
    public void gattSetScanParameters(int clientIf, int scanInterval, int scanWindow, int scanPhy) {
        gattSetScanParametersNative(clientIf, scanInterval, scanWindow, scanPhy);
    }

    /**
+53 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
@@ -305,6 +306,22 @@ public class ScanManagerTest {
        return scanSettings;
    }

    private ScanSettings createScanSettingsWithPhy(int scanMode, int phy) {
        ScanSettings scanSettings;
        scanSettings = new ScanSettings.Builder().setScanMode(scanMode).setPhy(phy).build();

        return scanSettings;
    }

    private ScanClient createScanClientWithPhy(
            int id, boolean isFiltered, boolean isEmptyFilter, int scanMode, int phy) {
        List<ScanFilter> scanFilterList = createScanFilterList(isFiltered, isEmptyFilter);
        ScanSettings scanSettings = createScanSettingsWithPhy(scanMode, phy);

        ScanClient client = new ScanClient(id, scanSettings, scanFilterList);
        return client;
    }

    private Message createStartStopScanMessage(boolean isStartScan, Object obj) {
        Message message = new Message();
        message.what = isStartScan ? ScanManager.MSG_START_BLE_SCAN : ScanManager.MSG_STOP_BLE_SCAN;
@@ -1519,4 +1536,40 @@ public class ScanManagerTest {
        TestUtils.waitForLooperToFinishScheduledTask(mHandler.getLooper());
        assertThat(mScanManager.mProfilesConnecting).isEqualTo(3);
    }

    @Test
    public void testSetScanPhy() {
        final boolean isFiltered = false;
        final boolean isEmptyFilter = false;
        // Set scan mode map {original scan mode (ScanMode) : expected scan mode (expectedScanMode)}
        SparseIntArray scanModeMap = new SparseIntArray();
        scanModeMap.put(SCAN_MODE_LOW_POWER, SCAN_MODE_LOW_POWER);
        scanModeMap.put(SCAN_MODE_BALANCED, SCAN_MODE_BALANCED);
        scanModeMap.put(SCAN_MODE_LOW_LATENCY, SCAN_MODE_LOW_LATENCY);
        scanModeMap.put(SCAN_MODE_AMBIENT_DISCOVERY, SCAN_MODE_AMBIENT_DISCOVERY);

        for (int i = 0; i < scanModeMap.size(); i++) {
            int phy = 2;
            int ScanMode = scanModeMap.keyAt(i);
            int expectedScanMode = scanModeMap.get(ScanMode);
            Log.d(
                    TAG,
                    "ScanMode: "
                            + String.valueOf(ScanMode)
                            + " expectedScanMode: "
                            + String.valueOf(expectedScanMode));

            // Turn on screen
            sendMessageWaitForProcessed(createScreenOnOffMessage(true));
            // Create scan client
            ScanClient client =
                    createScanClientWithPhy(i, isFiltered, isEmptyFilter, ScanMode, phy);
            // Start scan
            sendMessageWaitForProcessed(createStartStopScanMessage(true, client));

            assertThat(client.settings.getPhy()).isEqualTo(phy);
            verify(mScanNativeInterface, atLeastOnce())
                    .gattSetScanParameters(anyInt(), anyInt(), anyInt(), eq(phy));
        }
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ message SetScanParametersRequest {
  LeScanType scan_type = 2;
  uint32 scan_interval = 3;
  uint32 scan_window = 4;
  uint32 scan_phy = 5;
}

message AdvertisingReportMsg {
Loading