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

Commit 9c96b0a0 authored by Chienyuan Huang's avatar Chienyuan Huang Committed by Gerrit Code Review
Browse files

Merge "CS: remove tracker when disconnected" into main

parents 20d90da1 a3b6adc5
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ public:
  virtual void OnConnected(
          const RawAddress& address, uint16_t att_handle,
          const std::vector<VendorSpecificCharacteristic>& vendor_specific_characteristics) = 0;
  virtual void OnDisconnected(const RawAddress& address) = 0;
  virtual void OnWriteVendorSpecificReplyComplete(const RawAddress& address, bool success) = 0;
  virtual void OnRemoteData(const RawAddress& address, const std::vector<uint8_t>& data) = 0;
};
+1 −0
Original line number Diff line number Diff line
@@ -217,6 +217,7 @@ public:
      BTA_GATTC_Close(evt.conn_id);
      return;
    }
    callbacks_->OnDisconnected(tracker->address_for_cs_);
    trackers_.remove(tracker);
  }

+21 −2
Original line number Diff line number Diff line
@@ -330,9 +330,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
          log::warn("Can't find CS tracker for {}", address);
        } else {
          cs_trackers_[connection_handle].repeating_alarm->Cancel();
          cs_trackers_[connection_handle].repeating_alarm.reset();
          send_le_cs_procedure_enable(connection_handle, Enable::DISABLED);
          cs_trackers_.erase(connection_handle);
        }
      } break;
    }
@@ -364,6 +362,23 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
    start_distance_measurement_with_cs(tracker.address, connection_handle);
  }

  void handle_ras_disconnected_event(const Address address) {
    log::info("address:{}", address);
    for (auto it = cs_trackers_.begin(); it != cs_trackers_.end();) {
      if (it->second.address == address) {
        if (it->second.repeating_alarm != nullptr) {
          it->second.repeating_alarm->Cancel();
          it->second.repeating_alarm.reset();
        }
        distance_measurement_callbacks_->OnDistanceMeasurementStopped(
                address, REASON_NO_LE_CONNECTION, METHOD_CS);
        it = cs_trackers_.erase(it);  // erase and get the next iterator
      } else {
        ++it;
      }
    }
  }

  void handle_vendor_specific_reply(
          const Address address, uint16_t connection_handle,
          const std::vector<hal::VendorSpecificCharacteristic> vendor_specific_reply) {
@@ -1495,6 +1510,10 @@ void DistanceMeasurementManager::HandleRasConnectedEvent(
         vendor_specific_data);
}

void DistanceMeasurementManager::HandleRasDisconnectedEvent(const Address& address) {
  CallOn(pimpl_.get(), &impl::handle_ras_disconnected_event, address);
}

void DistanceMeasurementManager::HandleVendorSpecificReply(
        const Address& address, uint16_t connection_handle,
        const std::vector<hal::VendorSpecificCharacteristic>& vendor_specific_reply) {
+1 −0
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ public:
  void HandleRasConnectedEvent(
          const Address& address, uint16_t connection_handle, uint16_t att_handle,
          const std::vector<hal::VendorSpecificCharacteristic>& vendor_specific_data);
  void HandleRasDisconnectedEvent(const Address& address);
  void HandleVendorSpecificReply(
          const Address& address, uint16_t connection_handle,
          const std::vector<hal::VendorSpecificCharacteristic>& vendor_specific_reply);
+5 −0
Original line number Diff line number Diff line
@@ -190,6 +190,11 @@ public:
            hal_vendor_specific_characteristics);
  }

  void OnDisconnected(const RawAddress& address) {
    bluetooth::shim::GetDistanceMeasurementManager()->HandleRasDisconnectedEvent(
            bluetooth::ToGdAddress(address));
  }

  void OnWriteVendorSpecificReplyComplete(const RawAddress& address, bool success) {
    bluetooth::shim::GetDistanceMeasurementManager()->HandleVendorSpecificReplyComplete(
            bluetooth::ToGdAddress(address), GetConnectionHandle(address), success);