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

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

Merge "CS: Use half channels and increase max_procedure_counter when interval...

Merge "CS: Use half channels and increase max_procedure_counter when interval less than 1s" into main
parents f9bece7c bfefb319
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ public class DistanceMeasurementManager {
    private static final int RSSI_HIGH_FREQUENCY_INTERVAL_MS = 500;
    private static final int CS_LOW_FREQUENCY_INTERVAL_MS = 5000;
    private static final int CS_MEDIUM_FREQUENCY_INTERVAL_MS = 3000;
    private static final int CS_HIGH_FREQUENCY_INTERVAL_MS = 1000;
    private static final int CS_HIGH_FREQUENCY_INTERVAL_MS = 200;

    private final AdapterService mAdapterService;
    private HandlerThread mHandlerThread;
+17 −3
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
    uint8_t selected_tx_power = 0;
    std::vector<CsProcedureData> procedure_data_list = {};
    uint16_t interval_ms = kDefaultIntervalMs;
    uint16_t max_procedure_count = 1;
    bool waiting_for_start_callback = false;
    std::unique_ptr<os::RepeatingAlarm> repeating_alarm = nullptr;
    // RAS data
@@ -341,6 +342,14 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
      it->second.repeating_alarm = std::make_unique<os::RepeatingAlarm>(handler_);
    }
    it->second.state = CsTrackerState::INIT;
    // If the interval is less than 1 second, update it to 1 second and increase the
    // max_procedure_count
    if (interval < 1000) {
      it->second.max_procedure_count = 1000 / interval;
      interval = 1000;
      log::info("Update interval to 1s and max_procedure_count to {}",
                it->second.max_procedure_count);
    }
    it->second.interval_ms = interval;
    it->second.local_start = true;
    it->second.measurement_ongoing = true;
@@ -618,7 +627,11 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
      log::warn("no cs tracker found for {}", connection_handle);
    }
    cs_requester_trackers_[connection_handle].state = CsTrackerState::WAIT_FOR_CONFIG_COMPLETE;
    auto channel_vector = common::FromHexString("1FFFFFFFFFFFFC7FFFFC");  // use all 72 Channel
    auto channel_vector = common::FromHexString("1FFFFFFFFFFFFC7FFFFC");  // use all 72 Channels
    // If the interval is less than or equal to 1 second, then use half channels
    if (cs_requester_trackers_[connection_handle].interval_ms <= 1000) {
      channel_vector = common::FromHexString("15555555555554555554");
    }
    std::array<uint8_t, 10> channel_map;
    std::copy(channel_vector->begin(), channel_vector->end(), channel_map.begin());
    std::reverse(channel_map.begin(), channel_map.end());
@@ -656,8 +669,9 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
    hci_layer_->EnqueueCommand(
            LeCsSetProcedureParametersBuilder::Create(
                    connection_handle, config_id, kMaxProcedureLen, kMinProcedureInterval,
                    kMaxProcedureInterval, kMaxProcedureCount, kMinSubeventLen, kMaxSubeventLen,
                    tone_antenna_config_selection, CsPhy::LE_1M_PHY, kTxPwrDelta,
                    kMaxProcedureInterval,
                    cs_requester_trackers_[connection_handle].max_procedure_count, kMinSubeventLen,
                    kMaxSubeventLen, tone_antenna_config_selection, CsPhy::LE_1M_PHY, kTxPwrDelta,
                    preferred_peer_antenna, CsSnrControl::NOT_APPLIED, CsSnrControl::NOT_APPLIED),
            handler_->BindOnceOn(this, &impl::on_cs_set_procedure_parameters));
  }