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

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

Merge "RAS: Update RAS-CP command/response format" into main

parents d7d98aff 1444fbfe
Loading
Loading
Loading
Loading
+2 −12
Original line number Diff line number Diff line
@@ -445,12 +445,7 @@ class RasServerImpl : public bluetooth::ras::RasServer {
  }

  void OnGetRangingData(ControlPointCommand* command, ClientTracker* tracker) {
    if (command->operator_ != OPERATOR_NULL) {
      log::warn("Invalid operator 0x{:02x}", command->operator_);
      SendResponseCode(ResponseCodeValue::INVALID_OPERATOR, tracker);
      return;
    }
    const uint8_t* value = command->operand_;
    const uint8_t* value = command->parameter_;
    uint16_t ranging_counter;
    STREAM_TO_UINT16(ranging_counter, value);
    log::info("ranging_counter:{}", ranging_counter);
@@ -495,12 +490,7 @@ class RasServerImpl : public bluetooth::ras::RasServer {
  };

  void OnAckRangingData(ControlPointCommand* command, ClientTracker* tracker) {
    if (command->operator_ != OPERATOR_NULL) {
      log::warn("Invalid operator 0x{:02x}", command->operator_);
      SendResponseCode(ResponseCodeValue::INVALID_OPERATOR, tracker);
      return;
    }
    const uint8_t* value = command->operand_;
    const uint8_t* value = command->parameter_;
    uint16_t ranging_counter;
    STREAM_TO_UINT16(ranging_counter, value);
    log::info("ranging_counter:{}", ranging_counter);
+2 −5
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ namespace ras {
static const uint16_t kFeatureSize = 0x04;
static const uint16_t kRingingCounterSize = 0x02;
static const uint16_t kCccValueSize = 0x02;
static const uint16_t kControlPointCommandSize = 0x08;

namespace uuid {
static const uint16_t kRangingService16Bit = 0x7F7D;
@@ -99,14 +98,12 @@ std::string GetResponseOpcodeValueText(ResponseCodeValue response_code_value);

struct ControlPointCommand {
  Opcode opcode_;
  uint8_t operator_;
  uint8_t operand_[6];
  uint8_t parameter_[4];
};

struct ControlPointResponse {
  EventCode event_code_;
  uint8_t operator_;
  uint8_t operand_[6];
  uint8_t parameter_[4];
};

bool ParseControlPointCommand(ControlPointCommand* command,
+24 −5
Original line number Diff line number Diff line
@@ -58,13 +58,32 @@ std::string uuid::getUuidName(const bluetooth::Uuid& uuid) {
bool ParseControlPointCommand(ControlPointCommand* command,
                              const uint8_t* value, uint16_t len) {
  // Check for minimum expected length
  if (len != kControlPointCommandSize) {
    log::warn("Invalid len {}", len);
  switch (value[0]) {
    case (uint8_t)Opcode::ABORT_OPERATION:
      break;
    case (uint8_t)Opcode::PCT_FORMAT: {
      if (len < 2) {
        return false;
      }
    } break;
    case (uint8_t)Opcode::GET_RANGING_DATA:
    case (uint8_t)Opcode::ACK_RANGING_DATA:
    case (uint8_t)Opcode::FILTER: {
      if (len < 3) {
        return false;
      }
    } break;
    case (uint8_t)Opcode::RETRIEVE_LOST_RANGING_DATA_SEGMENTS: {
      if (len < 5) {
        return false;
      }
    } break;
    default:
      log::warn("unknown opcode 0x{:02x}", value[0]);
      return false;
  }
  command->opcode_ = static_cast<Opcode>(value[0]);
  command->operator_ = value[1];
  std::memcpy(command->operand_, value + 2, 6);
  std::memcpy(command->parameter_, value + 1, len - 1);
  return true;
}