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

Commit 02a268ce authored by Steven Liu's avatar Steven Liu
Browse files

Checking if the channel sounding is supported by controller.

Flag: com.android.bluetooth.flags.channel_sounding_in_stack
Bug: 324185011
Bug: 373369972
Test: m com.android.btservices
Change-Id: I3f8f71bbbae6eb39c80a1465aa169d105dd66e0a
parent c350731a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -120,7 +120,8 @@ public class DistanceMeasurementManager {
                startRssiTracker(tracker);
                break;
            case DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_CHANNEL_SOUNDING:
                if (!mAdapterService.isConnected(params.getDevice())) {
                if (!mAdapterService.isLeChannelSoundingSupported()
                        || !mAdapterService.isConnected(params.getDevice())) {
                    Log.e(TAG, "Device " + params.getDevice() + " is not connected");
                    invokeStartFail(
                            callback,
+12 −4
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include "common/strings.h"
#include "hal/ranging_hal.h"
#include "hci/acl_manager.h"
#include "hci/controller.h"
#include "hci/distance_measurement_interface.h"
#include "hci/event_checkers.h"
#include "hci/hci_layer.h"
@@ -253,9 +254,10 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
  }

  ~impl() {}
  void start(os::Handler* handler, hal::RangingHal* ranging_hal, hci::HciLayer* hci_layer,
             hci::AclManager* acl_manager) {
  void start(os::Handler* handler, hci::Controller* controller, hal::RangingHal* ranging_hal,
             hci::HciLayer* hci_layer, hci::AclManager* acl_manager) {
    handler_ = handler;
    controller_ = controller;
    ranging_hal_ = ranging_hal;
    hci_layer_ = hci_layer;
    acl_manager_ = acl_manager;
@@ -265,6 +267,10 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
      log::info("IS_FLAG_ENABLED channel_sounding_in_stack: false");
      return;
    }
    if (!controller_->SupportsBleChannelSounding()) {
      log::info("The controller doesn't support Channel Sounding feature.");
      return;
    }
    distance_measurement_interface_ = hci_layer_->GetDistanceMeasurementInterface(
            handler_->BindOn(this, &DistanceMeasurementManager::impl::handle_event));
    distance_measurement_interface_->EnqueueCommand(
@@ -2137,6 +2143,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {

  os::Handler* handler_;
  hal::RangingHal* ranging_hal_;
  hci::Controller* controller_;
  hci::HciLayer* hci_layer_;
  hci::AclManager* acl_manager_;
  hci::DistanceMeasurementInterface* distance_measurement_interface_;
@@ -2167,13 +2174,14 @@ DistanceMeasurementManager::~DistanceMeasurementManager() = default;

void DistanceMeasurementManager::ListDependencies(ModuleList* list) const {
  list->add<hal::RangingHal>();
  list->add<hci::Controller>();
  list->add<hci::HciLayer>();
  list->add<hci::AclManager>();
}

void DistanceMeasurementManager::Start() {
  pimpl_->start(GetHandler(), GetDependency<hal::RangingHal>(), GetDependency<hci::HciLayer>(),
                GetDependency<AclManager>());
  pimpl_->start(GetHandler(), GetDependency<hci::Controller>(), GetDependency<hal::RangingHal>(),
                GetDependency<hci::HciLayer>(), GetDependency<AclManager>());
}

void DistanceMeasurementManager::Stop() { pimpl_->stop(); }