// Copyright 2022, The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// This file defines the requests and responses of the UwbService's methods.
// Most of the elements are referred to the FiRa Consortium UWB Command
// Interface Generic Techinal Specification Version 1.1.0.
//
// Note: Due to the protobuf's restriction: the first field of enum must be
// zero, the value of some enum fields are not the same as the UCI
// specification. Also, the default value of some fields defined at UCI
// specification is not zero. The client should set all the fields when creating
// protobuf structure, instead of relying the default value of protobuf.

syntax = "proto3";
package uwb_core;

// The status code of the method response, containing variants of error::Error
// and OK.
enum Status {
  // The method is executed successfully.
  OK = 0;

  // The provided parameters are invalid, or the method is not allowed to be
  // called in the current state.
  BAD_PARAMETERS = 1;

  // The maximum number of sessions has been reached.
  MAX_SESSIONS_EXCEEDED = 2;

  // Max ranging round retries reached.
  MAX_RR_RETRY_REACHED = 3;

  // Fails due to a protocol specific reason.
  PROTOCOL_SPECIFIC = 4;

  // The remote device has requested to change the session.
  REMOTE_REQUEST = 5;

  // The response or notification is not received in timeout.
  TIMEOUT = 6;

  // The command should be retried.
  COMMAND_RETRY = 7;

  // Duplicated SessionId.
  DUPLICATED_SESSION_ID = 8;

  //Regulation UWB off
  REGULATION_UWB_OFF = 9;

  // The unknown error.
  UNKNOWN = 10;
}

// Represent uwb_uci_packets::StatusCode.
enum StatusCode {
  UCI_STATUS_OK = 0;
  UCI_STATUS_REJECTED = 1;
  UCI_STATUS_FAILED = 2;
  UCI_STATUS_SYNTAX_ERROR = 3;
  UCI_STATUS_INVALID_PARAM = 4;
  UCI_STATUS_INVALID_RANGE = 5;
  UCI_STATUS_INVALID_MSG_SIZE = 6;
  UCI_STATUS_UNKNOWN_GID = 7;
  UCI_STATUS_UNKNOWN_OID = 8;
  UCI_STATUS_READ_ONLY = 9;
  UCI_STATUS_COMMAND_RETRY = 10;
  UCI_STATUS_UNKNOWN = 11;

  UCI_STATUS_SESSION_NOT_EXIST = 17;
  UCI_STATUS_SESSION_DUPLICATE = 18;
  UCI_STATUS_SESSION_ACTIVE = 19;
  UCI_STATUS_MAX_SESSIONS_EXCEEDED = 20;
  UCI_STATUS_SESSION_NOT_CONFIGURED = 21;
  UCI_STATUS_ACTIVE_SESSIONS_ONGOING = 22;
  UCI_STATUS_MULTICAST_LIST_FULL = 23;
  UCI_STATUS_ADDRESS_NOT_FOUND = 24;
  UCI_STATUS_ADDRESS_ALREADY_PRESENT = 25;
  UCI_STATUS_OK_NEGATIVE_DISTANCE_REPORT = 27;

  UCI_STATUS_RANGING_TX_FAILED = 32;
  UCI_STATUS_RANGING_RX_TIMEOUT = 33;
  UCI_STATUS_RANGING_RX_PHY_DEC_FAILED = 34;
  UCI_STATUS_RANGING_RX_PHY_TOA_FAILED = 35;
  UCI_STATUS_RANGING_RX_PHY_STS_FAILED = 36;
  UCI_STATUS_RANGING_RX_MAC_DEC_FAILED = 37;
  UCI_STATUS_RANGING_RX_MAC_IE_DEC_FAILED = 38;
  UCI_STATUS_RANGING_RX_MAC_IE_MISSING = 39;
  UCI_STATUS_ERROR_ROUND_INDEX_NOT_ACTIVATED = 40;
  UCI_STATUS_ERROR_NUMBER_OF_ACTIVE_RANGING_ROUNDS_EXCEEDED = 41;
  UCI_STATUS_ERROR_DL_TDOA_DEVICE_ADDRESS_NOT_MATCHING_IN_REPLY_TIME_LIST = 42;

  UCI_STATUS_DATA_MAX_TX_PSDU_SIZE_EXCEEDED = 48;
  UCI_STATUS_DATA_RX_CRC_ERROR = 49;

