49 #include "rl_datatypes.h" 50 #include "rl_protocol.h" 51 #include "rl_messages.h" 62 #define RL_API_CMD_RETRY_COUNT (3U) 63 #define RL_SBC_ERR_SB_SIZE (4U) 64 #define RL_PROTOCOL_ALIGN_SIZE (4U) 66 #define RL_PROTOCOL_DUMMY_BYTE (0xFFU) 67 #define RL_RSP_ERR_MSG_LEN (SYNC_PATTERN_LEN + RHCP_HEADER_LEN + \ 68 RL_SBC_ERR_SB_SIZE + RL_CRC_LEN_MAX) 78 #define RL_API_DIR_INVALID (0x0U) 79 #define RL_API_DIR_HOST_TO_BSS (0x1U) 80 #define RL_API_DIR_BSS_TO_HOST (0x2U) 81 #define RL_API_DIR_HOST_TO_DSS (0x3U) 82 #define RL_API_DIR_DSS_TO_HOST (0x4U) 83 #define RL_API_DIR_HOST_TO_MSS (0x5U) 84 #define RL_API_DIR_MSS_TO_HOST (0x6U) 85 #define RL_API_DIR_BSS_TO_MSS (0x7U) 86 #define RL_API_DIR_MSS_TO_BSS (0x8U) 87 #define RL_API_DIR_BSS_TO_DSS (0x9U) 88 #define RL_API_DIR_DSS_TO_BSS (0xAU) 89 #define RL_API_DIR_MSS_TO_DSS (0xBU) 90 #define RL_API_DIR_DSS_TO_MSS (0xCU) 91 #define RL_API_DIR_RESRVD (0xFU) 96 #define RL_API_CLASS_CMD (0x0U) 97 #define RL_API_CLASS_RSP (0x1U) 98 #define RL_API_CLASS_NACK (0x2U) 99 #define RL_API_CLASS_ASYNC (0x3U) 101 #define RL_API_CLASS_BYPASS (0x4U) 102 #define RL_API_CLASS_MAX (0x5U) 107 #define RL_HDR_FLAG_NO_RETRY (0x0U) 108 #define RL_HDR_FLAG_RETRY (0x3U) 113 #define RL_HDR_FLAG_ACK (0x0U) 114 #define RL_HDR_FLAG_NO_ACK (0x3U) 119 #define RL_API_RTYP_SET (0x0U) 120 #define RL_API_RTYP_GET (0x1U) 125 #define RL_PROT_VERSION_0 (0x0U) 126 #define RL_PROT_VERSION_MAX (0xFU) 131 #define RL_HDR_FLAG_CRC (0x0U) 132 #define RL_HDR_FLAG_NO_CRC (0x3U) 137 #define RL_HDR_FLAG_CRC_16BIT (0x0U) 138 #define RL_HDR_FLAG_CRC_32BIT (0x1U) 139 #define RL_HDR_FLAG_CRC_64BIT (0x2U) 144 typedef rlUInt16_t rlCrcData_t;
149 #define RL_PAYLOAD_MSG_4BYTE_MULT (0x4U) 150 #define RL_PAYLOAD_MSG_8BYTE_MULT (0x8U) 155 typedef struct rlPayloadSb
159 rlUInt8_t *pSblkData;
166 typedef struct rlFixPayloadSb
170 rlUInt8_t sblkData[240];
177 typedef struct rlAsyncEvt
187 typedef struct rlDriverRespMsg
191 rlUInt8_t isSendToSender;
197 typedef struct rlFunctionParams
202 rlUInt8_t rxMsgClass;
203 rlUInt8_t alignReserved1;
204 rlUInt8_t alignReserved2;
205 rlUInt8_t alignReserved3;
206 rlUInt8_t msgCRC[RL_CRC_LEN_MAX];
212 typedef struct rlComDevInx
217 rlComIfHdl_t comIfHdl[RL_DEVICE_CONNECTED_MAX];
221 rlUInt8_t rlDevIndex[RL_DEVICE_CONNECTED_MAX];
227 typedef struct loggingFunctions
229 rlPrintFptr rlPrintAr[RL_DBG_LEVEL_VERBOSE];
235 typedef struct rlDriverData
252 volatile rlUInt8_t isCmdRespWaited[RL_DEVICE_CONNECTED_MAX];
256 rlUInt8_t isRespWriteWaited[RL_DEVICE_CONNECTED_MAX];
260 volatile rlUInt8_t rxIrqCnt[RL_DEVICE_CONNECTED_MAX];
264 volatile rlUInt8_t rxDoneCnt[RL_DEVICE_CONNECTED_MAX];
268 rlUInt16_t cmdSeqNum[RL_DEVICE_CONNECTED_MAX];
297 typedef struct rlSyncHeader
306 typedef union rlReadBuf
308 rlUInt8_t tempBuf[RHCP_HEADER_LEN + SYNC_PATTERN_LEN];
309 rlSyncHeader_t syncHeader;
315 typedef struct rlDriverOpcode
338 typedef struct rlDriverMsg
342 rlUInt16_t remChunks;
368 rlReturnVal_t rlDriverInit(rlUInt8_t deviceMap,
rlClientCbs_t clientCb);
376 rlUInt8_t rlDriverGetNoOfConnectedDev(
void);
377 rlUInt8_t rlDriverGetCmdDir(rlUInt16_t msgId);
382 rlReturnVal_t rlDriverSendResponse(
rlRhcpMsg_t *outMsg);
383 rlReturnVal_t rlDriverSendMsg(rlUInt8_t devIndex, rlUInt8_t* inMsg, rlUInt16_t inLen);
388 rlUInt8_t crcType, rlUInt8_t crc[RL_CRC_LEN_MAX]);
391 rlUInt8_t crcType, rlUInt8_t crc[RL_CRC_LEN_MAX]);
393 rlReturnVal_t rlDriverCalChkSum(
rlProtHeader_t* hdrData, rlUInt8_t len, rlUInt16_t* checksum);
397 rlUInt16_t payloadLen);
400 rlUInt8_t rlDriverGetDeviceIndex(rlUInt16_t dataDir);
401 rlReturnVal_t rlDriverMsgReadSpawnCtx(
const void *pValue);
406 rlComIfHdl_t comIfHdl);
407 rlUInt8_t rlDriverPendingRxMsg(
void);
409 rlUInt8_t* data, rlUInt16_t inLen);
414 rlReturnVal_t rlDriverExecuteGetApi(rlUInt8_t deviceMap, rlUInt16_t msgId,
415 rlUInt16_t sbcID, rlUInt8_t *msgData, rlUInt16_t inLen);
416 rlReturnVal_t rlDriverExecuteSetApi(rlUInt8_t deviceMap, rlUInt16_t msgId,
417 rlUInt16_t sbcID, rlUInt8_t *msgData, rlUInt16_t inLen);
418 rlReturnVal_t rlDriverRdVerifyAsync(
rlReadBuf_t readBuf, rlUInt8_t devIndex,
419 rlUInt16_t rxLengthRecv);
422 rlReturnVal_t rlDriverRdVerifyCmd(
rlReadBuf_t readBuf, rlUInt8_t devIndex,
423 rlUInt16_t rxLengthRecv);
424 rlReturnVal_t rlDriverRdVerifyMsg(
rlReadBuf_t readBuf, rlUInt8_t devIndex);
425 rlReturnVal_t rlDriverRdVerifyRsp(
rlReadBuf_t readBuf, rlUInt8_t devIndex,
426 rlUInt16_t rxLengthRecv);
rlReturnVal_t rlDriverMsgReadCmdCtx(rlUInt8_t devIndex)
Wait and handle command response.
mmWaveLink client callback structure
rlUInt8_t dir
Message Direction.
mmwave radar Driver Opcode
rlReturnVal_t rlDriverMsgCmdReply(rlDriverData_t *rlDrvData, rlUInt8_t devIndex)
Wait and handle command response.
rlUInt8_t rlDeviceIdentifyCmdDir(rlUInt16_t msgId, rlUInt8_t platform)
Get the direction of command packet based on MsgID and platform.
rlReturnVal_t rlDriverConfigureCrc(rlCrcType_t crcType)
Configures the CRC Type in mmwavelink Driver.
rlUInt8_t msgType
Message Class.
void rlDriverConstructOutMsg(rlUInt16_t numSblk, rlDriverMsg_t *outMsg, rlPayloadSb_t *payloadPtr)
: Construct command packet based on given message-ID and payload
rlUInt16_t msgId
Message Id.
rlUInt8_t rlDriverGetPlatformId(void)
Returns RL Platform ID (i.e. where mmWaveLink is executing)
rlLogCtx_t logObj
As per debug level callback functions will be assinged.
rlReturnVal_t rlDriverCalCRC(rlUInt8_t *data, rlUInt16_t dataLen, rlUInt8_t crcType, rlUInt8_t crc[RL_CRC_LEN_MAX])
Calculates 16bit/32bit/64bit CRC.
The passing message type of Tx task of API module.
rlReturnVal_t rlDriverValidateHdr(rlProtHeader_t protHdr)
Validates the header by comparing Checksum.
void rlDriverConstructInMsg(rlUInt16_t msgId, rlDriverMsg_t *inMsg, rlPayloadSb_t *payloadPtr)
: Construct command packet (inMsg) based on given message-ID and payload
mmwave radar Driver Global Structure
RHCP Async Event structure.
rlUInt8_t isDriverInitialized
Driver Status.
rlReturnVal_t rlDriverMsgRead(rlDriverData_t *rlDrvData, rlUInt8_t devIndex)
Receive and validate protocol header and payload.
rlUInt16_t nsbc
Number of Sub Blocks in Payload.
rlFunctionParams_t funcParams
Current API parameters.
rlReturnVal_t rlDriverRxHdrRead(rlUInt8_t hdrBuf[RHCP_HEADER_LEN], rlComIfHdl_t comIfHdl)
Read SYNC and Header from communication channel.
rlUInt8_t rlDriverGetArDeviceType(void)
Returns AR device type which mmWavelink is communicating.
mmwave radar Driver Protocol header read buffer
rlReturnVal_t rlDriverDeInit(void)
De Initializes the mmwave radar Driver.
rlDriverData_t * rlDriverGetHandle(void)
Returns mmwave radar Driver Global Structure.
void rlDriverHostIrqHandler(rlUInt8_t deviceIndex, void *pValue)
Interrupt Service Routine to handle host interrupt from mmwave radar device.
rlReturnVal_t rlDriverAsyncEventHandler(rlUInt8_t devIndex, rlUInt16_t nsbc, rlUInt8_t *payload, rlUInt16_t payloadLen)
Handles asynchronous response/error from mmwave radar device.
rlReturnVal_t rlDriverCmdSendRetry(rlUInt8_t deviceMap, rlDriverMsg_t *outMsg)
: Send command and wait for response
mmwave radar Driver Function Params
rlReturnVal_t rlDriverCmdInvoke(rlUInt8_t deviceMap, rlDriverMsg_t inMsg, rlDriverMsg_t *outMsg)
Invokes a command to mmwave radar Device. Implements mmwave radar Host Communication Protocol(RHCP) ...
mmwave radar Driver Payload
void rlDriverFillPayload(rlUInt16_t msgId, rlUInt16_t sbcID, rlPayloadSb_t *payloadPtr, rlUInt8_t *data, rlUInt16_t inLen)
: Fill payload based on given message-ID, sub-block ID and data.
rlReturnVal_t rlDriverConfigureAckTimeout(rlUInt32_t ackTimeout)
Configures the Acknowledgement timeout in mmwavelink Driver.
rlReturnVal_t rlDriverOsiInit(void)
Initializes the OSI layer abstraction for mmwavelink.
rlReturnVal_t rlDriverVerifyCRC(rlUInt8_t *data, rlUInt16_t dataLen, rlUInt8_t crcType, rlUInt8_t crc[RL_CRC_LEN_MAX])
Compares received CRC with Calculated CRC.
rlReturnVal_t rlDriverRemoveDevices(rlUInt8_t deviceMap)
Disconnects the mmwave radar devices.
Communication handle and device-index for deifferent devices connected to Host.
rlClientCbs_t clientCtx
Client context.
rlReturnVal_t rlDriverAddDevice(rlUInt8_t deviceMap)
Adds mmwave radar device.
rlOsiSemHdl_t cmdSem
Driver Command Wait Semaphore.
rlReturnVal_t rlDriverWaitForResponse(rlUInt8_t devIndex, rlDriverMsg_t *outMsg)
: Wait for Device's response
rlOsiMsgQHdl_t spawnQueue
Driver Spawn queue.
rlReturnVal_t rlDriverMsgWrite(rlDriverData_t *rlDrvData, rlComIfHdl_t comIfHdl)
Write command header and payload data over communication channel.
rlUInt8_t deviceMap
Bitmap of devices connected radarSS/DSS Mailbox in case of 16xx autonomous.
rlReturnVal_t rlDriverProcRdMsg(rlUInt8_t devIdx, rlReturnVal_t inVal)
Process received message for Async event message.
RHCP SYNC Pattern Structure.
rlComDevInx_t commDevIdx
Communication handle and device-index for deifferent devices connected to Host.
void rlDriverShiftDWord(rlUInt8_t buf[])
Shifts one byte in the byte array.
rlOsiMutexHdl_t globalMutex
Driver Global Lock Mutex.
rlReturnVal_t rlDriverIsDeviceMapValid(rlUInt8_t deviceMap)
Checks if given deviecMap is valid wrt to global DeviceMap set to mmWaveLink.