xref: /btstack/chipset/sx128x/SMTC_Drivers/sx1280-driver-c/sx1280.h (revision cb5466b0821ff1cc151be285948f59ccf7756451)
1*cb5466b0SMatthias Ringwald /*
2*cb5466b0SMatthias Ringwald   ______                              _
3*cb5466b0SMatthias Ringwald  / _____)             _              | |
4*cb5466b0SMatthias Ringwald ( (____  _____ ____ _| |_ _____  ____| |__
5*cb5466b0SMatthias Ringwald  \____ \| ___ |    (_   _) ___ |/ ___)  _ \
6*cb5466b0SMatthias Ringwald  _____) ) ____| | | || |_| ____( (___| | | |
7*cb5466b0SMatthias Ringwald (______/|_____)_|_|_| \__)_____)\____)_| |_|
8*cb5466b0SMatthias Ringwald     (C)2016 Semtech
9*cb5466b0SMatthias Ringwald 
10*cb5466b0SMatthias Ringwald Description: Driver for SX1280 devices
11*cb5466b0SMatthias Ringwald 
12*cb5466b0SMatthias Ringwald License: Revised BSD License, see LICENSE.TXT file include in the project
13*cb5466b0SMatthias Ringwald 
14*cb5466b0SMatthias Ringwald Maintainer: Miguel Luis, Gregory Cristian and Matthieu Verdy
15*cb5466b0SMatthias Ringwald */
16*cb5466b0SMatthias Ringwald #ifndef __SX1280_H__
17*cb5466b0SMatthias Ringwald #define __SX1280_H__
18*cb5466b0SMatthias Ringwald 
19*cb5466b0SMatthias Ringwald #include <stdint.h>
20*cb5466b0SMatthias Ringwald #include <stdbool.h>
21*cb5466b0SMatthias Ringwald #include <math.h>
22*cb5466b0SMatthias Ringwald 
23*cb5466b0SMatthias Ringwald /*!
24*cb5466b0SMatthias Ringwald  * \brief Enables/disables driver debug features
25*cb5466b0SMatthias Ringwald  */
26*cb5466b0SMatthias Ringwald #define SX1280_DEBUG                                0
27*cb5466b0SMatthias Ringwald 
28*cb5466b0SMatthias Ringwald /*!
29*cb5466b0SMatthias Ringwald  * \brief Hardware IO IRQ callback function definition
30*cb5466b0SMatthias Ringwald  */
31*cb5466b0SMatthias Ringwald typedef void ( DioIrqHandler )( void );
32*cb5466b0SMatthias Ringwald 
33*cb5466b0SMatthias Ringwald /*!
34*cb5466b0SMatthias Ringwald  * \brief Provides the frequency of the chip running on the radio and the frequency step
35*cb5466b0SMatthias Ringwald  *
36*cb5466b0SMatthias Ringwald  * \remark These defines are used for computing the frequency divider to set the RF frequency
37*cb5466b0SMatthias Ringwald  */
38*cb5466b0SMatthias Ringwald #define XTAL_FREQ                                   52000000
39*cb5466b0SMatthias Ringwald #define FREQ_STEP                                   ( ( double )( XTAL_FREQ / pow( 2.0, 18.0 ) ) )
40*cb5466b0SMatthias Ringwald 
41*cb5466b0SMatthias Ringwald /*!
42*cb5466b0SMatthias Ringwald  * \brief Compensation delay for SetAutoTx/Rx functions in microseconds
43*cb5466b0SMatthias Ringwald  */
44*cb5466b0SMatthias Ringwald #define AUTO_RX_TX_OFFSET                           33
45*cb5466b0SMatthias Ringwald 
46*cb5466b0SMatthias Ringwald /*!
47*cb5466b0SMatthias Ringwald  * \brief The address of the register holding the firmware version MSB
48*cb5466b0SMatthias Ringwald  */
49*cb5466b0SMatthias Ringwald #define REG_LR_FIRMWARE_VERSION_MSB                 0x0153
50*cb5466b0SMatthias Ringwald 
51*cb5466b0SMatthias Ringwald /*!
52*cb5466b0SMatthias Ringwald  * \brief The address of the register holding the first byte defining the CRC seed
53*cb5466b0SMatthias Ringwald  *
54*cb5466b0SMatthias Ringwald  * \remark Only used for packet types GFSK and Flrc
55*cb5466b0SMatthias Ringwald  */
56*cb5466b0SMatthias Ringwald #define REG_LR_CRCSEEDBASEADDR                      0x09C8
57*cb5466b0SMatthias Ringwald 
58*cb5466b0SMatthias Ringwald /*!
59*cb5466b0SMatthias Ringwald  * \brief The address of the register holding the first byte defining the CRC polynomial
60*cb5466b0SMatthias Ringwald  *
61*cb5466b0SMatthias Ringwald  * \remark Only used for packet types GFSK and Flrc
62*cb5466b0SMatthias Ringwald  */
63*cb5466b0SMatthias Ringwald #define REG_LR_CRCPOLYBASEADDR                      0x09C6
64*cb5466b0SMatthias Ringwald 
65*cb5466b0SMatthias Ringwald /*!
66*cb5466b0SMatthias Ringwald  * \brief The address of the register holding the first byte defining the whitening seed
67*cb5466b0SMatthias Ringwald  *
68*cb5466b0SMatthias Ringwald  * \remark Only used for packet types GFSK, FLRC and BLE
69*cb5466b0SMatthias Ringwald  */
70*cb5466b0SMatthias Ringwald #define REG_LR_WHITSEEDBASEADDR                     0x09C5
71*cb5466b0SMatthias Ringwald 
72*cb5466b0SMatthias Ringwald /*!
73*cb5466b0SMatthias Ringwald  * \brief The address of the register holding the ranging id check length
74*cb5466b0SMatthias Ringwald  *
75*cb5466b0SMatthias Ringwald  * \remark Only used for packet type Ranging
76*cb5466b0SMatthias Ringwald  */
77*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGIDCHECKLENGTH                 0x0931
78*cb5466b0SMatthias Ringwald 
79*cb5466b0SMatthias Ringwald /*!
80*cb5466b0SMatthias Ringwald  * \brief The address of the register holding the device ranging id
81*cb5466b0SMatthias Ringwald  *
82*cb5466b0SMatthias Ringwald  * \remark Only used for packet type Ranging
83*cb5466b0SMatthias Ringwald  */
84*cb5466b0SMatthias Ringwald #define REG_LR_DEVICERANGINGADDR                    0x0916
85*cb5466b0SMatthias Ringwald 
86*cb5466b0SMatthias Ringwald /*!
87*cb5466b0SMatthias Ringwald  * \brief The address of the register holding the device ranging id
88*cb5466b0SMatthias Ringwald  *
89*cb5466b0SMatthias Ringwald  * \remark Only used for packet type Ranging
90*cb5466b0SMatthias Ringwald  */
91*cb5466b0SMatthias Ringwald #define REG_LR_REQUESTRANGINGADDR                   0x0912
92*cb5466b0SMatthias Ringwald 
93*cb5466b0SMatthias Ringwald /*!
94*cb5466b0SMatthias Ringwald  * \brief The address of the register holding ranging results configuration
95*cb5466b0SMatthias Ringwald  * and the corresponding mask
96*cb5466b0SMatthias Ringwald  *
97*cb5466b0SMatthias Ringwald  * \remark Only used for packet type Ranging
98*cb5466b0SMatthias Ringwald  */
99*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGRESULTCONFIG                  0x0924
100*cb5466b0SMatthias Ringwald #define MASK_RANGINGMUXSEL                          0xCF
101*cb5466b0SMatthias Ringwald 
102*cb5466b0SMatthias Ringwald /*!
103*cb5466b0SMatthias Ringwald  * \brief The address of the register holding the first byte of ranging results
104*cb5466b0SMatthias Ringwald  * Only used for packet type Ranging
105*cb5466b0SMatthias Ringwald  */
106*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGRESULTBASEADDR                0x0961
107*cb5466b0SMatthias Ringwald 
108*cb5466b0SMatthias Ringwald /*!
109*cb5466b0SMatthias Ringwald  * \brief The address of the register allowing to read ranging results
110*cb5466b0SMatthias Ringwald  *
111*cb5466b0SMatthias Ringwald  * \remark Only used for packet type Ranging
112*cb5466b0SMatthias Ringwald  */
113*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGRESULTSFREEZE                 0x097F
114*cb5466b0SMatthias Ringwald 
115*cb5466b0SMatthias Ringwald /*!
116*cb5466b0SMatthias Ringwald  * \brief The address of the register holding the first byte of ranging calibration
117*cb5466b0SMatthias Ringwald  *
118*cb5466b0SMatthias Ringwald  * \remark Only used for packet type Ranging
119*cb5466b0SMatthias Ringwald  */
120*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGRERXTXDELAYCAL                0x092C
121*cb5466b0SMatthias Ringwald 
122*cb5466b0SMatthias Ringwald /*!
123*cb5466b0SMatthias Ringwald  *\brief The address of the register holding the ranging filter window size
124*cb5466b0SMatthias Ringwald  *
125*cb5466b0SMatthias Ringwald  * \remark Only used for packet type Ranging
126*cb5466b0SMatthias Ringwald  */
127*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGFILTERWINDOWSIZE              0x091E
128*cb5466b0SMatthias Ringwald 
129*cb5466b0SMatthias Ringwald /*!
130*cb5466b0SMatthias Ringwald  *\brief The address of the register to reset for clearing ranging filter
131*cb5466b0SMatthias Ringwald  *
132*cb5466b0SMatthias Ringwald  * \remark Only used for packet type Ranging
133*cb5466b0SMatthias Ringwald  */
134*cb5466b0SMatthias Ringwald #define REG_LR_RANGINGRESULTCLEARREG                0x0923
135*cb5466b0SMatthias Ringwald 
136*cb5466b0SMatthias Ringwald #define REG_RANGING_RSSI                            0x0964
137*cb5466b0SMatthias Ringwald 
138*cb5466b0SMatthias Ringwald /*!
139*cb5466b0SMatthias Ringwald  * \brief The default number of samples considered in built-in ranging filter
140*cb5466b0SMatthias Ringwald  */
141*cb5466b0SMatthias Ringwald #define DEFAULT_RANGING_FILTER_SIZE                 127
142*cb5466b0SMatthias Ringwald 
143*cb5466b0SMatthias Ringwald /*!
144*cb5466b0SMatthias Ringwald  * \brief The address of the register holding LORA packet parameters
145*cb5466b0SMatthias Ringwald  */
146*cb5466b0SMatthias Ringwald #define REG_LR_PACKETPARAMS                         0x903
147*cb5466b0SMatthias Ringwald 
148*cb5466b0SMatthias Ringwald /*!
149*cb5466b0SMatthias Ringwald  * \brief The address of the register holding payload length
150*cb5466b0SMatthias Ringwald  *
151*cb5466b0SMatthias Ringwald  * \remark Do NOT try to read it directly. Use GetRxBuffer( ) instead.
152*cb5466b0SMatthias Ringwald  */
153*cb5466b0SMatthias Ringwald #define REG_LR_PAYLOADLENGTH                        0x901
154*cb5466b0SMatthias Ringwald 
155*cb5466b0SMatthias Ringwald /*!
156*cb5466b0SMatthias Ringwald  * \brief The address of the instruction RAM and its size
157*cb5466b0SMatthias Ringwald  */
158*cb5466b0SMatthias Ringwald #define IRAM_START_ADDRESS                          0x8000
159*cb5466b0SMatthias Ringwald #define IRAM_SIZE                                   0x4000
160*cb5466b0SMatthias Ringwald 
161*cb5466b0SMatthias Ringwald /*!
162*cb5466b0SMatthias Ringwald  * \brief The addresses of the registers holding SyncWords values
163*cb5466b0SMatthias Ringwald  *
164*cb5466b0SMatthias Ringwald  * \remark The addresses depends on the Packet Type in use, and not all
165*cb5466b0SMatthias Ringwald  *         SyncWords are available for every Packet Type
166*cb5466b0SMatthias Ringwald  */
167*cb5466b0SMatthias Ringwald #define REG_LR_SYNCWORDBASEADDRESS1                 0x09CE
168*cb5466b0SMatthias Ringwald #define REG_LR_SYNCWORDBASEADDRESS2                 0x09D3
169*cb5466b0SMatthias Ringwald #define REG_LR_SYNCWORDBASEADDRESS3                 0x09D8
170*cb5466b0SMatthias Ringwald 
171*cb5466b0SMatthias Ringwald /*!
172*cb5466b0SMatthias Ringwald  * \brief The MSB address and mask used to read the estimated frequency
173*cb5466b0SMatthias Ringwald  * error
174*cb5466b0SMatthias Ringwald  */
175*cb5466b0SMatthias Ringwald #define REG_LR_ESTIMATED_FREQUENCY_ERROR_MSB        0x0954
176*cb5466b0SMatthias Ringwald #define REG_LR_ESTIMATED_FREQUENCY_ERROR_MASK       0x0FFFFF
177*cb5466b0SMatthias Ringwald 
178*cb5466b0SMatthias Ringwald /*!
179*cb5466b0SMatthias Ringwald  * \brief Defines how many bit errors are tolerated in sync word detection
180*cb5466b0SMatthias Ringwald  */
181*cb5466b0SMatthias Ringwald #define REG_LR_SYNCWORDTOLERANCE                    0x09CD
182*cb5466b0SMatthias Ringwald 
183*cb5466b0SMatthias Ringwald /*!
184*cb5466b0SMatthias Ringwald  * \brief Register for MSB Access Address (BLE)
185*cb5466b0SMatthias Ringwald  */
186*cb5466b0SMatthias Ringwald #define REG_LR_BLE_ACCESS_ADDRESS                   0x09CF
187*cb5466b0SMatthias Ringwald #define BLE_ADVERTIZER_ACCESS_ADDRESS               0x8E89BED6
188*cb5466b0SMatthias Ringwald 
189*cb5466b0SMatthias Ringwald /*!
190*cb5466b0SMatthias Ringwald  * \brief Register address and mask for LNA regime selection
191*cb5466b0SMatthias Ringwald  */
192*cb5466b0SMatthias Ringwald #define REG_LNA_REGIME                              0x0891
193*cb5466b0SMatthias Ringwald #define MASK_LNA_REGIME                             0xC0
194*cb5466b0SMatthias Ringwald 
195*cb5466b0SMatthias Ringwald /*!
196*cb5466b0SMatthias Ringwald  * \brief Register and mask enabling manual gain control
197*cb5466b0SMatthias Ringwald  */
198*cb5466b0SMatthias Ringwald #define REG_ENABLE_MANUAL_GAIN_CONTROL              0x089F
199*cb5466b0SMatthias Ringwald #define MASK_MANUAL_GAIN_CONTROL                    0x80
200*cb5466b0SMatthias Ringwald 
201*cb5466b0SMatthias Ringwald /*!
202*cb5466b0SMatthias Ringwald  * \brief Register and mask controlling demodulation detection
203*cb5466b0SMatthias Ringwald  */
204*cb5466b0SMatthias Ringwald #define REG_DEMOD_DETECTION                         0x0895
205*cb5466b0SMatthias Ringwald #define MASK_DEMOD_DETECTION                        0xFE
206*cb5466b0SMatthias Ringwald 
207*cb5466b0SMatthias Ringwald /*!
208*cb5466b0SMatthias Ringwald  * \brief Register and mask setting manual gain value
209*cb5466b0SMatthias Ringwald  */
210*cb5466b0SMatthias Ringwald #define REG_MANUAL_GAIN_VALUE                       0x089E
211*cb5466b0SMatthias Ringwald #define MASK_MANUAL_GAIN_VALUE                      0xF0
212*cb5466b0SMatthias Ringwald 
213*cb5466b0SMatthias Ringwald /*!
214*cb5466b0SMatthias Ringwald  * \brief Selector values to configure LNA regime
215*cb5466b0SMatthias Ringwald  */
216*cb5466b0SMatthias Ringwald typedef enum{
217*cb5466b0SMatthias Ringwald     LNA_LOW_POWER_MODE,         //!< Allow maximum efficiency of sx1280 (default)
218*cb5466b0SMatthias Ringwald     LNA_HIGH_SENSITIVITY_MODE,  //!< Allow to use highest three steps of LNA gain and increase current consumption
219*cb5466b0SMatthias Ringwald }RadioLnaSettings_t;
220*cb5466b0SMatthias Ringwald 
221*cb5466b0SMatthias Ringwald /*!
222*cb5466b0SMatthias Ringwald  * \brief Structure describing the radio status
223*cb5466b0SMatthias Ringwald  */
224*cb5466b0SMatthias Ringwald typedef union
225*cb5466b0SMatthias Ringwald {
226*cb5466b0SMatthias Ringwald     /*!
227*cb5466b0SMatthias Ringwald      * \brief Structure of the radio status
228*cb5466b0SMatthias Ringwald      */
229*cb5466b0SMatthias Ringwald     struct
230*cb5466b0SMatthias Ringwald     {
231*cb5466b0SMatthias Ringwald         uint8_t CpuBusy   : 1;  //!< Flag for CPU radio busy
232*cb5466b0SMatthias Ringwald         uint8_t DmaBusy   : 1;  //!< Flag for DMA busy
233*cb5466b0SMatthias Ringwald         uint8_t CmdStatus : 3;  //!< Command status
234*cb5466b0SMatthias Ringwald         uint8_t ChipMode  : 3;  //!< Chip mode
235*cb5466b0SMatthias Ringwald     }Fields;
236*cb5466b0SMatthias Ringwald 
237*cb5466b0SMatthias Ringwald     /*!
238*cb5466b0SMatthias Ringwald      * \brief Serialized radio status
239*cb5466b0SMatthias Ringwald      */
240*cb5466b0SMatthias Ringwald     uint8_t Value;
241*cb5466b0SMatthias Ringwald }RadioStatus_t;
242*cb5466b0SMatthias Ringwald 
243*cb5466b0SMatthias Ringwald /*!
244*cb5466b0SMatthias Ringwald  * \brief Represents the states of the radio
245*cb5466b0SMatthias Ringwald  */
246*cb5466b0SMatthias Ringwald typedef enum
247*cb5466b0SMatthias Ringwald {
248*cb5466b0SMatthias Ringwald     RF_IDLE                                 = 0x00,         //!< The radio is idle
249*cb5466b0SMatthias Ringwald     RF_RX_RUNNING,                                          //!< The radio is in reception state
250*cb5466b0SMatthias Ringwald     RF_TX_RUNNING,                                          //!< The radio is in transmission state
251*cb5466b0SMatthias Ringwald     RF_CAD,                                                 //!< The radio is doing channel activity detection
252*cb5466b0SMatthias Ringwald }RadioStates_t;
253*cb5466b0SMatthias Ringwald 
254*cb5466b0SMatthias Ringwald /*!
255*cb5466b0SMatthias Ringwald  * \brief Represents the operating mode the radio is actually running
256*cb5466b0SMatthias Ringwald  */
257*cb5466b0SMatthias Ringwald typedef enum
258*cb5466b0SMatthias Ringwald {
259*cb5466b0SMatthias Ringwald     MODE_SLEEP                              = 0x00,         //! The radio is in sleep mode
260*cb5466b0SMatthias Ringwald     MODE_STDBY_RC,                                          //! The radio is in standby mode with RC oscillator
261*cb5466b0SMatthias Ringwald     MODE_STDBY_XOSC,                                        //! The radio is in standby mode with XOSC oscillator
262*cb5466b0SMatthias Ringwald     MODE_FS,                                                //! The radio is in frequency synthesis mode
263*cb5466b0SMatthias Ringwald     MODE_TX,                                                //! The radio is in transmit mode
264*cb5466b0SMatthias Ringwald     MODE_RX,                                                //! The radio is in receive mode
265*cb5466b0SMatthias Ringwald     MODE_CAD                                                //! The radio is in channel activity detection mode
266*cb5466b0SMatthias Ringwald }RadioOperatingModes_t;
267*cb5466b0SMatthias Ringwald 
268*cb5466b0SMatthias Ringwald /*!
269*cb5466b0SMatthias Ringwald  * \brief Declares the oscillator in use while in standby mode
270*cb5466b0SMatthias Ringwald  *
271*cb5466b0SMatthias Ringwald  * Using the STDBY_RC standby mode allow to reduce the energy consumption
272*cb5466b0SMatthias Ringwald  * STDBY_XOSC should be used for time critical applications
273*cb5466b0SMatthias Ringwald  */
274*cb5466b0SMatthias Ringwald typedef enum
275*cb5466b0SMatthias Ringwald {
276*cb5466b0SMatthias Ringwald     STDBY_RC                                = 0x00,
277*cb5466b0SMatthias Ringwald     STDBY_XOSC                              = 0x01,
278*cb5466b0SMatthias Ringwald }RadioStandbyModes_t;
279*cb5466b0SMatthias Ringwald 
280*cb5466b0SMatthias Ringwald /*!
281*cb5466b0SMatthias Ringwald  * \brief Declares the power regulation used to power the device
282*cb5466b0SMatthias Ringwald  *
283*cb5466b0SMatthias Ringwald  * This command allows the user to specify if DC-DC or LDO is used for power regulation.
284*cb5466b0SMatthias Ringwald  * Using only LDO implies that the Rx or Tx current is doubled
285*cb5466b0SMatthias Ringwald  */
286*cb5466b0SMatthias Ringwald typedef enum
287*cb5466b0SMatthias Ringwald {
288*cb5466b0SMatthias Ringwald     USE_LDO                               = 0x00,           //! Use LDO (default value)
289*cb5466b0SMatthias Ringwald     USE_DCDC                              = 0x01,           //! Use DCDC
290*cb5466b0SMatthias Ringwald }RadioRegulatorModes_t;
291*cb5466b0SMatthias Ringwald 
292*cb5466b0SMatthias Ringwald /*!
293*cb5466b0SMatthias Ringwald  * \brief Represents the possible packet type (i.e. modem) used
294*cb5466b0SMatthias Ringwald  */
295*cb5466b0SMatthias Ringwald typedef enum
296*cb5466b0SMatthias Ringwald {
297*cb5466b0SMatthias Ringwald     PACKET_TYPE_GFSK                        = 0x00,
298*cb5466b0SMatthias Ringwald     PACKET_TYPE_LORA,
299*cb5466b0SMatthias Ringwald     PACKET_TYPE_RANGING,
300*cb5466b0SMatthias Ringwald     PACKET_TYPE_FLRC,
301*cb5466b0SMatthias Ringwald     PACKET_TYPE_BLE,
302*cb5466b0SMatthias Ringwald     PACKET_TYPE_NONE                        = 0x0F,
303*cb5466b0SMatthias Ringwald }RadioPacketTypes_t;
304*cb5466b0SMatthias Ringwald 
305*cb5466b0SMatthias Ringwald /*!
306*cb5466b0SMatthias Ringwald  * \brief Represents the ramping time for power amplifier
307*cb5466b0SMatthias Ringwald  */
308*cb5466b0SMatthias Ringwald typedef enum
309*cb5466b0SMatthias Ringwald {
310*cb5466b0SMatthias Ringwald     RADIO_RAMP_02_US                        = 0x00,
311*cb5466b0SMatthias Ringwald     RADIO_RAMP_04_US                        = 0x20,
312*cb5466b0SMatthias Ringwald     RADIO_RAMP_06_US                        = 0x40,
313*cb5466b0SMatthias Ringwald     RADIO_RAMP_08_US                        = 0x60,
314*cb5466b0SMatthias Ringwald     RADIO_RAMP_10_US                        = 0x80,
315*cb5466b0SMatthias Ringwald     RADIO_RAMP_12_US                        = 0xA0,
316*cb5466b0SMatthias Ringwald     RADIO_RAMP_16_US                        = 0xC0,
317*cb5466b0SMatthias Ringwald     RADIO_RAMP_20_US                        = 0xE0,
318*cb5466b0SMatthias Ringwald }RadioRampTimes_t;
319*cb5466b0SMatthias Ringwald 
320*cb5466b0SMatthias Ringwald /*!
321*cb5466b0SMatthias Ringwald  * \brief Represents the number of symbols to be used for channel activity detection operation
322*cb5466b0SMatthias Ringwald  */
323*cb5466b0SMatthias Ringwald typedef enum
324*cb5466b0SMatthias Ringwald {
325*cb5466b0SMatthias Ringwald     LORA_CAD_01_SYMBOL                      = 0x00,
326*cb5466b0SMatthias Ringwald     LORA_CAD_02_SYMBOL                      = 0x20,
327*cb5466b0SMatthias Ringwald     LORA_CAD_04_SYMBOL                      = 0x40,
328*cb5466b0SMatthias Ringwald     LORA_CAD_08_SYMBOL                      = 0x60,
329*cb5466b0SMatthias Ringwald     LORA_CAD_16_SYMBOL                      = 0x80,
330*cb5466b0SMatthias Ringwald }RadioLoRaCadSymbols_t;
331*cb5466b0SMatthias Ringwald 
332*cb5466b0SMatthias Ringwald /*!
333*cb5466b0SMatthias Ringwald  * \brief Represents the possible combinations of bitrate and bandwidth for
334*cb5466b0SMatthias Ringwald  *        GFSK and BLE packet types
335*cb5466b0SMatthias Ringwald  *
336*cb5466b0SMatthias Ringwald  * The bitrate is expressed in Mb/s and the bandwidth in MHz
337*cb5466b0SMatthias Ringwald  */
338*cb5466b0SMatthias Ringwald typedef enum
339*cb5466b0SMatthias Ringwald {
340*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_2_000_BW_2_4                 = 0x04,
341*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_1_600_BW_2_4                 = 0x28,
342*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_1_000_BW_2_4                 = 0x4C,
343*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_1_000_BW_1_2                 = 0x45,
344*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_0_800_BW_2_4                 = 0x70,
345*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_0_800_BW_1_2                 = 0x69,
346*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_0_500_BW_1_2                 = 0x8D,
347*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_0_500_BW_0_6                 = 0x86,
348*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_0_400_BW_1_2                 = 0xB1,
349*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_0_400_BW_0_6                 = 0xAA,
350*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_0_250_BW_0_6                 = 0xCE,
351*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_0_250_BW_0_3                 = 0xC7,
352*cb5466b0SMatthias Ringwald     GFSK_BLE_BR_0_125_BW_0_3                 = 0xEF,
353*cb5466b0SMatthias Ringwald }RadioGfskBleBitrates_t;
354*cb5466b0SMatthias Ringwald 
355*cb5466b0SMatthias Ringwald /*!
356*cb5466b0SMatthias Ringwald  * \brief Represents the modulation index used in GFSK and BLE packet
357*cb5466b0SMatthias Ringwald  *        types
358*cb5466b0SMatthias Ringwald  */
359*cb5466b0SMatthias Ringwald typedef enum
360*cb5466b0SMatthias Ringwald {
361*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_0_35                    =  0,
362*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_0_50                    =  1,
363*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_0_75                    =  2,
364*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_1_00                    =  3,
365*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_1_25                    =  4,
366*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_1_50                    =  5,
367*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_1_75                    =  6,
368*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_2_00                    =  7,
369*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_2_25                    =  8,
370*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_2_50                    =  9,
371*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_2_75                    = 10,
372*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_3_00                    = 11,
373*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_3_25                    = 12,
374*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_3_50                    = 13,
375*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_3_75                    = 14,
376*cb5466b0SMatthias Ringwald     GFSK_BLE_MOD_IND_4_00                    = 15,
377*cb5466b0SMatthias Ringwald }RadioGfskBleModIndexes_t;
378*cb5466b0SMatthias Ringwald 
379*cb5466b0SMatthias Ringwald /*!
380*cb5466b0SMatthias Ringwald  * \brief Represents the possible combination of bitrate and bandwidth for FLRC
381*cb5466b0SMatthias Ringwald  *        packet type
382*cb5466b0SMatthias Ringwald  *
383*cb5466b0SMatthias Ringwald  * The bitrate is in Mb/s and the bitrate in MHz
384*cb5466b0SMatthias Ringwald  */
385*cb5466b0SMatthias Ringwald typedef enum
386*cb5466b0SMatthias Ringwald {
387*cb5466b0SMatthias Ringwald     FLRC_BR_2_600_BW_2_4                    = 0x04,
388*cb5466b0SMatthias Ringwald     FLRC_BR_2_080_BW_2_4                    = 0x28,
389*cb5466b0SMatthias Ringwald     FLRC_BR_1_300_BW_1_2                    = 0x45,
390*cb5466b0SMatthias Ringwald     FLRC_BR_1_040_BW_1_2                    = 0x69,
391*cb5466b0SMatthias Ringwald     FLRC_BR_0_650_BW_0_6                    = 0x86,
392*cb5466b0SMatthias Ringwald     FLRC_BR_0_520_BW_0_6                    = 0xAA,
393*cb5466b0SMatthias Ringwald     FLRC_BR_0_325_BW_0_3                    = 0xC7,
394*cb5466b0SMatthias Ringwald     FLRC_BR_0_260_BW_0_3                    = 0xEB,
395*cb5466b0SMatthias Ringwald }RadioFlrcBitrates_t;
396*cb5466b0SMatthias Ringwald 
397*cb5466b0SMatthias Ringwald /*!
398*cb5466b0SMatthias Ringwald  * \brief Represents the possible values for coding rate parameter in FLRC
399*cb5466b0SMatthias Ringwald  *        packet type
400*cb5466b0SMatthias Ringwald  */
401*cb5466b0SMatthias Ringwald typedef enum
402*cb5466b0SMatthias Ringwald {
403*cb5466b0SMatthias Ringwald     FLRC_CR_1_2                             = 0x00,
404*cb5466b0SMatthias Ringwald     FLRC_CR_3_4                             = 0x02,
405*cb5466b0SMatthias Ringwald     FLRC_CR_1_0                             = 0x04,
406*cb5466b0SMatthias Ringwald }RadioFlrcCodingRates_t;
407*cb5466b0SMatthias Ringwald 
408*cb5466b0SMatthias Ringwald /*!
409*cb5466b0SMatthias Ringwald  * \brief Represents the modulation shaping parameter for GFSK, FLRC and BLE
410*cb5466b0SMatthias Ringwald  *        packet types
411*cb5466b0SMatthias Ringwald  */
412*cb5466b0SMatthias Ringwald typedef enum
413*cb5466b0SMatthias Ringwald {
414*cb5466b0SMatthias Ringwald     RADIO_MOD_SHAPING_BT_OFF                = 0x00,         //! No filtering
415*cb5466b0SMatthias Ringwald     RADIO_MOD_SHAPING_BT_1_0                = 0x10,
416*cb5466b0SMatthias Ringwald     RADIO_MOD_SHAPING_BT_0_5                = 0x20,
417*cb5466b0SMatthias Ringwald }RadioModShapings_t;
418*cb5466b0SMatthias Ringwald 
419*cb5466b0SMatthias Ringwald /*!
420*cb5466b0SMatthias Ringwald  * \brief Represents the possible spreading factor values in LORA packet types
421*cb5466b0SMatthias Ringwald  */
422*cb5466b0SMatthias Ringwald typedef enum
423*cb5466b0SMatthias Ringwald {
424*cb5466b0SMatthias Ringwald     LORA_SF5                                = 0x50,
425*cb5466b0SMatthias Ringwald     LORA_SF6                                = 0x60,
426*cb5466b0SMatthias Ringwald     LORA_SF7                                = 0x70,
427*cb5466b0SMatthias Ringwald     LORA_SF8                                = 0x80,
428*cb5466b0SMatthias Ringwald     LORA_SF9                                = 0x90,
429*cb5466b0SMatthias Ringwald     LORA_SF10                               = 0xA0,
430*cb5466b0SMatthias Ringwald     LORA_SF11                               = 0xB0,
431*cb5466b0SMatthias Ringwald     LORA_SF12                               = 0xC0,
432*cb5466b0SMatthias Ringwald }RadioLoRaSpreadingFactors_t;
433*cb5466b0SMatthias Ringwald 
434*cb5466b0SMatthias Ringwald /*!
435*cb5466b0SMatthias Ringwald  * \brief Represents the bandwidth values for LORA packet type
436*cb5466b0SMatthias Ringwald  */
437*cb5466b0SMatthias Ringwald typedef enum
438*cb5466b0SMatthias Ringwald {
439*cb5466b0SMatthias Ringwald     LORA_BW_0200                            = 0x34,
440*cb5466b0SMatthias Ringwald     LORA_BW_0400                            = 0x26,
441*cb5466b0SMatthias Ringwald     LORA_BW_0800                            = 0x18,
442*cb5466b0SMatthias Ringwald     LORA_BW_1600                            = 0x0A,
443*cb5466b0SMatthias Ringwald }RadioLoRaBandwidths_t;
444*cb5466b0SMatthias Ringwald 
445*cb5466b0SMatthias Ringwald /*!
446*cb5466b0SMatthias Ringwald  * \brief Represents the coding rate values for LORA packet type
447*cb5466b0SMatthias Ringwald  */
448*cb5466b0SMatthias Ringwald typedef enum
449*cb5466b0SMatthias Ringwald {
450*cb5466b0SMatthias Ringwald     LORA_CR_4_5                             = 0x01,
451*cb5466b0SMatthias Ringwald     LORA_CR_4_6                             = 0x02,
452*cb5466b0SMatthias Ringwald     LORA_CR_4_7                             = 0x03,
453*cb5466b0SMatthias Ringwald     LORA_CR_4_8                             = 0x04,
454*cb5466b0SMatthias Ringwald     LORA_CR_LI_4_5                          = 0x05,
455*cb5466b0SMatthias Ringwald     LORA_CR_LI_4_6                          = 0x06,
456*cb5466b0SMatthias Ringwald     LORA_CR_LI_4_7                          = 0x07,
457*cb5466b0SMatthias Ringwald }RadioLoRaCodingRates_t;
458*cb5466b0SMatthias Ringwald 
459*cb5466b0SMatthias Ringwald /*!
460*cb5466b0SMatthias Ringwald  * \brief Represents the preamble length values for GFSK and FLRC packet
461*cb5466b0SMatthias Ringwald  *        types
462*cb5466b0SMatthias Ringwald  */
463*cb5466b0SMatthias Ringwald typedef enum
464*cb5466b0SMatthias Ringwald {
465*cb5466b0SMatthias Ringwald     PREAMBLE_LENGTH_04_BITS                 = 0x00,         //!< Preamble length: 04 bits
466*cb5466b0SMatthias Ringwald     PREAMBLE_LENGTH_08_BITS                 = 0x10,         //!< Preamble length: 08 bits
467*cb5466b0SMatthias Ringwald     PREAMBLE_LENGTH_12_BITS                 = 0x20,         //!< Preamble length: 12 bits
468*cb5466b0SMatthias Ringwald     PREAMBLE_LENGTH_16_BITS                 = 0x30,         //!< Preamble length: 16 bits
469*cb5466b0SMatthias Ringwald     PREAMBLE_LENGTH_20_BITS                 = 0x40,         //!< Preamble length: 20 bits
470*cb5466b0SMatthias Ringwald     PREAMBLE_LENGTH_24_BITS                 = 0x50,         //!< Preamble length: 24 bits
471*cb5466b0SMatthias Ringwald     PREAMBLE_LENGTH_28_BITS                 = 0x60,         //!< Preamble length: 28 bits
472*cb5466b0SMatthias Ringwald     PREAMBLE_LENGTH_32_BITS                 = 0x70,         //!< Preamble length: 32 bits
473*cb5466b0SMatthias Ringwald }RadioPreambleLengths_t;
474*cb5466b0SMatthias Ringwald 
475*cb5466b0SMatthias Ringwald /*!
476*cb5466b0SMatthias Ringwald  * \brief Represents the SyncWord length for FLRC packet type
477*cb5466b0SMatthias Ringwald  */
478*cb5466b0SMatthias Ringwald typedef enum
479*cb5466b0SMatthias Ringwald {
480*cb5466b0SMatthias Ringwald     FLRC_NO_SYNCWORD                       = 0x00,
481*cb5466b0SMatthias Ringwald     FLRC_SYNCWORD_LENGTH_4_BYTE            = 0x04,
482*cb5466b0SMatthias Ringwald }RadioFlrcSyncWordLengths_t;
483*cb5466b0SMatthias Ringwald 
484*cb5466b0SMatthias Ringwald /*!
485*cb5466b0SMatthias Ringwald  * \brief The length of sync words for GFSK packet type
486*cb5466b0SMatthias Ringwald  */
487*cb5466b0SMatthias Ringwald typedef enum
488*cb5466b0SMatthias Ringwald {
489*cb5466b0SMatthias Ringwald     GFSK_SYNCWORD_LENGTH_1_BYTE              = 0x00,         //!< Sync word length: 1 byte
490*cb5466b0SMatthias Ringwald     GFSK_SYNCWORD_LENGTH_2_BYTE              = 0x02,         //!< Sync word length: 2 bytes
491*cb5466b0SMatthias Ringwald     GFSK_SYNCWORD_LENGTH_3_BYTE              = 0x04,         //!< Sync word length: 3 bytes
492*cb5466b0SMatthias Ringwald     GFSK_SYNCWORD_LENGTH_4_BYTE              = 0x06,         //!< Sync word length: 4 bytes
493*cb5466b0SMatthias Ringwald     GFSK_SYNCWORD_LENGTH_5_BYTE              = 0x08,         //!< Sync word length: 5 bytes
494*cb5466b0SMatthias Ringwald }RadioSyncWordLengths_t;
495*cb5466b0SMatthias Ringwald 
496*cb5466b0SMatthias Ringwald /*!
497*cb5466b0SMatthias Ringwald  * \brief Represents the possible combinations of SyncWord correlators
498*cb5466b0SMatthias Ringwald  *        activated for GFSK and FLRC packet types
499*cb5466b0SMatthias Ringwald  */
500*cb5466b0SMatthias Ringwald typedef enum
501*cb5466b0SMatthias Ringwald {
502*cb5466b0SMatthias Ringwald     RADIO_RX_MATCH_SYNCWORD_OFF             = 0x00,         //!< No correlator turned on, i.e. do not search for SyncWord
503*cb5466b0SMatthias Ringwald     RADIO_RX_MATCH_SYNCWORD_1               = 0x10,
504*cb5466b0SMatthias Ringwald     RADIO_RX_MATCH_SYNCWORD_2               = 0x20,
505*cb5466b0SMatthias Ringwald     RADIO_RX_MATCH_SYNCWORD_1_2             = 0x30,
506*cb5466b0SMatthias Ringwald     RADIO_RX_MATCH_SYNCWORD_3               = 0x40,
507*cb5466b0SMatthias Ringwald     RADIO_RX_MATCH_SYNCWORD_1_3             = 0x50,
508*cb5466b0SMatthias Ringwald     RADIO_RX_MATCH_SYNCWORD_2_3             = 0x60,
509*cb5466b0SMatthias Ringwald     RADIO_RX_MATCH_SYNCWORD_1_2_3           = 0x70,
510*cb5466b0SMatthias Ringwald }RadioSyncWordRxMatchs_t;
511*cb5466b0SMatthias Ringwald 
512*cb5466b0SMatthias Ringwald /*!
513*cb5466b0SMatthias Ringwald  *  \brief Radio packet length mode for GFSK and FLRC packet types
514*cb5466b0SMatthias Ringwald  */
515*cb5466b0SMatthias Ringwald typedef enum
516*cb5466b0SMatthias Ringwald {
517*cb5466b0SMatthias Ringwald     RADIO_PACKET_FIXED_LENGTH               = 0x00,         //!< The packet is known on both sides, no header included in the packet
518*cb5466b0SMatthias Ringwald     RADIO_PACKET_VARIABLE_LENGTH            = 0x20,         //!< The packet is on variable size, header included
519*cb5466b0SMatthias Ringwald }RadioPacketLengthModes_t;
520*cb5466b0SMatthias Ringwald 
521*cb5466b0SMatthias Ringwald /*!
522*cb5466b0SMatthias Ringwald  * \brief Represents the CRC length for GFSK and FLRC packet types
523*cb5466b0SMatthias Ringwald  *
524*cb5466b0SMatthias Ringwald  * \warning Not all configurations are available for both GFSK and FLRC
525*cb5466b0SMatthias Ringwald  *          packet type. Refer to the datasheet for possible configuration.
526*cb5466b0SMatthias Ringwald  */
527*cb5466b0SMatthias Ringwald typedef enum
528*cb5466b0SMatthias Ringwald {
529*cb5466b0SMatthias Ringwald     RADIO_CRC_OFF                           = 0x00,         //!< No CRC in use
530*cb5466b0SMatthias Ringwald     RADIO_CRC_1_BYTES                       = 0x10,
531*cb5466b0SMatthias Ringwald     RADIO_CRC_2_BYTES                       = 0x20,
532*cb5466b0SMatthias Ringwald     RADIO_CRC_3_BYTES                       = 0x30,
533*cb5466b0SMatthias Ringwald }RadioCrcTypes_t;
534*cb5466b0SMatthias Ringwald 
535*cb5466b0SMatthias Ringwald /*!
536*cb5466b0SMatthias Ringwald  * \brief Radio whitening mode activated or deactivated for GFSK, FLRC and
537*cb5466b0SMatthias Ringwald  *        BLE packet types
538*cb5466b0SMatthias Ringwald  */
539*cb5466b0SMatthias Ringwald typedef enum
540*cb5466b0SMatthias Ringwald {
541*cb5466b0SMatthias Ringwald     RADIO_WHITENING_ON                      = 0x00,
542*cb5466b0SMatthias Ringwald     RADIO_WHITENING_OFF                     = 0x08,
543*cb5466b0SMatthias Ringwald }RadioWhiteningModes_t;
544*cb5466b0SMatthias Ringwald 
545*cb5466b0SMatthias Ringwald /*!
546*cb5466b0SMatthias Ringwald  * \brief Holds the packet length mode of a LORA packet type
547*cb5466b0SMatthias Ringwald  */
548*cb5466b0SMatthias Ringwald typedef enum
549*cb5466b0SMatthias Ringwald {
550*cb5466b0SMatthias Ringwald     LORA_PACKET_VARIABLE_LENGTH             = 0x00,         //!< The packet is on variable size, header included
551*cb5466b0SMatthias Ringwald     LORA_PACKET_FIXED_LENGTH                = 0x80,         //!< The packet is known on both sides, no header included in the packet
552*cb5466b0SMatthias Ringwald     LORA_PACKET_EXPLICIT                    = LORA_PACKET_VARIABLE_LENGTH,
553*cb5466b0SMatthias Ringwald     LORA_PACKET_IMPLICIT                    = LORA_PACKET_FIXED_LENGTH,
554*cb5466b0SMatthias Ringwald }RadioLoRaPacketLengthsModes_t;
555*cb5466b0SMatthias Ringwald 
556*cb5466b0SMatthias Ringwald /*!
557*cb5466b0SMatthias Ringwald  * \brief Represents the CRC mode for LORA packet type
558*cb5466b0SMatthias Ringwald  */
559*cb5466b0SMatthias Ringwald typedef enum
560*cb5466b0SMatthias Ringwald {
561*cb5466b0SMatthias Ringwald     LORA_CRC_ON                             = 0x20,         //!< CRC activated
562*cb5466b0SMatthias Ringwald     LORA_CRC_OFF                            = 0x00,         //!< CRC not used
563*cb5466b0SMatthias Ringwald }RadioLoRaCrcModes_t;
564*cb5466b0SMatthias Ringwald 
565*cb5466b0SMatthias Ringwald /*!
566*cb5466b0SMatthias Ringwald  * \brief Represents the IQ mode for LORA packet type
567*cb5466b0SMatthias Ringwald  */
568*cb5466b0SMatthias Ringwald typedef enum
569*cb5466b0SMatthias Ringwald {
570*cb5466b0SMatthias Ringwald     LORA_IQ_NORMAL                          = 0x40,
571*cb5466b0SMatthias Ringwald     LORA_IQ_INVERTED                        = 0x00,
572*cb5466b0SMatthias Ringwald }RadioLoRaIQModes_t;
573*cb5466b0SMatthias Ringwald 
574*cb5466b0SMatthias Ringwald /*!
575*cb5466b0SMatthias Ringwald  * \brief Represents the length of the ID to check in ranging operation
576*cb5466b0SMatthias Ringwald  */
577*cb5466b0SMatthias Ringwald typedef enum
578*cb5466b0SMatthias Ringwald {
579*cb5466b0SMatthias Ringwald     RANGING_IDCHECK_LENGTH_08_BITS          = 0x00,
580*cb5466b0SMatthias Ringwald     RANGING_IDCHECK_LENGTH_16_BITS,
581*cb5466b0SMatthias Ringwald     RANGING_IDCHECK_LENGTH_24_BITS,
582*cb5466b0SMatthias Ringwald     RANGING_IDCHECK_LENGTH_32_BITS,
583*cb5466b0SMatthias Ringwald }RadioRangingIdCheckLengths_t;
584*cb5466b0SMatthias Ringwald 
585*cb5466b0SMatthias Ringwald /*!
586*cb5466b0SMatthias Ringwald  * \brief Represents the result type to be used in ranging operation
587*cb5466b0SMatthias Ringwald  */
588*cb5466b0SMatthias Ringwald typedef enum
589*cb5466b0SMatthias Ringwald {
590*cb5466b0SMatthias Ringwald     RANGING_RESULT_RAW                      = 0x00,
591*cb5466b0SMatthias Ringwald     RANGING_RESULT_AVERAGED                 = 0x01,
592*cb5466b0SMatthias Ringwald     RANGING_RESULT_DEBIASED                 = 0x02,
593*cb5466b0SMatthias Ringwald     RANGING_RESULT_FILTERED                 = 0x03,
594*cb5466b0SMatthias Ringwald }RadioRangingResultTypes_t;
595*cb5466b0SMatthias Ringwald 
596*cb5466b0SMatthias Ringwald /*!
597*cb5466b0SMatthias Ringwald  * \brief Represents the connection state for BLE packet type
598*cb5466b0SMatthias Ringwald  */
599*cb5466b0SMatthias Ringwald typedef enum
600*cb5466b0SMatthias Ringwald {
601*cb5466b0SMatthias Ringwald     BLE_PAYLOAD_LENGTH_MAX_31_BYTES         = 0x00,
602*cb5466b0SMatthias Ringwald     BLE_PAYLOAD_LENGTH_MAX_37_BYTES         = 0x20,
603*cb5466b0SMatthias Ringwald     BLE_TX_TEST_MODE                        = 0x40,
604*cb5466b0SMatthias Ringwald     BLE_PAYLOAD_LENGTH_MAX_255_BYTES        = 0x80,
605*cb5466b0SMatthias Ringwald }RadioBleConnectionStates_t;
606*cb5466b0SMatthias Ringwald 
607*cb5466b0SMatthias Ringwald /*!
608*cb5466b0SMatthias Ringwald  * \brief Represents the CRC field length for BLE packet type
609*cb5466b0SMatthias Ringwald  */
610*cb5466b0SMatthias Ringwald typedef enum
611*cb5466b0SMatthias Ringwald {
612*cb5466b0SMatthias Ringwald     BLE_CRC_OFF                             = 0x00,
613*cb5466b0SMatthias Ringwald     BLE_CRC_3B                              = 0x10,
614*cb5466b0SMatthias Ringwald }RadioBleCrcFields_t;
615*cb5466b0SMatthias Ringwald 
616*cb5466b0SMatthias Ringwald /*!
617*cb5466b0SMatthias Ringwald  * \brief Represents the specific packets to use in BLE packet type
618*cb5466b0SMatthias Ringwald  */
619*cb5466b0SMatthias Ringwald typedef enum
620*cb5466b0SMatthias Ringwald {
621*cb5466b0SMatthias Ringwald     BLE_PRBS_9                              = 0x00,         //!< Pseudo Random Binary Sequence based on 9th degree polynomial
622*cb5466b0SMatthias Ringwald     BLE_PRBS_15                             = 0x0C,         //!< Pseudo Random Binary Sequence based on 15th degree polynomial
623*cb5466b0SMatthias Ringwald     BLE_EYELONG_1_0                         = 0x04,         //!< Repeated '11110000' sequence
624*cb5466b0SMatthias Ringwald     BLE_EYELONG_0_1                         = 0x18,         //!< Repeated '00001111' sequence
625*cb5466b0SMatthias Ringwald     BLE_EYESHORT_1_0                        = 0x08,         //!< Repeated '10101010' sequence
626*cb5466b0SMatthias Ringwald     BLE_EYESHORT_0_1                        = 0x1C,         //!< Repeated '01010101' sequence
627*cb5466b0SMatthias Ringwald     BLE_ALL_1                               = 0x10,         //!< Repeated '11111111' sequence
628*cb5466b0SMatthias Ringwald     BLE_ALL_0                               = 0x14,         //!< Repeated '00000000' sequence
629*cb5466b0SMatthias Ringwald }RadioBlePacketTypes_t;
630*cb5466b0SMatthias Ringwald 
631*cb5466b0SMatthias Ringwald /*!
632*cb5466b0SMatthias Ringwald  * \brief Represents the interruption masks available for the radio
633*cb5466b0SMatthias Ringwald  *
634*cb5466b0SMatthias Ringwald  * \remark Note that not all these interruptions are available for all packet types
635*cb5466b0SMatthias Ringwald  */
636*cb5466b0SMatthias Ringwald typedef enum
637*cb5466b0SMatthias Ringwald {
638*cb5466b0SMatthias Ringwald     IRQ_RADIO_NONE                          = 0x0000,
639*cb5466b0SMatthias Ringwald     IRQ_TX_DONE                             = 0x0001,
640*cb5466b0SMatthias Ringwald     IRQ_RX_DONE                             = 0x0002,
641*cb5466b0SMatthias Ringwald     IRQ_SYNCWORD_VALID                      = 0x0004,
642*cb5466b0SMatthias Ringwald     IRQ_SYNCWORD_ERROR                      = 0x0008,
643*cb5466b0SMatthias Ringwald     IRQ_HEADER_VALID                        = 0x0010,
644*cb5466b0SMatthias Ringwald     IRQ_HEADER_ERROR                        = 0x0020,
645*cb5466b0SMatthias Ringwald     IRQ_CRC_ERROR                           = 0x0040,
646*cb5466b0SMatthias Ringwald     IRQ_RANGING_SLAVE_RESPONSE_DONE         = 0x0080,
647*cb5466b0SMatthias Ringwald     IRQ_RANGING_SLAVE_REQUEST_DISCARDED     = 0x0100,
648*cb5466b0SMatthias Ringwald     IRQ_RANGING_MASTER_RESULT_VALID         = 0x0200,
649*cb5466b0SMatthias Ringwald     IRQ_RANGING_MASTER_RESULT_TIMEOUT       = 0x0400,
650*cb5466b0SMatthias Ringwald     IRQ_RANGING_SLAVE_REQUEST_VALID         = 0x0800,
651*cb5466b0SMatthias Ringwald     IRQ_CAD_DONE                            = 0x1000,
652*cb5466b0SMatthias Ringwald     IRQ_CAD_ACTIVITY_DETECTED               = 0x2000,
653*cb5466b0SMatthias Ringwald     IRQ_RX_TX_TIMEOUT                       = 0x4000,
654*cb5466b0SMatthias Ringwald     IRQ_PREAMBLE_DETECTED                   = 0x8000,
655*cb5466b0SMatthias Ringwald     IRQ_RADIO_ALL                           = 0xFFFF,
656*cb5466b0SMatthias Ringwald }RadioIrqMasks_t;
657*cb5466b0SMatthias Ringwald 
658*cb5466b0SMatthias Ringwald /*!
659*cb5466b0SMatthias Ringwald  * \brief Represents the digital input/output of the radio
660*cb5466b0SMatthias Ringwald  */
661*cb5466b0SMatthias Ringwald typedef enum
662*cb5466b0SMatthias Ringwald {
663*cb5466b0SMatthias Ringwald     RADIO_DIO1                              = 0x02,
664*cb5466b0SMatthias Ringwald     RADIO_DIO2                              = 0x04,
665*cb5466b0SMatthias Ringwald     RADIO_DIO3                              = 0x08,
666*cb5466b0SMatthias Ringwald }RadioDios_t;
667*cb5466b0SMatthias Ringwald 
668*cb5466b0SMatthias Ringwald /*!
669*cb5466b0SMatthias Ringwald  * \brief Represents the tick size available for Rx/Tx timeout operations
670*cb5466b0SMatthias Ringwald  */
671*cb5466b0SMatthias Ringwald typedef enum
672*cb5466b0SMatthias Ringwald {
673*cb5466b0SMatthias Ringwald     RADIO_TICK_SIZE_0015_US                 = 0x00,
674*cb5466b0SMatthias Ringwald     RADIO_TICK_SIZE_0062_US                 = 0x01,
675*cb5466b0SMatthias Ringwald     RADIO_TICK_SIZE_1000_US                 = 0x02,
676*cb5466b0SMatthias Ringwald     RADIO_TICK_SIZE_4000_US                 = 0x03,
677*cb5466b0SMatthias Ringwald }RadioTickSizes_t;
678*cb5466b0SMatthias Ringwald 
679*cb5466b0SMatthias Ringwald /*!
680*cb5466b0SMatthias Ringwald  * \brief Represents the role of the radio during ranging operations
681*cb5466b0SMatthias Ringwald  */
682*cb5466b0SMatthias Ringwald typedef enum
683*cb5466b0SMatthias Ringwald {
684*cb5466b0SMatthias Ringwald     RADIO_RANGING_ROLE_SLAVE                = 0x00,
685*cb5466b0SMatthias Ringwald     RADIO_RANGING_ROLE_MASTER               = 0x01,
686*cb5466b0SMatthias Ringwald }RadioRangingRoles_t;
687*cb5466b0SMatthias Ringwald 
688*cb5466b0SMatthias Ringwald /*!
689*cb5466b0SMatthias Ringwald  * \brief Represents all possible opcode understood by the radio
690*cb5466b0SMatthias Ringwald  */
691*cb5466b0SMatthias Ringwald typedef enum RadioCommands_u
692*cb5466b0SMatthias Ringwald {
693*cb5466b0SMatthias Ringwald     RADIO_GET_STATUS                        = 0xC0,
694*cb5466b0SMatthias Ringwald     RADIO_WRITE_REGISTER                    = 0x18,
695*cb5466b0SMatthias Ringwald     RADIO_READ_REGISTER                     = 0x19,
696*cb5466b0SMatthias Ringwald     RADIO_WRITE_BUFFER                      = 0x1A,
697*cb5466b0SMatthias Ringwald     RADIO_READ_BUFFER                       = 0x1B,
698*cb5466b0SMatthias Ringwald     RADIO_SET_SLEEP                         = 0x84,
699*cb5466b0SMatthias Ringwald     RADIO_SET_STANDBY                       = 0x80,
700*cb5466b0SMatthias Ringwald     RADIO_SET_FS                            = 0xC1,
701*cb5466b0SMatthias Ringwald     RADIO_SET_TX                            = 0x83,
702*cb5466b0SMatthias Ringwald     RADIO_SET_RX                            = 0x82,
703*cb5466b0SMatthias Ringwald     RADIO_SET_RXDUTYCYCLE                   = 0x94,
704*cb5466b0SMatthias Ringwald     RADIO_SET_CAD                           = 0xC5,
705*cb5466b0SMatthias Ringwald     RADIO_SET_TXCONTINUOUSWAVE              = 0xD1,
706*cb5466b0SMatthias Ringwald     RADIO_SET_TXCONTINUOUSPREAMBLE          = 0xD2,
707*cb5466b0SMatthias Ringwald     RADIO_SET_PACKETTYPE                    = 0x8A,
708*cb5466b0SMatthias Ringwald     RADIO_GET_PACKETTYPE                    = 0x03,
709*cb5466b0SMatthias Ringwald     RADIO_SET_RFFREQUENCY                   = 0x86,
710*cb5466b0SMatthias Ringwald     RADIO_SET_TXPARAMS                      = 0x8E,
711*cb5466b0SMatthias Ringwald     RADIO_SET_CADPARAMS                     = 0x88,
712*cb5466b0SMatthias Ringwald     RADIO_SET_BUFFERBASEADDRESS             = 0x8F,
713*cb5466b0SMatthias Ringwald     RADIO_SET_MODULATIONPARAMS              = 0x8B,
714*cb5466b0SMatthias Ringwald     RADIO_SET_PACKETPARAMS                  = 0x8C,
715*cb5466b0SMatthias Ringwald     RADIO_GET_RXBUFFERSTATUS                = 0x17,
716*cb5466b0SMatthias Ringwald     RADIO_GET_PACKETSTATUS                  = 0x1D,
717*cb5466b0SMatthias Ringwald     RADIO_GET_RSSIINST                      = 0x1F,
718*cb5466b0SMatthias Ringwald     RADIO_SET_DIOIRQPARAMS                  = 0x8D,
719*cb5466b0SMatthias Ringwald     RADIO_GET_IRQSTATUS                     = 0x15,
720*cb5466b0SMatthias Ringwald     RADIO_CLR_IRQSTATUS                     = 0x97,
721*cb5466b0SMatthias Ringwald     RADIO_CALIBRATE                         = 0x89,
722*cb5466b0SMatthias Ringwald     RADIO_SET_REGULATORMODE                 = 0x96,
723*cb5466b0SMatthias Ringwald     RADIO_SET_SAVECONTEXT                   = 0xD5,
724*cb5466b0SMatthias Ringwald     RADIO_SET_AUTOTX                        = 0x98,
725*cb5466b0SMatthias Ringwald     RADIO_SET_AUTOFS                        = 0x9E,
726*cb5466b0SMatthias Ringwald     RADIO_SET_LONGPREAMBLE                  = 0x9B,
727*cb5466b0SMatthias Ringwald     RADIO_SET_UARTSPEED                     = 0x9D,
728*cb5466b0SMatthias Ringwald     RADIO_SET_RANGING_ROLE                  = 0xA3,
729*cb5466b0SMatthias Ringwald }RadioCommands_t;
730*cb5466b0SMatthias Ringwald 
731*cb5466b0SMatthias Ringwald /*!
732*cb5466b0SMatthias Ringwald  * \brief Represents an amount of time measurable by the radio clock
733*cb5466b0SMatthias Ringwald  *
734*cb5466b0SMatthias Ringwald  * @code
735*cb5466b0SMatthias Ringwald  * Time = Step * NbSteps
736*cb5466b0SMatthias Ringwald  * Example:
737*cb5466b0SMatthias Ringwald  * Step = RADIO_TICK_SIZE_4000_US( 4 ms )
738*cb5466b0SMatthias Ringwald  * NbSteps = 1000
739*cb5466b0SMatthias Ringwald  * Time = 4e-3 * 1000 = 4 seconds
740*cb5466b0SMatthias Ringwald  * @endcode
741*cb5466b0SMatthias Ringwald  */
742*cb5466b0SMatthias Ringwald typedef struct TickTime_s
743*cb5466b0SMatthias Ringwald {
744*cb5466b0SMatthias Ringwald     RadioTickSizes_t Step;                                  //!< The step of ticktime
745*cb5466b0SMatthias Ringwald     /*!
746*cb5466b0SMatthias Ringwald      * \brief The number of steps for ticktime
747*cb5466b0SMatthias Ringwald      * Special values are:
748*cb5466b0SMatthias Ringwald      *     - 0x0000 for single mode
749*cb5466b0SMatthias Ringwald      *     - 0xFFFF for continuous mode
750*cb5466b0SMatthias Ringwald      */
751*cb5466b0SMatthias Ringwald     uint16_t NbSteps;
752*cb5466b0SMatthias Ringwald }TickTime_t;
753*cb5466b0SMatthias Ringwald 
754*cb5466b0SMatthias Ringwald /*!
755*cb5466b0SMatthias Ringwald * \brief RX_TX_CONTINUOUS and RX_TX_SINGLE are two particular values for TickTime.
756*cb5466b0SMatthias Ringwald * The former keep the radio in Rx or Tx mode, even after successfull reception
757*cb5466b0SMatthias Ringwald * or transmission. It should never generate Timeout interrupt.
758*cb5466b0SMatthias Ringwald * The later let the radio enought time to make one reception or transmission.
759*cb5466b0SMatthias Ringwald * No Timeout interrupt is generated, and the radio fall in StandBy mode after
760*cb5466b0SMatthias Ringwald * reception or transmission.
761*cb5466b0SMatthias Ringwald */
762*cb5466b0SMatthias Ringwald #define RX_TX_CONTINUOUS ( TickTime_t ){ RADIO_TICK_SIZE_0015_US, 0xFFFF }
763*cb5466b0SMatthias Ringwald #define RX_TX_SINGLE     ( TickTime_t ){ RADIO_TICK_SIZE_0015_US, 0 }
764*cb5466b0SMatthias Ringwald 
765*cb5466b0SMatthias Ringwald /*!
766*cb5466b0SMatthias Ringwald  * \brief The type describing the modulation parameters for every packet types
767*cb5466b0SMatthias Ringwald  */
768*cb5466b0SMatthias Ringwald typedef struct
769*cb5466b0SMatthias Ringwald {
770*cb5466b0SMatthias Ringwald     RadioPacketTypes_t                    PacketType;        //!< Packet to which the modulation parameters are referring to.
771*cb5466b0SMatthias Ringwald //    union
772*cb5466b0SMatthias Ringwald     struct
773*cb5466b0SMatthias Ringwald     {
774*cb5466b0SMatthias Ringwald         /*!
775*cb5466b0SMatthias Ringwald          * \brief Holds the GFSK modulation parameters
776*cb5466b0SMatthias Ringwald          *
777*cb5466b0SMatthias Ringwald          * In GFSK modulation, the bit-rate and bandwidth are linked together. In this structure, its values are set using the same token.
778*cb5466b0SMatthias Ringwald          */
779*cb5466b0SMatthias Ringwald         struct
780*cb5466b0SMatthias Ringwald         {
781*cb5466b0SMatthias Ringwald             RadioGfskBleBitrates_t    BitrateBandwidth;  //!< The bandwidth and bit-rate values for BLE and GFSK modulations
782*cb5466b0SMatthias Ringwald             RadioGfskBleModIndexes_t  ModulationIndex;   //!< The coding rate for BLE and GFSK modulations
783*cb5466b0SMatthias Ringwald             RadioModShapings_t        ModulationShaping; //!< The modulation shaping for BLE and GFSK modulations
784*cb5466b0SMatthias Ringwald         }Gfsk;
785*cb5466b0SMatthias Ringwald         /*!
786*cb5466b0SMatthias Ringwald          * \brief Holds the LORA modulation parameters
787*cb5466b0SMatthias Ringwald          *
788*cb5466b0SMatthias Ringwald          * LORA modulation is defined by Spreading Factor (SF), Bandwidth and Coding Rate
789*cb5466b0SMatthias Ringwald          */
790*cb5466b0SMatthias Ringwald         struct
791*cb5466b0SMatthias Ringwald         {
792*cb5466b0SMatthias Ringwald             RadioLoRaSpreadingFactors_t  SpreadingFactor;   //!< Spreading Factor for the LORA modulation
793*cb5466b0SMatthias Ringwald             RadioLoRaBandwidths_t        Bandwidth;         //!< Bandwidth for the LORA modulation
794*cb5466b0SMatthias Ringwald             RadioLoRaCodingRates_t       CodingRate;        //!< Coding rate for the LORA modulation
795*cb5466b0SMatthias Ringwald         }LoRa;
796*cb5466b0SMatthias Ringwald         /*!
797*cb5466b0SMatthias Ringwald          * \brief Holds the FLRC modulation parameters
798*cb5466b0SMatthias Ringwald          *
799*cb5466b0SMatthias Ringwald          * In FLRC modulation, the bit-rate and bandwidth are linked together. In this structure, its values are set using the same token.
800*cb5466b0SMatthias Ringwald          */
801*cb5466b0SMatthias Ringwald         struct
802*cb5466b0SMatthias Ringwald         {
803*cb5466b0SMatthias Ringwald             RadioFlrcBitrates_t          BitrateBandwidth;  //!< The bandwidth and bit-rate values for FLRC modulation
804*cb5466b0SMatthias Ringwald             RadioFlrcCodingRates_t       CodingRate;        //!< The coding rate for FLRC modulation
805*cb5466b0SMatthias Ringwald             RadioModShapings_t           ModulationShaping; //!< The modulation shaping for FLRC modulation
806*cb5466b0SMatthias Ringwald         }Flrc;
807*cb5466b0SMatthias Ringwald         /*!
808*cb5466b0SMatthias Ringwald          * \brief Holds the BLE modulation parameters
809*cb5466b0SMatthias Ringwald          *
810*cb5466b0SMatthias Ringwald          * In BLE modulation, the bit-rate and bandwidth are linked together. In this structure, its values are set using the same token.
811*cb5466b0SMatthias Ringwald          */
812*cb5466b0SMatthias Ringwald         struct
813*cb5466b0SMatthias Ringwald         {
814*cb5466b0SMatthias Ringwald             RadioGfskBleBitrates_t       BitrateBandwidth;  //!< The bandwidth and bit-rate values for BLE and GFSK modulations
815*cb5466b0SMatthias Ringwald             RadioGfskBleModIndexes_t     ModulationIndex;   //!< The coding rate for BLE and GFSK modulations
816*cb5466b0SMatthias Ringwald             RadioModShapings_t           ModulationShaping; //!< The modulation shaping for BLE and GFSK modulations
817*cb5466b0SMatthias Ringwald         }Ble;
818*cb5466b0SMatthias Ringwald     }Params;                                                   //!< Holds the modulation parameters structure
819*cb5466b0SMatthias Ringwald }ModulationParams_t;
820*cb5466b0SMatthias Ringwald 
821*cb5466b0SMatthias Ringwald /*!
822*cb5466b0SMatthias Ringwald  * \brief Structure describing the error codes for callback functions
823*cb5466b0SMatthias Ringwald  */
824*cb5466b0SMatthias Ringwald typedef enum
825*cb5466b0SMatthias Ringwald {
826*cb5466b0SMatthias Ringwald     IRQ_HEADER_ERROR_CODE                   = 0x00,
827*cb5466b0SMatthias Ringwald     IRQ_SYNCWORD_ERROR_CODE,
828*cb5466b0SMatthias Ringwald     IRQ_CRC_ERROR_CODE,
829*cb5466b0SMatthias Ringwald     IRQ_RANGING_ON_LORA_ERROR_CODE,
830*cb5466b0SMatthias Ringwald }IrqErrorCode_t;
831*cb5466b0SMatthias Ringwald 
832*cb5466b0SMatthias Ringwald /*!
833*cb5466b0SMatthias Ringwald  * \brief Structure describing the ranging codes for callback functions
834*cb5466b0SMatthias Ringwald  */
835*cb5466b0SMatthias Ringwald typedef enum
836*cb5466b0SMatthias Ringwald {
837*cb5466b0SMatthias Ringwald     IRQ_RANGING_SLAVE_ERROR_CODE            = 0x00,
838*cb5466b0SMatthias Ringwald     IRQ_RANGING_SLAVE_VALID_CODE,
839*cb5466b0SMatthias Ringwald     IRQ_RANGING_MASTER_ERROR_CODE,
840*cb5466b0SMatthias Ringwald     IRQ_RANGING_MASTER_VALID_CODE,
841*cb5466b0SMatthias Ringwald }IrqRangingCode_t;
842*cb5466b0SMatthias Ringwald 
843*cb5466b0SMatthias Ringwald /*!
844*cb5466b0SMatthias Ringwald  * \brief The radio callbacks structure
845*cb5466b0SMatthias Ringwald  * Holds function pointers to be called on radio interrupts
846*cb5466b0SMatthias Ringwald  */
847*cb5466b0SMatthias Ringwald typedef struct
848*cb5466b0SMatthias Ringwald {
849*cb5466b0SMatthias Ringwald     void ( *txDone )( void );                       //!< Pointer to a function run on successful transmission
850*cb5466b0SMatthias Ringwald     void ( *rxDone )( void );                       //!< Pointer to a function run on successful reception
851*cb5466b0SMatthias Ringwald     void ( *rxSyncWordDone )( void );               //!< Pointer to a function run on successful SyncWord reception
852*cb5466b0SMatthias Ringwald     void ( *rxHeaderDone )( void );                 //!< Pointer to a function run on successful Header reception
853*cb5466b0SMatthias Ringwald     void ( *txTimeout )( void );                    //!< Pointer to a function run on transmission timeout
854*cb5466b0SMatthias Ringwald     void ( *rxTimeout )( void );                    //!< Pointer to a function run on reception timeout
855*cb5466b0SMatthias Ringwald     void ( *rxError )( IrqErrorCode_t errCode );    //!< Pointer to a function run on reception error
856*cb5466b0SMatthias Ringwald     void ( *rangingDone )( IrqRangingCode_t val );  //!< Pointer to a function run on ranging terminated
857*cb5466b0SMatthias Ringwald     void ( *cadDone )( bool cadFlag );              //!< Pointer to a function run on channel activity detected
858*cb5466b0SMatthias Ringwald }RadioCallbacks_t;
859*cb5466b0SMatthias Ringwald 
860*cb5466b0SMatthias Ringwald /*!
861*cb5466b0SMatthias Ringwald  * \brief The type describing the packet parameters for every packet types
862*cb5466b0SMatthias Ringwald  */
863*cb5466b0SMatthias Ringwald typedef struct
864*cb5466b0SMatthias Ringwald {
865*cb5466b0SMatthias Ringwald     RadioPacketTypes_t                    PacketType;        //!< Packet to which the packet parameters are referring to.
866*cb5466b0SMatthias Ringwald //    union
867*cb5466b0SMatthias Ringwald     struct
868*cb5466b0SMatthias Ringwald     {
869*cb5466b0SMatthias Ringwald         /*!
870*cb5466b0SMatthias Ringwald          * \brief Holds the GFSK packet parameters
871*cb5466b0SMatthias Ringwald          */
872*cb5466b0SMatthias Ringwald         struct
873*cb5466b0SMatthias Ringwald         {
874*cb5466b0SMatthias Ringwald             RadioPreambleLengths_t       PreambleLength;    //!< The preamble length for GFSK packet type
875*cb5466b0SMatthias Ringwald             RadioSyncWordLengths_t       SyncWordLength;    //!< The synchronization word length for GFSK packet type
876*cb5466b0SMatthias Ringwald             RadioSyncWordRxMatchs_t      SyncWordMatch;     //!< The synchronization correlator to use to check synchronization word
877*cb5466b0SMatthias Ringwald             RadioPacketLengthModes_t     HeaderType;        //!< If the header is explicit, it will be transmitted in the GFSK packet. If the header is implicit, it will not be transmitted
878*cb5466b0SMatthias Ringwald             uint8_t                      PayloadLength;     //!< Size of the payload in the GFSK packet
879*cb5466b0SMatthias Ringwald             RadioCrcTypes_t              CrcLength;         //!< Size of the CRC block in the GFSK packet
880*cb5466b0SMatthias Ringwald             RadioWhiteningModes_t        Whitening;         //!< Usage of whitening on payload and CRC blocks plus header block if header type is variable
881*cb5466b0SMatthias Ringwald         }Gfsk;
882*cb5466b0SMatthias Ringwald         /*!
883*cb5466b0SMatthias Ringwald          * \brief Holds the LORA packet parameters
884*cb5466b0SMatthias Ringwald          */
885*cb5466b0SMatthias Ringwald         struct
886*cb5466b0SMatthias Ringwald         {
887*cb5466b0SMatthias Ringwald             uint8_t                       PreambleLength;    //!< The preamble length is the number of LORA symbols in the preamble. To set it, use the following formula @code Number of symbols = PreambleLength[3:0] * ( 2^PreambleLength[7:4] ) @endcode
888*cb5466b0SMatthias Ringwald             RadioLoRaPacketLengthsModes_t HeaderType;        //!< If the header is explicit, it will be transmitted in the LORA packet. If the header is implicit, it will not be transmitted
889*cb5466b0SMatthias Ringwald             uint8_t                       PayloadLength;     //!< Size of the payload in the LORA packet
890*cb5466b0SMatthias Ringwald             RadioLoRaCrcModes_t           CrcMode;           //!< Size of CRC block in LORA packet
891*cb5466b0SMatthias Ringwald             RadioLoRaIQModes_t            InvertIQ;          //!< Allows to swap IQ for LORA packet
892*cb5466b0SMatthias Ringwald         }LoRa;
893*cb5466b0SMatthias Ringwald         /*!
894*cb5466b0SMatthias Ringwald          * \brief Holds the FLRC packet parameters
895*cb5466b0SMatthias Ringwald          */
896*cb5466b0SMatthias Ringwald         struct
897*cb5466b0SMatthias Ringwald         {
898*cb5466b0SMatthias Ringwald             RadioPreambleLengths_t       PreambleLength;    //!< The preamble length for FLRC packet type
899*cb5466b0SMatthias Ringwald             RadioFlrcSyncWordLengths_t   SyncWordLength;    //!< The synchronization word length for FLRC packet type
900*cb5466b0SMatthias Ringwald             RadioSyncWordRxMatchs_t      SyncWordMatch;     //!< The synchronization correlator to use to check synchronization word
901*cb5466b0SMatthias Ringwald             RadioPacketLengthModes_t     HeaderType;        //!< If the header is explicit, it will be transmitted in the FLRC packet. If the header is implicit, it will not be transmitted.
902*cb5466b0SMatthias Ringwald             uint8_t                      PayloadLength;     //!< Size of the payload in the FLRC packet
903*cb5466b0SMatthias Ringwald             RadioCrcTypes_t              CrcLength;         //!< Size of the CRC block in the FLRC packet
904*cb5466b0SMatthias Ringwald             RadioWhiteningModes_t        Whitening;         //!< Usage of whitening on payload and CRC blocks plus header block if header type is variable
905*cb5466b0SMatthias Ringwald         }Flrc;
906*cb5466b0SMatthias Ringwald         /*!
907*cb5466b0SMatthias Ringwald          * \brief Holds the BLE packet parameters
908*cb5466b0SMatthias Ringwald          */
909*cb5466b0SMatthias Ringwald         struct
910*cb5466b0SMatthias Ringwald         {
911*cb5466b0SMatthias Ringwald             RadioBleConnectionStates_t    ConnectionState;   //!< The BLE state
912*cb5466b0SMatthias Ringwald             RadioBleCrcFields_t           CrcField;          //!< Size of the CRC block in the BLE packet
913*cb5466b0SMatthias Ringwald             RadioBlePacketTypes_t         BlePacketType;     //!< Special BLE packet types
914*cb5466b0SMatthias Ringwald             RadioWhiteningModes_t         Whitening;         //!< Usage of whitening on PDU and CRC blocks of BLE packet
915*cb5466b0SMatthias Ringwald         }Ble;
916*cb5466b0SMatthias Ringwald     }Params;                                                 //!< Holds the packet parameters structure
917*cb5466b0SMatthias Ringwald }PacketParams_t;
918*cb5466b0SMatthias Ringwald 
919*cb5466b0SMatthias Ringwald /*!
920*cb5466b0SMatthias Ringwald  * \brief Represents the packet status for every packet type
921*cb5466b0SMatthias Ringwald  */
922*cb5466b0SMatthias Ringwald typedef struct
923*cb5466b0SMatthias Ringwald {
924*cb5466b0SMatthias Ringwald     RadioPacketTypes_t                    packetType;        //!< Packet to which the packet status are referring to.
925*cb5466b0SMatthias Ringwald     union
926*cb5466b0SMatthias Ringwald     {
927*cb5466b0SMatthias Ringwald         struct
928*cb5466b0SMatthias Ringwald         {
929*cb5466b0SMatthias Ringwald             int8_t RssiAvg;                                 //!< The averaged RSSI
930*cb5466b0SMatthias Ringwald             int8_t RssiSync;                                //!< The RSSI measured on last packet
931*cb5466b0SMatthias Ringwald             struct
932*cb5466b0SMatthias Ringwald             {
933*cb5466b0SMatthias Ringwald                 bool SyncError :1;                          //!< SyncWord error on last packet
934*cb5466b0SMatthias Ringwald                 bool LengthError :1;                        //!< Length error on last packet
935*cb5466b0SMatthias Ringwald                 bool CrcError :1;                           //!< CRC error on last packet
936*cb5466b0SMatthias Ringwald                 bool AbortError :1;                         //!< Abort error on last packet
937*cb5466b0SMatthias Ringwald                 bool HeaderReceived :1;                     //!< Header received on last packet
938*cb5466b0SMatthias Ringwald                 bool PacketReceived :1;                     //!< Packet received
939*cb5466b0SMatthias Ringwald                 bool PacketControlerBusy :1;                //!< Packet controller busy
940*cb5466b0SMatthias Ringwald             }ErrorStatus;                                   //!< The error status Byte
941*cb5466b0SMatthias Ringwald             struct
942*cb5466b0SMatthias Ringwald             {
943*cb5466b0SMatthias Ringwald                 bool RxNoAck :1;                            //!< No acknowledgment received for Rx with variable length packets
944*cb5466b0SMatthias Ringwald                 bool PacketSent :1;                         //!< Packet sent, only relevant in Tx mode
945*cb5466b0SMatthias Ringwald             }TxRxStatus;                                    //!< The Tx/Rx status Byte
946*cb5466b0SMatthias Ringwald             uint8_t SyncAddrStatus :3;                      //!< The id of the correlator who found the packet
947*cb5466b0SMatthias Ringwald         }Gfsk;
948*cb5466b0SMatthias Ringwald         struct
949*cb5466b0SMatthias Ringwald         {
950*cb5466b0SMatthias Ringwald             int8_t RssiPkt;                                 //!< The RSSI of the last packet
951*cb5466b0SMatthias Ringwald             int8_t SnrPkt;                                  //!< The SNR of the last packet
952*cb5466b0SMatthias Ringwald             struct
953*cb5466b0SMatthias Ringwald             {
954*cb5466b0SMatthias Ringwald                 bool SyncError :1;                          //!< SyncWord error on last packet
955*cb5466b0SMatthias Ringwald                 bool LengthError :1;                        //!< Length error on last packet
956*cb5466b0SMatthias Ringwald                 bool CrcError :1;                           //!< CRC error on last packet
957*cb5466b0SMatthias Ringwald                 bool AbortError :1;                         //!< Abort error on last packet
958*cb5466b0SMatthias Ringwald                 bool HeaderReceived :1;                     //!< Header received on last packet
959*cb5466b0SMatthias Ringwald                 bool PacketReceived :1;                     //!< Packet received
960*cb5466b0SMatthias Ringwald                 bool PacketControlerBusy :1;                //!< Packet controller busy
961*cb5466b0SMatthias Ringwald             }ErrorStatus;                                   //!< The error status Byte
962*cb5466b0SMatthias Ringwald             struct
963*cb5466b0SMatthias Ringwald             {
964*cb5466b0SMatthias Ringwald                 bool RxNoAck :1;                            //!< No acknowledgment received for Rx with variable length packets
965*cb5466b0SMatthias Ringwald                 bool PacketSent :1;                         //!< Packet sent, only relevant in Tx mode
966*cb5466b0SMatthias Ringwald             }TxRxStatus;                                    //!< The Tx/Rx status Byte
967*cb5466b0SMatthias Ringwald             uint8_t SyncAddrStatus :3;                      //!< The id of the correlator who found the packet
968*cb5466b0SMatthias Ringwald         }LoRa;
969*cb5466b0SMatthias Ringwald         struct
970*cb5466b0SMatthias Ringwald         {
971*cb5466b0SMatthias Ringwald             int8_t RssiAvg;                                 //!< The averaged RSSI
972*cb5466b0SMatthias Ringwald             int8_t RssiSync;                                //!< The RSSI of the last packet
973*cb5466b0SMatthias Ringwald             struct
974*cb5466b0SMatthias Ringwald             {
975*cb5466b0SMatthias Ringwald                 bool SyncError :1;                          //!< SyncWord error on last packet
976*cb5466b0SMatthias Ringwald                 bool LengthError :1;                        //!< Length error on last packet
977*cb5466b0SMatthias Ringwald                 bool CrcError :1;                           //!< CRC error on last packet
978*cb5466b0SMatthias Ringwald                 bool AbortError :1;                         //!< Abort error on last packet
979*cb5466b0SMatthias Ringwald                 bool HeaderReceived :1;                     //!< Header received on last packet
980*cb5466b0SMatthias Ringwald                 bool PacketReceived :1;                     //!< Packet received
981*cb5466b0SMatthias Ringwald                 bool PacketControlerBusy :1;                //!< Packet controller busy
982*cb5466b0SMatthias Ringwald             }ErrorStatus;                                   //!< The error status Byte
983*cb5466b0SMatthias Ringwald             struct
984*cb5466b0SMatthias Ringwald             {
985*cb5466b0SMatthias Ringwald                 uint8_t RxPid :2;                           //!< PID of the Rx
986*cb5466b0SMatthias Ringwald                 bool RxNoAck :1;                            //!< No acknowledgment received for Rx with variable length packets
987*cb5466b0SMatthias Ringwald                 bool RxPidErr :1;                           //!< Received PID error
988*cb5466b0SMatthias Ringwald                 bool PacketSent :1;                         //!< Packet sent, only relevant in Tx mode
989*cb5466b0SMatthias Ringwald             }TxRxStatus;                                    //!< The Tx/Rx status Byte
990*cb5466b0SMatthias Ringwald             uint8_t SyncAddrStatus :3;                      //!< The id of the correlator who found the packet
991*cb5466b0SMatthias Ringwald         }Flrc;
992*cb5466b0SMatthias Ringwald         struct
993*cb5466b0SMatthias Ringwald         {
994*cb5466b0SMatthias Ringwald             int8_t RssiAvg;                                 //!< The averaged RSSI
995*cb5466b0SMatthias Ringwald             int8_t RssiSync;                                //!< The RSSI of the last packet
996*cb5466b0SMatthias Ringwald             struct
997*cb5466b0SMatthias Ringwald             {
998*cb5466b0SMatthias Ringwald                 bool SyncError :1;                          //!< SyncWord error on last packet
999*cb5466b0SMatthias Ringwald                 bool LengthError :1;                        //!< Length error on last packet
1000*cb5466b0SMatthias Ringwald                 bool CrcError :1;                           //!< CRC error on last packet
1001*cb5466b0SMatthias Ringwald                 bool AbortError :1;                         //!< Abort error on last packet
1002*cb5466b0SMatthias Ringwald                 bool HeaderReceived :1;                     //!< Header received on last packet
1003*cb5466b0SMatthias Ringwald                 bool PacketReceived :1;                     //!< Packet received
1004*cb5466b0SMatthias Ringwald                 bool PacketControlerBusy :1;                //!< Packet controller busy
1005*cb5466b0SMatthias Ringwald             }ErrorStatus;                                   //!< The error status Byte
1006*cb5466b0SMatthias Ringwald             struct
1007*cb5466b0SMatthias Ringwald             {
1008*cb5466b0SMatthias Ringwald                 bool PacketSent :1;                         //!< Packet sent, only relevant in Tx mode
1009*cb5466b0SMatthias Ringwald             }TxRxStatus;                                    //!< The Tx/Rx status Byte
1010*cb5466b0SMatthias Ringwald             uint8_t SyncAddrStatus :3;                      //!< The id of the correlator who found the packet
1011*cb5466b0SMatthias Ringwald         }Ble;
1012*cb5466b0SMatthias Ringwald     }Params;
1013*cb5466b0SMatthias Ringwald }PacketStatus_t;
1014*cb5466b0SMatthias Ringwald 
1015*cb5466b0SMatthias Ringwald /*!
1016*cb5466b0SMatthias Ringwald  * \brief Represents the Rx internal counters values when GFSK or LORA packet type is used
1017*cb5466b0SMatthias Ringwald  */
1018*cb5466b0SMatthias Ringwald typedef struct
1019*cb5466b0SMatthias Ringwald {
1020*cb5466b0SMatthias Ringwald     RadioPacketTypes_t                    packetType;       //!< Packet to which the packet status are referring to.
1021*cb5466b0SMatthias Ringwald     union
1022*cb5466b0SMatthias Ringwald     {
1023*cb5466b0SMatthias Ringwald         struct
1024*cb5466b0SMatthias Ringwald         {
1025*cb5466b0SMatthias Ringwald             uint16_t PacketReceived;                        //!< Number of received packets
1026*cb5466b0SMatthias Ringwald             uint16_t CrcError;                              //!< Number of CRC errors
1027*cb5466b0SMatthias Ringwald             uint16_t LengthError;                           //!< Number of length errors
1028*cb5466b0SMatthias Ringwald             uint16_t SyncwordError;                         //!< Number of sync-word errors
1029*cb5466b0SMatthias Ringwald         }Gfsk;
1030*cb5466b0SMatthias Ringwald         struct
1031*cb5466b0SMatthias Ringwald         {
1032*cb5466b0SMatthias Ringwald             uint16_t PacketReceived;                        //!< Number of received packets
1033*cb5466b0SMatthias Ringwald             uint16_t CrcError;                              //!< Number of CRC errors
1034*cb5466b0SMatthias Ringwald             uint16_t HeaderValid;                           //!< Number of valid headers
1035*cb5466b0SMatthias Ringwald         }LoRa;
1036*cb5466b0SMatthias Ringwald     }Params;
1037*cb5466b0SMatthias Ringwald }RxCounter_t;
1038*cb5466b0SMatthias Ringwald 
1039*cb5466b0SMatthias Ringwald /*!
1040*cb5466b0SMatthias Ringwald  * \brief Represents a calibration configuration
1041*cb5466b0SMatthias Ringwald  */
1042*cb5466b0SMatthias Ringwald typedef struct
1043*cb5466b0SMatthias Ringwald {
1044*cb5466b0SMatthias Ringwald     uint8_t RC64KEnable    : 1;                             //!< Calibrate RC64K clock
1045*cb5466b0SMatthias Ringwald     uint8_t RC13MEnable    : 1;                             //!< Calibrate RC13M clock
1046*cb5466b0SMatthias Ringwald     uint8_t PLLEnable      : 1;                             //!< Calibrate PLL
1047*cb5466b0SMatthias Ringwald     uint8_t ADCPulseEnable : 1;                             //!< Calibrate ADC Pulse
1048*cb5466b0SMatthias Ringwald     uint8_t ADCBulkNEnable : 1;                             //!< Calibrate ADC bulkN
1049*cb5466b0SMatthias Ringwald     uint8_t ADCBulkPEnable : 1;                             //!< Calibrate ADC bulkP
1050*cb5466b0SMatthias Ringwald }CalibrationParams_t;
1051*cb5466b0SMatthias Ringwald 
1052*cb5466b0SMatthias Ringwald /*!
1053*cb5466b0SMatthias Ringwald  * \brief Represents a sleep mode configuration
1054*cb5466b0SMatthias Ringwald  */
1055*cb5466b0SMatthias Ringwald typedef struct
1056*cb5466b0SMatthias Ringwald {
1057*cb5466b0SMatthias Ringwald     uint8_t WakeUpRTC               : 1;                    //!< Get out of sleep mode if wakeup signal received from RTC
1058*cb5466b0SMatthias Ringwald     uint8_t InstructionRamRetention : 1;                    //!< InstructionRam is conserved during sleep
1059*cb5466b0SMatthias Ringwald     uint8_t DataBufferRetention     : 1;                    //!< Data buffer is conserved during sleep
1060*cb5466b0SMatthias Ringwald     uint8_t DataRamRetention        : 1;                    //!< Data ram is conserved during sleep
1061*cb5466b0SMatthias Ringwald }SleepParams_t;
1062*cb5466b0SMatthias Ringwald 
1063*cb5466b0SMatthias Ringwald /*!
1064*cb5466b0SMatthias Ringwald  * \brief Compute the two's complement for a register of size lower than
1065*cb5466b0SMatthias Ringwald  *        32bits
1066*cb5466b0SMatthias Ringwald  *
1067*cb5466b0SMatthias Ringwald  * \param [in]  num            The register to be two's complemented
1068*cb5466b0SMatthias Ringwald  * \param [in]  bitCnt         The position of the sign bit
1069*cb5466b0SMatthias Ringwald  */
1070*cb5466b0SMatthias Ringwald int32_t SX1280complement2( const uint32_t num, const uint8_t bitCnt );
1071*cb5466b0SMatthias Ringwald 
1072*cb5466b0SMatthias Ringwald /*!
1073*cb5466b0SMatthias Ringwald  * \brief Returns the value of LoRa bandwidth from driver's value
1074*cb5466b0SMatthias Ringwald  *
1075*cb5466b0SMatthias Ringwald  * The value is returned in Hz so that it can be represented as an integer
1076*cb5466b0SMatthias Ringwald  * type. Most computation should be done as integer to reduce floating
1077*cb5466b0SMatthias Ringwald  * point related errors.
1078*cb5466b0SMatthias Ringwald  *
1079*cb5466b0SMatthias Ringwald  * \retval loRaBw              The value of the current bandwidth in Hz
1080*cb5466b0SMatthias Ringwald  */
1081*cb5466b0SMatthias Ringwald int32_t SX1280GetLoRaBandwidth( void );
1082*cb5466b0SMatthias Ringwald 
1083*cb5466b0SMatthias Ringwald /*!
1084*cb5466b0SMatthias Ringwald  * \brief Returns the corrected raw value of ranging
1085*cb5466b0SMatthias Ringwald  *
1086*cb5466b0SMatthias Ringwald  * \retval correction              Corrected ranging raw value
1087*cb5466b0SMatthias Ringwald  */
1088*cb5466b0SMatthias Ringwald double SX1280GetRangingCorrectionPerSfBwGain( const RadioLoRaSpreadingFactors_t sf, const RadioLoRaBandwidths_t bw, const int8_t gain);
1089*cb5466b0SMatthias Ringwald 
1090*cb5466b0SMatthias Ringwald /*!
1091*cb5466b0SMatthias Ringwald  * \brief Returns the short range corrected distance
1092*cb5466b0SMatthias Ringwald  *
1093*cb5466b0SMatthias Ringwald  * \retval Corrected Distance              corrected ditance
1094*cb5466b0SMatthias Ringwald  */
1095*cb5466b0SMatthias Ringwald double SX1280ComputeRangingCorrectionPolynome(const RadioLoRaSpreadingFactors_t sf, const RadioLoRaBandwidths_t bw, const double median);
1096*cb5466b0SMatthias Ringwald 
1097*cb5466b0SMatthias Ringwald /*!
1098*cb5466b0SMatthias Ringwald  * \brief DIOs interrupt callback
1099*cb5466b0SMatthias Ringwald  *
1100*cb5466b0SMatthias Ringwald  * \remark Called to handle all 3 DIOs pins
1101*cb5466b0SMatthias Ringwald  */
1102*cb5466b0SMatthias Ringwald void SX1280OnDioIrq( void );
1103*cb5466b0SMatthias Ringwald 
1104*cb5466b0SMatthias Ringwald /*!
1105*cb5466b0SMatthias Ringwald  * \brief Set the role of the radio during ranging operations
1106*cb5466b0SMatthias Ringwald  *
1107*cb5466b0SMatthias Ringwald  * \param [in]  role          Role of the radio
1108*cb5466b0SMatthias Ringwald  */
1109*cb5466b0SMatthias Ringwald void SX1280SetRangingRole( RadioRangingRoles_t role );
1110*cb5466b0SMatthias Ringwald 
1111*cb5466b0SMatthias Ringwald /*!
1112*cb5466b0SMatthias Ringwald  * \brief Initializes the radio driver
1113*cb5466b0SMatthias Ringwald  */
1114*cb5466b0SMatthias Ringwald void SX1280Init( RadioCallbacks_t *callbacks );
1115*cb5466b0SMatthias Ringwald 
1116*cb5466b0SMatthias Ringwald /*!
1117*cb5466b0SMatthias Ringwald  * \brief Set the driver in polling mode.
1118*cb5466b0SMatthias Ringwald  *
1119*cb5466b0SMatthias Ringwald  * In polling mode the application is responsible to call ProcessIrqs( ) to
1120*cb5466b0SMatthias Ringwald  * execute callbacks functions.
1121*cb5466b0SMatthias Ringwald  * The default mode is Interrupt Mode.
1122*cb5466b0SMatthias Ringwald  * @code
1123*cb5466b0SMatthias Ringwald  * // Initializations and callbacks declaration/definition
1124*cb5466b0SMatthias Ringwald  * radio = SX1280( mosi, miso, sclk, nss, busy, int1, int2, int3, rst, &callbacks );
1125*cb5466b0SMatthias Ringwald  * radio.Init( );
1126*cb5466b0SMatthias Ringwald  * radio.SetPollingMode( );
1127*cb5466b0SMatthias Ringwald  *
1128*cb5466b0SMatthias Ringwald  * while( true )
1129*cb5466b0SMatthias Ringwald  * {
1130*cb5466b0SMatthias Ringwald  *                            //     IRQ processing is automatically done
1131*cb5466b0SMatthias Ringwald  *     radio.ProcessIrqs( );  // <-- here, as well as callback functions
1132*cb5466b0SMatthias Ringwald  *                            //     calls
1133*cb5466b0SMatthias Ringwald  *     // Do some applicative work
1134*cb5466b0SMatthias Ringwald  * }
1135*cb5466b0SMatthias Ringwald  * @endcode
1136*cb5466b0SMatthias Ringwald  *
1137*cb5466b0SMatthias Ringwald  * \see SX1280SetInterruptMode
1138*cb5466b0SMatthias Ringwald  */
1139*cb5466b0SMatthias Ringwald void SX1280SetPollingMode( void );
1140*cb5466b0SMatthias Ringwald 
1141*cb5466b0SMatthias Ringwald /*!
1142*cb5466b0SMatthias Ringwald  * \brief Set the driver in interrupt mode.
1143*cb5466b0SMatthias Ringwald  *
1144*cb5466b0SMatthias Ringwald  * In interrupt mode, the driver communicate with the radio during the
1145*cb5466b0SMatthias Ringwald  * interruption by direct calls to ProcessIrqs( ). The main advantage is
1146*cb5466b0SMatthias Ringwald  * the possibility to have low power application architecture.
1147*cb5466b0SMatthias Ringwald  * This is the default mode.
1148*cb5466b0SMatthias Ringwald  * @code
1149*cb5466b0SMatthias Ringwald  * // Initializations and callbacks declaration/definition
1150*cb5466b0SMatthias Ringwald  * radio = SX1280( mosi, miso, sclk, nss, busy, int1, int2, int3, rst, &callbacks );
1151*cb5466b0SMatthias Ringwald  * radio.Init( );
1152*cb5466b0SMatthias Ringwald  * radio.SetInterruptMode( );   // Optionnal. Driver default behavior
1153*cb5466b0SMatthias Ringwald  *
1154*cb5466b0SMatthias Ringwald  * while( true )
1155*cb5466b0SMatthias Ringwald  * {
1156*cb5466b0SMatthias Ringwald  *     // Do some applicative work
1157*cb5466b0SMatthias Ringwald  * }
1158*cb5466b0SMatthias Ringwald  * @endcode
1159*cb5466b0SMatthias Ringwald  *
1160*cb5466b0SMatthias Ringwald  * \see SX1280SetPollingMode
1161*cb5466b0SMatthias Ringwald  */
1162*cb5466b0SMatthias Ringwald void SX1280SetInterruptMode( void );
1163*cb5466b0SMatthias Ringwald 
1164*cb5466b0SMatthias Ringwald /*!
1165*cb5466b0SMatthias Ringwald  * \brief Initializes the radio registers to the recommended default values
1166*cb5466b0SMatthias Ringwald  */
1167*cb5466b0SMatthias Ringwald void SX1280SetRegistersDefault( void );
1168*cb5466b0SMatthias Ringwald 
1169*cb5466b0SMatthias Ringwald /*!
1170*cb5466b0SMatthias Ringwald  * \brief Returns the current device firmware version
1171*cb5466b0SMatthias Ringwald  *
1172*cb5466b0SMatthias Ringwald  * \retval      version       Firmware version
1173*cb5466b0SMatthias Ringwald  */
1174*cb5466b0SMatthias Ringwald uint16_t SX1280GetFirmwareVersion( void );
1175*cb5466b0SMatthias Ringwald 
1176*cb5466b0SMatthias Ringwald /*!
1177*cb5466b0SMatthias Ringwald  * \brief Gets the current Operation Mode of the Radio
1178*cb5466b0SMatthias Ringwald  *
1179*cb5466b0SMatthias Ringwald  * \retval      RadioOperatingModes_t last operating mode
1180*cb5466b0SMatthias Ringwald  */
1181*cb5466b0SMatthias Ringwald RadioOperatingModes_t SX1280GetOpMode( void );
1182*cb5466b0SMatthias Ringwald 
1183*cb5466b0SMatthias Ringwald /*!
1184*cb5466b0SMatthias Ringwald  * \brief Gets the current radio status
1185*cb5466b0SMatthias Ringwald  *
1186*cb5466b0SMatthias Ringwald  * \retval      status        Radio status
1187*cb5466b0SMatthias Ringwald  */
1188*cb5466b0SMatthias Ringwald RadioStatus_t SX1280GetStatus( void );
1189*cb5466b0SMatthias Ringwald 
1190*cb5466b0SMatthias Ringwald /*!
1191*cb5466b0SMatthias Ringwald  * \brief Sets the radio in sleep mode
1192*cb5466b0SMatthias Ringwald  *
1193*cb5466b0SMatthias Ringwald  * \param [in]  sleepConfig   The sleep configuration describing data
1194*cb5466b0SMatthias Ringwald  *                            retention and RTC wake-up
1195*cb5466b0SMatthias Ringwald  */
1196*cb5466b0SMatthias Ringwald void SX1280SetSleep( SleepParams_t sleepConfig );
1197*cb5466b0SMatthias Ringwald 
1198*cb5466b0SMatthias Ringwald /*!
1199*cb5466b0SMatthias Ringwald  * \brief Sets the radio in configuration mode
1200*cb5466b0SMatthias Ringwald  *
1201*cb5466b0SMatthias Ringwald  * \param [in]  mode          The standby mode to put the radio into
1202*cb5466b0SMatthias Ringwald  */
1203*cb5466b0SMatthias Ringwald void SX1280SetStandby( RadioStandbyModes_t mode );
1204*cb5466b0SMatthias Ringwald 
1205*cb5466b0SMatthias Ringwald /*!
1206*cb5466b0SMatthias Ringwald  * \brief Sets the radio in FS mode
1207*cb5466b0SMatthias Ringwald  */
1208*cb5466b0SMatthias Ringwald void SX1280SetFs( void );
1209*cb5466b0SMatthias Ringwald 
1210*cb5466b0SMatthias Ringwald /*!
1211*cb5466b0SMatthias Ringwald  * \brief Sets the radio in transmission mode
1212*cb5466b0SMatthias Ringwald  *
1213*cb5466b0SMatthias Ringwald  * \param [in]  timeout       Structure describing the transmission timeout value
1214*cb5466b0SMatthias Ringwald  */
1215*cb5466b0SMatthias Ringwald void SX1280SetTx( TickTime_t timeout );
1216*cb5466b0SMatthias Ringwald 
1217*cb5466b0SMatthias Ringwald /*!
1218*cb5466b0SMatthias Ringwald  * \brief Sets the radio in reception mode
1219*cb5466b0SMatthias Ringwald  *
1220*cb5466b0SMatthias Ringwald  * \param [in]  timeout       Structure describing the reception timeout value
1221*cb5466b0SMatthias Ringwald  */
1222*cb5466b0SMatthias Ringwald void SX1280SetRx( TickTime_t timeout );
1223*cb5466b0SMatthias Ringwald 
1224*cb5466b0SMatthias Ringwald /*!
1225*cb5466b0SMatthias Ringwald  * \brief Sets the Rx duty cycle management parameters
1226*cb5466b0SMatthias Ringwald  *
1227*cb5466b0SMatthias Ringwald  * \param [in]  rxTime        Structure describing reception timeout value
1228*cb5466b0SMatthias Ringwald  * \param [in]  sleepTime     Structure describing sleep timeout value
1229*cb5466b0SMatthias Ringwald  */
1230*cb5466b0SMatthias Ringwald void SX1280SetRxDutyCycle( RadioTickSizes_t Step, uint16_t NbStepRx, uint16_t RxNbStepSleep );
1231*cb5466b0SMatthias Ringwald 
1232*cb5466b0SMatthias Ringwald /*!
1233*cb5466b0SMatthias Ringwald  * \brief Sets the radio in CAD mode
1234*cb5466b0SMatthias Ringwald  *
1235*cb5466b0SMatthias Ringwald  * \see SX1280::SetCadParams
1236*cb5466b0SMatthias Ringwald  */
1237*cb5466b0SMatthias Ringwald void SX1280SetCad( void );
1238*cb5466b0SMatthias Ringwald 
1239*cb5466b0SMatthias Ringwald /*!
1240*cb5466b0SMatthias Ringwald  * \brief Sets the radio in continuous wave transmission mode
1241*cb5466b0SMatthias Ringwald  */
1242*cb5466b0SMatthias Ringwald void SX1280SetTxContinuousWave( void );
1243*cb5466b0SMatthias Ringwald 
1244*cb5466b0SMatthias Ringwald /*!
1245*cb5466b0SMatthias Ringwald  * \brief Sets the radio in continuous preamble transmission mode
1246*cb5466b0SMatthias Ringwald  */
1247*cb5466b0SMatthias Ringwald void SX1280SetTxContinuousPreamble( void );
1248*cb5466b0SMatthias Ringwald 
1249*cb5466b0SMatthias Ringwald /*!
1250*cb5466b0SMatthias Ringwald  * \brief Sets the radio for the given protocol
1251*cb5466b0SMatthias Ringwald  *
1252*cb5466b0SMatthias Ringwald  * \param [in]  packetType    [PACKET_TYPE_GFSK, PACKET_TYPE_LORA,
1253*cb5466b0SMatthias Ringwald  *                             PACKET_TYPE_RANGING, PACKET_TYPE_FLRC,
1254*cb5466b0SMatthias Ringwald  *                             PACKET_TYPE_BLE]
1255*cb5466b0SMatthias Ringwald  *
1256*cb5466b0SMatthias Ringwald  * \remark This method has to be called before SetRfFrequency,
1257*cb5466b0SMatthias Ringwald  *         SetModulationParams and SetPacketParams
1258*cb5466b0SMatthias Ringwald  */
1259*cb5466b0SMatthias Ringwald void SX1280SetPacketType( RadioPacketTypes_t packetType );
1260*cb5466b0SMatthias Ringwald 
1261*cb5466b0SMatthias Ringwald /*!
1262*cb5466b0SMatthias Ringwald  * \brief Gets the current radio protocol
1263*cb5466b0SMatthias Ringwald  *
1264*cb5466b0SMatthias Ringwald  * \retval      packetType    [PACKET_TYPE_GFSK, PACKET_TYPE_LORA,
1265*cb5466b0SMatthias Ringwald  *                             PACKET_TYPE_RANGING, PACKET_TYPE_FLRC,
1266*cb5466b0SMatthias Ringwald  *                             PACKET_TYPE_BLE, PACKET_TYPE_NONE]
1267*cb5466b0SMatthias Ringwald  */
1268*cb5466b0SMatthias Ringwald RadioPacketTypes_t SX1280GetPacketType( void );
1269*cb5466b0SMatthias Ringwald 
1270*cb5466b0SMatthias Ringwald /*!
1271*cb5466b0SMatthias Ringwald  * \brief Sets the RF frequency
1272*cb5466b0SMatthias Ringwald  *
1273*cb5466b0SMatthias Ringwald  * \param [in]  frequency     RF frequency [Hz]
1274*cb5466b0SMatthias Ringwald  */
1275*cb5466b0SMatthias Ringwald void SX1280SetRfFrequency( uint32_t frequency );
1276*cb5466b0SMatthias Ringwald 
1277*cb5466b0SMatthias Ringwald /*!
1278*cb5466b0SMatthias Ringwald  * \brief Sets the transmission parameters
1279*cb5466b0SMatthias Ringwald  *
1280*cb5466b0SMatthias Ringwald  * \param [in]  power         RF output power [-18..13] dBm
1281*cb5466b0SMatthias Ringwald  * \param [in]  rampTime      Transmission ramp up time
1282*cb5466b0SMatthias Ringwald  */
1283*cb5466b0SMatthias Ringwald void SX1280SetTxParams( int8_t power, RadioRampTimes_t rampTime );
1284*cb5466b0SMatthias Ringwald 
1285*cb5466b0SMatthias Ringwald /*!
1286*cb5466b0SMatthias Ringwald  * \brief Sets the number of symbols to be used for Channel Activity
1287*cb5466b0SMatthias Ringwald  *        Detection operation
1288*cb5466b0SMatthias Ringwald  *
1289*cb5466b0SMatthias Ringwald  * \param [in]  cadSymbolNum  The number of symbol to use for Channel Activity
1290*cb5466b0SMatthias Ringwald  *                            Detection operations [LORA_CAD_01_SYMBOL, LORA_CAD_02_SYMBOL,
1291*cb5466b0SMatthias Ringwald  *                            LORA_CAD_04_SYMBOL, LORA_CAD_08_SYMBOL, LORA_CAD_16_SYMBOL]
1292*cb5466b0SMatthias Ringwald  */
1293*cb5466b0SMatthias Ringwald void SX1280SetCadParams( RadioLoRaCadSymbols_t cadSymbolNum );
1294*cb5466b0SMatthias Ringwald 
1295*cb5466b0SMatthias Ringwald /*!
1296*cb5466b0SMatthias Ringwald  * \brief Sets the data buffer base address for transmission and reception
1297*cb5466b0SMatthias Ringwald  *
1298*cb5466b0SMatthias Ringwald  * \param [in]  txBaseAddress Transmission base address
1299*cb5466b0SMatthias Ringwald  * \param [in]  rxBaseAddress Reception base address
1300*cb5466b0SMatthias Ringwald  */
1301*cb5466b0SMatthias Ringwald void SX1280SetBufferBaseAddresses( uint8_t txBaseAddress, uint8_t rxBaseAddress );
1302*cb5466b0SMatthias Ringwald 
1303*cb5466b0SMatthias Ringwald /*!
1304*cb5466b0SMatthias Ringwald  * \brief Set the modulation parameters
1305*cb5466b0SMatthias Ringwald  *
1306*cb5466b0SMatthias Ringwald  * \param [in]  modParams     A structure describing the modulation parameters
1307*cb5466b0SMatthias Ringwald  */
1308*cb5466b0SMatthias Ringwald void SX1280SetModulationParams( ModulationParams_t *modParams );
1309*cb5466b0SMatthias Ringwald 
1310*cb5466b0SMatthias Ringwald /*!
1311*cb5466b0SMatthias Ringwald  * \brief Sets the packet parameters
1312*cb5466b0SMatthias Ringwald  *
1313*cb5466b0SMatthias Ringwald  * \param [in]  packetParams  A structure describing the packet parameters
1314*cb5466b0SMatthias Ringwald  */
1315*cb5466b0SMatthias Ringwald void SX1280SetPacketParams( PacketParams_t *packetParams );
1316*cb5466b0SMatthias Ringwald 
1317*cb5466b0SMatthias Ringwald /*!
1318*cb5466b0SMatthias Ringwald  * \brief Gets the last received packet buffer status
1319*cb5466b0SMatthias Ringwald  *
1320*cb5466b0SMatthias Ringwald  * \param [out] payloadLength Last received packet payload length
1321*cb5466b0SMatthias Ringwald  * \param [out] rxStartBuffer Last received packet buffer address pointer
1322*cb5466b0SMatthias Ringwald  */
1323*cb5466b0SMatthias Ringwald void SX1280GetRxBufferStatus( uint8_t *payloadLength, uint8_t *rxStartBuffer );
1324*cb5466b0SMatthias Ringwald 
1325*cb5466b0SMatthias Ringwald /*!
1326*cb5466b0SMatthias Ringwald  * \brief Gets the last received packet payload length
1327*cb5466b0SMatthias Ringwald  *
1328*cb5466b0SMatthias Ringwald  * \param [out] pktStatus     A structure of packet status
1329*cb5466b0SMatthias Ringwald  */
1330*cb5466b0SMatthias Ringwald void SX1280GetPacketStatus( PacketStatus_t *pktStatus );
1331*cb5466b0SMatthias Ringwald 
1332*cb5466b0SMatthias Ringwald /*!
1333*cb5466b0SMatthias Ringwald  * \brief Returns the instantaneous RSSI value for the last packet received
1334*cb5466b0SMatthias Ringwald  *
1335*cb5466b0SMatthias Ringwald  * \retval      rssiInst      Instantaneous RSSI
1336*cb5466b0SMatthias Ringwald  */
1337*cb5466b0SMatthias Ringwald int8_t SX1280GetRssiInst( void );
1338*cb5466b0SMatthias Ringwald 
1339*cb5466b0SMatthias Ringwald /*!
1340*cb5466b0SMatthias Ringwald  * \brief   Sets the IRQ mask and DIO masks
1341*cb5466b0SMatthias Ringwald  *
1342*cb5466b0SMatthias Ringwald  * \param [in]  irqMask       General IRQ mask
1343*cb5466b0SMatthias Ringwald  * \param [in]  dio1Mask      DIO1 mask
1344*cb5466b0SMatthias Ringwald  * \param [in]  dio2Mask      DIO2 mask
1345*cb5466b0SMatthias Ringwald  * \param [in]  dio3Mask      DIO3 mask
1346*cb5466b0SMatthias Ringwald  */
1347*cb5466b0SMatthias Ringwald void SX1280SetDioIrqParams( uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask );
1348*cb5466b0SMatthias Ringwald 
1349*cb5466b0SMatthias Ringwald /*!
1350*cb5466b0SMatthias Ringwald  * \brief Returns the current IRQ status
1351*cb5466b0SMatthias Ringwald  *
1352*cb5466b0SMatthias Ringwald  * \retval      irqStatus     IRQ status
1353*cb5466b0SMatthias Ringwald  */
1354*cb5466b0SMatthias Ringwald uint16_t SX1280GetIrqStatus( void );
1355*cb5466b0SMatthias Ringwald 
1356*cb5466b0SMatthias Ringwald /*!
1357*cb5466b0SMatthias Ringwald  * \brief Clears the IRQs
1358*cb5466b0SMatthias Ringwald  *
1359*cb5466b0SMatthias Ringwald  * \param [in]  irq           IRQ(s) to be cleared
1360*cb5466b0SMatthias Ringwald  */
1361*cb5466b0SMatthias Ringwald void SX1280ClearIrqStatus( uint16_t irq );
1362*cb5466b0SMatthias Ringwald 
1363*cb5466b0SMatthias Ringwald /*!
1364*cb5466b0SMatthias Ringwald  * \brief Calibrates the given radio block
1365*cb5466b0SMatthias Ringwald  *
1366*cb5466b0SMatthias Ringwald  * \param [in]  calibParam    The description of blocks to be calibrated
1367*cb5466b0SMatthias Ringwald  */
1368*cb5466b0SMatthias Ringwald void SX1280Calibrate( CalibrationParams_t calibParam );
1369*cb5466b0SMatthias Ringwald 
1370*cb5466b0SMatthias Ringwald /*!
1371*cb5466b0SMatthias Ringwald  * \brief Sets the power regulators operating mode
1372*cb5466b0SMatthias Ringwald  *
1373*cb5466b0SMatthias Ringwald  * \param [in]  mode          [0: LDO, 1:DC_DC]
1374*cb5466b0SMatthias Ringwald  */
1375*cb5466b0SMatthias Ringwald void SX1280SetRegulatorMode( RadioRegulatorModes_t mode );
1376*cb5466b0SMatthias Ringwald 
1377*cb5466b0SMatthias Ringwald /*!
1378*cb5466b0SMatthias Ringwald  * \brief Saves the current selected modem configuration into data RAM
1379*cb5466b0SMatthias Ringwald  */
1380*cb5466b0SMatthias Ringwald void SX1280SetSaveContext( void );
1381*cb5466b0SMatthias Ringwald 
1382*cb5466b0SMatthias Ringwald /*!
1383*cb5466b0SMatthias Ringwald  * \brief Sets the chip to automatically send a packet after the end of a packet reception
1384*cb5466b0SMatthias Ringwald  *
1385*cb5466b0SMatthias Ringwald  * \remark The offset is automatically compensated inside the function
1386*cb5466b0SMatthias Ringwald  *
1387*cb5466b0SMatthias Ringwald  * \param [in]  time          The delay in us after which a Tx is done
1388*cb5466b0SMatthias Ringwald  */
1389*cb5466b0SMatthias Ringwald void SX1280SetAutoTx( uint16_t time );
1390*cb5466b0SMatthias Ringwald 
1391*cb5466b0SMatthias Ringwald /*!
1392*cb5466b0SMatthias Ringwald  * \brief Stop the chip from automatically sending a packet after the end of a packet reception
1393*cb5466b0SMatthias Ringwald  * if previously activated with SX1280SetAutoTx command
1394*cb5466b0SMatthias Ringwald  *
1395*cb5466b0SMatthias Ringwald  * \see SX1280SetAutoTx
1396*cb5466b0SMatthias Ringwald  */
1397*cb5466b0SMatthias Ringwald void SX1280StopAutoTx( void );
1398*cb5466b0SMatthias Ringwald 
1399*cb5466b0SMatthias Ringwald /*!
1400*cb5466b0SMatthias Ringwald  * \brief Sets the chip to automatically receive a packet after the end of a packet transmission
1401*cb5466b0SMatthias Ringwald  *
1402*cb5466b0SMatthias Ringwald  * \remark The offset is automatically compensated inside the function
1403*cb5466b0SMatthias Ringwald  *
1404*cb5466b0SMatthias Ringwald  * \param [in]  time          The delay in us after which a Rx is done
1405*cb5466b0SMatthias Ringwald  */
1406*cb5466b0SMatthias Ringwald void SX1280SetAutoFS( uint8_t enable );
1407*cb5466b0SMatthias Ringwald 
1408*cb5466b0SMatthias Ringwald /*!
1409*cb5466b0SMatthias Ringwald  * \brief Enables or disables long preamble detection mode
1410*cb5466b0SMatthias Ringwald  *
1411*cb5466b0SMatthias Ringwald  * \param [in]  enable        [0: Disable, 1: Enable]
1412*cb5466b0SMatthias Ringwald  */
1413*cb5466b0SMatthias Ringwald void SX1280SetLongPreamble( uint8_t enable );
1414*cb5466b0SMatthias Ringwald 
1415*cb5466b0SMatthias Ringwald /*!
1416*cb5466b0SMatthias Ringwald  * \brief Saves the payload to be send in the radio buffer
1417*cb5466b0SMatthias Ringwald  *
1418*cb5466b0SMatthias Ringwald  * \param [in]  payload       A pointer to the payload
1419*cb5466b0SMatthias Ringwald  * \param [in]  size          The size of the payload
1420*cb5466b0SMatthias Ringwald  */
1421*cb5466b0SMatthias Ringwald void SX1280SetPayload( uint8_t *payload, uint8_t size );
1422*cb5466b0SMatthias Ringwald 
1423*cb5466b0SMatthias Ringwald /*!
1424*cb5466b0SMatthias Ringwald  * \brief Reads the payload received. If the received payload is longer
1425*cb5466b0SMatthias Ringwald  * than maxSize, then the method returns 1 and do not set size and payload.
1426*cb5466b0SMatthias Ringwald  *
1427*cb5466b0SMatthias Ringwald  * \param [out] payload       A pointer to a buffer into which the payload will be copied
1428*cb5466b0SMatthias Ringwald  * \param [out] size          A pointer to the size of the payload received
1429*cb5466b0SMatthias Ringwald  * \param [in]  maxSize       The maximal size allowed to copy into the buffer
1430*cb5466b0SMatthias Ringwald  */
1431*cb5466b0SMatthias Ringwald uint8_t SX1280GetPayload( uint8_t *payload, uint8_t *size, uint8_t maxSize );
1432*cb5466b0SMatthias Ringwald 
1433*cb5466b0SMatthias Ringwald /*!
1434*cb5466b0SMatthias Ringwald  * \brief Sends a payload
1435*cb5466b0SMatthias Ringwald  *
1436*cb5466b0SMatthias Ringwald  * \param [in]  payload       A pointer to the payload to send
1437*cb5466b0SMatthias Ringwald  * \param [in]  size          The size of the payload to send
1438*cb5466b0SMatthias Ringwald  * \param [in]  timeout       The timeout for Tx operation
1439*cb5466b0SMatthias Ringwald  */
1440*cb5466b0SMatthias Ringwald void SX1280SendPayload( uint8_t *payload, uint8_t size, TickTime_t timeout );
1441*cb5466b0SMatthias Ringwald 
1442*cb5466b0SMatthias Ringwald /*!
1443*cb5466b0SMatthias Ringwald  * \brief Sets the Sync Word given by index used in GFSK, FLRC and BLE protocols
1444*cb5466b0SMatthias Ringwald  *
1445*cb5466b0SMatthias Ringwald  * \remark 5th byte isn't used in FLRC and BLE protocols
1446*cb5466b0SMatthias Ringwald  *
1447*cb5466b0SMatthias Ringwald  * \param [in]  syncWordIdx   Index of SyncWord to be set [1..3]
1448*cb5466b0SMatthias Ringwald  * \param [in]  syncWord      SyncWord bytes ( 5 bytes )
1449*cb5466b0SMatthias Ringwald  *
1450*cb5466b0SMatthias Ringwald  * \retval      status        [0: OK, 1: NOK]
1451*cb5466b0SMatthias Ringwald  */
1452*cb5466b0SMatthias Ringwald uint8_t SX1280SetSyncWord( uint8_t syncWordIdx, uint8_t *syncWord );
1453*cb5466b0SMatthias Ringwald 
1454*cb5466b0SMatthias Ringwald /*!
1455*cb5466b0SMatthias Ringwald  * \brief Defines how many error bits are tolerated in sync word detection
1456*cb5466b0SMatthias Ringwald  *
1457*cb5466b0SMatthias Ringwald  * \param [in]  errorBits     Number of error bits supported to validate the Sync word detection
1458*cb5466b0SMatthias Ringwald  *                            ( default is 4 bit, minimum is 1 bit )
1459*cb5466b0SMatthias Ringwald  */
1460*cb5466b0SMatthias Ringwald void SX1280SetSyncWordErrorTolerance( uint8_t errorBits );
1461*cb5466b0SMatthias Ringwald 
1462*cb5466b0SMatthias Ringwald /*!
1463*cb5466b0SMatthias Ringwald  * \brief Sets the Initial value for the LFSR used for the CRC calculation
1464*cb5466b0SMatthias Ringwald  *
1465*cb5466b0SMatthias Ringwald  * \param [in]  seed          Initial LFSR value ( 4 bytes )
1466*cb5466b0SMatthias Ringwald  *
1467*cb5466b0SMatthias Ringwald  */
1468*cb5466b0SMatthias Ringwald void SX1280SetCrcSeed( uint16_t seed );
1469*cb5466b0SMatthias Ringwald 
1470*cb5466b0SMatthias Ringwald /*!
1471*cb5466b0SMatthias Ringwald  * \brief Set the Access Address field of BLE packet
1472*cb5466b0SMatthias Ringwald  *
1473*cb5466b0SMatthias Ringwald  * \param [in]  accessAddress The access address to be used for next BLE packet sent
1474*cb5466b0SMatthias Ringwald  */
1475*cb5466b0SMatthias Ringwald void SX1280SetBleAccessAddress( uint32_t accessAddress );
1476*cb5466b0SMatthias Ringwald 
1477*cb5466b0SMatthias Ringwald /*!
1478*cb5466b0SMatthias Ringwald  * \brief Set the Access Address for Advertizer BLE packets
1479*cb5466b0SMatthias Ringwald  *
1480*cb5466b0SMatthias Ringwald  * All advertizer BLE packets must use a particular value for Access
1481*cb5466b0SMatthias Ringwald  * Address field. This method sets it.
1482*cb5466b0SMatthias Ringwald  *
1483*cb5466b0SMatthias Ringwald  * \see SX1280::SetBleAccessAddress
1484*cb5466b0SMatthias Ringwald  */
1485*cb5466b0SMatthias Ringwald void SX1280SetBleAdvertizerAccessAddress( void );
1486*cb5466b0SMatthias Ringwald 
1487*cb5466b0SMatthias Ringwald /*!
1488*cb5466b0SMatthias Ringwald  * \brief Sets the seed used for the CRC calculation
1489*cb5466b0SMatthias Ringwald  *
1490*cb5466b0SMatthias Ringwald  * \param [in]  seed          The seed value
1491*cb5466b0SMatthias Ringwald  *
1492*cb5466b0SMatthias Ringwald  */
1493*cb5466b0SMatthias Ringwald void SX1280SetCrcPolynomial( uint16_t seed );
1494*cb5466b0SMatthias Ringwald 
1495*cb5466b0SMatthias Ringwald /*!
1496*cb5466b0SMatthias Ringwald  * \brief Sets the Initial value of the LFSR used for the whitening in GFSK, FLRC and BLE protocols
1497*cb5466b0SMatthias Ringwald  *
1498*cb5466b0SMatthias Ringwald  * \param [in]  seed          Initial LFSR value
1499*cb5466b0SMatthias Ringwald  */
1500*cb5466b0SMatthias Ringwald void SX1280SetWhiteningSeed( uint8_t seed );
1501*cb5466b0SMatthias Ringwald 
1502*cb5466b0SMatthias Ringwald /*!
1503*cb5466b0SMatthias Ringwald  * \brief Enable manual gain and disable AGC
1504*cb5466b0SMatthias Ringwald  *
1505*cb5466b0SMatthias Ringwald  * \see SX1280SetManualGainValue, SX1280DisableManualGain
1506*cb5466b0SMatthias Ringwald  */
1507*cb5466b0SMatthias Ringwald void SX1280EnableManualGain( void );
1508*cb5466b0SMatthias Ringwald 
1509*cb5466b0SMatthias Ringwald /*!
1510*cb5466b0SMatthias Ringwald  * \brief Disable the manual gain control and enable AGC
1511*cb5466b0SMatthias Ringwald  *
1512*cb5466b0SMatthias Ringwald  * \see SX1280EnableManualGain
1513*cb5466b0SMatthias Ringwald  */
1514*cb5466b0SMatthias Ringwald void SX1280DisableManualGain( void );
1515*cb5466b0SMatthias Ringwald 
1516*cb5466b0SMatthias Ringwald /*!
1517*cb5466b0SMatthias Ringwald  * \brief Set the gain for LNA
1518*cb5466b0SMatthias Ringwald  *
1519*cb5466b0SMatthias Ringwald  * SX1280EnableManualGain must be call before using this function
1520*cb5466b0SMatthias Ringwald  *
1521*cb5466b0SMatthias Ringwald  * \param [in]  gain          The value of gain to set, refer to datasheet for value meaning
1522*cb5466b0SMatthias Ringwald  *
1523*cb5466b0SMatthias Ringwald  * \see SX1280EnableManualGain, SX1280DisableManualGain
1524*cb5466b0SMatthias Ringwald  */
1525*cb5466b0SMatthias Ringwald void SX1280SetManualGainValue( uint8_t gain );
1526*cb5466b0SMatthias Ringwald 
1527*cb5466b0SMatthias Ringwald /*!
1528*cb5466b0SMatthias Ringwald  * \brief Configure the LNA regime of operation
1529*cb5466b0SMatthias Ringwald  *
1530*cb5466b0SMatthias Ringwald  * \param [in]  lnaSetting    The LNA setting. Possible values are
1531*cb5466b0SMatthias Ringwald  *                            LNA_LOW_POWER_MODE and
1532*cb5466b0SMatthias Ringwald  *                            LNA_HIGH_SENSITIVITY_MODE
1533*cb5466b0SMatthias Ringwald  */
1534*cb5466b0SMatthias Ringwald void SX1280SetLNAGainSetting( const RadioLnaSettings_t lnaSetting );
1535*cb5466b0SMatthias Ringwald 
1536*cb5466b0SMatthias Ringwald /*!
1537*cb5466b0SMatthias Ringwald  * \brief Sets the number of bits used to check that ranging request match ranging ID
1538*cb5466b0SMatthias Ringwald  *
1539*cb5466b0SMatthias Ringwald  * \param [in]  length        [0: 8 bits, 1: 16 bits,
1540*cb5466b0SMatthias Ringwald  *                             2: 24 bits, 3: 32 bits]
1541*cb5466b0SMatthias Ringwald  */
1542*cb5466b0SMatthias Ringwald void SX1280SetRangingIdLength( RadioRangingIdCheckLengths_t length );
1543*cb5466b0SMatthias Ringwald 
1544*cb5466b0SMatthias Ringwald /*!
1545*cb5466b0SMatthias Ringwald  * \brief Sets ranging device id
1546*cb5466b0SMatthias Ringwald  *
1547*cb5466b0SMatthias Ringwald  * \param [in]  address       Device address
1548*cb5466b0SMatthias Ringwald  */
1549*cb5466b0SMatthias Ringwald void SX1280SetDeviceRangingAddress( uint32_t address );
1550*cb5466b0SMatthias Ringwald 
1551*cb5466b0SMatthias Ringwald /*!
1552*cb5466b0SMatthias Ringwald  * \brief Sets the device id to ping in a ranging request
1553*cb5466b0SMatthias Ringwald  *
1554*cb5466b0SMatthias Ringwald  * \param [in]  address       Address of the device to ping
1555*cb5466b0SMatthias Ringwald  */
1556*cb5466b0SMatthias Ringwald void SX1280SetRangingRequestAddress( uint32_t address );
1557*cb5466b0SMatthias Ringwald 
1558*cb5466b0SMatthias Ringwald /*!
1559*cb5466b0SMatthias Ringwald  * \brief Return the ranging result value
1560*cb5466b0SMatthias Ringwald  *
1561*cb5466b0SMatthias Ringwald  * \param [in]  resultType    Specifies the type of result.
1562*cb5466b0SMatthias Ringwald  *                            [0: RAW, 1: Averaged,
1563*cb5466b0SMatthias Ringwald  *                             2: De-biased, 3:Filtered]
1564*cb5466b0SMatthias Ringwald  *
1565*cb5466b0SMatthias Ringwald  * \retval      ranging       The ranging measure filtered according to resultType [m]
1566*cb5466b0SMatthias Ringwald  */
1567*cb5466b0SMatthias Ringwald double SX1280GetRangingResult( RadioRangingResultTypes_t resultType );
1568*cb5466b0SMatthias Ringwald 
1569*cb5466b0SMatthias Ringwald /*!
1570*cb5466b0SMatthias Ringwald  * \brief Sets the standard processing delay between Master and Slave
1571*cb5466b0SMatthias Ringwald  *
1572*cb5466b0SMatthias Ringwald  * \param [in]  cal           RxTx delay offset for correcting ranging bias.
1573*cb5466b0SMatthias Ringwald  *
1574*cb5466b0SMatthias Ringwald  * The calibration value reflects the group delay of the radio front end and
1575*cb5466b0SMatthias Ringwald  * must be re-performed for each new SX1280 PCB design. The value is obtained
1576*cb5466b0SMatthias Ringwald  * empirically by either conducted measurement in a known electrical length
1577*cb5466b0SMatthias Ringwald  * coaxial RF cable (where the design is connectorised) or by radiated
1578*cb5466b0SMatthias Ringwald  * measurement, at a known distance, where an antenna is present.
1579*cb5466b0SMatthias Ringwald  * The result of the calibration process is that the SX1280 ranging result
1580*cb5466b0SMatthias Ringwald  * accurately reflects the physical range, the calibration procedure therefore
1581*cb5466b0SMatthias Ringwald  * removes the average timing error from the time-of-flight measurement for a
1582*cb5466b0SMatthias Ringwald  * given design.
1583*cb5466b0SMatthias Ringwald  *
1584*cb5466b0SMatthias Ringwald  * The values are Spreading Factor dependents, and depend also of the board
1585*cb5466b0SMatthias Ringwald  * design. Some typical values are provided in the next table.
1586*cb5466b0SMatthias Ringwald  *
1587*cb5466b0SMatthias Ringwald  * Spreading Factor | Calibration Value
1588*cb5466b0SMatthias Ringwald  * ---------------- | -----------------
1589*cb5466b0SMatthias Ringwald  *   SF5            |  12200
1590*cb5466b0SMatthias Ringwald  *   SF6            |  12200
1591*cb5466b0SMatthias Ringwald  *   SF7            |  12400
1592*cb5466b0SMatthias Ringwald  *   SF8            |  12650
1593*cb5466b0SMatthias Ringwald  *   SF9            |  12940
1594*cb5466b0SMatthias Ringwald  *   SF10           |  13000
1595*cb5466b0SMatthias Ringwald  *   SF11           |  13060
1596*cb5466b0SMatthias Ringwald  *   SF12           |  13120
1597*cb5466b0SMatthias Ringwald  */
1598*cb5466b0SMatthias Ringwald void SX1280SetRangingCalibration( uint16_t cal );
1599*cb5466b0SMatthias Ringwald 
1600*cb5466b0SMatthias Ringwald /*!
1601*cb5466b0SMatthias Ringwald  * \brief Return the last ranging result power indicator
1602*cb5466b0SMatthias Ringwald  *
1603*cb5466b0SMatthias Ringwald  * The value returned is not an absolute power measurement. It is
1604*cb5466b0SMatthias Ringwald  * a relative power measurement.
1605*cb5466b0SMatthias Ringwald  *
1606*cb5466b0SMatthias Ringwald  * \retval      deltaThreshold  A relative power indicator
1607*cb5466b0SMatthias Ringwald  */
1608*cb5466b0SMatthias Ringwald uint8_t SX1280GetRangingPowerDeltaThresholdIndicator( void );
1609*cb5466b0SMatthias Ringwald 
1610*cb5466b0SMatthias Ringwald /*!
1611*cb5466b0SMatthias Ringwald  * \brief Clears the ranging filter
1612*cb5466b0SMatthias Ringwald  */
1613*cb5466b0SMatthias Ringwald void SX1280RangingClearFilterResult( void );
1614*cb5466b0SMatthias Ringwald 
1615*cb5466b0SMatthias Ringwald /*!
1616*cb5466b0SMatthias Ringwald  * \brief Set the number of samples considered in the built-in filter
1617*cb5466b0SMatthias Ringwald  *
1618*cb5466b0SMatthias Ringwald  * \param [in]  numSample     The number of samples to use built-in filter
1619*cb5466b0SMatthias Ringwald  *                            [8..255]
1620*cb5466b0SMatthias Ringwald  *
1621*cb5466b0SMatthias Ringwald  * \remark Value inferior to 8 will be silently set to 8
1622*cb5466b0SMatthias Ringwald  */
1623*cb5466b0SMatthias Ringwald void SX1280RangingSetFilterNumSamples( uint8_t numSample );
1624*cb5466b0SMatthias Ringwald 
1625*cb5466b0SMatthias Ringwald /*!
1626*cb5466b0SMatthias Ringwald  * \brief Return the Estimated Frequency Error in LORA and RANGING operations
1627*cb5466b0SMatthias Ringwald  *
1628*cb5466b0SMatthias Ringwald  * \retval efe                The estimated frequency error [Hz]
1629*cb5466b0SMatthias Ringwald  */
1630*cb5466b0SMatthias Ringwald double SX1280GetFrequencyError( void );
1631*cb5466b0SMatthias Ringwald 
1632*cb5466b0SMatthias Ringwald /*!
1633*cb5466b0SMatthias Ringwald  * \brief Process the analysis of radio IRQs and calls callback functions
1634*cb5466b0SMatthias Ringwald  *        depending on radio state
1635*cb5466b0SMatthias Ringwald  */
1636*cb5466b0SMatthias Ringwald void SX1280ProcessIrqs( void );
1637*cb5466b0SMatthias Ringwald 
1638*cb5466b0SMatthias Ringwald /*!
1639*cb5466b0SMatthias Ringwald  * \brief Clears the instruction RAM
1640*cb5466b0SMatthias Ringwald  */
1641*cb5466b0SMatthias Ringwald void SX1280ClearInstructionRam( void );
1642*cb5466b0SMatthias Ringwald 
1643*cb5466b0SMatthias Ringwald /*!
1644*cb5466b0SMatthias Ringwald  * \brief Parses 1 HEX file line and writes the content to the instruction memory
1645*cb5466b0SMatthias Ringwald  *
1646*cb5466b0SMatthias Ringwald  * \param [in]  line          HEX file line string
1647*cb5466b0SMatthias Ringwald  *
1648*cb5466b0SMatthias Ringwald  * \retval      status        [0: ERROR, 1:OK]
1649*cb5466b0SMatthias Ringwald  */
1650*cb5466b0SMatthias Ringwald int8_t SX1280ParseHexFileLine( char* line );
1651*cb5466b0SMatthias Ringwald 
1652*cb5466b0SMatthias Ringwald /*!
1653*cb5466b0SMatthias Ringwald  * \brief Gets individual fields for the given HEX file line
1654*cb5466b0SMatthias Ringwald  *
1655*cb5466b0SMatthias Ringwald  * \param [in]  line          HEX file line string
1656*cb5466b0SMatthias Ringwald  * \param [out] bytes         Bytes array to be written to the instruction memory
1657*cb5466b0SMatthias Ringwald  * \param [out] addr          Instruction memory address where to write the bytes array
1658*cb5466b0SMatthias Ringwald  * \param [out] num           Number of bytes in Bytes array
1659*cb5466b0SMatthias Ringwald  * \param [out] code          HEX file line type [0: instruction, 1: end of file, 2: begin of file]
1660*cb5466b0SMatthias Ringwald  *
1661*cb5466b0SMatthias Ringwald  * \retval      status        [0: ERROR, 1:OK]
1662*cb5466b0SMatthias Ringwald  */
1663*cb5466b0SMatthias Ringwald int8_t SX1280GetHexFileLineFields( char* line, uint8_t *bytes, uint16_t *addr, uint16_t *num, uint8_t *code );
1664*cb5466b0SMatthias Ringwald 
1665*cb5466b0SMatthias Ringwald /*!
1666*cb5466b0SMatthias Ringwald  *  /\brief Update operating mode to tx - used to let SX1280ProcessIrqs know that TX is/was active and call the correct handlers
1667*cb5466b0SMatthias Ringwald  */
1668*cb5466b0SMatthias Ringwald void SX1280AutoTxWillStart(void);
1669*cb5466b0SMatthias Ringwald 
1670*cb5466b0SMatthias Ringwald #endif // __SX1280_H__
1671