Loading android/app/jni/com_android_bluetooth_gatt.cpp +1 −13 Original line number Diff line number Diff line Loading @@ -197,7 +197,6 @@ static jmethodID method_onBigInfoReport; * Distance Measurement callback methods */ static jmethodID method_onDistanceMeasurementStarted; static jmethodID method_onDistanceMeasurementStartFail; static jmethodID method_onDistanceMeasurementStopped; static jmethodID method_onDistanceMeasurementResult; Loading Loading @@ -1210,16 +1209,7 @@ public: sCallbackEnv->CallVoidMethod(mDistanceMeasurementCallbacksObj, method_onDistanceMeasurementStarted, addr.get(), method); } void OnDistanceMeasurementStartFail(RawAddress address, uint8_t reason, uint8_t method) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid() || !mDistanceMeasurementCallbacksObj) { return; } ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address)); sCallbackEnv->CallVoidMethod(mDistanceMeasurementCallbacksObj, method_onDistanceMeasurementStartFail, addr.get(), reason, method); } void OnDistanceMeasurementStopped(RawAddress address, uint8_t reason, uint8_t method) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); Loading Loading @@ -2975,8 +2965,6 @@ static int register_com_android_bluetooth_gatt_distance_measurement(JNIEnv* env) const JNIJavaMethod javaMethods[] = { {"onDistanceMeasurementStarted", "(Ljava/lang/String;I)V", &method_onDistanceMeasurementStarted}, {"onDistanceMeasurementStartFail", "(Ljava/lang/String;II)V", &method_onDistanceMeasurementStartFail}, {"onDistanceMeasurementStopped", "(Ljava/lang/String;II)V", &method_onDistanceMeasurementStopped}, {"onDistanceMeasurementResult", "(Ljava/lang/String;IIIIIIJII)V", Loading android/app/src/com/android/bluetooth/gatt/DistanceMeasurementManager.java +6 −48 Original line number Diff line number Diff line Loading @@ -364,52 +364,6 @@ public class DistanceMeasurementManager { } } void onDistanceMeasurementStartFail(String address, int reason, int method) { logd( "onDistanceMeasurementStartFail address:" + BluetoothUtils.toAnonymizedAddress(address) + ", method:" + method); switch (method) { case DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_RSSI: handleRssiStartFail(address, reason); break; case DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_CHANNEL_SOUNDING: handleCsStartFail(address, reason); break; default: Log.w(TAG, "onDistanceMeasurementStartFail: invalid method " + method); } } void handleRssiStartFail(String address, int reason) { CopyOnWriteArraySet<DistanceMeasurementTracker> set = mRssiTrackers.get(address); if (set == null) { Log.w(TAG, "Can't find rssi tracker"); return; } for (DistanceMeasurementTracker tracker : set) { if (!tracker.mStarted) { invokeStartFail(tracker.mCallback, tracker.mDevice, reason); } } set.removeIf(tracker -> !tracker.mStarted); } void handleCsStartFail(String address, int reason) { CopyOnWriteArraySet<DistanceMeasurementTracker> set = mCsTrackers.get(address); if (set == null) { Log.w(TAG, "Can't find CS tracker"); return; } for (DistanceMeasurementTracker tracker : set) { if (!tracker.mStarted) { invokeStartFail(tracker.mCallback, tracker.mDevice, reason); } } set.removeIf(tracker -> !tracker.mStarted); } void onDistanceMeasurementStopped(String address, int reason, int method) { logd( "onDistanceMeasurementStopped address:" Loading Loading @@ -440,9 +394,11 @@ public class DistanceMeasurementManager { if (tracker.mStarted) { tracker.cancelTimer(); invokeOnStopped(tracker.mCallback, tracker.mDevice, reason); } else { invokeStartFail(tracker.mCallback, tracker.mDevice, reason); } } set.removeIf(tracker -> tracker.mStarted); mRssiTrackers.remove(address); } void handleCsStopped(String address, int reason) { Loading @@ -455,9 +411,11 @@ public class DistanceMeasurementManager { if (tracker.mStarted) { tracker.cancelTimer(); invokeOnStopped(tracker.mCallback, tracker.mDevice, reason); } else { invokeStartFail(tracker.mCallback, tracker.mDevice, reason); } } set.removeIf(tracker -> tracker.mStarted); mCsTrackers.remove(address); } void onDistanceMeasurementResult( Loading android/app/src/com/android/bluetooth/gatt/DistanceMeasurementNativeInterface.java +0 −5 Original line number Diff line number Diff line Loading @@ -92,11 +92,6 @@ public class DistanceMeasurementNativeInterface { mDistanceMeasurementManager.onDistanceMeasurementStarted(address, method); } void onDistanceMeasurementStartFail(String address, int reason, int method) { mDistanceMeasurementManager.onDistanceMeasurementStartFail( address, convertErrorCode(reason), method); } void onDistanceMeasurementStopped(String address, int reason, int method) { mDistanceMeasurementManager.onDistanceMeasurementStopped( address, convertErrorCode(reason), method); Loading android/app/tests/unit/src/com/android/bluetooth/gatt/DistanceMeasurementManagerTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -146,7 +146,7 @@ public class DistanceMeasurementManagerTest { IDENTITY_ADDRESS, RSSI_FREQUENCY_LOW, DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_RSSI); mDistanceMeasurementManager.onDistanceMeasurementStartFail( mDistanceMeasurementManager.onDistanceMeasurementStopped( IDENTITY_ADDRESS, BluetoothStatusCodes.ERROR_DISTANCE_MEASUREMENT_INTERNAL, DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_RSSI); Loading system/gd/hci/distance_measurement_manager.cc +20 −25 Original line number Diff line number Diff line Loading @@ -195,7 +195,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { log::error("Can't find CS tracker for connection_handle {}", connection_handle); return; } distance_measurement_callbacks_->OnDistanceMeasurementStartFail( distance_measurement_callbacks_->OnDistanceMeasurementStopped( cs_requester_trackers_[connection_handle].address, REASON_INTERNAL_ERROR, METHOD_CS); } Loading Loading @@ -269,7 +269,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { // Remove this check if we support any connection less method if (connection_handle == kIllegalConnectionHandle) { log::warn("Can't find any LE connection for {}", address); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( distance_measurement_callbacks_->OnDistanceMeasurementStopped( address, REASON_NO_LE_CONNECTION, method); return; } Loading Loading @@ -328,7 +328,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { log::info("connection_handle: {}, address: {}", connection_handle, cs_remote_address); if (!com::android::bluetooth::flags::channel_sounding_in_stack()) { log::error("Channel Sounding is not enabled"); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( distance_measurement_callbacks_->OnDistanceMeasurementStopped( cs_remote_address, REASON_INTERNAL_ERROR, METHOD_CS); return; } Loading Loading @@ -492,14 +492,14 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { auto it = cs_requester_trackers_.find(connection_handle); if (it == cs_requester_trackers_.end()) { log::warn("can't find tracker for 0x{:04x}", connection_handle); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_CS); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_CS); return; } if (!success) { distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_CS); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_CS); return; } Loading Loading @@ -619,13 +619,8 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { return; } if (it->second.measurement_ongoing) { if (it->second.waiting_for_start_callback) { distance_measurement_callbacks_->OnDistanceMeasurementStartFail(it->second.address, errorCode, METHOD_CS); } else { distance_measurement_callbacks_->OnDistanceMeasurementStopped(it->second.address, errorCode, METHOD_CS); } it->second.repeating_alarm->Cancel(); it->second.repeating_alarm.reset(); } Loading Loading @@ -1505,14 +1500,14 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { auto status_view = LeReadRemoteTransmitPowerLevelStatusView::Create(view); if (!status_view.IsValid()) { log::warn("Invalid LeReadRemoteTransmitPowerLevelStatus event"); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_RSSI); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_RSSI); rssi_trackers.erase(address); } else if (status_view.GetStatus() != ErrorCode::SUCCESS) { std::string error_code = ErrorCodeText(status_view.GetStatus()); log::warn("Received LeReadRemoteTransmitPowerLevelStatus with error code {}", error_code); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_RSSI); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_RSSI); rssi_trackers.erase(address); } } Loading Loading @@ -1558,7 +1553,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { address, event_view.GetConnectionHandle())); } else { log::warn("Read remote transmit power level fail"); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( distance_measurement_callbacks_->OnDistanceMeasurementStopped( address, REASON_INTERNAL_ERROR, METHOD_RSSI); rssi_trackers.erase(address); } Loading @@ -1570,24 +1565,24 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { auto complete_view = LeSetTransmitPowerReportingEnableCompleteView::Create(view); if (!complete_view.IsValid()) { log::warn("Invalid LeSetTransmitPowerReportingEnableComplete event"); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_RSSI); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_RSSI); rssi_trackers.erase(address); return; } else if (complete_view.GetStatus() != ErrorCode::SUCCESS) { std::string error_code = ErrorCodeText(complete_view.GetStatus()); log::warn("Received LeSetTransmitPowerReportingEnableComplete with error code {}", error_code); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_RSSI); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_RSSI); rssi_trackers.erase(address); return; } if (rssi_trackers.find(address) == rssi_trackers.end()) { log::warn("Can't find rssi tracker for {}", address); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_RSSI); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_RSSI); rssi_trackers.erase(address); } else { log::info("Track rssi for address {}", address); Loading Loading
android/app/jni/com_android_bluetooth_gatt.cpp +1 −13 Original line number Diff line number Diff line Loading @@ -197,7 +197,6 @@ static jmethodID method_onBigInfoReport; * Distance Measurement callback methods */ static jmethodID method_onDistanceMeasurementStarted; static jmethodID method_onDistanceMeasurementStartFail; static jmethodID method_onDistanceMeasurementStopped; static jmethodID method_onDistanceMeasurementResult; Loading Loading @@ -1210,16 +1209,7 @@ public: sCallbackEnv->CallVoidMethod(mDistanceMeasurementCallbacksObj, method_onDistanceMeasurementStarted, addr.get(), method); } void OnDistanceMeasurementStartFail(RawAddress address, uint8_t reason, uint8_t method) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid() || !mDistanceMeasurementCallbacksObj) { return; } ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address)); sCallbackEnv->CallVoidMethod(mDistanceMeasurementCallbacksObj, method_onDistanceMeasurementStartFail, addr.get(), reason, method); } void OnDistanceMeasurementStopped(RawAddress address, uint8_t reason, uint8_t method) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); Loading Loading @@ -2975,8 +2965,6 @@ static int register_com_android_bluetooth_gatt_distance_measurement(JNIEnv* env) const JNIJavaMethod javaMethods[] = { {"onDistanceMeasurementStarted", "(Ljava/lang/String;I)V", &method_onDistanceMeasurementStarted}, {"onDistanceMeasurementStartFail", "(Ljava/lang/String;II)V", &method_onDistanceMeasurementStartFail}, {"onDistanceMeasurementStopped", "(Ljava/lang/String;II)V", &method_onDistanceMeasurementStopped}, {"onDistanceMeasurementResult", "(Ljava/lang/String;IIIIIIJII)V", Loading
android/app/src/com/android/bluetooth/gatt/DistanceMeasurementManager.java +6 −48 Original line number Diff line number Diff line Loading @@ -364,52 +364,6 @@ public class DistanceMeasurementManager { } } void onDistanceMeasurementStartFail(String address, int reason, int method) { logd( "onDistanceMeasurementStartFail address:" + BluetoothUtils.toAnonymizedAddress(address) + ", method:" + method); switch (method) { case DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_RSSI: handleRssiStartFail(address, reason); break; case DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_CHANNEL_SOUNDING: handleCsStartFail(address, reason); break; default: Log.w(TAG, "onDistanceMeasurementStartFail: invalid method " + method); } } void handleRssiStartFail(String address, int reason) { CopyOnWriteArraySet<DistanceMeasurementTracker> set = mRssiTrackers.get(address); if (set == null) { Log.w(TAG, "Can't find rssi tracker"); return; } for (DistanceMeasurementTracker tracker : set) { if (!tracker.mStarted) { invokeStartFail(tracker.mCallback, tracker.mDevice, reason); } } set.removeIf(tracker -> !tracker.mStarted); } void handleCsStartFail(String address, int reason) { CopyOnWriteArraySet<DistanceMeasurementTracker> set = mCsTrackers.get(address); if (set == null) { Log.w(TAG, "Can't find CS tracker"); return; } for (DistanceMeasurementTracker tracker : set) { if (!tracker.mStarted) { invokeStartFail(tracker.mCallback, tracker.mDevice, reason); } } set.removeIf(tracker -> !tracker.mStarted); } void onDistanceMeasurementStopped(String address, int reason, int method) { logd( "onDistanceMeasurementStopped address:" Loading Loading @@ -440,9 +394,11 @@ public class DistanceMeasurementManager { if (tracker.mStarted) { tracker.cancelTimer(); invokeOnStopped(tracker.mCallback, tracker.mDevice, reason); } else { invokeStartFail(tracker.mCallback, tracker.mDevice, reason); } } set.removeIf(tracker -> tracker.mStarted); mRssiTrackers.remove(address); } void handleCsStopped(String address, int reason) { Loading @@ -455,9 +411,11 @@ public class DistanceMeasurementManager { if (tracker.mStarted) { tracker.cancelTimer(); invokeOnStopped(tracker.mCallback, tracker.mDevice, reason); } else { invokeStartFail(tracker.mCallback, tracker.mDevice, reason); } } set.removeIf(tracker -> tracker.mStarted); mCsTrackers.remove(address); } void onDistanceMeasurementResult( Loading
android/app/src/com/android/bluetooth/gatt/DistanceMeasurementNativeInterface.java +0 −5 Original line number Diff line number Diff line Loading @@ -92,11 +92,6 @@ public class DistanceMeasurementNativeInterface { mDistanceMeasurementManager.onDistanceMeasurementStarted(address, method); } void onDistanceMeasurementStartFail(String address, int reason, int method) { mDistanceMeasurementManager.onDistanceMeasurementStartFail( address, convertErrorCode(reason), method); } void onDistanceMeasurementStopped(String address, int reason, int method) { mDistanceMeasurementManager.onDistanceMeasurementStopped( address, convertErrorCode(reason), method); Loading
android/app/tests/unit/src/com/android/bluetooth/gatt/DistanceMeasurementManagerTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -146,7 +146,7 @@ public class DistanceMeasurementManagerTest { IDENTITY_ADDRESS, RSSI_FREQUENCY_LOW, DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_RSSI); mDistanceMeasurementManager.onDistanceMeasurementStartFail( mDistanceMeasurementManager.onDistanceMeasurementStopped( IDENTITY_ADDRESS, BluetoothStatusCodes.ERROR_DISTANCE_MEASUREMENT_INTERNAL, DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_RSSI); Loading
system/gd/hci/distance_measurement_manager.cc +20 −25 Original line number Diff line number Diff line Loading @@ -195,7 +195,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { log::error("Can't find CS tracker for connection_handle {}", connection_handle); return; } distance_measurement_callbacks_->OnDistanceMeasurementStartFail( distance_measurement_callbacks_->OnDistanceMeasurementStopped( cs_requester_trackers_[connection_handle].address, REASON_INTERNAL_ERROR, METHOD_CS); } Loading Loading @@ -269,7 +269,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { // Remove this check if we support any connection less method if (connection_handle == kIllegalConnectionHandle) { log::warn("Can't find any LE connection for {}", address); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( distance_measurement_callbacks_->OnDistanceMeasurementStopped( address, REASON_NO_LE_CONNECTION, method); return; } Loading Loading @@ -328,7 +328,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { log::info("connection_handle: {}, address: {}", connection_handle, cs_remote_address); if (!com::android::bluetooth::flags::channel_sounding_in_stack()) { log::error("Channel Sounding is not enabled"); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( distance_measurement_callbacks_->OnDistanceMeasurementStopped( cs_remote_address, REASON_INTERNAL_ERROR, METHOD_CS); return; } Loading Loading @@ -492,14 +492,14 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { auto it = cs_requester_trackers_.find(connection_handle); if (it == cs_requester_trackers_.end()) { log::warn("can't find tracker for 0x{:04x}", connection_handle); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_CS); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_CS); return; } if (!success) { distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_CS); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_CS); return; } Loading Loading @@ -619,13 +619,8 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { return; } if (it->second.measurement_ongoing) { if (it->second.waiting_for_start_callback) { distance_measurement_callbacks_->OnDistanceMeasurementStartFail(it->second.address, errorCode, METHOD_CS); } else { distance_measurement_callbacks_->OnDistanceMeasurementStopped(it->second.address, errorCode, METHOD_CS); } it->second.repeating_alarm->Cancel(); it->second.repeating_alarm.reset(); } Loading Loading @@ -1505,14 +1500,14 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { auto status_view = LeReadRemoteTransmitPowerLevelStatusView::Create(view); if (!status_view.IsValid()) { log::warn("Invalid LeReadRemoteTransmitPowerLevelStatus event"); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_RSSI); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_RSSI); rssi_trackers.erase(address); } else if (status_view.GetStatus() != ErrorCode::SUCCESS) { std::string error_code = ErrorCodeText(status_view.GetStatus()); log::warn("Received LeReadRemoteTransmitPowerLevelStatus with error code {}", error_code); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_RSSI); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_RSSI); rssi_trackers.erase(address); } } Loading Loading @@ -1558,7 +1553,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { address, event_view.GetConnectionHandle())); } else { log::warn("Read remote transmit power level fail"); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( distance_measurement_callbacks_->OnDistanceMeasurementStopped( address, REASON_INTERNAL_ERROR, METHOD_RSSI); rssi_trackers.erase(address); } Loading @@ -1570,24 +1565,24 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback { auto complete_view = LeSetTransmitPowerReportingEnableCompleteView::Create(view); if (!complete_view.IsValid()) { log::warn("Invalid LeSetTransmitPowerReportingEnableComplete event"); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_RSSI); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_RSSI); rssi_trackers.erase(address); return; } else if (complete_view.GetStatus() != ErrorCode::SUCCESS) { std::string error_code = ErrorCodeText(complete_view.GetStatus()); log::warn("Received LeSetTransmitPowerReportingEnableComplete with error code {}", error_code); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_RSSI); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_RSSI); rssi_trackers.erase(address); return; } if (rssi_trackers.find(address) == rssi_trackers.end()) { log::warn("Can't find rssi tracker for {}", address); distance_measurement_callbacks_->OnDistanceMeasurementStartFail( address, REASON_INTERNAL_ERROR, METHOD_RSSI); distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR, METHOD_RSSI); rssi_trackers.erase(address); } else { log::info("Track rssi for address {}", address); Loading