  UCI_STATUS_ERROR_CCC_SE_BUSY = 80;
  UCI_STATUS_ERROR_CCC_LIFECYCLE = 81;
  UCI_STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT = 82;
  UCI_STATUS_REGULATION_UWB_OFF = 83;
  // All vendor specific status code will be mapped to UCI_STATUS_VENDOR_SPECIFIC.
  UCI_STATUS_RFU_OR_VENDOR_SPECIFIC = 255;
}

// Represent uwb_uci_packets::DeviceState.
enum DeviceState {
    DEVICE_STATE_READY = 0;
    DEVICE_STATE_ACTIVE = 1;
    DEVICE_STATE_ERROR = 2;
}

// Represent uwb_uci_packets::SessionState.
enum SessionState {
  INIT = 0;
  DEINIT = 1;
  ACTIVE = 2;
  IDLE = 3;
}

// Represent uwb_uci_packets::ReasonCode.
enum ReasonCode {
  STATE_CHANGE_WITH_SESSION_MANAGEMENT_COMMANDS = 0;
  MAX_RANGING_ROUND_RETRY_COUNT_REACHED = 1;
  MAX_NUMBER_OF_MEASUREMENTS_REACHED = 2;
  SESSION_SUSPENDED_DUE_TO_INBAND_SIGNAL = 3;
  SESSION_RESUMED_DUE_TO_INBAND_SIGNAL = 4;
  SESSION_STOPPED_DUE_TO_INBAND_SIGNAL = 5;
  ERROR_INVALID_UL_TDOA_RANDOM_WINDOW = 29;
  ERROR_MIN_RFRAMES_PER_RR_NOT_SUPPORTED = 30;
  ERROR_INTER_FRAME_INTERVAL_NOT_SUPPORTED = 31;
  ERROR_SLOT_LENGTH_NOT_SUPPORTED = 32;
  ERROR_INSUFFICIENT_SLOTS_PER_RR = 33;
  ERROR_MAC_ADDRESS_MODE_NOT_SUPPORTED = 34;
  ERROR_INVALID_RANGING_DURATION = 35;
  ERROR_INVALID_STS_CONFIG = 36;
  ERROR_INVALID_RFRAME_CONFIG = 37;
  ERROR_HUS_NOT_ENOUGH_SLOTS = 38;
  ERROR_HUS_CFP_PHASE_TOO_SHORT = 39;
  ERROR_HUS_CAP_PHASE_TOO_SHORT = 40;
  ERROR_HUS_OTHERS = 41;
  ERROR_STATUS_SESSION_KEY_NOT_FOUND = 42;
  ERROR_STATUS_SUB_SESSION_KEY_NOT_FOUND = 43;
  ERROR_INVALID_PREAMBLE_CODE_INDEX = 44;
  ERROR_INVALID_SFD_ID = 45;
  ERROR_INVALID_PSDU_DATA_RATE = 46;
  ERROR_INVALID_PHR_DATA_RATE = 47;
  ERROR_INVALID_PREAMBLE_DURATION = 48;
  ERROR_INVALID_STS_LENGTH = 49;
  ERROR_INVALID_NUM_OF_STS_SEGMENTS = 50;
  ERROR_INVALID_NUM_OF_CONTROLEES = 51;
  ERROR_MAX_RANGING_REPLY_TIME_EXCEEDED = 52;
  ERROR_INVALID_DST_ADDRESS_LIST = 53;
  ERROR_INVALID_OR_NOT_FOUND_SUB_SESSION_ID = 54;
  ERROR_INVALID_RESULT_REPORT_CONFIG = 55;
  ERROR_INVALID_RANGING_ROUND_CONTROL_CONFIG = 56;
  ERROR_INVALID_RANGING_ROUND_USAGE = 57;
  ERROR_INVALID_MULTI_NODE_MODE = 58;
  ERROR_RDS_FETCH_FAILURE = 59;
  ERROR_REF_UWB_SESSION_DOES_NOT_EXIST = 60;
  ERROR_REF_UWB_SESSION_RANGING_DURATION_MISMATCH = 61;
  ERROR_REF_UWB_SESSION_INVALID_OFFSET_TIME = 62;
  ERROR_REF_UWB_SESSION_LOST = 63;
  ERROR_INVALID_CHANNEL_WITH_AOA = 128;
  ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT = 129;
  ERROR_DT_ANCHOR_RANGING_ROUNDS_NOT_CONFIGURED = 130;
  ERROR_DT_TAG_RANGING_ROUNDS_NOT_CONFIGURED = 131;
  SESSION_STOPPED_DUE_TO_MAX_STS_INDEX_VALUE = 162;
  // All vendor reason code will be mapped to ERROR_VENDOR_SPECIFIC.
  ERROR_RFU_OR_VENDOR_SPECIFIC = 255;
}

