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

Commit 7b39ba69 authored by Chienyuan Huang's avatar Chienyuan Huang
Browse files

RAS: Push Ranging Data segments to RAS server

Bug: 329043482
Bug: 324185011
Test: m com.android.btservices
Change-Id: Ic8b75e48ced77dacb402297180bc222571fdf04e
parent 0a939334
Loading
Loading
Loading
Loading
+1 −8
Original line number Diff line number Diff line
@@ -24,19 +24,12 @@
namespace bluetooth {
namespace ras {

enum ProcedureDoneStatus : uint8_t {
  ALL_RESULTS_COMPLETE = 0x0,
  PARTIAL_RESULTS = 0x1,
  ABORTED = 0xf,
};

class RasServer {
 public:
  virtual ~RasServer() = default;
  virtual void Initialize() = 0;
  virtual void PushProcedureData(RawAddress address, uint16_t procedure_count,
                                 ProcedureDoneStatus procedure_done_status,
                                 std::vector<uint8_t> data) = 0;
                                 bool is_last, std::vector<uint8_t> data) = 0;
};

RasServer* GetRasServer();
+5 −9
Original line number Diff line number Diff line
@@ -30,8 +30,6 @@ using namespace bluetooth;
using namespace ::ras;
using namespace ::ras::uuid;

using bluetooth::ras::ProcedureDoneStatus;

namespace {

class RasServerImpl;
@@ -76,11 +74,10 @@ class RasServerImpl : public bluetooth::ras::RasServer {
  }

  void PushProcedureData(RawAddress address, uint16_t procedure_counter,
                         ProcedureDoneStatus procedure_done_status,
                         std::vector<uint8_t> data) {
    log::info("{}, counter:{}, procedure_done_status:{}, with size {}",
              ADDRESS_TO_LOGGABLE_STR(address), procedure_counter,
              (uint16_t)procedure_done_status, data.size());
                         bool is_last, std::vector<uint8_t> data) {
    log::info("{}, counter:{}, is_last:{}, with size {}",
              ADDRESS_TO_LOGGABLE_STR(address), procedure_counter, is_last,
              data.size());
    tBLE_BD_ADDR ble_bd_addr;
    ResolveAddress(ble_bd_addr, address);

@@ -96,8 +93,7 @@ class RasServerImpl : public bluetooth::ras::RasServer {
    data_buffer.segments_.push_back(data);

    // Send data ready
    if (procedure_done_status == ProcedureDoneStatus::ALL_RESULTS_COMPLETE ||
        procedure_done_status == ProcedureDoneStatus::ABORTED) {
    if (is_last) {
      uint16_t ccc_value =
          tracker.ccc_values_[kRasRangingDataReadyCharacteristic];
      if (ccc_value == GATT_CLT_CONFIG_NONE) {
+7 −3
Original line number Diff line number Diff line
@@ -712,11 +712,11 @@ struct DistanceMeasurementManager::impl {
      append_vector(procedure_data->ras_subevents, subevent_raw);
      // erase buffer
      procedure_data->ras_subevent_data_.clear();
      send_on_demand_data(procedure_data);
      send_on_demand_data(cs_trackers_[connection_handle].address, procedure_data);
    }
  }

  void send_on_demand_data(CsProcedureData* procedure_data) {
  void send_on_demand_data(Address address, CsProcedureData* procedure_data) {
    if (procedure_data->local_status != CsProcedureDoneStatus::PARTIAL_RESULTS) {
      procedure_data->segmentation_header_.last_segment_ = 1;
    }
@@ -727,7 +727,11 @@ struct DistanceMeasurementManager::impl {
        procedure_data->ras_subevents);
    auto raw_data = builder_to_bytes(std::move(builder));
    log::debug("counter: {}, size:{}", procedure_data->counter, (uint16_t)raw_data.size());
    // TODO, push data to RAS server
    distance_measurement_callbacks_->OnRasFragmentReady(
        address,
        procedure_data->counter,
        procedure_data->local_status != CsProcedureDoneStatus::PARTIAL_RESULTS,
        raw_data);

    procedure_data->ras_subevents.clear();
    procedure_data->segmentation_header_.first_segment_ = 0;
+2 −0
Original line number Diff line number Diff line
@@ -64,6 +64,8 @@ class DistanceMeasurementCallbacks {
      int altitude_angle,
      int error_altitude_angle,
      DistanceMeasurementMethod method) = 0;
  virtual void OnRasFragmentReady(
      Address address, uint16_t procedure_counter, bool is_last, std::vector<uint8_t> raw_data) = 0;
};

class DistanceMeasurementManager : public bluetooth::Module {
+8 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

#include "distance_measurement_manager.h"

#include "bta/include/bta_ras_api.h"
#include "btif/include/btif_common.h"
#include "hci/distance_measurement_manager.h"
#include "main/shim/entry.h"
@@ -104,6 +105,13 @@ class DistanceMeasurementInterfaceImpl
            error_altitude_angle, static_cast<uint8_t>(method)));
  }

  void OnRasFragmentReady(bluetooth::hci::Address address,
                          uint16_t procedure_counter, bool is_last,
                          std::vector<uint8_t> raw_data) {
    bluetooth::ras::GetRasServer()->PushProcedureData(
        bluetooth::ToRawAddress(address), procedure_counter, is_last, raw_data);
  }

 private:
  ::DistanceMeasurementCallbacks* distance_measurement_callbacks_;
};
Loading