Loading system/bta/ras/ras_client.cc +7 −10 Original line number Diff line number Diff line Loading @@ -120,7 +120,7 @@ public: callbacks_->OnConnected(address, att_handle, tracker->vendor_specific_characteristics_); return; } BTA_GATTC_Open(gatt_if_, ble_bd_addr.bda, BTM_BLE_DIRECT_CONNECTION, false); BTA_GATTC_Open(gatt_if_, ble_bd_addr.bda, BTM_BLE_DIRECT_CONNECTION, true); } void SendVendorSpecificReply( Loading @@ -142,7 +142,7 @@ public: log::debug("write to remote, uuid {}, len {}", vendor_specific_characteristic.characteristicUuid_, vendor_specific_characteristic.value_.size()); BTA_GATTC_WriteCharValue(tracker->conn_id_, characteristic->value_handle, GATT_WRITE, BTA_GATTC_WriteCharValue(tracker->conn_id_, characteristic->value_handle, GATT_WRITE_NO_RSP, vendor_specific_characteristic.value_, GATT_AUTH_REQ_NO_MITM, GattWriteCallback, &gatt_write_callback_data_); } Loading Loading @@ -206,7 +206,7 @@ public: BTA_GATTC_Close(evt.conn_id); return; } tracker->is_connected_ = false; trackers_.remove(tracker); } void OnGattServiceSearchComplete(const tBTA_GATTC_SEARCH_CMPL& evt) { Loading Loading @@ -364,8 +364,8 @@ public: value[0] = (uint8_t)Opcode::GET_RANGING_DATA; value[1] = (uint8_t)(ranging_counter & 0xFF); value[2] = (uint8_t)((ranging_counter >> 8) & 0xFF); BTA_GATTC_WriteCharValue(tracker->conn_id_, characteristic->value_handle, GATT_WRITE, value, GATT_AUTH_REQ_NO_MITM, GattWriteCallback, nullptr); BTA_GATTC_WriteCharValue(tracker->conn_id_, characteristic->value_handle, GATT_WRITE_NO_RSP, value, GATT_AUTH_REQ_NO_MITM, GattWriteCallback, nullptr); } void AckRangingData(uint16_t ranging_counter, std::shared_ptr<RasTracker> tracker) { Loading @@ -380,8 +380,8 @@ public: value[0] = (uint8_t)Opcode::ACK_RANGING_DATA; value[1] = (uint8_t)(ranging_counter & 0xFF); value[2] = (uint8_t)((ranging_counter >> 8) & 0xFF); BTA_GATTC_WriteCharValue(tracker->conn_id_, characteristic->value_handle, GATT_WRITE, value, GATT_AUTH_REQ_NO_MITM, GattWriteCallback, nullptr); BTA_GATTC_WriteCharValue(tracker->conn_id_, characteristic->value_handle, GATT_WRITE_NO_RSP, value, GATT_AUTH_REQ_NO_MITM, GattWriteCallback, nullptr); if (ranging_counter != tracker->latest_ranging_counter_) { GetRangingData(tracker->latest_ranging_counter_, tracker); } Loading Loading @@ -612,9 +612,6 @@ public: if ((value & kFilterRangingData) != 0) { ss << "|Filter Ranging Data"; } if ((value & kPctPhaseFormat) != 0) { ss << "|PCT Phase Format"; } } return ss.str(); } Loading system/bta/ras/ras_server.cc +45 −10 Original line number Diff line number Diff line Loading @@ -69,6 +69,8 @@ public: bool handling_control_point_command_ = false; uint8_t vendor_specific_reply_counter_ = 0; PendingWriteResponse pending_write_response_; uint16_t last_ready_procedure_ = 0; uint16_t last_overwritten_procedure_ = 0; }; void Initialize() { Loading Loading @@ -138,6 +140,7 @@ public: std::lock_guard<std::mutex> lock(on_demand_ranging_mutex_); DataBuffer& data_buffer = InitDataBuffer(ble_bd_addr.bda, procedure_counter); data_buffer.segments_.push_back(data); tracker.last_ready_procedure_ = procedure_counter; // Send data ready if (is_last) { Loading @@ -158,6 +161,7 @@ public: // Send data overwritten if (tracker.buffers_.size() > kBufferSize) { auto begin = tracker.buffers_.begin(); tracker.last_overwritten_procedure_ = begin->ranging_counter_; if (ccc_data_over_written == GATT_CLT_CONFIG_NONE || ccc_real_time != GATT_CLT_CONFIG_NONE) { log::debug("Skip Ranging Data Over Written"); tracker.buffers_.erase(begin); Loading @@ -181,6 +185,9 @@ public: case BTA_GATTS_CONNECT_EVT: { OnGattConnect(p_data); } break; case BTA_GATTS_DISCONNECT_EVT: { OnGattDisconnect(p_data); } break; case BTA_GATTS_REG_EVT: { OnGattServerRegister(p_data); } break; Loading Loading @@ -215,6 +222,14 @@ public: trackers_[address].conn_id_ = p_data->conn.conn_id; } void OnGattDisconnect(tBTA_GATTS* p_data) { auto address = p_data->conn.remote_bda; log::info("Address: {}, conn_id:{}", address, p_data->conn.conn_id); if (trackers_.find(address) != trackers_.end()) { trackers_.erase(address); } } void OnGattServerRegister(tBTA_GATTS* p_data) { tGATT_STATUS status = p_data->reg_oper.status; log::info("status: {}", gatt_status_text(p_data->reg_oper.status)); Loading Loading @@ -279,7 +294,7 @@ public: ranging_data_ready_characteristic.uuid = kRasRangingDataReadyCharacteristic; ranging_data_ready_characteristic.type = BTGATT_DB_CHARACTERISTIC; ranging_data_ready_characteristic.properties = GATT_CHAR_PROP_BIT_NOTIFY | GATT_CHAR_PROP_BIT_INDICATE; GATT_CHAR_PROP_BIT_READ | GATT_CHAR_PROP_BIT_NOTIFY | GATT_CHAR_PROP_BIT_INDICATE; ranging_data_ready_characteristic.permissions = GATT_PERM_READ_ENCRYPTED | key_mask; service.push_back(ranging_data_ready_characteristic); service.push_back(ccc_descriptor); Loading @@ -289,7 +304,7 @@ public: ranging_data_overwritten_characteristic.uuid = kRasRangingDataOverWrittenCharacteristic; ranging_data_overwritten_characteristic.type = BTGATT_DB_CHARACTERISTIC; ranging_data_overwritten_characteristic.properties = GATT_CHAR_PROP_BIT_NOTIFY | GATT_CHAR_PROP_BIT_INDICATE; GATT_CHAR_PROP_BIT_READ | GATT_CHAR_PROP_BIT_NOTIFY | GATT_CHAR_PROP_BIT_INDICATE; ranging_data_overwritten_characteristic.permissions = GATT_PERM_READ_ENCRYPTED | key_mask; service.push_back(ranging_data_overwritten_characteristic); service.push_back(ccc_descriptor); Loading Loading @@ -337,6 +352,13 @@ public: return; } log::info("Read uuid, {}", getUuidName(uuid)); ClientTracker* tracker = &trackers_[p_data->req_data.remote_bda]; if (trackers_.find(p_data->req_data.remote_bda) == trackers_.end()) { log::warn("Can't find tracker for {}", p_data->req_data.remote_bda); BTA_GATTS_SendRsp(p_data->req_data.conn_id, p_data->req_data.trans_id, GATT_ILLEGAL_PARAMETER, &p_msg); return; } // Check Characteristic UUID switch (uuid.As16Bit()) { Loading @@ -344,6 +366,20 @@ public: p_msg.attr_value.len = kFeatureSize; memcpy(p_msg.attr_value.value, &kSupportedFeatures, sizeof(uint32_t)); } break; case kRasRangingDataReadyCharacteristic16bit: { p_msg.attr_value.len = kRingingCounterSize; std::vector<uint8_t> value(kRingingCounterSize); if (tracker->buffers_.size() > 0) { p_msg.attr_value.value[0] = (tracker->last_ready_procedure_ & 0xFF); p_msg.attr_value.value[1] = (tracker->last_ready_procedure_ >> 8) & 0xFF; } } break; case kRasRangingDataOverWrittenCharacteristic16bit: { p_msg.attr_value.len = kRingingCounterSize; std::vector<uint8_t> value(kRingingCounterSize); p_msg.attr_value.value[0] = (tracker->last_overwritten_procedure_ & 0xFF); p_msg.attr_value.value[1] = (tracker->last_overwritten_procedure_ >> 8) & 0xFF; } break; default: log::warn("Unhandled uuid {}", uuid.ToString()); BTA_GATTS_SendRsp(p_data->req_data.conn_id, p_data->req_data.trans_id, Loading Loading @@ -418,8 +454,8 @@ public: } ClientTracker* tracker = &trackers_[p_data->req_data.remote_bda]; if (tracker->handling_control_point_command_) { log::warn("Procedure Already In Progress"); BTA_GATTS_SendRsp(conn_id, p_data->req_data.trans_id, GATT_PRC_IN_PROGRESS, &p_msg); log::warn("Server busy"); SendResponseCode(ResponseCodeValue::SERVER_BUSY, tracker); return; } if (need_rsp) { Loading Loading @@ -532,20 +568,19 @@ public: tracker->handling_control_point_command_ = true; switch (command.opcode_) { case Opcode::GET_RANGING_DATA: { case Opcode::GET_RANGING_DATA: OnGetRangingData(&command, tracker); } break; case Opcode::ACK_RANGING_DATA: { break; case Opcode::ACK_RANGING_DATA: OnAckRangingData(&command, tracker); } break; break; case Opcode::RETRIEVE_LOST_RANGING_DATA_SEGMENTS: case Opcode::ABORT_OPERATION: case Opcode::FILTER: case Opcode::PCT_FORMAT: { log::warn("Unsupported opcode:0x{:02x}, {}", (uint16_t)command.opcode_, GetOpcodeText(command.opcode_)); SendResponseCode(ResponseCodeValue::OP_CODE_NOT_SUPPORTED, tracker); } break; break; default: log::warn("Unknown opcode:0x{:02x}", (uint16_t)command.opcode_); SendResponseCode(ResponseCodeValue::OP_CODE_NOT_SUPPORTED, tracker); Loading system/bta/ras/ras_types.h +1 −3 Original line number Diff line number Diff line Loading @@ -58,7 +58,6 @@ static const uint32_t kRealTimeRangingData = 0x01; static const uint32_t kRetrieveLostRangingDataSegments = 0x02; static const uint32_t kAbortOperation = 0x04; static const uint32_t kFilterRangingData = 0x08; static const uint32_t kPctPhaseFormat = 0xA0; } // namespace feature enum class Opcode : uint8_t { Loading @@ -67,7 +66,6 @@ enum class Opcode : uint8_t { RETRIEVE_LOST_RANGING_DATA_SEGMENTS = 0x02, ABORT_OPERATION = 0x03, FILTER = 0x04, PCT_FORMAT = 0x05, }; static const uint8_t OPERATOR_NULL = 0x00; Loading @@ -88,7 +86,7 @@ enum class ResponseCodeValue : uint8_t { PERSISTED = 0x04, ABORT_UNSUCCESSFUL = 0x05, PROCEDURE_NOT_COMPLETED = 0x06, OPERAND_NOT_SUPPORTED = 0x07, SERVER_BUSY = 0x07, NO_RECORDS_FOUND = 0x08, }; Loading system/bta/ras/ras_utils.cc +7 −14 Original line number Diff line number Diff line Loading @@ -64,23 +64,18 @@ bool ParseControlPointCommand(ControlPointCommand* command, const uint8_t* value return false; } 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: { case (uint8_t)Opcode::FILTER: if (len != 3) { return false; } } break; case (uint8_t)Opcode::RETRIEVE_LOST_RANGING_DATA_SEGMENTS: { break; case (uint8_t)Opcode::RETRIEVE_LOST_RANGING_DATA_SEGMENTS: if (len != 5) { return false; } } break; break; default: log::warn("unknown opcode 0x{:02x}", value[0]); return false; Loading @@ -102,8 +97,6 @@ std::string GetOpcodeText(Opcode opcode) { return "ABORT_OPERATION"; case Opcode::FILTER: return "FILTER"; case Opcode::PCT_FORMAT: return "PCT_FORMAT"; default: return "Unknown Opcode"; } Loading @@ -125,12 +118,12 @@ std::string GetResponseOpcodeValueText(ResponseCodeValue response_code_value) { return "ABORT_UNSUCCESSFUL"; case ResponseCodeValue::PROCEDURE_NOT_COMPLETED: return "PROCEDURE_NOT_COMPLETED"; case ResponseCodeValue::OPERAND_NOT_SUPPORTED: return "OPERAND_NOT_SUPPORTED"; case ResponseCodeValue::SERVER_BUSY: return "SERVER_BUSY"; case ResponseCodeValue::NO_RECORDS_FOUND: return "NO_RECORDS_FOUND"; default: return "Unknown Opcode"; return "Reserved for Future Use"; } } Loading Loading
system/bta/ras/ras_client.cc +7 −10 Original line number Diff line number Diff line Loading @@ -120,7 +120,7 @@ public: callbacks_->OnConnected(address, att_handle, tracker->vendor_specific_characteristics_); return; } BTA_GATTC_Open(gatt_if_, ble_bd_addr.bda, BTM_BLE_DIRECT_CONNECTION, false); BTA_GATTC_Open(gatt_if_, ble_bd_addr.bda, BTM_BLE_DIRECT_CONNECTION, true); } void SendVendorSpecificReply( Loading @@ -142,7 +142,7 @@ public: log::debug("write to remote, uuid {}, len {}", vendor_specific_characteristic.characteristicUuid_, vendor_specific_characteristic.value_.size()); BTA_GATTC_WriteCharValue(tracker->conn_id_, characteristic->value_handle, GATT_WRITE, BTA_GATTC_WriteCharValue(tracker->conn_id_, characteristic->value_handle, GATT_WRITE_NO_RSP, vendor_specific_characteristic.value_, GATT_AUTH_REQ_NO_MITM, GattWriteCallback, &gatt_write_callback_data_); } Loading Loading @@ -206,7 +206,7 @@ public: BTA_GATTC_Close(evt.conn_id); return; } tracker->is_connected_ = false; trackers_.remove(tracker); } void OnGattServiceSearchComplete(const tBTA_GATTC_SEARCH_CMPL& evt) { Loading Loading @@ -364,8 +364,8 @@ public: value[0] = (uint8_t)Opcode::GET_RANGING_DATA; value[1] = (uint8_t)(ranging_counter & 0xFF); value[2] = (uint8_t)((ranging_counter >> 8) & 0xFF); BTA_GATTC_WriteCharValue(tracker->conn_id_, characteristic->value_handle, GATT_WRITE, value, GATT_AUTH_REQ_NO_MITM, GattWriteCallback, nullptr); BTA_GATTC_WriteCharValue(tracker->conn_id_, characteristic->value_handle, GATT_WRITE_NO_RSP, value, GATT_AUTH_REQ_NO_MITM, GattWriteCallback, nullptr); } void AckRangingData(uint16_t ranging_counter, std::shared_ptr<RasTracker> tracker) { Loading @@ -380,8 +380,8 @@ public: value[0] = (uint8_t)Opcode::ACK_RANGING_DATA; value[1] = (uint8_t)(ranging_counter & 0xFF); value[2] = (uint8_t)((ranging_counter >> 8) & 0xFF); BTA_GATTC_WriteCharValue(tracker->conn_id_, characteristic->value_handle, GATT_WRITE, value, GATT_AUTH_REQ_NO_MITM, GattWriteCallback, nullptr); BTA_GATTC_WriteCharValue(tracker->conn_id_, characteristic->value_handle, GATT_WRITE_NO_RSP, value, GATT_AUTH_REQ_NO_MITM, GattWriteCallback, nullptr); if (ranging_counter != tracker->latest_ranging_counter_) { GetRangingData(tracker->latest_ranging_counter_, tracker); } Loading Loading @@ -612,9 +612,6 @@ public: if ((value & kFilterRangingData) != 0) { ss << "|Filter Ranging Data"; } if ((value & kPctPhaseFormat) != 0) { ss << "|PCT Phase Format"; } } return ss.str(); } Loading
system/bta/ras/ras_server.cc +45 −10 Original line number Diff line number Diff line Loading @@ -69,6 +69,8 @@ public: bool handling_control_point_command_ = false; uint8_t vendor_specific_reply_counter_ = 0; PendingWriteResponse pending_write_response_; uint16_t last_ready_procedure_ = 0; uint16_t last_overwritten_procedure_ = 0; }; void Initialize() { Loading Loading @@ -138,6 +140,7 @@ public: std::lock_guard<std::mutex> lock(on_demand_ranging_mutex_); DataBuffer& data_buffer = InitDataBuffer(ble_bd_addr.bda, procedure_counter); data_buffer.segments_.push_back(data); tracker.last_ready_procedure_ = procedure_counter; // Send data ready if (is_last) { Loading @@ -158,6 +161,7 @@ public: // Send data overwritten if (tracker.buffers_.size() > kBufferSize) { auto begin = tracker.buffers_.begin(); tracker.last_overwritten_procedure_ = begin->ranging_counter_; if (ccc_data_over_written == GATT_CLT_CONFIG_NONE || ccc_real_time != GATT_CLT_CONFIG_NONE) { log::debug("Skip Ranging Data Over Written"); tracker.buffers_.erase(begin); Loading @@ -181,6 +185,9 @@ public: case BTA_GATTS_CONNECT_EVT: { OnGattConnect(p_data); } break; case BTA_GATTS_DISCONNECT_EVT: { OnGattDisconnect(p_data); } break; case BTA_GATTS_REG_EVT: { OnGattServerRegister(p_data); } break; Loading Loading @@ -215,6 +222,14 @@ public: trackers_[address].conn_id_ = p_data->conn.conn_id; } void OnGattDisconnect(tBTA_GATTS* p_data) { auto address = p_data->conn.remote_bda; log::info("Address: {}, conn_id:{}", address, p_data->conn.conn_id); if (trackers_.find(address) != trackers_.end()) { trackers_.erase(address); } } void OnGattServerRegister(tBTA_GATTS* p_data) { tGATT_STATUS status = p_data->reg_oper.status; log::info("status: {}", gatt_status_text(p_data->reg_oper.status)); Loading Loading @@ -279,7 +294,7 @@ public: ranging_data_ready_characteristic.uuid = kRasRangingDataReadyCharacteristic; ranging_data_ready_characteristic.type = BTGATT_DB_CHARACTERISTIC; ranging_data_ready_characteristic.properties = GATT_CHAR_PROP_BIT_NOTIFY | GATT_CHAR_PROP_BIT_INDICATE; GATT_CHAR_PROP_BIT_READ | GATT_CHAR_PROP_BIT_NOTIFY | GATT_CHAR_PROP_BIT_INDICATE; ranging_data_ready_characteristic.permissions = GATT_PERM_READ_ENCRYPTED | key_mask; service.push_back(ranging_data_ready_characteristic); service.push_back(ccc_descriptor); Loading @@ -289,7 +304,7 @@ public: ranging_data_overwritten_characteristic.uuid = kRasRangingDataOverWrittenCharacteristic; ranging_data_overwritten_characteristic.type = BTGATT_DB_CHARACTERISTIC; ranging_data_overwritten_characteristic.properties = GATT_CHAR_PROP_BIT_NOTIFY | GATT_CHAR_PROP_BIT_INDICATE; GATT_CHAR_PROP_BIT_READ | GATT_CHAR_PROP_BIT_NOTIFY | GATT_CHAR_PROP_BIT_INDICATE; ranging_data_overwritten_characteristic.permissions = GATT_PERM_READ_ENCRYPTED | key_mask; service.push_back(ranging_data_overwritten_characteristic); service.push_back(ccc_descriptor); Loading Loading @@ -337,6 +352,13 @@ public: return; } log::info("Read uuid, {}", getUuidName(uuid)); ClientTracker* tracker = &trackers_[p_data->req_data.remote_bda]; if (trackers_.find(p_data->req_data.remote_bda) == trackers_.end()) { log::warn("Can't find tracker for {}", p_data->req_data.remote_bda); BTA_GATTS_SendRsp(p_data->req_data.conn_id, p_data->req_data.trans_id, GATT_ILLEGAL_PARAMETER, &p_msg); return; } // Check Characteristic UUID switch (uuid.As16Bit()) { Loading @@ -344,6 +366,20 @@ public: p_msg.attr_value.len = kFeatureSize; memcpy(p_msg.attr_value.value, &kSupportedFeatures, sizeof(uint32_t)); } break; case kRasRangingDataReadyCharacteristic16bit: { p_msg.attr_value.len = kRingingCounterSize; std::vector<uint8_t> value(kRingingCounterSize); if (tracker->buffers_.size() > 0) { p_msg.attr_value.value[0] = (tracker->last_ready_procedure_ & 0xFF); p_msg.attr_value.value[1] = (tracker->last_ready_procedure_ >> 8) & 0xFF; } } break; case kRasRangingDataOverWrittenCharacteristic16bit: { p_msg.attr_value.len = kRingingCounterSize; std::vector<uint8_t> value(kRingingCounterSize); p_msg.attr_value.value[0] = (tracker->last_overwritten_procedure_ & 0xFF); p_msg.attr_value.value[1] = (tracker->last_overwritten_procedure_ >> 8) & 0xFF; } break; default: log::warn("Unhandled uuid {}", uuid.ToString()); BTA_GATTS_SendRsp(p_data->req_data.conn_id, p_data->req_data.trans_id, Loading Loading @@ -418,8 +454,8 @@ public: } ClientTracker* tracker = &trackers_[p_data->req_data.remote_bda]; if (tracker->handling_control_point_command_) { log::warn("Procedure Already In Progress"); BTA_GATTS_SendRsp(conn_id, p_data->req_data.trans_id, GATT_PRC_IN_PROGRESS, &p_msg); log::warn("Server busy"); SendResponseCode(ResponseCodeValue::SERVER_BUSY, tracker); return; } if (need_rsp) { Loading Loading @@ -532,20 +568,19 @@ public: tracker->handling_control_point_command_ = true; switch (command.opcode_) { case Opcode::GET_RANGING_DATA: { case Opcode::GET_RANGING_DATA: OnGetRangingData(&command, tracker); } break; case Opcode::ACK_RANGING_DATA: { break; case Opcode::ACK_RANGING_DATA: OnAckRangingData(&command, tracker); } break; break; case Opcode::RETRIEVE_LOST_RANGING_DATA_SEGMENTS: case Opcode::ABORT_OPERATION: case Opcode::FILTER: case Opcode::PCT_FORMAT: { log::warn("Unsupported opcode:0x{:02x}, {}", (uint16_t)command.opcode_, GetOpcodeText(command.opcode_)); SendResponseCode(ResponseCodeValue::OP_CODE_NOT_SUPPORTED, tracker); } break; break; default: log::warn("Unknown opcode:0x{:02x}", (uint16_t)command.opcode_); SendResponseCode(ResponseCodeValue::OP_CODE_NOT_SUPPORTED, tracker); Loading
system/bta/ras/ras_types.h +1 −3 Original line number Diff line number Diff line Loading @@ -58,7 +58,6 @@ static const uint32_t kRealTimeRangingData = 0x01; static const uint32_t kRetrieveLostRangingDataSegments = 0x02; static const uint32_t kAbortOperation = 0x04; static const uint32_t kFilterRangingData = 0x08; static const uint32_t kPctPhaseFormat = 0xA0; } // namespace feature enum class Opcode : uint8_t { Loading @@ -67,7 +66,6 @@ enum class Opcode : uint8_t { RETRIEVE_LOST_RANGING_DATA_SEGMENTS = 0x02, ABORT_OPERATION = 0x03, FILTER = 0x04, PCT_FORMAT = 0x05, }; static const uint8_t OPERATOR_NULL = 0x00; Loading @@ -88,7 +86,7 @@ enum class ResponseCodeValue : uint8_t { PERSISTED = 0x04, ABORT_UNSUCCESSFUL = 0x05, PROCEDURE_NOT_COMPLETED = 0x06, OPERAND_NOT_SUPPORTED = 0x07, SERVER_BUSY = 0x07, NO_RECORDS_FOUND = 0x08, }; Loading
system/bta/ras/ras_utils.cc +7 −14 Original line number Diff line number Diff line Loading @@ -64,23 +64,18 @@ bool ParseControlPointCommand(ControlPointCommand* command, const uint8_t* value return false; } 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: { case (uint8_t)Opcode::FILTER: if (len != 3) { return false; } } break; case (uint8_t)Opcode::RETRIEVE_LOST_RANGING_DATA_SEGMENTS: { break; case (uint8_t)Opcode::RETRIEVE_LOST_RANGING_DATA_SEGMENTS: if (len != 5) { return false; } } break; break; default: log::warn("unknown opcode 0x{:02x}", value[0]); return false; Loading @@ -102,8 +97,6 @@ std::string GetOpcodeText(Opcode opcode) { return "ABORT_OPERATION"; case Opcode::FILTER: return "FILTER"; case Opcode::PCT_FORMAT: return "PCT_FORMAT"; default: return "Unknown Opcode"; } Loading @@ -125,12 +118,12 @@ std::string GetResponseOpcodeValueText(ResponseCodeValue response_code_value) { return "ABORT_UNSUCCESSFUL"; case ResponseCodeValue::PROCEDURE_NOT_COMPLETED: return "PROCEDURE_NOT_COMPLETED"; case ResponseCodeValue::OPERAND_NOT_SUPPORTED: return "OPERAND_NOT_SUPPORTED"; case ResponseCodeValue::SERVER_BUSY: return "SERVER_BUSY"; case ResponseCodeValue::NO_RECORDS_FOUND: return "NO_RECORDS_FOUND"; default: return "Unknown Opcode"; return "Reserved for Future Use"; } } Loading