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

Commit a376181c authored by Martin Brabham's avatar Martin Brabham
Browse files

BLE Scanning: Receive the original address to onScanResults

Bug: 202162086
Test: Manual
Tag: #feature
Change-Id: I56d7c0dfa2fb0622707595ba716d0ce1d19ca33a
parent 355f503c
Loading
Loading
Loading
Loading
+24 −11
Original line number Diff line number Diff line
@@ -210,7 +210,8 @@ void btgattc_scan_result_cb(uint16_t event_type, uint8_t addr_type,
                            uint8_t secondary_phy, uint8_t advertising_sid,
                            int8_t tx_power, int8_t rssi,
                            uint16_t periodic_adv_int,
                            std::vector<uint8_t> adv_data) {
                            std::vector<uint8_t> adv_data,
                            RawAddress* original_bda) {
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid()) return;

@@ -221,10 +222,13 @@ void btgattc_scan_result_cb(uint16_t event_type, uint8_t addr_type,
  sCallbackEnv->SetByteArrayRegion(jb.get(), 0, adv_data.size(),
                                   (jbyte*)adv_data.data());

  sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanResult, event_type,
                               addr_type, address.get(), primary_phy,
                               secondary_phy, advertising_sid, tx_power, rssi,
                               periodic_adv_int, jb.get());
  ScopedLocalRef<jstring> original_address(
      sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), original_bda));

  sCallbackEnv->CallVoidMethod(
      mCallbacksObj, method_onScanResult, event_type, addr_type, address.get(),
      primary_phy, secondary_phy, advertising_sid, tx_power, rssi,
      periodic_adv_int, jb.get(), original_address.get());
}

void btgattc_open_cb(int conn_id, int status, int clientIf,
@@ -916,10 +920,18 @@ class JniScanningCallbacks : ScanningCallbacks {
    sCallbackEnv->SetByteArrayRegion(jb.get(), 0, adv_data.size(),
                                     (jbyte*)adv_data.data());

    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanResult, event_type,
                                 addr_type, address.get(), primary_phy,
                                 secondary_phy, advertising_sid, tx_power, rssi,
                                 periodic_adv_int, jb.get());
    // TODO(optedoblivion): Figure out original address for here, use empty
    // for now

    // length of data + '\0'
    char empty_address[18] = "00:00:00:00:00:00";
    ScopedLocalRef<jstring> fake_address(
        sCallbackEnv.get(), sCallbackEnv->NewStringUTF(empty_address));

    sCallbackEnv->CallVoidMethod(
        mCallbacksObj, method_onScanResult, event_type, addr_type,
        address.get(), primary_phy, secondary_phy, advertising_sid, tx_power,
        rssi, periodic_adv_int, jb.get(), fake_address.get());
  }

  void OnTrackAdvFoundLost(AdvertisingTrackInfo track_info) {
@@ -994,8 +1006,9 @@ static void classInitNative(JNIEnv* env, jclass clazz) {
      env->GetMethodID(clazz, "onClientRegistered", "(IIJJ)V");
  method_onScannerRegistered =
      env->GetMethodID(clazz, "onScannerRegistered", "(IIJJ)V");
  method_onScanResult = env->GetMethodID(clazz, "onScanResult",
                                         "(IILjava/lang/String;IIIIII[B)V");
  method_onScanResult =
      env->GetMethodID(clazz, "onScanResult",
                       "(IILjava/lang/String;IIIIII[BLjava/lang/String;)V");
  method_onConnected =
      env->GetMethodID(clazz, "onConnected", "(IIILjava/lang/String;)V");
  method_onDisconnected =
+7 −5
Original line number Diff line number Diff line
@@ -356,7 +356,8 @@ public class GattService extends ProfileService {
                            }
                            for (String test : TEST_MODE_BEACONS) {
                                onScanResultInternal(0x1b, 0x1, "DD:34:02:05:5C:4D", 1, 0, 0xff,
                                        127, -54, 0x0, HexEncoding.decode(test));
                                        127, -54, 0x0, HexEncoding.decode(test),
                                        "DD:34:02:05:5C:4E");
                            }
                            sendEmptyMessageDelayed(0, DateUtils.SECOND_IN_MILLIS);
                        }
@@ -1160,23 +1161,24 @@ public class GattService extends ProfileService {

    void onScanResult(int eventType, int addressType, String address, int primaryPhy,
            int secondaryPhy, int advertisingSid, int txPower, int rssi, int periodicAdvInt,
            byte[] advData) {
            byte[] advData, String originalAddress) {
        // When in testing mode, ignore all real-world events
        if (isTestModeEnabled()) return;

        onScanResultInternal(eventType, addressType, address, primaryPhy, secondaryPhy,
                advertisingSid, txPower, rssi, periodicAdvInt, advData);
                advertisingSid, txPower, rssi, periodicAdvInt, advData, originalAddress);
    }

    void onScanResultInternal(int eventType, int addressType, String address, int primaryPhy,
            int secondaryPhy, int advertisingSid, int txPower, int rssi, int periodicAdvInt,
            byte[] advData) {
            byte[] advData, String originalAddress) {
        if (VDBG) {
            Log.d(TAG, "onScanResult() - eventType=0x" + Integer.toHexString(eventType)
                    + ", addressType=" + addressType + ", address=" + address + ", primaryPhy="
                    + primaryPhy + ", secondaryPhy=" + secondaryPhy + ", advertisingSid=0x"
                    + Integer.toHexString(advertisingSid) + ", txPower=" + txPower + ", rssi="
                    + rssi + ", periodicAdvInt=0x" + Integer.toHexString(periodicAdvInt));
                    + rssi + ", periodicAdvInt=0x" + Integer.toHexString(periodicAdvInt)
                    + ", originalAddress=" + originalAddress);
        }

        byte[] legacyAdvData = Arrays.copyOfRange(advData, 0, 62);