// Represent uwb_uci_packets::RangingMeasurementType.
enum RangingMeasurementType {
  ONE_WAY = 0;
  TWO_WAY = 1;
  DL_TDOA = 2;
  OWR_AOA = 3;
}

// Represent uwb_uci_packets::SessionType.
enum SessionType {
  FIRA_RANGING_SESSION = 0x00;
  FIRA_RANGING_AND_IN_BAND_DATA_SESSION = 0x01;
  FIRA_DATA_TRANSFER = 0x02;
  FIRA_RANGING_ONLY_PHASE = 0x03;
  FIRA_IN_BAND_DATA_PHASE = 0x04;
  FIRA_RANGING_WITH_DATA_PHASE = 0x05;
  FIRA_HUS_PRIMARY_SESSION = 0x9F;
  CCC = 0xA0;
  RADAR_SESSION = 0xA1;
  ALIRO = 0xA2;
  DEVICE_TEST_MODE = 0xD0;
}

// Represent uwb_uci_packets::UpdateMulticastListAction.
enum UpdateMulticastListAction {
  ADD_CONTROLEE = 0;
  REMOVE_CONTROLEE = 1;
  ADD_CONTROLEE_WITH_SHORT_SUB_SESSION_KEY = 2;
  ADD_CONTROLEE_WITH_LONG_SUB_SESSION_KEY = 3;
}

// Represent uwb_uci_packets::MacAddressIndicator.
enum MacAddressIndicator {
  SHORT_ADDRESS = 0x00;
  EXTENDED_ADDRESS = 0x01;
}

// Represent uwb_core::params::fira_app_config_params::DeviceType.
enum DeviceType {
  CONTROLEE = 0;
  CONTROLLER = 1;
}

// Represent uwb_core::params::fira_app_config_params::RangingRoundUsage.
enum RangingRoundUsage {
  SS_TWR = 0;
  DS_TWR = 1;
  SS_TWR_NON = 2;
  DS_TWR_NON = 3;
}

// Represent uwb_core::params::fira_app_config_params::StsConfig.
enum StsConfig {
  STATIC = 0;
  DYNAMIC = 1;
  DYNAMIC_FOR_CONTROLEE_INDIVIDUAL_KEY = 2;
}

// Represent uwb_core::params::fira_app_config_params::MultiNodeMode.
enum MultiNodeMode {
  UNICAST = 0;
  ONE_TO_MANY = 1;
  MANY_TO_MANY = 2;
}

// Represent uwb_core::params::fira_app_config_params::UwbChannel.
enum UwbChannel {
  CHANNEL_5 = 0;
  CHANNEL_6 = 1;
  CHANNEL_8 = 2;
  CHANNEL_9 = 3;
  CHANNEL_10 = 4;
  CHANNEL_12 = 5;
  CHANNEL_13 = 6;
  CHANNEL_14 = 7;
}

// Represent uwb_core::params::fira_app_config_params::MacFcsType.
enum MacFcsType {
  CRC_16 = 0;
  CRC_32 = 1;
}

// Represent uwb_core::params::fira_app_config_params::AoaResultRequest.
enum AoaResultRequest {
  NO_AOA_REPORT = 0;
  REQ_AOA_RESULTS = 1;
  REQ_AOA_RESULTS_AZIMUTH_ONLY = 2;
  REQ_AOA_RESULTS_ELEVATION_ONLY = 3;
  REQ_AOA_RESULTS_INTERLEAVED = 4;
}

// Represent uwb_core::params::fira_app_config_params::RangeDataNtfConfig.
enum RangeDataNtfConfig {
  RANGE_DATA_NTF_CONFIG_DISABLE = 0;
  RANGE_DATA_NTF_CONFIG_ENABLE = 1;
  RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY = 2;
}

// Represent uwb_core::params::fira_app_config_params::DeviceRole.
enum DeviceRole {
  RESPONDER = 0;
  INITIATOR = 1;
}

// Represent uwb_core::params::fira_app_config_params::RframeConfig.
enum RframeConfig {
  SP0 = 0;
  SP1 = 1;
  SP3 = 3;
}

