/* * Copyright 2018-2023 NXP * * 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 contains the definition from UCI specification * ******************************************************************************/ #ifndef UWB_UCI_DEFS_H #define UWB_UCI_DEFS_H #include /* Define the message header size for all UCI Commands and Notifications */ #define UCI_MSG_HDR_SIZE 4 /* per UCI spec */ #define UCI_RESPONSE_STATUS_OFFSET 4 #define UCI_CMD_SESSION_ID_OFFSET 4 /* UCI Command and Notification Format: * 4 byte message header: * byte 0: MT PBF GID * byte 1: OID * byte 2: RFU - To be used for extended playload length * byte 3: Message Length */ /* MT: Message Type (byte 0) */ #define UCI_MT_MASK 0xE0 #define UCI_MT_SHIFT 5 #define UCI_MT_DATA 0 #define UCI_MT_CMD 1 /* (UCI_MT_CMD << UCI_MT_SHIFT) = 0x20 */ #define UCI_MT_RSP 2 /* (UCI_MT_RSP << UCI_MT_SHIFT) = 0x40 */ #define UCI_MT_NTF 3 /* (UCI_MT_NTF << UCI_MT_SHIFT) = 0x60 */ /* PBF: Packet Boundary Flag (byte 0) */ #define UCI_PBF_MASK 0x10 #define UCI_PBF_SHIFT 4 #define UCI_PBF_ST_CONT 0x10 /* start or continuing fragment */ /* Ocet 3 = Payload Length(L) */ #define UCI_PAYLOAD_LENGTH_OFFSET 3 /* GID: Group Identifier (byte 0) */ #define UCI_GID_MASK 0x0F #define UCI_GID_CORE 0x00 /* UCI Core group */ #define UCI_GID_SESSION_MANAGE 0x01 /* Session Config Group */ #define UCI_GID_SESSION_CONTROL 0x02 /* Session Control Group */ #define UCI_GID_ANDROID 0x0C /* Android vendor group */ #define UCI_GID_PROPRIETARY_0X0A 0x0A /* Proprietary Group */ #define UCI_GID_PROPRIETARY 0x0E /* Proprietary Group */ #define UCI_GID_PROPRIETARY_0X0F 0x0F /* Proprietary Group */ #define UCI_GID_INTERNAL 0x0B /* Internal Group */ /* OID: Opcode Identifier (byte 1) */ #define UCI_OID_MASK 0x3F #define UCI_OID_SHIFT 0 /* builds byte0 of UCI Command and Notification packet */ #define UCI_MSG_BLD_HDR0(p, mt, gid) \ *(p)++ = (uint8_t)(((mt) << UCI_MT_SHIFT) | (gid)); #define UCI_MSG_PBLD_HDR0(p, mt, pbf, gid) \ *(p)++ = (uint8_t)(((mt) << UCI_MT_SHIFT) | ((pbf) << UCI_PBF_SHIFT) | (gid)); /* builds byte1 of UCI Command and Notification packet */ #define UCI_MSG_BLD_HDR1(p, oid) *(p)++ = (uint8_t)(((oid) << UCI_OID_SHIFT)); /* parse byte0 of UCI packet */ #define UCI_MSG_PRS_HDR0(p, mt, pbf, gid) \ mt = (*(p)&UCI_MT_MASK) >> UCI_MT_SHIFT; \ pbf = (*(p)&UCI_PBF_MASK) >> UCI_PBF_SHIFT; \ gid = *(p)++ & UCI_GID_MASK; /* parse MT and PBF bits of UCI packet */ #define UCI_MSG_PRS_MT_PBF(p, mt, pbf) \ mt = (*(p)&UCI_MT_MASK) >> UCI_MT_SHIFT; \ pbf = (*(p)&UCI_PBF_MASK) >> UCI_PBF_SHIFT; /* parse byte1 of UCI Cmd/Ntf */ #define UCI_MSG_PRS_HDR1(p, oid) \ oid = (*(p)&UCI_OID_MASK); \ (p)++; #define UINT8_TO_STREAM(p, u8) \ { *(p)++ = (uint8_t)(u8); } #define ARRAY_TO_STREAM(p, a, len) \ { \ int ijk; \ for (ijk = 0; ijk < (len); ijk++) *(p)++ = (uint8_t)(a)[ijk]; \ } /* Allocate smallest possible buffer (for platforms with limited RAM) */ #define UCI_GET_CMD_BUF(paramlen) \ ((UWB_HDR*)phUwb_GKI_getbuf((uint16_t)(UWB_HDR_SIZE + UCI_MSG_HDR_SIZE + \ UCI_MSG_OFFSET_SIZE + (paramlen)))) /********************************************** * UCI Core Group-0: Opcodes and size of commands **********************************************/ #define UCI_MSG_CORE_DEVICE_STATUS_NTF 1 #define UCI_MSG_CORE_DEVICE_INFO 2 #define UCI_MSG_CORE_GET_CAPS_INFO 3 #define UCI_MSG_CORE_GET_CAPS_INFO_NR_OFFSET 5 #define UCI_MSG_CORE_GET_CAPS_INFO_TLV_OFFSET 6 #define UCI_MSG_CORE_SET_CONFIG 4 #define UCI_MSG_CORE_GENERIC_ERROR_NTF 7 /********************************************************* * UCI session config Group-1: Opcodes and size of command ********************************************************/ #define UCI_MSG_SESSION_STATUS_NTF 2 #define UCI_MSG_SESSION_STATUS_NTF_HANDLE_OFFSET 4 #define UCI_MSG_SESSION_STATUS_NTF_STATE_OFFSET 8 #define UCI_MSG_SESSION_STATUS_NTF_REASON_OFFSET 9 #define UCI_MSG_SESSION_STATUS_NTF_LENGTH 10 #define UCI_MSG_SESSION_STATE_INIT (0x00) #define UCI_MSG_SESSION_STATE_INIT_CMD_LEN (9) #define UCI_MSG_SESSION_STATE_INIT_CMD_ID_OFFSET (4) #define UCI_MSG_SESSION_STATE_INIT_CMD_TYPE_OFFSET (8) #define UCI_MSG_SESSION_STATE_INIT_RSP_LEN (9) #define UCI_MSG_SESSION_STATE_INIT_RSP_STATUS_OFFSET (4) #define UCI_MSG_SESSION_STATE_INIT_RSP_HANDLE_OFFSET (5) #define UCI_MSG_SESSION_STATE_DEINIT (0x01) #define UCI_MSG_SESSION_STATE_ACTIVE (0x02) #define UCI_MSG_SESSION_STATE_IDLE (0x03) #define UCI_MSG_SESSION_STATE_UNDEFINED (0xFF) // SW defined #define UCI_MSG_SESSION_SET_APP_CONFIG 3 #define UCI_MSG_SESSION_SET_APP_CONFIG_HANDLE_OFFSET 4 #define UCI_MSG_SESSION_GET_APP_CONFIG 4 // Parameter Tags #define UCI_APP_CONFIG_FIRA_STS_INDEX 0x0A #define UCI_APP_CONFIG_CCC_LAST_STS_INDEX_USED 0xA8 #define UCI_MSG_SESSION_QUERY_DATA_SIZE 0x0B #define UCI_MSG_SESSION_QUERY_DATA_SIZE_STATUS_OFFSET 8 // Session Type field in SESSION_INIT_CMD constexpr uint8_t kSessionType_Ranging = 0x00; constexpr uint8_t kSessionType_RangingAndData = 0x01; constexpr uint8_t kSessionType_CCCRanging = 0xA0; /********************************************************* * UCI session config Group-2: Opcodes and size of command ********************************************************/ #define UCI_MSG_SESSION_START 0x00 #define UCI_MSG_SESSION_START_CMD_LENGTH (8) #define UCI_MSG_SESSION_START_HANDLE_OFFSET (4) #define UCI_MSG_SESSION_STOP 0x01 /********************************************************** * UCI Android Vendor Group-C: Opcodes and size of commands **********************************************************/ #define UCI_MSG_ANDROID_SET_COUNTRY_CODE 0x01 /********************************************** * UWB Prop Group Opcode-E Opcodes **********************************************/ #define UCI_MSG_BINDING_STATUS_NTF 0x06 /********************************************************** * OTP Calibration **********************************************************/ #define UCI_MSG_WRITE_CALIB_DATA 0x00 #define UCI_MSG_READ_CALIB_DATA 0x01 #define OTP_ID_XTAL_CAP_GM_CTRL 0x02 /********************************************** * UWB Prop Group Opcode-F Opcodes **********************************************/ #define UCI_MSG_URSK_DELETE 0x01 #define UCI_MSG_SET_DEVICE_CALIBRATION 0x21 #define UCI_MSG_GET_DEVICE_CALIBRATION 0x22 #define UCI_MSG_UWB_ESE_BINDING 0x31 #define UCI_MSG_UWB_ESE_BINDING_CHECK 0x32 /********************************************** * UCI Parameter IDs : Device Configurations **********************************************/ #define UCI_PARAM_ID_LOW_POWER_MODE 0x01 /************************************************* * UCI Parameter IDs : Application Configurations ************************************************/ #define UCI_PARAM_ID_CHANNEL_NUMBER 0x04 #define UCI_PARAM_ID_TX_ADAPTIVE_PAYLOAD_POWER 0x1C /* 2.0.0-0.9r4 CR-1038 removed this */ #define UCI_PARAM_ID_AOA_AZIMUTH_MEASUREMENTS 0xE3 #define UCI_PARAM_ID_AOA_ELEVATION_MEASUREMENTS 0xE4 #define UCI_PARAM_ID_RANGE_MEASUREMENTS 0xE5 /************************************************* * Device Calibration Parameters IDs ************************************************/ // XXX: Should this be chip-dependant? #define NXP_PARAM_ID_TX_POWER_PER_ANTENNA 0x04 /************************************************* * Status codes ************************************************/ /* Generic Status Codes */ #define UCI_STATUS_OK 0x00 #define UCI_STATUS_FAILED 0x02 #define UCI_STATUS_INVALID_PARAM 0x04 #define UCI_STATUS_COMMAND_RETRY 0x0A #define UCI_STATUS_UNKNOWN 0x0B #define UCI_STATUS_THERMAL_RUNAWAY 0x54 #define UCI_STATUS_LOW_VBAT 0x59 #define UCI_STATUS_HW_RESET 0xFE /* Status code for feature not supported */ #define UCI_STATUS_FEATURE_NOT_SUPPORTED 0x55 #define UCI_STATUS_COUNTRY_CODE_BLOCKED_CHANNEL 0x56 #define UCI_STATUS_CODE_ANDROID_REGULATION_UWB_OFF 0x53 #endif /* UWB_UCI_DEFS_H */