rl_driver.h
1 /****************************************************************************************
2  * FileName : rl_driver.h
3  *
4  * Description : This file implements the mmwave radar Host Communication Protocol.
5  *
6  ****************************************************************************************
7  * (C) Copyright 2014, Texas Instruments Incorporated. - TI web address www.ti.com
8  *---------------------------------------------------------------------------------------
9  *
10  * Redistribution and use in source and binary forms, with or without modification,
11  * are permitted provided that the following conditions are met:
12  *
13  * Redistributions of source code must retain the above copyright notice,
14  * this list of conditions and the following disclaimer.
15  *
16  * Redistributions in binary form must reproduce the above copyright notice,
17  * this list of conditions and the following disclaimer in the documentation
18  * and/or other materials provided with the distribution.
19  *
20  * Neither the name of Texas Instruments Incorporated nor the names of its
21  * contributors may be used to endorse or promote products derived from this
22  * software without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
26  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
28  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  * POSSIBILITY OF SUCH DAMAGE.
35  */
36 
37 
38 /****************************************************************************************
39  * FILE INCLUSION PROTECTION
40  ****************************************************************************************
41  */
42 #ifndef RL_DRIVER_H
43 #define RL_DRIVER_H
44 
45 /******************************************************************************
46  * INCLUDE FILES
47  ******************************************************************************
48  */
49 #include "rl_datatypes.h"
50 #include "rl_protocol.h"
51 #include "rl_messages.h"
52 
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56 /****************************************************************************************
57 * MACRO DEFINITIONS
58 ****************************************************************************************
59 */
60 
61 
62 #define RL_API_CMD_RETRY_COUNT (3U) /* RHCP Retry Count */
63 #define RL_SBC_ERR_SB_SIZE (4U) /* RHCP ERROR SB Size */
64 #define RL_PROTOCOL_ALIGN_SIZE (4U) /* Alignment required for CRC computation,
65  4 - 16/32bit CRC, 8 - 64bit CRC*/
66 #define RL_PROTOCOL_DUMMY_BYTE (0xFFU) /* Dummy Byte used by Protocol*/
67 #define RL_RSP_ERR_MSG_LEN (SYNC_PATTERN_LEN + RHCP_HEADER_LEN + \
68  RL_SBC_ERR_SB_SIZE + RL_CRC_LEN_MAX)
69 
70 /******************************************************************************
71  * GLOBAL VARIABLES/DATA-TYPES DEFINITIONS
72  ******************************************************************************
73  */
74 
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)
92 
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)
100 
101 #define RL_API_CLASS_BYPASS (0x4U)
102 #define RL_API_CLASS_MAX (0x5U)
103 
107 #define RL_HDR_FLAG_NO_RETRY (0x0U)
108 #define RL_HDR_FLAG_RETRY (0x3U)
109 
113 #define RL_HDR_FLAG_ACK (0x0U)
114 #define RL_HDR_FLAG_NO_ACK (0x3U)
115 
119 #define RL_API_RTYP_SET (0x0U)
120 #define RL_API_RTYP_GET (0x1U)
121 
125 #define RL_PROT_VERSION_0 (0x0U)
126 #define RL_PROT_VERSION_MAX (0xFU)
127 
131 #define RL_HDR_FLAG_CRC (0x0U)
132 #define RL_HDR_FLAG_NO_CRC (0x3U)
133 
137 #define RL_HDR_FLAG_CRC_16BIT (0x0U)
138 #define RL_HDR_FLAG_CRC_32BIT (0x1U)
139 #define RL_HDR_FLAG_CRC_64BIT (0x2U)
140 
144 #define RL_SPI_LOG_WRITE (0x0U)
145 #define RL_SPI_LOG_READ (0x1U)
146 
150 typedef rlUInt16_t rlCrcData_t;
151 
155 #define RL_PAYLOAD_MSG_4BYTE_MULT (0x4U) /* MSG must be multiple of this value */
156 #define RL_PAYLOAD_MSG_8BYTE_MULT (0x8U) /* MSG must be multiple of this value */
157 
161  typedef struct rlPayloadSb
162 {
163  rlUInt16_t sbid;
164  rlUInt16_t len;
165  rlUInt8_t *pSblkData;
167 
168 
172 typedef struct rlFixPayloadSb
173 {
174  rlUInt16_t sbid;
175  rlUInt16_t len;
176  rlUInt8_t sblkData[240];
178 
179 
183 typedef struct rlAsyncEvt
184 {
185  rlRhcpMsg_t evtMsg;
186 }rlAsyncEvt_t;
187 
193 typedef struct rlDriverRespMsg
194 {
195  rlProtHeader_t hdr;
196  rlPayloadSb_t* subblocks;
197  rlUInt8_t isSendToSender;
199 
203 typedef struct rlFunctionParams
204 {
205  rlRhcpMsg_t* cmd;
206  rlRhcpMsg_t* rsp;
207  rlAsyncEvt_t asyncEvt;
208  rlUInt8_t rxMsgClass;
209  rlUInt8_t alignReserved1;
210  rlUInt8_t alignReserved2;
211  rlUInt8_t alignReserved3;
212  rlUInt8_t msgCRC[RL_CRC_LEN_MAX];
214 
218 typedef struct rlComDevInx
219 {
223  rlComIfHdl_t comIfHdl[RL_DEVICE_CONNECTED_MAX];
227  rlUInt8_t rlDevIndex[RL_DEVICE_CONNECTED_MAX];
229 
233 typedef struct loggingFunctions
234 {
235  rlPrintFptr rlPrintAr[RL_DBG_LEVEL_VERBOSE];
236 }rlLogCtx_t;
237 
241 typedef struct rlDriverData
242 {
246  rlFunctionParams_t funcParams[RL_CASCADE_NUM_DEVICES];
254  rlUInt8_t deviceMap;
258  volatile rlUInt8_t isCmdRespWaited[RL_DEVICE_CONNECTED_MAX];
262  rlUInt8_t isRespWriteWaited[RL_DEVICE_CONNECTED_MAX];
266  volatile rlUInt8_t rxIrqCnt[RL_DEVICE_CONNECTED_MAX];
270  volatile rlUInt8_t rxDoneCnt[RL_DEVICE_CONNECTED_MAX];
274  rlUInt16_t cmdSeqNum[RL_DEVICE_CONNECTED_MAX];
282  rlOsiMutexHdl_t devMutex[RL_CASCADE_NUM_DEVICES];
286  rlOsiSemHdl_t cmdSem[RL_CASCADE_NUM_DEVICES];
290  rlOsiMsgQHdl_t spawnQueue;
303  rlUInt8_t retryCount;
307  rlRhcpMsg_t *txMsgPtr[RL_CASCADE_NUM_DEVICES];
311  rlRhcpMsg_t *rxMsgPtr[RL_CASCADE_NUM_DEVICES];
313 
314 typedef struct rlSyncHeader
315 {
316  rlSyncPattern_t syncPattern;
317  rlProtHeader_t protHdr;
318 }rlSyncHeader_t;
319 
323 typedef union rlReadBuf
324 {
325  rlUInt8_t tempBuf[RHCP_HEADER_LEN + SYNC_PATTERN_LEN];
326  rlSyncHeader_t syncHeader;
327 }rlReadBuf_t;
328 
332 typedef struct rlDriverOpcode
333 {
337  rlUInt8_t dir;
341  rlUInt8_t msgType;
345  rlUInt16_t msgId;
349  rlUInt16_t nsbc;
351 
355 typedef struct rlDriverMsg
356 {
357  rlDriverOpcode_t opcode;
358  rlPayloadSb_t* subblocks;
359  rlUInt16_t remChunks;
361 
362 
381 /******************************************************************************
382  * FUNCTION DECLARATIONS
383  ******************************************************************************
384  */
385 rlReturnVal_t rlDriverInit(rlUInt8_t deviceMap, rlClientCbs_t clientCb);
386 rlReturnVal_t rlDriverOsiInit(void);
387 rlReturnVal_t rlDriverAddDevice(rlUInt8_t deviceMap);
388 rlReturnVal_t rlDriverRemoveDevices(rlUInt8_t deviceMap);
389 rlReturnVal_t rlDriverDeInit(void);
391 rlUInt8_t rlDriverGetPlatformId(void);
392 rlUInt8_t rlDriverGetArDeviceType(void);
393 rlUInt8_t rlDriverGetNoOfConnectedDev(void);
394 rlUInt8_t rlDriverGetCmdDir(rlUInt16_t msgId);
395 rlReturnVal_t rlDriverIsDeviceMapValid(rlUInt8_t deviceMap);
396 rlReturnVal_t rlDriverWaitForResponse(rlUInt8_t devIndex, rlDriverMsg_t* outMsg);
397 rlReturnVal_t rlDriverCmdInvoke(rlUInt8_t deviceMap, rlDriverMsg_t inMsg,
398  rlDriverMsg_t* outMsg);
399 rlReturnVal_t rlDriverSendResponse(rlRhcpMsg_t *outMsg);
400 rlReturnVal_t rlDriverSendMsg(rlUInt8_t devIndex, rlUInt8_t* inMsg, rlUInt16_t inLen);
401 rlReturnVal_t rlDriverConfigureCrc(rlCrcType_t crcType);
402 rlReturnVal_t rlDriverConfigureAckTimeout(rlUInt32_t ackTimeout);
403 
404 rlReturnVal_t rlDriverCalCRC(rlUInt8_t* data,rlUInt16_t dataLen,
405  rlUInt8_t crcType, rlUInt8_t crc[RL_CRC_LEN_MAX]);
406 
407 rlReturnVal_t rlDriverVerifyCRC(rlUInt8_t* data, rlUInt16_t dataLen,
408  rlUInt8_t crcType, rlUInt8_t crc[RL_CRC_LEN_MAX]);
409 void rlDriverShiftDWord(rlUInt8_t buf[]);
410 rlReturnVal_t rlDriverCalChkSum(rlProtHeader_t* hdrData, rlUInt8_t len, rlUInt16_t* checksum);
411 rlReturnVal_t rlDriverValidateHdr(rlProtHeader_t protHdr);
412 rlReturnVal_t rlDriverAsyncEventHandler(rlUInt8_t devIndex, rlUInt16_t nsbc,
413  rlUInt8_t *payload,
414  rlUInt16_t payloadLen);
415 rlUInt8_t rlDeviceIdentifyCmdDir(rlUInt16_t msgId, rlUInt8_t platform);
416 void rlDriverHostIrqHandler(rlUInt8_t deviceIndex, void *pValue);
417 rlUInt8_t rlDriverGetDeviceIndex(rlUInt16_t dataDir);
418 rlReturnVal_t rlDriverMsgReadSpawnCtx(const void *pValue);
419 rlReturnVal_t rlDriverMsgReadCmdCtx(rlUInt8_t devIndex);
420 rlReturnVal_t rlDriverMsgRead(rlDriverData_t* rlDrvData, rlUInt8_t devIndex);
421 rlReturnVal_t rlDriverMsgWrite(rlDriverData_t* rlDrvData, rlUInt8_t devIndex,
422  rlComIfHdl_t comIfHdl);
423 rlReturnVal_t rlDriverRxHdrRead(rlUInt8_t hdrBuf[RHCP_HEADER_LEN],
424  rlComIfHdl_t comIfHdl);
425 rlUInt8_t rlDriverPendingRxMsg(void);
426 void rlDriverFillPayload(rlUInt16_t msgId, rlUInt16_t sbcID, rlPayloadSb_t* payloadPtr,
427  rlUInt8_t* data, rlUInt16_t inLen);
428 void rlDriverConstructInMsg(rlUInt16_t msgId, rlDriverMsg_t* inMsg,
429  rlPayloadSb_t* payloadPtr);
430 void rlDriverConstructOutMsg(rlUInt16_t numSblk, rlDriverMsg_t* outMsg,
431  rlPayloadSb_t* payloadPtr);
432 rlReturnVal_t rlDriverExecuteGetApi(rlUInt8_t deviceMap, rlUInt16_t msgId,
433  rlUInt16_t sbcID, rlUInt8_t *msgData, rlUInt16_t inLen);
434 rlReturnVal_t rlDriverExecuteSetApi(rlUInt8_t deviceMap, rlUInt16_t msgId,
435  rlUInt16_t sbcID, rlUInt8_t *msgData, rlUInt16_t inLen);
436 rlReturnVal_t rlDriverRdVerifyAsync(rlReadBuf_t readBuf, rlUInt8_t devIndex,
437  rlUInt16_t rxLengthRecv);
438 rlReturnVal_t rlDriverProcRdMsg(rlUInt8_t devIdx, rlReturnVal_t inVal);
439 rlReturnVal_t rlDriverMsgCmdReply(rlDriverData_t* rlDrvData, rlUInt8_t devIndex);
440 rlReturnVal_t rlDriverRdVerifyCmd(rlReadBuf_t readBuf, rlUInt8_t devIndex,
441  rlUInt16_t rxLengthRecv);
442 rlReturnVal_t rlDriverRdVerifyMsg(rlReadBuf_t readBuf, rlUInt8_t devIndex);
443 rlReturnVal_t rlDriverRdVerifyRsp(rlReadBuf_t readBuf, rlUInt8_t devIndex,
444  rlUInt16_t rxLengthRecv);
445 rlReturnVal_t rlDriverCmdSendRetry(rlUInt8_t devIndex, rlDriverMsg_t* outMsg);
446 rlReturnVal_t rlDriverSetRetryCount(rlUInt8_t retryCnt);
447 void rlLogSpiReadWrite(rlUInt8_t deviceIdx, rlUInt8_t *pBuffer, rlUInt32_t BufferLength, \
448  rlUInt8_t readEn);
449 
455 #ifdef __cplusplus
456 }
457 #endif
458 
459 #endif
460 
461 /*
462  * END OF RL_DRIVER_H FILE
463  */
rlReturnVal_t rlDriverMsgWrite(rlDriverData_t *rlDrvData, rlUInt8_t devIndex, rlComIfHdl_t comIfHdl)
Write command header and payload data over communication channel.
Definition: rl_driver.c:1469
rlReturnVal_t rlDriverMsgReadCmdCtx(rlUInt8_t devIndex)
Wait and handle command response.
Definition: rl_driver.c:980
mmWaveLink client callback structure
Definition: mmwavelink.h:1523
rlUInt8_t dir
Message Direction.
Definition: rl_driver.h:337
mmwave radar Driver Opcode
Definition: rl_driver.h:332
rlReturnVal_t rlDriverMsgCmdReply(rlDriverData_t *rlDrvData, rlUInt8_t devIndex)
Wait and handle command response.
Definition: rl_driver.c:846
rlUInt8_t rlDeviceIdentifyCmdDir(rlUInt16_t msgId, rlUInt8_t platform)
Get the direction of command packet based on MsgID and platform.
Definition: rl_driver.c:412
rlReturnVal_t rlDriverConfigureCrc(rlCrcType_t crcType)
Configures the CRC Type in mmwavelink Driver.
Definition: rl_driver.c:2867
void rlLogSpiReadWrite(rlUInt8_t deviceIdx, rlUInt8_t *pBuffer, rlUInt32_t BufferLength, rlUInt8_t readEn)
: Logging SPI Read/Write command
Definition: rl_driver.c:3278
rlUInt8_t msgType
Message Class.
Definition: rl_driver.h:341
RHCP Payload Structure.
Definition: rl_driver.h:172
void rlDriverConstructOutMsg(rlUInt16_t numSblk, rlDriverMsg_t *outMsg, rlPayloadSb_t *payloadPtr)
: Construct command packet based on given message-ID and payload
Definition: rl_driver.c:3068
rlUInt16_t msgId
Message Id.
Definition: rl_driver.h:345
rlUInt8_t rlDriverGetPlatformId(void)
Returns RL Platform ID (i.e. where mmWaveLink is executing)
Definition: rl_driver.c:2357
rlLogCtx_t logObj
As per debug level callback functions will be assinged.
Definition: rl_driver.h:298
rlReturnVal_t rlDriverCalCRC(rlUInt8_t *data, rlUInt16_t dataLen, rlUInt8_t crcType, rlUInt8_t crc[RL_CRC_LEN_MAX])
Calculates 16bit/32bit/64bit CRC.
Definition: rl_driver.c:209
The passing message type of Tx task of API module.
Definition: rl_driver.h:193
rlReturnVal_t rlDriverValidateHdr(rlProtHeader_t protHdr)
Validates the header by comparing Checksum.
Definition: rl_driver.c:366
void rlDriverConstructInMsg(rlUInt16_t msgId, rlDriverMsg_t *inMsg, rlPayloadSb_t *payloadPtr)
: Construct command packet (inMsg) based on given message-ID and payload
Definition: rl_driver.c:3033
mmwave radar Driver Global Structure
Definition: rl_driver.h:241
rlReturnVal_t rlDriverCmdSendRetry(rlUInt8_t devIndex, rlDriverMsg_t *outMsg)
: Send command and wait for response
Definition: rl_driver.c:2632
RHCP Async Event structure.
Definition: rl_driver.h:183
rlUInt8_t isDriverInitialized
Driver Status.
Definition: rl_driver.h:250
rlReturnVal_t rlDriverMsgRead(rlDriverData_t *rlDrvData, rlUInt8_t devIndex)
Receive and validate protocol header and payload.
Definition: rl_driver.c:1289
rlUInt16_t nsbc
Number of Sub Blocks in Payload.
Definition: rl_driver.h:349
mmwave Logging functions
Definition: rl_driver.h:233
rlReturnVal_t rlDriverExecuteGetApi(rlUInt8_t deviceMap, rlUInt16_t msgId, rlUInt16_t sbcID, rlUInt8_t *msgData, rlUInt16_t inLen)
: Construct get message and invoke command.
Definition: rl_driver.c:3132
rlReturnVal_t rlDriverSetRetryCount(rlUInt8_t retryCnt)
: Set the retry count for re-sending command
Definition: rl_driver.c:3230
rlReturnVal_t rlDriverRxHdrRead(rlUInt8_t hdrBuf[RHCP_HEADER_LEN], rlComIfHdl_t comIfHdl)
Read SYNC and Header from communication channel.
Definition: rl_driver.c:1711
rlUInt8_t rlDriverGetArDeviceType(void)
Returns AR device type which mmWavelink is communicating.
Definition: rl_driver.c:2375
mmwave radar Driver Protocol header read buffer
Definition: rl_driver.h:323
rlReturnVal_t rlDriverDeInit(void)
De Initializes the mmwave radar Driver.
Definition: rl_driver.c:2274
rlDriverData_t * rlDriverGetHandle(void)
Returns mmwave radar Driver Global Structure.
Definition: rl_driver.c:2341
void rlDriverHostIrqHandler(rlUInt8_t deviceIndex, void *pValue)
Interrupt Service Routine to handle host interrupt from mmwave radar device.
Definition: rl_driver.c:565
rlReturnVal_t rlDriverAsyncEventHandler(rlUInt8_t devIndex, rlUInt16_t nsbc, rlUInt8_t *payload, rlUInt16_t payloadLen)
Handles asynchronous response/error from mmwave radar device.
Definition: rl_driver.c:500
mmwave radar Driver Function Params
Definition: rl_driver.h:203
RHCP Payload Structure.
Definition: rl_driver.h:161
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)
Definition: rl_driver.c:2739
RHCP protocol header structure.
Definition: rl_protocol.h:209
mmwave radar Driver Payload
Definition: rl_driver.h:355
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.
Definition: rl_driver.c:3099
rlReturnVal_t rlDriverConfigureAckTimeout(rlUInt32_t ackTimeout)
Configures the Acknowledgement timeout in mmwavelink Driver.
Definition: rl_driver.c:2901
rlReturnVal_t rlDriverOsiInit(void)
Initializes the OSI layer abstraction for mmwavelink.
Definition: rl_driver.c:1868
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.
Definition: rl_driver.c:248
rlReturnVal_t rlDriverRemoveDevices(rlUInt8_t deviceMap)
Disconnects the mmwave radar devices.
Definition: rl_driver.c:2229
Communication handle and device-index for deifferent devices connected to Host.
Definition: rl_driver.h:218
rlUInt8_t retryCount
Retry count for re-sending command if device doesn't send response within timeout or device sends NAC...
Definition: rl_driver.h:303
rlClientCbs_t clientCtx
Client context.
Definition: rl_driver.h:294
rlReturnVal_t rlDriverAddDevice(rlUInt8_t deviceMap)
Adds mmwave radar device.
Definition: rl_driver.c:2136
RHCP message structure.
Definition: rl_protocol.h:225
rlReturnVal_t rlDriverWaitForResponse(rlUInt8_t devIndex, rlDriverMsg_t *outMsg)
: Wait for Device's response
Definition: rl_driver.c:2437
rlOsiMsgQHdl_t spawnQueue
Driver Spawn queue.
Definition: rl_driver.h:290
rlUInt8_t deviceMap
Bitmap of devices connected radarSS/DSS Mailbox in case of 16xx autonomous.
Definition: rl_driver.h:254
rlReturnVal_t rlDriverProcRdMsg(rlUInt8_t devIdx, rlReturnVal_t inVal)
Process received message for Async event message.
Definition: rl_driver.c:637
RHCP SYNC Pattern Structure.
Definition: rl_protocol.h:85
rlComDevInx_t commDevIdx
Communication handle and device-index for deifferent devices connected to Host.
Definition: rl_driver.h:278
void rlDriverShiftDWord(rlUInt8_t buf[])
Shifts one byte in the byte array.
Definition: rl_driver.c:179
rlReturnVal_t rlDriverExecuteSetApi(rlUInt8_t deviceMap, rlUInt16_t msgId, rlUInt16_t sbcID, rlUInt8_t *msgData, rlUInt16_t inLen)
: Construct set message and invoke command.
Definition: rl_driver.c:3188
rlReturnVal_t rlDriverIsDeviceMapValid(rlUInt8_t deviceMap)
Checks if given deviecMap is valid wrt to global DeviceMap set to mmWaveLink.
Definition: rl_driver.c:2394

Copyright 2020, Texas Instruments Incorporated