// Represent uwb_core::params::fira_app_config_params::PsduDataRate.
enum PsduDataRate {
  RATE_6M_81 = 0;
  RATE_7M_80 = 1;
  RATE_27M_2 = 2;
  RATE_31M_2 = 3;
  RATE_850K = 4;
}

// Represent uwb_core::params::fira_app_config_params::PreambleDuration.
enum PreambleDuration {
  T32_SYMBOLS = 0;
  T64_SYMBOLS = 1;
}

// Represent uwb_core::params::fira_app_config_params::RangingTimeStruct.
enum RangingTimeStruct {
  INTERVAL_BASED_SCHEDULING = 0;
  BLOCK_BASED_SCHEDULING = 1;
}

// Represent uwb_core::params::fira_app_config_params::TxAdaptivePayloadPower.
enum TxAdaptivePayloadPower {
  TX_ADAPTIVE_PAYLOAD_POWER_DISABLE = 0;
  TX_ADAPTIVE_PAYLOAD_POWER_ENABLE = 1;
}

// Represent uwb_core::params::fira_app_config_params::PrfMode.
enum PrfMode {
  BPRF = 0;
  HPRF_WITH_124_8_MHZ = 1;
  HPRF_WITH_249_6_MHZ = 2;
}

// Represent uwb_core::params::fira_app_config_params::ScheduledMode.
enum ScheduledMode {
  TIME_SCHEDULED_RANGING = 0;
}

// Represent uwb_core::params::fira_app_config_params::KeyRotation.
enum KeyRotation {
  KEY_ROTATION_DISABLE = 0;
  KEY_ROTATION_ENABLE = 1;
}

// Represent uwb_core::params::fira_app_config_params::MacAddressMode.
enum MacAddressMode {
  MAC_ADDRESS_2_BYTES = 0;
  MAC_ADDRESS_8_BYTES_2_BYTES_HEADER = 1;
  MAC_ADDRESS_8_BYTES = 2;
}

// Represent uwb_core::params::fira_app_config_params::HoppingMode.
enum HoppingMode {
  HOPPING_MODE_DISABLE = 0;
  FIRA_HOPPING_ENABLE = 1;
}

// Represent uwb_core::params::fira_app_config_params::BprfPhrDataRate.
enum BprfPhrDataRate {
  BPRF_PHR_DATA_RATE_850K = 0;
  BPRF_PHR_DATA_RATE_6M_81 = 1;
}

// Represent uwb_core::params::fira_app_config_params::StsLength.
enum StsLength {
  LENGTH_32 = 0;
  LENGTH_64 = 1;
  LENGTH_128 = 2;
}

// Represent uwb_core::uci::uci_logger::UciLoggerMode.
enum UciLoggerMode {
  UCI_LOGGER_MODE_DISABLED = 0;
  UCI_LOGGER_MODE_UNFILTERED = 1;
  UCI_LOGGER_MODE_FILTERED = 2;
}

// Represent uwb_core::params::fira_app_config_params::RangingRoundControl.
message RangingRoundControl {
  bool ranging_result_report_message = 1;
  bool control_message = 2;
  bool measurement_report_message = 3;
}

// Represent uwb_core::params::fira_app_config_params::ResultReportConfig.
message ResultReportConfig {
  bool tof = 1;
  bool aoa_azimuth = 2;
  bool aoa_elevation = 3;
  bool aoa_fom = 4;
}

