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

Commit ad9b228b authored by Steven Liu's avatar Steven Liu
Browse files

Simplify the onStartFail, keep java layer check only.

Flag: com.android.bluetooth.flags.channel_sounding_in_stack
Bug: 324185011
Bug: 373042559
Test: m com.android.btservices
Change-Id: I6bdae5d794dce195468a13fe39b01e83e7b71193
parent 2e85d789
Loading
Loading
Loading
Loading
+1 −13
Original line number Diff line number Diff line
@@ -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;

@@ -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__);
@@ -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",
+6 −48
Original line number Diff line number Diff line
@@ -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:"
@@ -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) {
@@ -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(
+0 −5
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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);
+20 −25
Original line number Diff line number Diff line
@@ -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);
  }

@@ -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;
    }
@@ -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;
    }
@@ -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;
    }

@@ -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();
    }
@@ -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);
    }
  }
@@ -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);
      }
@@ -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