Radio Control Layer (RCL)
LRFCC23X0.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2023, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #ifndef ti_drivers_LRFCC2340_h__include
34 #define ti_drivers_LRFCC2340_h__include
35 
36 #include <stdint.h>
37 #include <stddef.h>
38 #include <stdbool.h>
39 #include <ti/devices/DeviceFamily.h>
40 #include DeviceFamily_constructPath(inc/hw_memmap.h)
41 #include DeviceFamily_constructPath(inc/hw_lrfdpbe.h)
42 #include DeviceFamily_constructPath(inc/pbe_generic_regdef_regs.h)
43 
45 
50 #ifdef DeviceFamily_CC27XX
51 /* TODO: See RCL-556 */
52 #define LRFDPBE32_BASE 0x40081400 // LRFDPBE32
53 #define LRFDMDM32_BASE 0x40082400 // LRFDMDM32
54 #define LRFDRFE32_BASE 0x40083400 // LRFDRFE32
55 typedef union
56 {
57  struct {
58  uint16_t ibBoost: 2;
59  uint16_t ib: 6;
60  uint16_t gain: 3;
61  uint16_t mode: 2;
62  uint16_t reserved: 2;
63  uint16_t noIfampRfLdoBypass: 1;
64  };
65  uint16_t rawValue;
67 #else
68 typedef union
69 {
70  struct {
71  uint16_t reserved: 5;
72  uint16_t ib: 6;
73  uint16_t gain: 3;
74  uint16_t mode: 1;
75  uint16_t noIfampRfLdoBypass: 1;
76  };
77  uint16_t rawValue;
79 #endif
80 #define LRF_TxPowerTable_INVALID_VALUE ((LRF_TxPowerTable_Value){.rawValue = 0xFFFF})
82 typedef uint8_t LRF_TxPowerTable_TempCoeff;
83 
84 typedef enum LRF_TxPowerResult_e {
88 
89 
90 #define LRF_EventNone ((LRF_Events){ .value = (0U << 0U)})
91 #define LRF_EventOpDone ((LRF_Events){ .value = (1U << 0U)})
92 #define LRF_EventPingRsp ((LRF_Events){ .value = (1U << 1U)})
93 #define LRF_EventRxCtrl ((LRF_Events){ .value = (1U << 2U)})
94 #define LRF_EventRxCtrlAck ((LRF_Events){ .value = (1U << 3U)})
95 #define LRF_EventRxNok ((LRF_Events){ .value = (1U << 4U)})
96 #define LRF_EventRxIgnored ((LRF_Events){ .value = (1U << 5U)})
97 #define LRF_EventRxEmpty ((LRF_Events){ .value = (1U << 6U)})
98 #define LRF_EventRxBufFull ((LRF_Events){ .value = (1U << 7U)})
99 #define LRF_EventRxOk ((LRF_Events){ .value = (1U << 8U)})
100 #define LRF_EventTxCtrl ((LRF_Events){ .value = (1U << 9U)})
101 #define LRF_EventTxCtrlAckAck ((LRF_Events){ .value = (1U << 10U)})
102 #define LRF_EventTxRetrans ((LRF_Events){ .value = (1U << 11U)})
103 #define LRF_EventTxAck ((LRF_Events){ .value = (1U << 12U)})
104 #define LRF_EventTxDone ((LRF_Events){ .value = (1U << 13U)})
105 #define LRF_EventTxCtrlAck ((LRF_Events){ .value = (1U << 14U)})
106 #define LRF_EventOpError ((LRF_Events){ .value = (1U << 15U)})
107 #define LRF_EventRxfifo ((LRF_Events){ .value = (1U << 16U)})
108 #define LRF_EventTxfifo ((LRF_Events){ .value = (1U << 17U)})
109 #define LRF_EventLossOfLock ((LRF_Events){ .value = (1U << 18U)})
110 #define LRF_EventLock ((LRF_Events){ .value = (1U << 19U)})
111 #define LRF_EventRfesoft0 ((LRF_Events){ .value = (1U << 20U)})
112 #define LRF_EventRfesoft1 ((LRF_Events){ .value = (1U << 21U)})
113 #define LRF_EventRfedone ((LRF_Events){ .value = (1U << 22U)})
114 #define LRF_EventMdmsoft0 ((LRF_Events){ .value = (1U << 23U)})
115 #define LRF_EventMdmsoft1 ((LRF_Events){ .value = (1U << 24U)})
116 #define LRF_EventMdmsoft2 ((LRF_Events){ .value = (1U << 25U)})
117 #define LRF_EventMdmout ((LRF_Events){ .value = (1U << 26U)})
118 #define LRF_EventMdmin ((LRF_Events){ .value = (1U << 27U)})
119 #define LRF_EventMdmdone ((LRF_Events){ .value = (1U << 28U)})
120 #define LRF_EventSystim0 ((LRF_Events){ .value = (1U << 29U)})
121 #define LRF_EventSystim1 ((LRF_Events){ .value = (1U << 30U)})
122 #define LRF_EventSystim2 ((LRF_Events){ .value = (1U << 31U)})
125 union LRF_Events_u {
126  struct {
127  uint32_t opDone : 1;
128  uint32_t pingRsp : 1;
129  uint32_t rxCtrl : 1;
130  uint32_t rxCtrlAck : 1;
131  uint32_t rxNok : 1;
133  uint32_t rxIgnored : 1;
134  uint32_t rxEmpty : 1;
135  uint32_t rxBufFull : 1;
136  uint32_t rxOk : 1;
137  uint32_t txCtrl : 1;
138  uint32_t txCtrlAckAck : 1;
139  uint32_t txRetrans : 1;
140  uint32_t txAck : 1;
141  uint32_t txDone : 1;
142  uint32_t txCtrlAck : 1;
143  uint32_t opError : 1;
144  uint32_t rxfifo : 1;
145  uint32_t txfifo : 1;
146  uint32_t lossOfLock : 1;
147  uint32_t lock : 1;
148  uint32_t rfesoft0 : 1;
149  uint32_t rfesoft1 : 1;
150  uint32_t rfedone : 1;
151  uint32_t mdmsoft0 : 1;
152  uint32_t mdmsoft1 : 1;
153  uint32_t mdmsoft2 : 1;
154  uint32_t mdmout : 1;
155  uint32_t mdmin : 1;
156  uint32_t mdmdone : 1;
157  uint32_t systim0 : 1;
158  uint32_t systim1 : 1;
159  uint32_t systim2 : 1;
160  };
161  uint32_t value;
162 };
163 
164 typedef struct LRF_RegConfig_s {
165  uint32_t configLen;
166  uint32_t regConfig[];
167 } LRF_RegConfig;
168 
172 typedef union
173 {
174  struct {
175  uint8_t fraction : 1;
176  int8_t dBm : 7;
177  };
178  int8_t rawValue;
180 
185 typedef struct {
190 
192 #define LRF_TxPowerEntry_INVALID_VALUE \
193 ((LRF_TxPowerTable_Entry) {\
194  .power = LRF_TxPower_None,\
195  .tempCoeff = 0,\
196  .value = LRF_TxPowerTable_INVALID_VALUE,\
197 })
198 
204 typedef struct {
205  uint32_t numEntries;
208 
209 typedef struct LRF_TxShape_s {
210  struct {
211  uint32_t scale :17;
212  uint32_t numCoeff :15;
213  };
214  uint8_t coeff[];
215 } LRF_TxShape;
216 
217 #define LRF_TRIM_NUM_VARIANTS 2
218 #define LRF_TRIM_NORMAL_BW 0
219 #define LRF_TRIM_HIGH_BW 1 /* Revision >= 4 only */
220 
221 #define LRF_TRIM_MIN_VERSION_FULL_FEATURES 4 /* Only AppTrims revision 4 and above has all features */
222 
223 /* RCL-335: Some devices (State D) have an error in the programmed RSSI offset */
224 #define LRF_TRIM_VERSION_RSSIOFFSET_ISSUE 4 /* AppTrims revision with issue in rssiOffset field */
225 #define LRF_TRIM_LIMIT_RSSIOFFSET_ISSUE (-4) /* If rssiOffset is less or equal to this, apply correction */
226 #define LRF_TRIM_CORRECTION_RSSIOFFSET_ISSUE 5 /* Correction to apply to devices with wrong RSSI offset */
227 
228 /* Definitions for trim */
229 typedef struct {
230  uint32_t word[2];
232 
233 typedef union {
234  struct {
235  // Trim value for LRFDRFE:PA0.TRIM
236  struct { // length: 2B
237  uint16_t trim : 5;
238  uint16_t zero : 11;
239  } pa0;
240  // Trim value for LRFDRFE:ATSTREFH.IREFTRIM
241  struct { // length: 2B
242  uint16_t zero0 : 10;
243  uint16_t irefTrim : 5;
244  uint16_t zero1 : 1;
245  } atstRefH;
246  } fields;
247  struct {
248  uint16_t pa0;
249  uint16_t atstRefH;
250  };
251  uint32_t data;
252 } LRF_Trim0;
253 
254 typedef union {
255  struct {
256  // Trim value for LRFDRFE:LNA.TRIM
257  struct { // length: 2B
258  uint16_t zero0 : 4;
259  uint16_t trim : 4;
260  uint16_t zero1 : 8;
261  } lna;
262  // Trim value for LRFDRFE:IFAMPRFLDO.TRIM
263  struct { // length: 2B
264  uint16_t zero : 9;
265  uint16_t trim : 7;
266  } ifampRfLdo;
267  // Trim value for LRFDRFE:DIVLDO.VOUTTRIM
268  struct { // length: 2B
269  uint16_t zero0 : 8;
270  uint16_t voutTrim : 7;
271  uint16_t zero1 : 1;
272  } divLdo;
273  // Trim value for LRFDRFE:TDCLDO.VOUTTRIM
274  struct { // length: 2B
275  uint16_t zero0 : 8;
276  uint16_t voutTrim : 7;
277  uint16_t zero1 : 1;
278  } tdcLdo;
279  } fields;
280  struct {
281  uint16_t lna;
282  uint16_t ifampRfLdo;
283  uint16_t divLdo;
284  uint16_t tdcLdo;
285  };
287 } LRF_Trim1;
288 
289 typedef union {
290  struct {
291  // Trim values for LRFDRFE:DCOLDO0
292  struct { // length: 2B
293  uint16_t zero0 : 4;
294  uint16_t firstTrim : 4;
295  uint16_t secondTrim : 6;
296  uint16_t zero1 : 2;
297  } dcoLdo0;
298  // Trim value for LRFDRFE:IFADCALDO.TRIMOUT
299  struct { // length: 2B
300  uint16_t zero0 : 8;
301  uint16_t trimout : 6;
302  uint16_t zero1 : 2;
303  } ifadcAldo;
304  // Trim value for LRFDRFE:IFADCDLDO.TRIMOUT
305  struct { // length: 2B
306  uint16_t zero0 : 8;
307  uint16_t trimout : 6;
308  uint16_t zero1 : 2;
309  } ifadcDldo;
310  // Trim value for LRFDRFE:DCO.TAILRESTRIM
311  struct { // length: 2B
312  uint16_t zero0 : 3;
313  uint16_t tailresTrim : 4;
314  uint16_t zero1 : 9;
315  } dco;
316  } fields;
317  struct {
318  uint16_t dcoLdo0;
319  uint16_t ifadcAldo;
320  uint16_t ifadcDldo;
321  uint16_t dco;
322  };
324 } LRF_Trim2;
325 
326 typedef union {
327  struct {
328  // Trim value for LRFDRFE:IFADCQUANT.QUANTTHR
329  struct { // length: 2B
330  uint16_t quantThr : 3;
331  uint16_t zero : 13;
332  } ifadcQuant;
333  // Trim values for LRFDRFE:IFADC0
334  struct { // length: 2B
335  uint16_t zero0 : 2;
336  uint16_t aafcap : 2;
337  uint16_t int2Adj : 4;
338  uint16_t zero1 : 2;
339  uint16_t ditheren : 2; /* Revision >= 4 only */
340  uint16_t dithertrim : 3;
341  uint16_t zero2 : 1;
342  } ifadc0;
343  // Trim value for LRFDRFE:IFADC1.TRIM
344  struct { // length: 2B
345  uint16_t zero0 : 9;
346  uint16_t trim : 6;
347  uint16_t nrz : 1;
348  } ifadc1;
349  // Trim values for LRFDRFE:IFADCLF
350  struct { // length: 2B
351  uint16_t int3 : 4;
352  uint16_t ff1 : 4;
353  uint16_t ff2 : 4;
354  uint16_t ff3 : 4;
355  } ifadclf;
356  } fields;
357  struct {
358  uint16_t ifadcQuant;
359  uint16_t ifadc0;
360  uint16_t ifadc1;
361  uint16_t ifadclf;
362  };
365 
366 typedef struct
367 {
368  uint16_t rtrimMinOffset : 2;
369  uint16_t rtrimMaxOffset : 2;
370  uint16_t divLdoMinOffset: 2;
371  uint16_t divLdoMaxOffset: 2;
372  uint16_t tdcLdoMinOffset: 2;
373  uint16_t tdcLdoMaxOffset: 2;
374  uint16_t tThrl : 2;
375  uint16_t tThrh : 2;
377 
378 typedef struct {
379  int32_t rssiTcomp : 4;
380  int32_t magnTcomp : 4;
381  int32_t magnOffset : 4;
382  int32_t rfu : 4;
383  int32_t agcThrTcomp : 4;
384  int32_t agcThrOffset : 4;
385  int32_t lowGainOffset : 4;
386  int32_t highGainOffset : 4;
388 
389 typedef union {
390  struct {
391  struct { // length: 4B
392  LRF_Trim_tempLdoRtrim tempLdoRtrim;
393  uint8_t hfxtPdError;
394  uint8_t res;
395  } lrfdrfeExtTrim1; /* Revision >= 4 only */
396  // Trim values for synth divider 0
397  LRF_Trim_tempRssiAgc lrfdrfeExtTrim0;
398  } fields;
399  struct {
400  uint32_t lrfdrfeExtTrim1;
401  uint32_t lrfdrfeExtTrim0;
402  };
403  uint32_t data;
404 } LRF_Trim3;
405 
406 typedef union {
407  struct {
408  struct { // length: 2B
409  // RSSI measured for front end 0 in production test.
410  // Value is read by RF Core FW during RF Core initialization
411  uint16_t offset : 8;
412  uint16_t trimCompleteN : 1;
413  uint16_t zero : 7;
414  } fend0Rssi;
415  // Trim values for synth divider 0
416  struct { // length: 2B
417  // Trim value for IQ mismatch compensation.
418  // Value is read by RF Core FW during RF Core initialization
419  uint16_t iqmc : 16;
420  } syntDiv0;
421  uint16_t res1;
422  struct {
423  uint8_t zero : 4;
424  uint8_t aafcap : 4;
425  } ifamprfldo[LRF_TRIM_NUM_VARIANTS]; /* Revision >= 4 only */
426  } fields;
427  struct {
428  int8_t rssiOffset;
429  uint8_t trimCompleteN;
430  uint16_t demIQMC0;
431  uint16_t res1;
432  uint8_t ifamprfldo[LRF_TRIM_NUM_VARIANTS];
433  };
434  uint32_t data;
435 } LRF_Trim4;
436 
437 /* This definition is used instead of the definition from hw_fcfg.h to accommodate implementation
438  and cut parameters not relevant to LRF */
439 typedef struct {
440  uint8_t revision; /* Revision of appTrims */
442  uint8_t reserved[2];
449 } LRF_TrimDef;
450 
454 typedef struct LRF_SwConfig_s {
455  int32_t rxIntFrequency;
460  uint8_t bwIndex;
461  uint8_t bwIndexDither;
462 } LRF_SwConfig;
463 
467 typedef struct LRF_SwParam_s {
471 } LRF_SwParam;
472 
476 typedef struct LRF_Config_s {
477  const LRF_TOPsmImage *pbeImage;
478  const LRF_TOPsmImage *mceImage;
479  const LRF_TOPsmImage *rfeImage;
480  const LRF_RegConfigList *regConfigList;
481 } LRF_Config;
482 
483 #define LRF_BASE_ADDR 0x40080000U
484 #define PBE_RAM_BASE_ADDR 0x40090000U
485 #define BUF_RAM_BASE_ADDR 0x40092000U
486 #define RXF_UNWRAPPED_BASE_ADDR 0x40093000U
487 #define TXF_UNWRAPPED_BASE_ADDR 0x40093800U
488 #define MCE_RAM_BASE_ADDR 0x40094000U
489 #define RFE_RAM_BASE_ADDR 0x40096000U
490 #define S2R_RAM_BASE_ADDR 0x40098000U
491 #define TOPSM_RAM_SZ 0x00001000U /* 4 KB */
492 #define MAX_REG_CONFIG_LEN 1024U /* 1024 entries, using 4 KB */
493 
494 #define LRF_TXPOWER_REFERENCE_TEMPERATURE 25
495 #define LRF_TXPOWER_TEMPERATURE_SCALING 0x100
497 extern const LRF_TxShape LRF_shapeBaseGfsk05;
498 extern const LRF_TxShape LRF_shapeBaseGfsk067;
499 extern const LRF_TxShape LRF_shapeBaseGfsk20;
500 
501 static inline void LRF_sendHardStop(void)
502 {
503  /* Send stop to PBE */
504  /* This API is the same across PBE banks */
505  HWREG(LRFDPBE_BASE + LRFDPBE_O_API) = PBE_GENERIC_REGDEF_API_OP_STOP;
506 }
507 
508 static inline void LRF_sendGracefulStop(void)
509 {
510  /* Send stop to PBE */
511  /* This API is the same across PBE banks */
512  HWREG(LRFDPBE_BASE + LRFDPBE_O_API) = PBE_GENERIC_REGDEF_API_OP_EOPSTOP;
513 }
514 
515 static inline void LRF_hardStop(void)
516 {
517  /* LRF does not need to do anything special after hard stop is sent */
518 }
519 
520 static inline uint32_t LRF_getTxFifoWritable(void)
521 {
522  return HWREG_READ_LRF(LRFDPBE_BASE + LRFDPBE_O_TXFWRITABLE);
523 }
524 
529 
541 
542 #endif
LRF_Trim3 trim3
Definition: LRFCC23X0.h:447
uint16_t rawValue
Definition: LRFCC23X0.h:77
LRF_DoubleWord data
Definition: LRFCC23X0.h:286
LRF_TxPowerTable_TempCoeff tempCoeff
Definition: LRFCC23X0.h:187
static void LRF_sendGracefulStop(void)
Definition: LRFCC23X0.h:508
const LRF_TxShape LRF_shapeBaseGfsk20
static void LRF_hardStop(void)
Definition: LRFCC23X0.h:515
Software defined PHY parameters.
Definition: LRFCC23X0.h:454
uint8_t revision
Definition: LRFCC23X0.h:440
Definition: LRFCC23X0.h:209
LRF_Trim4 trim4
Definition: LRFCC23X0.h:448
int8_t rawValue
Definition: LRFCC23X0.h:178
const LRF_SwConfig * swConfig
Definition: LRFCC23X0.h:468
Single entry of the tx power table. Maps power in dBm to specific register settings.
Definition: LRFCC23X0.h:185
uint8_t LRF_TxPowerTable_TempCoeff
Definition: LRFCC23X0.h:82
const LRF_TOPsmImage * mceImage
Definition: LRFCC23X0.h:478
LRF_Trim1 trim1
Definition: LRFCC23X0.h:444
Tx power table, containing all characterized dBm to register settings mappings.
Definition: LRFCC23X0.h:204
Definition: LRFCC23X0.h:86
Definition: LRFCC23X0.h:233
Definition: LRFCC23X0.h:254
Definition: LRFCC23X0.h:289
Definition: LRFCC23X0.h:389
Definition: LRFCC23X0.h:406
LRF_TxPowerTable_Index power
Definition: LRFCC23X0.h:186
Index of the tx power table.
Definition: LRFCC23X0.h:172
int32_t txFrequencyOffset
Definition: LRFCC23X0.h:457
Radio configuration structure.
Definition: LRFCC23X0.h:476
const LRF_TOPsmImage * rfeImage
Definition: LRFCC23X0.h:479
#define LRF_TRIM_NUM_VARIANTS
Definition: LRFCC23X0.h:217
LRF_TxPowerTable_Value value
Definition: LRFCC23X0.h:188
LRF_Trim0 trim0
Definition: LRFCC23X0.h:443
uint32_t data
Definition: LRFCC23X0.h:251
const LRF_RegConfigList * regConfigList
Definition: LRFCC23X0.h:480
uint32_t value
Definition: LRFCC23X0.h:161
LRF_Trim2 trim2
Definition: LRFCC23X0.h:445
uint32_t data
Definition: LRFCC23X0.h:434
uint8_t bwIndex
Definition: LRFCC23X0.h:460
Definition: LRFCC23X0.h:378
Definition: LRFCC23X0.h:439
Definition: LRFCC23X0.h:85
Definition: LRFCC23X0.h:366
LRF_DoubleWord data
Definition: LRFCC23X0.h:323
int32_t rxFrequencyOffset
Definition: LRFCC23X0.h:456
const LRF_TxShape * txShape
Definition: LRFCC23X0.h:459
uint8_t nToolsClientOffset
Definition: LRFCC23X0.h:441
static uint32_t LRF_getTxFifoWritable(void)
Definition: LRFCC23X0.h:520
const LRF_TrimDef * trimDef
Definition: LRFCC23X0.h:470
uint32_t modFrequencyDeviation
Definition: LRFCC23X0.h:458
const LRF_TxPowerTable * txPowerTable
Definition: LRFCC23X0.h:469
LRF_TxPowerResult LRF_programTxPower(LRF_TxPowerTable_Index powerLevel)
Finds settings corresponding to the highest tx power lower than the specified value in the tx power t...
Definition: LRFCC23X0.c:1425
void LRF_programTemperatureCompensatedTxPower(void)
Programs current TX power setting in radio with temperature compensation.
Definition: LRFCC23X0.c:1390
uint32_t configLen
Definition: LRFCC23X0.h:165
Definition: LRFCC23X0.h:326
LRF_TxPowerResult
Definition: LRFCC23X0.h:84
uint32_t data
Definition: LRFCC23X0.h:403
int32_t rxIntFrequency
Definition: LRFCC23X0.h:455
Definition: LRFCC23X0.h:164
uint32_t numEntries
Definition: LRFCC23X0.h:205
Definition: LRFCC23X0.h:229
const LRF_TxShape LRF_shapeBaseGfsk067
uint8_t bwIndexDither
Definition: LRFCC23X0.h:461
const LRF_TOPsmImage * pbeImage
Definition: LRFCC23X0.h:477
LRF_DoubleWord data
Definition: LRFCC23X0.h:363
Type for tx power configuration.
Definition: LRFCC23X0.h:68
Software defined PHY parameter list.
Definition: LRFCC23X0.h:467
static void LRF_sendHardStop(void)
Definition: LRFCC23X0.h:501