// Represent uwb_core::params::fira_app_config_params::FiraAppConfigParams.
message FiraAppConfigParams {
  DeviceType device_type = 1;
  RangingRoundUsage ranging_round_usage = 2;
  StsConfig sts_config = 3;
  MultiNodeMode multi_node_mode = 4;
  UwbChannel channel_number = 5;
  bytes device_mac_address = 6;
  repeated bytes dst_mac_address = 7;
  uint32 slot_duration_rstu = 8;
  uint32 ranging_duration_ms = 9;
  MacFcsType mac_fcs_type = 10;
  RangingRoundControl ranging_round_control = 11;
  AoaResultRequest aoa_result_request = 12;
  RangeDataNtfConfig range_data_ntf_config = 13;
  uint32 range_data_ntf_proximity_near_cm = 14;
  uint32 range_data_ntf_proximity_far_cm = 15;
  DeviceRole device_role = 16;
  RframeConfig rframe_config = 17;
  uint32 preamble_code_index = 18;
  uint32 sfd_id = 19;
  PsduDataRate psdu_data_rate = 20;
  PreambleDuration preamble_duration = 21;
  RangingTimeStruct ranging_time_struct = 22;
  uint32 slots_per_rr = 23;
  TxAdaptivePayloadPower tx_adaptive_payload_power = 24;
  uint32 responder_slot_index = 25;
  PrfMode prf_mode = 26;
  ScheduledMode scheduled_mode = 27;
  KeyRotation key_rotation = 28;
  uint32 key_rotation_rate = 29;
  uint32 session_priority = 30;
  MacAddressMode mac_address_mode = 31;
  bytes vendor_id = 32;
  bytes static_sts_iv = 33;
  uint32 number_of_sts_segments = 34;
  uint32 max_rr_retry = 35;
  uint32 uwb_initiation_time_ms = 36;
  HoppingMode hopping_mode = 37;
  uint32 block_stride_length = 38;
  ResultReportConfig result_report_config = 39;
  uint32 in_band_termination_attempt_count = 40;
  uint32 sub_session_id = 41;
  BprfPhrDataRate bprf_phr_data_rate = 42;
  uint32 max_number_of_measurements = 43;
  StsLength sts_length = 44;
  uint32 number_of_range_measurements = 45;
  uint32 number_of_aoa_azimuth_measurements = 46;
  uint32 number_of_aoa_elevation_measurements = 47;
}

// Represent uwb_uci_packets::Controlee.
message Controlee {
  uint32 short_address = 1;
  uint32 subsession_id = 2;
}

// Represent uwb_uci_packets::ShortAddressTwoWayRangingMeasurement or
// uwb_uci_packets::ExtendedAddressTwoWayRangingMeasurement.
message TwoWayRangingMeasurement {
  uint64 mac_address = 1;
  StatusCode status = 2;
  uint32 nlos = 3;
  uint32 distance = 4;
  uint32 aoa_azimuth = 5;
  uint32 aoa_azimuth_fom = 6;
  uint32 aoa_elevation = 7;
  uint32 aoa_elevation_fom = 8;
  uint32 aoa_destination_azimuth = 9;
  uint32 aoa_destination_azimuth_fom = 10;
  uint32 aoa_destination_elevation = 11;
  uint32 aoa_destination_elevation_fom = 12;
  uint32 slot_index = 13;
  uint32 rssi = 14;
}

// Represent uwb_uci_packets::ShortAddressOwrAoaRangingMeasurement or
// uwb_uci_packets::ExtendedAddressOwrAoaRangingMeasurement.
message OwrAoaRangingMeasurement {
  uint64 mac_address = 1;
  StatusCode status = 2;
  uint32 nlos = 3;
  uint32 block_index = 4;
  uint32 frame_sequence_number = 5;
  uint32 aoa_azimuth = 6;
  uint32 aoa_azimuth_fom = 7;
  uint32 aoa_elevation = 8;
  uint32 aoa_elevation_fom = 9;
}

// Represent uwb_uci_packets::ShortAddressDlTdoaRangingMeasurement or
// uwb_uci_packets::ExtendedAddressDlTdoaRangingMeasurement.
message DlTDoARangingMeasurement {
  uint64 mac_address = 1;
  StatusCode status = 2;
  uint32 message_control = 3;
  uint32 block_index = 4;
  uint32 round_index = 5;
  uint32 nlos = 6;
  uint32 aoa_azimuth = 7;
  uint32 aoa_azimuth_fom = 8;
  uint32 aoa_elevation = 9;
  uint32 aoa_elevation_fom = 10;
  uint32 rssi = 11;
  uint64 tx_timestamp = 12;
  uint64 rx_timestamp = 13;
  uint32 anchor_cfo = 14;
  uint32 cfo = 15;
  uint32 initiator_reply_time = 16;
  uint32 responder_reply_time = 17;
  uint32 initiator_responder_tof = 18;
  repeated uint32 dt_anchor_location = 19;
  repeated uint32 ranging_rounds = 20;
}

// Represent uwb_core::uci::notification::SessionRangeData;
message SessionRangeData {
  uint32 sequence_number = 1;
  uint32 session_id = 2;
  uint32 current_ranging_interval_ms = 3;
  RangingMeasurementType ranging_measurement_type = 4;
  repeated TwoWayRangingMeasurement twoway_ranging_measurements = 5;
  repeated DlTDoARangingMeasurement dltdoa_ranging_measurements = 6;
  OwrAoaRangingMeasurement owraoa_ranging_measurement = 7;
}

// Represent uwb_uci_packets::PowerStats;
message PowerStats {
  StatusCode status = 1;
  uint32 idle_time_ms = 2;
  uint32 tx_time_ms = 3;
  uint32 rx_time_ms = 4;
  uint32 total_wake_count = 5;
}

// Response of the UwbService::enable() method.
message EnableResponse {
  Status status = 1;
}

// Response of the UwbService::disable() method.
message DisableResponse {
  Status status = 1;
}

// Argument of the UwbService::SetLoggerMode() method.
message SetLoggerModeRequest {
  UciLoggerMode logger_mode = 1;
}

// Response of the UwbService::SetLoggerMode() method.
message SetLoggerModeResponse {
  Status status = 1;
}

// Argument of the UwbService::InitSession() method.
message InitSessionRequest {
  uint32 session_id = 1;
  SessionType session_type = 2;
  FiraAppConfigParams params = 3;
}

// Response of the UwbService::InitSession() method.
message InitSessionResponse {
  Status status = 1;
}

// Argument of the UwbService::DeinitSession() method.
message DeinitSessionRequest {
  uint32 session_id = 1;
}

// Response of the UwbService::DeinitSession() method.
message DeinitSessionResponse {
  Status status = 1;
}

// Argument of the UwbService::StartRanging() method.
message StartRangingRequest {
  uint32 session_id = 1;
}

// Response of the UwbService::StartRanging() method.
message StartRangingResponse {
  Status status = 1;
}

// Argument of the UwbService::StopRanging() method.
message StopRangingRequest {
  uint32 session_id = 1;
}

// Response of the UwbService::StopRanging() method.
message StopRangingResponse {
  Status status = 1;
}

// Argument of the UwbService::SessionParams() method.
message SessionParamsRequest {
  uint32 session_id = 1;
}

// Response of the UwbService::SessionParams() method.
message SessionParamsResponse {
  Status status = 1;
  FiraAppConfigParams params = 2;
}

// Argument of the UwbService::Reconfigure() method.
message ReconfigureRequest {
  uint32 session_id = 1;
  FiraAppConfigParams params = 2;
}

// Response of the UwbService::Reconfigure() method.
message ReconfigureResponse {
  Status status = 1;
}

// Argument of the UwbService::UpdateControllerMulticastList() method.
message UpdateControllerMulticastListRequest {
  uint32 session_id = 1;
  UpdateMulticastListAction action = 2;
  repeated Controlee controlees = 3;
}

// Response of the UwbService::UpdateControllerMulticastList() method.
message UpdateControllerMulticastListResponse {
  Status status = 1;
}

// Argument of the UwbService::AndroidSetCountryCode() method.
message AndroidSetCountryCodeRequest {
  string country_code = 1;
}

// Response of the UwbService::AndroidSetCountryCode() method.
message AndroidSetCountryCodeResponse {
  Status status = 1;
}

// Response of the UwbService::AndroidGetPowerStats() method.
message AndroidGetPowerStatsResponse {
  Status status = 1;
  PowerStats power_stats = 2;
}

// Argument of the UwbService::SendVendorCmd() method.
message SendVendorCmdRequest {
  uint32 gid = 1;
  uint32 oid = 2;
  bytes payload = 3;
  uint32 mt = 4;
}

// Response of the UwbService::SendVendorCmd() method.
message SendVendorCmdResponse {
  Status status = 1;
  uint32 gid = 2;
  uint32 oid = 3;
  bytes payload = 4;
}

// Argument of the UwbServiceCallback::onServiceReset() method.
message ServiceResetSignal {
  bool success = 1;
}

// Argument of the UwbServiceCallback::onUciDeviceStatusChanged() method.
message UciDeviceStatusChangedSignal {
  DeviceState state = 1;
}

// Argument of the UwbServiceCallback::onSessionStateChanged() method.
message SessionStateChangedSignal {
  uint32 session_id = 1;
  SessionState session_state = 2;
  ReasonCode reason_code = 3;
}

// Argument of the UwbServiceCallback::onRangeDataReceived() method.
message RangeDataReceivedSignal {
  uint32 session_id = 1;
  SessionRangeData range_data = 2;
}

// Argument of the UwbServiceCallback::onVendorNotificationReceived() method.
message VendorNotificationReceivedSignal {
  uint32 gid = 1;
  uint32 oid = 2;
  bytes payload = 3;
}
