xref: /btstack/chipset/sx128x/SMTC_Drivers/sx1280-driver-c/radio.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: Handling of the node configuration protocol
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, Matthieu Verdy and Benjamin Boulet
15*cb5466b0SMatthias Ringwald */
16*cb5466b0SMatthias Ringwald #ifndef __RADIO_H__
17*cb5466b0SMatthias Ringwald #define __RADIO_H__
18*cb5466b0SMatthias Ringwald 
19*cb5466b0SMatthias Ringwald /*!
20*cb5466b0SMatthias Ringwald  * \brief Class holding the basic communications with a radio
21*cb5466b0SMatthias Ringwald  *
22*cb5466b0SMatthias Ringwald  * It sets the functions to read/write registers, send commands and read/write
23*cb5466b0SMatthias Ringwald  * payload.
24*cb5466b0SMatthias Ringwald  * It also provides functions to run callback functions depending on the
25*cb5466b0SMatthias Ringwald  * interrupts generated from the radio.
26*cb5466b0SMatthias Ringwald  */
27*cb5466b0SMatthias Ringwald struct Radio_s
28*cb5466b0SMatthias Ringwald {
29*cb5466b0SMatthias Ringwald     /*!
30*cb5466b0SMatthias Ringwald      * \brief Initializes the radio
31*cb5466b0SMatthias Ringwald      *
32*cb5466b0SMatthias Ringwald      * \param [IN] callbacks Structure containing the driver callback functions
33*cb5466b0SMatthias Ringwald      */
34*cb5466b0SMatthias Ringwald     void ( *Init )( RadioCallbacks_t *callbacks );
35*cb5466b0SMatthias Ringwald 
36*cb5466b0SMatthias Ringwald     /*!
37*cb5466b0SMatthias Ringwald      * \brief Resets the radio
38*cb5466b0SMatthias Ringwald      */
39*cb5466b0SMatthias Ringwald     void ( *Reset )( void );
40*cb5466b0SMatthias Ringwald 
41*cb5466b0SMatthias Ringwald     /*!
42*cb5466b0SMatthias Ringwald      * \brief Gets the current radio status
43*cb5466b0SMatthias Ringwald      *
44*cb5466b0SMatthias Ringwald      * \retval      status        Radio status
45*cb5466b0SMatthias Ringwald      */
46*cb5466b0SMatthias Ringwald     RadioStatus_t ( *GetStatus )( void );
47*cb5466b0SMatthias Ringwald 
48*cb5466b0SMatthias Ringwald     /*!
49*cb5466b0SMatthias Ringwald      * \brief Writes the given command to the radio
50*cb5466b0SMatthias Ringwald      *
51*cb5466b0SMatthias Ringwald      * \param [in]  opcode        Command opcode
52*cb5466b0SMatthias Ringwald      * \param [in]  buffer        Command parameters byte array
53*cb5466b0SMatthias Ringwald      * \param [in]  size          Command parameters byte array size
54*cb5466b0SMatthias Ringwald      */
55*cb5466b0SMatthias Ringwald     void ( *WriteCommand )( RadioCommands_t opcode, uint8_t *buffer, uint16_t size );
56*cb5466b0SMatthias Ringwald 
57*cb5466b0SMatthias Ringwald     /*!
58*cb5466b0SMatthias Ringwald      * \brief Reads the given command from the radio
59*cb5466b0SMatthias Ringwald      *
60*cb5466b0SMatthias Ringwald      * \param [in]  opcode        Command opcode
61*cb5466b0SMatthias Ringwald      * \param [in]  buffer        Command parameters byte array
62*cb5466b0SMatthias Ringwald      * \param [in]  size          Command parameters byte array size
63*cb5466b0SMatthias Ringwald      */
64*cb5466b0SMatthias Ringwald     void ( *ReadCommand )( RadioCommands_t opcode, uint8_t *buffer, uint16_t size );
65*cb5466b0SMatthias Ringwald 
66*cb5466b0SMatthias Ringwald     /*!
67*cb5466b0SMatthias Ringwald      * \brief Writes multiple radio registers starting at address
68*cb5466b0SMatthias Ringwald      *
69*cb5466b0SMatthias Ringwald      * \param [in]  address       First Radio register address
70*cb5466b0SMatthias Ringwald      * \param [in]  buffer        Buffer containing the new register's values
71*cb5466b0SMatthias Ringwald      * \param [in]  size          Number of registers to be written
72*cb5466b0SMatthias Ringwald      */
73*cb5466b0SMatthias Ringwald     void ( *WriteRegisters )( uint16_t address, uint8_t *buffer, uint16_t size );
74*cb5466b0SMatthias Ringwald 
75*cb5466b0SMatthias Ringwald     /*!
76*cb5466b0SMatthias Ringwald      * \brief Writes the radio register at the specified address
77*cb5466b0SMatthias Ringwald      *
78*cb5466b0SMatthias Ringwald      * \param [in]  address       Register address
79*cb5466b0SMatthias Ringwald      * \param [in]  value         New register value
80*cb5466b0SMatthias Ringwald      */
81*cb5466b0SMatthias Ringwald     void ( *WriteRegister )( uint16_t address, uint8_t value );
82*cb5466b0SMatthias Ringwald 
83*cb5466b0SMatthias Ringwald     /*!
84*cb5466b0SMatthias Ringwald      * \brief Reads multiple radio registers starting at address
85*cb5466b0SMatthias Ringwald      *
86*cb5466b0SMatthias Ringwald      * \param [in]  address       First Radio register address
87*cb5466b0SMatthias Ringwald      * \param [out] buffer        Buffer where to copy the registers data
88*cb5466b0SMatthias Ringwald      * \param [in]  size          Number of registers to be read
89*cb5466b0SMatthias Ringwald      */
90*cb5466b0SMatthias Ringwald     void ( *ReadRegisters )( uint16_t address, uint8_t *buffer, uint16_t size );
91*cb5466b0SMatthias Ringwald 
92*cb5466b0SMatthias Ringwald     /*!
93*cb5466b0SMatthias Ringwald      * \brief Reads the radio register at the specified address
94*cb5466b0SMatthias Ringwald      *
95*cb5466b0SMatthias Ringwald      * \param [in]  address       Register address
96*cb5466b0SMatthias Ringwald      *
97*cb5466b0SMatthias Ringwald      * \retval      value         The register value
98*cb5466b0SMatthias Ringwald      */
99*cb5466b0SMatthias Ringwald     uint8_t ( *ReadRegister )( uint16_t address );
100*cb5466b0SMatthias Ringwald 
101*cb5466b0SMatthias Ringwald     /*!
102*cb5466b0SMatthias Ringwald      * \brief Writes Radio Data Buffer with buffer of size starting at offset.
103*cb5466b0SMatthias Ringwald      *
104*cb5466b0SMatthias Ringwald      * \param [in]  offset        Offset where to start writing
105*cb5466b0SMatthias Ringwald      * \param [in]  buffer        Buffer pointer
106*cb5466b0SMatthias Ringwald      * \param [in]  size          Buffer size
107*cb5466b0SMatthias Ringwald      */
108*cb5466b0SMatthias Ringwald     void ( *WriteBuffer )( uint8_t offset, uint8_t *buffer, uint8_t size );
109*cb5466b0SMatthias Ringwald 
110*cb5466b0SMatthias Ringwald     /*!
111*cb5466b0SMatthias Ringwald      * \brief Reads Radio Data Buffer at offset to buffer of size
112*cb5466b0SMatthias Ringwald      *
113*cb5466b0SMatthias Ringwald      * \param [in]  offset        Offset where to start reading
114*cb5466b0SMatthias Ringwald      * \param [out] buffer        Buffer pointer
115*cb5466b0SMatthias Ringwald      * \param [in]  size          Buffer size
116*cb5466b0SMatthias Ringwald      */
117*cb5466b0SMatthias Ringwald     void ( *ReadBuffer )( uint8_t offset, uint8_t *buffer, uint8_t size );
118*cb5466b0SMatthias Ringwald 
119*cb5466b0SMatthias Ringwald     /*!
120*cb5466b0SMatthias Ringwald      * \brief Gets the current status of the radio DIOs
121*cb5466b0SMatthias Ringwald      *
122*cb5466b0SMatthias Ringwald      * \retval      status        [Bit #3: DIO3, Bit #2: DIO2,
123*cb5466b0SMatthias Ringwald      *                             Bit #1: DIO1, Bit #0: BUSY]
124*cb5466b0SMatthias Ringwald      */
125*cb5466b0SMatthias Ringwald     uint8_t ( *GetDioStatus )( void );
126*cb5466b0SMatthias Ringwald 
127*cb5466b0SMatthias Ringwald     /*!
128*cb5466b0SMatthias Ringwald      * \brief Return firmware version
129*cb5466b0SMatthias Ringwald      *
130*cb5466b0SMatthias Ringwald      * \retval      firmware      The firmware version
131*cb5466b0SMatthias Ringwald      */
132*cb5466b0SMatthias Ringwald     uint16_t ( *GetFirmwareVersion )( void );
133*cb5466b0SMatthias Ringwald 
134*cb5466b0SMatthias Ringwald     /*!
135*cb5466b0SMatthias Ringwald      * \brief Sets the power regulators operating mode
136*cb5466b0SMatthias Ringwald      *
137*cb5466b0SMatthias Ringwald      * \param [in]  mode          [0: LDO, 1:DC_DC]
138*cb5466b0SMatthias Ringwald      */
139*cb5466b0SMatthias Ringwald     void ( *SetRegulatorMode )( RadioRegulatorModes_t mode );
140*cb5466b0SMatthias Ringwald 
141*cb5466b0SMatthias Ringwald     /*!
142*cb5466b0SMatthias Ringwald      * \brief Sets the radio in configuration mode
143*cb5466b0SMatthias Ringwald      *
144*cb5466b0SMatthias Ringwald      * \param [in]  mode          The standby mode to put the radio into
145*cb5466b0SMatthias Ringwald      */
146*cb5466b0SMatthias Ringwald     void ( *SetStandby )( RadioStandbyModes_t mode );
147*cb5466b0SMatthias Ringwald 
148*cb5466b0SMatthias Ringwald     /*!
149*cb5466b0SMatthias Ringwald      * \brief Sets the radio for the given protocol
150*cb5466b0SMatthias Ringwald      *
151*cb5466b0SMatthias Ringwald      * \param [in]  packetType    [PACKET_TYPE_GFSK, PACKET_TYPE_LORA,
152*cb5466b0SMatthias Ringwald      *                             PACKET_TYPE_RANGING, PACKET_TYPE_FLRC,
153*cb5466b0SMatthias Ringwald      *                             PACKET_TYPE_BLE]
154*cb5466b0SMatthias Ringwald      *
155*cb5466b0SMatthias Ringwald      * \remark This method has to be called before SetRfFrequency,
156*cb5466b0SMatthias Ringwald      *         SetModulationParams and SetPacketParams
157*cb5466b0SMatthias Ringwald      */
158*cb5466b0SMatthias Ringwald     void ( *SetPacketType )( RadioPacketTypes_t packetType );
159*cb5466b0SMatthias Ringwald 
160*cb5466b0SMatthias Ringwald     /*!
161*cb5466b0SMatthias Ringwald      * \brief Set the modulation parameters
162*cb5466b0SMatthias Ringwald      *
163*cb5466b0SMatthias Ringwald      * \param [in]  modParams     A structure describing the modulation parameters
164*cb5466b0SMatthias Ringwald      */
165*cb5466b0SMatthias Ringwald     void ( *SetModulationParams )( ModulationParams_t *modParams );
166*cb5466b0SMatthias Ringwald 
167*cb5466b0SMatthias Ringwald     /*!
168*cb5466b0SMatthias Ringwald      * \brief Sets the packet parameters
169*cb5466b0SMatthias Ringwald      *
170*cb5466b0SMatthias Ringwald      * \param [in]  packetParams  A structure describing the packet parameters
171*cb5466b0SMatthias Ringwald      */
172*cb5466b0SMatthias Ringwald     void ( *SetPacketParams )( PacketParams_t *packetParams );
173*cb5466b0SMatthias Ringwald 
174*cb5466b0SMatthias Ringwald     /*!
175*cb5466b0SMatthias Ringwald      * \brief Sets the RF frequency
176*cb5466b0SMatthias Ringwald      *
177*cb5466b0SMatthias Ringwald      * \param [in]  frequency     RF frequency [Hz]
178*cb5466b0SMatthias Ringwald      */
179*cb5466b0SMatthias Ringwald     void ( *SetRfFrequency )( uint32_t frequency );
180*cb5466b0SMatthias Ringwald 
181*cb5466b0SMatthias Ringwald     /*!
182*cb5466b0SMatthias Ringwald      * \brief Sets the data buffer base address for transmission and reception
183*cb5466b0SMatthias Ringwald      *
184*cb5466b0SMatthias Ringwald      * \param [in]  txBaseAddress Transmission base address
185*cb5466b0SMatthias Ringwald      * \param [in]  rxBaseAddress Reception base address
186*cb5466b0SMatthias Ringwald      */
187*cb5466b0SMatthias Ringwald     void ( *SetBufferBaseAddresses )( uint8_t txBaseAddress, uint8_t rxBaseAddress );
188*cb5466b0SMatthias Ringwald 
189*cb5466b0SMatthias Ringwald     /*!
190*cb5466b0SMatthias Ringwald      * \brief Sets the transmission parameters
191*cb5466b0SMatthias Ringwald      *
192*cb5466b0SMatthias Ringwald      * \param [in]  power         RF output power [-18..13] dBm
193*cb5466b0SMatthias Ringwald      * \param [in]  rampTime      Transmission ramp up time
194*cb5466b0SMatthias Ringwald      */
195*cb5466b0SMatthias Ringwald     void ( *SetTxParams )( int8_t power, RadioRampTimes_t rampTime );
196*cb5466b0SMatthias Ringwald 
197*cb5466b0SMatthias Ringwald     /*!
198*cb5466b0SMatthias Ringwald      * \brief   Sets the IRQ mask and DIO masks
199*cb5466b0SMatthias Ringwald      *
200*cb5466b0SMatthias Ringwald      * \param [in]  irqMask       General IRQ mask
201*cb5466b0SMatthias Ringwald      * \param [in]  dio1Mask      DIO1 mask
202*cb5466b0SMatthias Ringwald      * \param [in]  dio2Mask      DIO2 mask
203*cb5466b0SMatthias Ringwald      * \param [in]  dio3Mask      DIO3 mask
204*cb5466b0SMatthias Ringwald      */
205*cb5466b0SMatthias Ringwald     void ( *SetDioIrqParams )( uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask );
206*cb5466b0SMatthias Ringwald 
207*cb5466b0SMatthias Ringwald     /*!
208*cb5466b0SMatthias Ringwald      * \brief Sets the Sync Word given by index used in GFSK, FLRC and BLE protocols
209*cb5466b0SMatthias Ringwald      *
210*cb5466b0SMatthias Ringwald      * \remark 5th byte isn't used in FLRC and BLE protocols
211*cb5466b0SMatthias Ringwald      *
212*cb5466b0SMatthias Ringwald      * \param [in]  syncWordIdx   Index of SyncWord to be set [1..3]
213*cb5466b0SMatthias Ringwald      * \param [in]  syncWord      SyncWord bytes ( 5 bytes )
214*cb5466b0SMatthias Ringwald      *
215*cb5466b0SMatthias Ringwald      * \retval      status        [0: OK, 1: NOK]
216*cb5466b0SMatthias Ringwald      */
217*cb5466b0SMatthias Ringwald     uint8_t ( *SetSyncWord )( uint8_t syncWordIdx, uint8_t *syncWord );
218*cb5466b0SMatthias Ringwald 
219*cb5466b0SMatthias Ringwald     /*!
220*cb5466b0SMatthias Ringwald      * \brief Sets the radio in reception mode
221*cb5466b0SMatthias Ringwald      *
222*cb5466b0SMatthias Ringwald      * \param [in]  timeout       Structure describing the reception timeout value
223*cb5466b0SMatthias Ringwald      */
224*cb5466b0SMatthias Ringwald     void ( *SetRx )( TickTime_t timeout );
225*cb5466b0SMatthias Ringwald 
226*cb5466b0SMatthias Ringwald     /*!
227*cb5466b0SMatthias Ringwald      * \brief Reads the payload received. If the received payload is longer
228*cb5466b0SMatthias Ringwald      * than maxSize, then the method returns 1 and do not set size and payload.
229*cb5466b0SMatthias Ringwald      *
230*cb5466b0SMatthias Ringwald      * \param [out] payload       A pointer to a buffer into which the payload will be copied
231*cb5466b0SMatthias Ringwald      * \param [out] size          A pointer to the size of the payload received
232*cb5466b0SMatthias Ringwald      * \param [in]  maxSize       The maximal size allowed to copy into the buffer
233*cb5466b0SMatthias Ringwald      */
234*cb5466b0SMatthias Ringwald     uint8_t ( *GetPayload )( uint8_t *payload, uint8_t *size, uint8_t maxSize );
235*cb5466b0SMatthias Ringwald 
236*cb5466b0SMatthias Ringwald     /*!
237*cb5466b0SMatthias Ringwald      * \brief Sends a payload
238*cb5466b0SMatthias Ringwald      *
239*cb5466b0SMatthias Ringwald      * \param [in]  payload       A pointer to the payload to send
240*cb5466b0SMatthias Ringwald      * \param [in]  size          The size of the payload to send
241*cb5466b0SMatthias Ringwald      * \param [in]  timeout       The timeout for Tx operation
242*cb5466b0SMatthias Ringwald      */
243*cb5466b0SMatthias Ringwald     void ( *SendPayload )( uint8_t *payload, uint8_t size, TickTime_t timeout );
244*cb5466b0SMatthias Ringwald 
245*cb5466b0SMatthias Ringwald     /*!
246*cb5466b0SMatthias Ringwald      * \brief Set the role of the radio during ranging operations
247*cb5466b0SMatthias Ringwald      *
248*cb5466b0SMatthias Ringwald      * \param [in]  role          Role of the radio
249*cb5466b0SMatthias Ringwald      */
250*cb5466b0SMatthias Ringwald     void ( *SetRangingRole )( RadioRangingRoles_t role );
251*cb5466b0SMatthias Ringwald 
252*cb5466b0SMatthias Ringwald     /*!
253*cb5466b0SMatthias Ringwald      * \brief Set the driver in polling mode.
254*cb5466b0SMatthias Ringwald      *
255*cb5466b0SMatthias Ringwald      * In polling mode the application is responsible to call ProcessIrqs( ) to
256*cb5466b0SMatthias Ringwald      * execute callbacks functions.
257*cb5466b0SMatthias Ringwald      * The default mode is Interrupt Mode.
258*cb5466b0SMatthias Ringwald      * @code
259*cb5466b0SMatthias Ringwald      * // Initializations and callbacks declaration/definition
260*cb5466b0SMatthias Ringwald      * radio = SX1280( mosi, miso, sclk, nss, busy, int1, int2, int3, rst, &callbacks );
261*cb5466b0SMatthias Ringwald      * radio.Init( );
262*cb5466b0SMatthias Ringwald      * radio.SetPollingMode( );
263*cb5466b0SMatthias Ringwald      *
264*cb5466b0SMatthias Ringwald      * while( true )
265*cb5466b0SMatthias Ringwald      * {
266*cb5466b0SMatthias Ringwald      *                            //     IRQ processing is automatically done
267*cb5466b0SMatthias Ringwald      *     radio.ProcessIrqs( );  // <-- here, as well as callback functions
268*cb5466b0SMatthias Ringwald      *                            //     calls
269*cb5466b0SMatthias Ringwald      *     // Do some applicative work
270*cb5466b0SMatthias Ringwald      * }
271*cb5466b0SMatthias Ringwald      * @endcode
272*cb5466b0SMatthias Ringwald      *
273*cb5466b0SMatthias Ringwald      * \see SX1280SetInterruptMode
274*cb5466b0SMatthias Ringwald      */
275*cb5466b0SMatthias Ringwald     void ( *SetPollingMode )( void );
276*cb5466b0SMatthias Ringwald 
277*cb5466b0SMatthias Ringwald     /*!
278*cb5466b0SMatthias Ringwald      * \brief Set the driver in interrupt mode.
279*cb5466b0SMatthias Ringwald      *
280*cb5466b0SMatthias Ringwald      * In interrupt mode, the driver communicate with the radio during the
281*cb5466b0SMatthias Ringwald      * interruption by direct calls to ProcessIrqs( ). The main advantage is
282*cb5466b0SMatthias Ringwald      * the possibility to have low power application architecture.
283*cb5466b0SMatthias Ringwald      * This is the default mode.
284*cb5466b0SMatthias Ringwald      * @code
285*cb5466b0SMatthias Ringwald      * // Initializations and callbacks declaration/definition
286*cb5466b0SMatthias Ringwald      * radio = SX1280( mosi, miso, sclk, nss, busy, int1, int2, int3, rst, &callbacks );
287*cb5466b0SMatthias Ringwald      * radio.Init( );
288*cb5466b0SMatthias Ringwald      * radio.SetInterruptMode( );   // Optionnal. Driver default behavior
289*cb5466b0SMatthias Ringwald      *
290*cb5466b0SMatthias Ringwald      * while( true )
291*cb5466b0SMatthias Ringwald      * {
292*cb5466b0SMatthias Ringwald      *     // Do some applicative work
293*cb5466b0SMatthias Ringwald      * }
294*cb5466b0SMatthias Ringwald      * @endcode
295*cb5466b0SMatthias Ringwald      *
296*cb5466b0SMatthias Ringwald      * \see SX1280SetPollingMode
297*cb5466b0SMatthias Ringwald      */
298*cb5466b0SMatthias Ringwald     void ( *SetInterruptMode )( void );
299*cb5466b0SMatthias Ringwald 
300*cb5466b0SMatthias Ringwald     /*!
301*cb5466b0SMatthias Ringwald      * \brief Initializes the radio registers to the recommended default values
302*cb5466b0SMatthias Ringwald      */
303*cb5466b0SMatthias Ringwald     void ( *SetRegistersDefault )( void );
304*cb5466b0SMatthias Ringwald 
305*cb5466b0SMatthias Ringwald     /*!
306*cb5466b0SMatthias Ringwald      * \brief Gets the current Operation Mode of the Radio
307*cb5466b0SMatthias Ringwald      *
308*cb5466b0SMatthias Ringwald      * \retval      RadioOperatingModes_t last operating mode
309*cb5466b0SMatthias Ringwald      */
310*cb5466b0SMatthias Ringwald     RadioOperatingModes_t ( *GetOpMode )( void );
311*cb5466b0SMatthias Ringwald 
312*cb5466b0SMatthias Ringwald     /*!
313*cb5466b0SMatthias Ringwald      * \brief Sets the radio in sleep mode
314*cb5466b0SMatthias Ringwald      *
315*cb5466b0SMatthias Ringwald      * \param [in]  sleepConfig   The sleep configuration describing data
316*cb5466b0SMatthias Ringwald      *                            retention and RTC wake-up
317*cb5466b0SMatthias Ringwald      */
318*cb5466b0SMatthias Ringwald     void ( *SetSleep )( SleepParams_t sleepConfig );
319*cb5466b0SMatthias Ringwald 
320*cb5466b0SMatthias Ringwald     /*!
321*cb5466b0SMatthias Ringwald      * \brief Sets the radio in FS mode
322*cb5466b0SMatthias Ringwald      */
323*cb5466b0SMatthias Ringwald     void ( *SetFs )( void );
324*cb5466b0SMatthias Ringwald 
325*cb5466b0SMatthias Ringwald     /*!
326*cb5466b0SMatthias Ringwald      * \brief Sets the radio in transmission mode
327*cb5466b0SMatthias Ringwald      *
328*cb5466b0SMatthias Ringwald      * \param [in]  timeout       Structure describing the transmission timeout value
329*cb5466b0SMatthias Ringwald      */
330*cb5466b0SMatthias Ringwald     void ( *SetTx )( TickTime_t timeout );
331*cb5466b0SMatthias Ringwald 
332*cb5466b0SMatthias Ringwald     /*!
333*cb5466b0SMatthias Ringwald      * \brief Sets the Rx duty cycle management parameters
334*cb5466b0SMatthias Ringwald      *
335*cb5466b0SMatthias Ringwald      * \param [in]  rxTime        Structure describing reception timeout value
336*cb5466b0SMatthias Ringwald      * \param [in]  sleepTime     Structure describing sleep timeout value
337*cb5466b0SMatthias Ringwald      */
338*cb5466b0SMatthias Ringwald     void ( *SetRxDutyCycle )( RadioTickSizes_t Step, uint16_t NbStepRx, uint16_t RxNbStepSleep );
339*cb5466b0SMatthias Ringwald 
340*cb5466b0SMatthias Ringwald     /*!
341*cb5466b0SMatthias Ringwald      * \brief Sets the radio in CAD mode
342*cb5466b0SMatthias Ringwald      *
343*cb5466b0SMatthias Ringwald      * \see SX1280::SetCadParams
344*cb5466b0SMatthias Ringwald      */
345*cb5466b0SMatthias Ringwald     void ( *SetCad )( void );
346*cb5466b0SMatthias Ringwald 
347*cb5466b0SMatthias Ringwald     /*!
348*cb5466b0SMatthias Ringwald      * \brief Sets the radio in continuous wave transmission mode
349*cb5466b0SMatthias Ringwald      */
350*cb5466b0SMatthias Ringwald     void ( *SetTxContinuousWave )( void );
351*cb5466b0SMatthias Ringwald 
352*cb5466b0SMatthias Ringwald     /*!
353*cb5466b0SMatthias Ringwald      * \brief Sets the radio in continuous preamble transmission mode
354*cb5466b0SMatthias Ringwald      */
355*cb5466b0SMatthias Ringwald     void ( *SetTxContinuousPreamble )( void );
356*cb5466b0SMatthias Ringwald 
357*cb5466b0SMatthias Ringwald     /*!
358*cb5466b0SMatthias Ringwald      * \brief Gets the current radio protocol
359*cb5466b0SMatthias Ringwald      *
360*cb5466b0SMatthias Ringwald      * \retval      packetType    [PACKET_TYPE_GFSK, PACKET_TYPE_LORA,
361*cb5466b0SMatthias Ringwald      *                             PACKET_TYPE_RANGING, PACKET_TYPE_FLRC,
362*cb5466b0SMatthias Ringwald      *                             PACKET_TYPE_BLE, PACKET_TYPE_NONE]
363*cb5466b0SMatthias Ringwald      */
364*cb5466b0SMatthias Ringwald     RadioPacketTypes_t ( *GetPacketType )( void );
365*cb5466b0SMatthias Ringwald 
366*cb5466b0SMatthias Ringwald     /*!
367*cb5466b0SMatthias Ringwald      * \brief Sets the number of symbols to be used for Channel Activity
368*cb5466b0SMatthias Ringwald      *        Detection operation
369*cb5466b0SMatthias Ringwald      *
370*cb5466b0SMatthias Ringwald      * \param [in]  cadSymbolNum  The number of symbol to use for Channel Activity
371*cb5466b0SMatthias Ringwald      *                            Detection operations [LORA_CAD_01_SYMBOL, LORA_CAD_02_SYMBOL,
372*cb5466b0SMatthias Ringwald      *                            LORA_CAD_04_SYMBOL, LORA_CAD_08_SYMBOL, LORA_CAD_16_SYMBOL]
373*cb5466b0SMatthias Ringwald      */
374*cb5466b0SMatthias Ringwald     void ( *SetCadParams )( RadioLoRaCadSymbols_t cadSymbolNum );
375*cb5466b0SMatthias Ringwald 
376*cb5466b0SMatthias Ringwald     /*!
377*cb5466b0SMatthias Ringwald      * \brief Gets the last received packet buffer status
378*cb5466b0SMatthias Ringwald      *
379*cb5466b0SMatthias Ringwald      * \param [out] payloadLength Last received packet payload length
380*cb5466b0SMatthias Ringwald      * \param [out] rxStartBuffer Last received packet buffer address pointer
381*cb5466b0SMatthias Ringwald      */
382*cb5466b0SMatthias Ringwald     void ( *GetRxBufferStatus )( uint8_t *payloadLength, uint8_t *rxStartBuffer );
383*cb5466b0SMatthias Ringwald 
384*cb5466b0SMatthias Ringwald     /*!
385*cb5466b0SMatthias Ringwald      * \brief Gets the last received packet payload length
386*cb5466b0SMatthias Ringwald      *
387*cb5466b0SMatthias Ringwald      * \param [out] pktStatus     A structure of packet status
388*cb5466b0SMatthias Ringwald      */
389*cb5466b0SMatthias Ringwald     void ( *GetPacketStatus )( PacketStatus_t *pktStatus );
390*cb5466b0SMatthias Ringwald 
391*cb5466b0SMatthias Ringwald     /*!
392*cb5466b0SMatthias Ringwald      * \brief Returns the instantaneous RSSI value for the last packet received
393*cb5466b0SMatthias Ringwald      *
394*cb5466b0SMatthias Ringwald      * \retval      rssiInst      Instantaneous RSSI
395*cb5466b0SMatthias Ringwald      */
396*cb5466b0SMatthias Ringwald     int8_t ( *GetRssiInst )( void );
397*cb5466b0SMatthias Ringwald 
398*cb5466b0SMatthias Ringwald     /*!
399*cb5466b0SMatthias Ringwald      * \brief Returns the current IRQ status
400*cb5466b0SMatthias Ringwald      *
401*cb5466b0SMatthias Ringwald      * \retval      irqStatus     IRQ status
402*cb5466b0SMatthias Ringwald      */
403*cb5466b0SMatthias Ringwald     uint16_t ( *GetIrqStatus )( void );
404*cb5466b0SMatthias Ringwald 
405*cb5466b0SMatthias Ringwald     /*!
406*cb5466b0SMatthias Ringwald      * \brief Clears the IRQs
407*cb5466b0SMatthias Ringwald      *
408*cb5466b0SMatthias Ringwald      * \param [in]  irq           IRQ(s) to be cleared
409*cb5466b0SMatthias Ringwald      */
410*cb5466b0SMatthias Ringwald     void ( *ClearIrqStatus )( uint16_t irq );
411*cb5466b0SMatthias Ringwald 
412*cb5466b0SMatthias Ringwald     /*!
413*cb5466b0SMatthias Ringwald      * \brief Calibrates the given radio block
414*cb5466b0SMatthias Ringwald      *
415*cb5466b0SMatthias Ringwald      * \param [in]  calibParam    The description of blocks to be calibrated
416*cb5466b0SMatthias Ringwald      */
417*cb5466b0SMatthias Ringwald     void ( *Calibrate )( CalibrationParams_t calibParam );
418*cb5466b0SMatthias Ringwald 
419*cb5466b0SMatthias Ringwald     /*!
420*cb5466b0SMatthias Ringwald      * \brief Saves the current selected modem configuration into data RAM
421*cb5466b0SMatthias Ringwald      */
422*cb5466b0SMatthias Ringwald     void ( *SetSaveContext )( void );
423*cb5466b0SMatthias Ringwald 
424*cb5466b0SMatthias Ringwald     /*!
425*cb5466b0SMatthias Ringwald      * \brief Sets the chip to automatically send a packet after the end of a packet reception
426*cb5466b0SMatthias Ringwald      *
427*cb5466b0SMatthias Ringwald      * \remark The offset is automatically compensated inside the function
428*cb5466b0SMatthias Ringwald      *
429*cb5466b0SMatthias Ringwald      * \param [in]  time          The delay in us after which a Tx is done
430*cb5466b0SMatthias Ringwald      */
431*cb5466b0SMatthias Ringwald     void ( *SetAutoTx )( uint16_t time );
432*cb5466b0SMatthias Ringwald 
433*cb5466b0SMatthias Ringwald     /*!
434*cb5466b0SMatthias Ringwald     * \brief Stop the chip from automatically sending a packet after the end of a packet reception
435*cb5466b0SMatthias Ringwald     * if previously activated with SX1280::SetAutoTx command
436*cb5466b0SMatthias Ringwald     *
437*cb5466b0SMatthias Ringwald     * \see SX1280::SetAutoTx
438*cb5466b0SMatthias Ringwald     */
439*cb5466b0SMatthias Ringwald     void ( *StopAutoTx )();
440*cb5466b0SMatthias Ringwald     /*!
441*cb5466b0SMatthias Ringwald      * \brief Sets the chip to automatically receive a packet after the end of a packet transmission
442*cb5466b0SMatthias Ringwald      *
443*cb5466b0SMatthias Ringwald      * \remark The offset is automatically compensated inside the function
444*cb5466b0SMatthias Ringwald      *
445*cb5466b0SMatthias Ringwald      * \param [in]  time          The delay in us after which a Rx is done
446*cb5466b0SMatthias Ringwald      */
447*cb5466b0SMatthias Ringwald     void ( *SetAutoFS )( uint8_t enable );
448*cb5466b0SMatthias Ringwald 
449*cb5466b0SMatthias Ringwald     /*!
450*cb5466b0SMatthias Ringwald      * \brief Enables or disables long preamble detection mode
451*cb5466b0SMatthias Ringwald      *
452*cb5466b0SMatthias Ringwald      * \param [in]  enable        [0: Disable, 1: Enable]
453*cb5466b0SMatthias Ringwald      */
454*cb5466b0SMatthias Ringwald     void ( *SetLongPreamble )( uint8_t enable );
455*cb5466b0SMatthias Ringwald 
456*cb5466b0SMatthias Ringwald     /*!
457*cb5466b0SMatthias Ringwald      * \brief Saves the payload to be send in the radio buffer
458*cb5466b0SMatthias Ringwald      *
459*cb5466b0SMatthias Ringwald      * \param [in]  payload       A pointer to the payload
460*cb5466b0SMatthias Ringwald      * \param [in]  size          The size of the payload
461*cb5466b0SMatthias Ringwald      */
462*cb5466b0SMatthias Ringwald     void ( *SetPayload )( uint8_t *payload, uint8_t size );
463*cb5466b0SMatthias Ringwald 
464*cb5466b0SMatthias Ringwald     /*!
465*cb5466b0SMatthias Ringwald      * \brief Sets the Sync Word given by index used in GFSK, FLRC and BLE protocols
466*cb5466b0SMatthias Ringwald      *
467*cb5466b0SMatthias Ringwald      * \remark 5th byte isn't used in FLRC and BLE protocols
468*cb5466b0SMatthias Ringwald      *
469*cb5466b0SMatthias Ringwald      * \param [in]  syncWordIdx   Index of SyncWord to be set [1..3]
470*cb5466b0SMatthias Ringwald      * \param [in]  syncWord      SyncWord bytes ( 5 bytes )
471*cb5466b0SMatthias Ringwald      *
472*cb5466b0SMatthias Ringwald      * \retval      status        [0: OK, 1: NOK]
473*cb5466b0SMatthias Ringwald      */
474*cb5466b0SMatthias Ringwald     void ( *SetSyncWordErrorTolerance )( uint8_t errorBits );
475*cb5466b0SMatthias Ringwald 
476*cb5466b0SMatthias Ringwald     /*!
477*cb5466b0SMatthias Ringwald      * \brief Sets the Initial value for the LFSR used for the CRC calculation
478*cb5466b0SMatthias Ringwald      *
479*cb5466b0SMatthias Ringwald      * \param [in]  seed          Initial LFSR value ( 4 bytes )
480*cb5466b0SMatthias Ringwald      *
481*cb5466b0SMatthias Ringwald      */
482*cb5466b0SMatthias Ringwald     void ( *SetCrcSeed )( uint16_t seed );
483*cb5466b0SMatthias Ringwald 
484*cb5466b0SMatthias Ringwald     /*!
485*cb5466b0SMatthias Ringwald      * \brief Set the Access Address field of BLE packet
486*cb5466b0SMatthias Ringwald      *
487*cb5466b0SMatthias Ringwald      * \param [in]  accessAddress The access address to be used for next BLE packet sent
488*cb5466b0SMatthias Ringwald      *
489*cb5466b0SMatthias Ringwald      * \see SX1280::SetBleAdvertizerAccessAddress
490*cb5466b0SMatthias Ringwald      */
491*cb5466b0SMatthias Ringwald     void ( *SetBleAccessAddress )( uint32_t accessAddress );
492*cb5466b0SMatthias Ringwald 
493*cb5466b0SMatthias Ringwald     /*!
494*cb5466b0SMatthias Ringwald      * \brief Set the Access Address for Advertizer BLE packets
495*cb5466b0SMatthias Ringwald      *
496*cb5466b0SMatthias Ringwald      * All advertizer BLE packets must use a particular value for Access
497*cb5466b0SMatthias Ringwald      * Address field. This method sets it.
498*cb5466b0SMatthias Ringwald      *
499*cb5466b0SMatthias Ringwald      * \see SX1280::SetBleAccessAddress
500*cb5466b0SMatthias Ringwald      */
501*cb5466b0SMatthias Ringwald     void ( *SetBleAdvertizerAccessAddress )( void );
502*cb5466b0SMatthias Ringwald 
503*cb5466b0SMatthias Ringwald 
504*cb5466b0SMatthias Ringwald     /*!
505*cb5466b0SMatthias Ringwald      * \brief Sets the seed used for the CRC calculation
506*cb5466b0SMatthias Ringwald      *
507*cb5466b0SMatthias Ringwald      * \param [in]  seed          The seed value
508*cb5466b0SMatthias Ringwald      *
509*cb5466b0SMatthias Ringwald      */
510*cb5466b0SMatthias Ringwald     void ( *SetCrcPolynomial )( uint16_t seed );
511*cb5466b0SMatthias Ringwald 
512*cb5466b0SMatthias Ringwald     /*!
513*cb5466b0SMatthias Ringwald      * \brief Sets the Initial value of the LFSR used for the whitening in GFSK, FLRC and BLE protocols
514*cb5466b0SMatthias Ringwald      *
515*cb5466b0SMatthias Ringwald      * \param [in]  seed          Initial LFSR value
516*cb5466b0SMatthias Ringwald      */
517*cb5466b0SMatthias Ringwald     void ( *SetWhiteningSeed )( uint8_t seed );
518*cb5466b0SMatthias Ringwald 
519*cb5466b0SMatthias Ringwald     /*!
520*cb5466b0SMatthias Ringwald     * \brief Enable manual gain and disable AGC
521*cb5466b0SMatthias Ringwald     *
522*cb5466b0SMatthias Ringwald     * \see SetManualGainValue, DisableManualGain
523*cb5466b0SMatthias Ringwald     */
524*cb5466b0SMatthias Ringwald     void ( *EnableManualGain )( void );
525*cb5466b0SMatthias Ringwald 
526*cb5466b0SMatthias Ringwald     /*!
527*cb5466b0SMatthias Ringwald     * \brief Disable the manual gain control and enable AGC
528*cb5466b0SMatthias Ringwald     *
529*cb5466b0SMatthias Ringwald     * \see EnableManualGain
530*cb5466b0SMatthias Ringwald     */
531*cb5466b0SMatthias Ringwald     void ( *DisableManualGain )( void );
532*cb5466b0SMatthias Ringwald 
533*cb5466b0SMatthias Ringwald     /*!
534*cb5466b0SMatthias Ringwald     * \brief Set the gain for LNA
535*cb5466b0SMatthias Ringwald     *
536*cb5466b0SMatthias Ringwald     * EnableManualGain must be call before using this function
537*cb5466b0SMatthias Ringwald     *
538*cb5466b0SMatthias Ringwald     * \param [in]  gain          The value of gain to set, refer to datasheet for value meaning
539*cb5466b0SMatthias Ringwald     *
540*cb5466b0SMatthias Ringwald     * \see EnableManualGain, DisableManualGain
541*cb5466b0SMatthias Ringwald     */
542*cb5466b0SMatthias Ringwald     void ( *SetManualGainValue )( uint8_t gain );
543*cb5466b0SMatthias Ringwald 
544*cb5466b0SMatthias Ringwald     /*!
545*cb5466b0SMatthias Ringwald     * \brief Configure the LNA regime of operation
546*cb5466b0SMatthias Ringwald     *
547*cb5466b0SMatthias Ringwald     * \param [in]  lnaSetting    The LNA setting. Possible values are
548*cb5466b0SMatthias Ringwald     *                            LNA_LOW_POWER_MODE and
549*cb5466b0SMatthias Ringwald     *                            LNA_HIGH_SENSITIVITY_MODE
550*cb5466b0SMatthias Ringwald     */
551*cb5466b0SMatthias Ringwald     void ( *SetLNAGainSetting )( RadioLnaSettings_t lnaSetting );
552*cb5466b0SMatthias Ringwald 
553*cb5466b0SMatthias Ringwald     /*!
554*cb5466b0SMatthias Ringwald      * \brief Sets the number of bits used to check that ranging request match ranging ID
555*cb5466b0SMatthias Ringwald      *
556*cb5466b0SMatthias Ringwald      * \param [in]  length        [0: 8 bits, 1: 16 bits,
557*cb5466b0SMatthias Ringwald      *                             2: 24 bits, 3: 32 bits]
558*cb5466b0SMatthias Ringwald      */
559*cb5466b0SMatthias Ringwald     void ( *SetRangingIdLength )( RadioRangingIdCheckLengths_t length );
560*cb5466b0SMatthias Ringwald 
561*cb5466b0SMatthias Ringwald     /*!
562*cb5466b0SMatthias Ringwald      * \brief Sets ranging device id
563*cb5466b0SMatthias Ringwald      *
564*cb5466b0SMatthias Ringwald      * \param [in]  address       Device address
565*cb5466b0SMatthias Ringwald      */
566*cb5466b0SMatthias Ringwald     void ( *SetDeviceRangingAddress )( uint32_t address );
567*cb5466b0SMatthias Ringwald 
568*cb5466b0SMatthias Ringwald     /*!
569*cb5466b0SMatthias Ringwald      * \brief Sets the device id to ping in a ranging request
570*cb5466b0SMatthias Ringwald      *
571*cb5466b0SMatthias Ringwald      * \param [in]  address       Address of the device to ping
572*cb5466b0SMatthias Ringwald      */
573*cb5466b0SMatthias Ringwald     void ( *SetRangingRequestAddress )( uint32_t address );
574*cb5466b0SMatthias Ringwald 
575*cb5466b0SMatthias Ringwald     /*!
576*cb5466b0SMatthias Ringwald      * \brief Return the ranging result value
577*cb5466b0SMatthias Ringwald      *
578*cb5466b0SMatthias Ringwald      * \param [in]  resultType    Specifies the type of result.
579*cb5466b0SMatthias Ringwald      *                            [0: RAW, 1: Averaged,
580*cb5466b0SMatthias Ringwald      *                             2: De-biased, 3:Filtered]
581*cb5466b0SMatthias Ringwald      *
582*cb5466b0SMatthias Ringwald      * \retval      ranging       The ranging measure filtered according to resultType [m]
583*cb5466b0SMatthias Ringwald      */
584*cb5466b0SMatthias Ringwald     double ( *GetRangingResult )( RadioRangingResultTypes_t resultType );
585*cb5466b0SMatthias Ringwald 
586*cb5466b0SMatthias Ringwald     /*!
587*cb5466b0SMatthias Ringwald      * \brief Sets the standard processing delay between Master and Slave
588*cb5466b0SMatthias Ringwald      *
589*cb5466b0SMatthias Ringwald      * \param [in]  cal           RxTx delay offset for correcting ranging bias.
590*cb5466b0SMatthias Ringwald      *
591*cb5466b0SMatthias Ringwald      * The calibration value reflects the group delay of the radio front end and
592*cb5466b0SMatthias Ringwald      * must be re-performed for each new SX1280 PCB design. The value is obtained
593*cb5466b0SMatthias Ringwald      * empirically by either conducted measurement in a known electrical length
594*cb5466b0SMatthias Ringwald      * coaxial RF cable (where the design is connectorised) or by radiated
595*cb5466b0SMatthias Ringwald      * measurement, at a known distance, where an antenna is present.
596*cb5466b0SMatthias Ringwald      * The result of the calibration process is that the SX1280 ranging result
597*cb5466b0SMatthias Ringwald      * accurately reflects the physical range, the calibration procedure therefore
598*cb5466b0SMatthias Ringwald      * removes the average timing error from the time-of-flight measurement for a
599*cb5466b0SMatthias Ringwald      * given design.
600*cb5466b0SMatthias Ringwald      *
601*cb5466b0SMatthias Ringwald      * The values are Spreading Factor dependents, and depend also of the board
602*cb5466b0SMatthias Ringwald      * design. Some typical values are provided in the next table.
603*cb5466b0SMatthias Ringwald      *
604*cb5466b0SMatthias Ringwald      * Spreading Factor | Calibration Value
605*cb5466b0SMatthias Ringwald      * ---------------- | -----------------
606*cb5466b0SMatthias Ringwald      *   SF5            |  12200
607*cb5466b0SMatthias Ringwald      *   SF6            |  12200
608*cb5466b0SMatthias Ringwald      *   SF7            |  12400
609*cb5466b0SMatthias Ringwald      *   SF8            |  12650
610*cb5466b0SMatthias Ringwald      *   SF9            |  12940
611*cb5466b0SMatthias Ringwald      *   SF10           |  13000
612*cb5466b0SMatthias Ringwald      *   SF11           |  13060
613*cb5466b0SMatthias Ringwald      *   SF12           |  13120
614*cb5466b0SMatthias Ringwald      */
615*cb5466b0SMatthias Ringwald     void ( *SetRangingCalibration )( uint16_t cal );
616*cb5466b0SMatthias Ringwald 
617*cb5466b0SMatthias Ringwald 	/*!
618*cb5466b0SMatthias Ringwald 	 * \brief Return the last ranging result power indicator
619*cb5466b0SMatthias Ringwald 	 *
620*cb5466b0SMatthias Ringwald 	 * The value returned is not an absolute power measurement. It is
621*cb5466b0SMatthias Ringwald 	 * a relative power measurement.
622*cb5466b0SMatthias Ringwald 	 *
623*cb5466b0SMatthias Ringwald 	 * \retval      deltaThreshold  A relative power indicator
624*cb5466b0SMatthias Ringwald 	 */
625*cb5466b0SMatthias Ringwald 	uint8_t ( *GetRangingPowerDeltaThresholdIndicator)( void );
626*cb5466b0SMatthias Ringwald 
627*cb5466b0SMatthias Ringwald     /*!
628*cb5466b0SMatthias Ringwald      * \brief Clears the ranging filter
629*cb5466b0SMatthias Ringwald      */
630*cb5466b0SMatthias Ringwald     void ( *RangingClearFilterResult )( void );
631*cb5466b0SMatthias Ringwald 
632*cb5466b0SMatthias Ringwald     /*!
633*cb5466b0SMatthias Ringwald      * \brief Set the number of samples considered in the built-in filter
634*cb5466b0SMatthias Ringwald      *
635*cb5466b0SMatthias Ringwald      * \param [in]  numSample     The number of samples to use built-in filter
636*cb5466b0SMatthias Ringwald      *                            [8..255]
637*cb5466b0SMatthias Ringwald      *
638*cb5466b0SMatthias Ringwald      * \remark Value inferior to 8 will be silently set to 8
639*cb5466b0SMatthias Ringwald      */
640*cb5466b0SMatthias Ringwald     void ( *RangingSetFilterNumSamples )( uint8_t numSample );
641*cb5466b0SMatthias Ringwald 
642*cb5466b0SMatthias Ringwald     /*!
643*cb5466b0SMatthias Ringwald      * \brief Return the Estimated Frequency Error in LORA and RANGING operations
644*cb5466b0SMatthias Ringwald      *
645*cb5466b0SMatthias Ringwald      * \retval efe                The estimated frequency error [Hz]
646*cb5466b0SMatthias Ringwald      */
647*cb5466b0SMatthias Ringwald     double ( *GetFrequencyError )( void );
648*cb5466b0SMatthias Ringwald };
649*cb5466b0SMatthias Ringwald 
650*cb5466b0SMatthias Ringwald /*!
651*cb5466b0SMatthias Ringwald  * \brief Radio driver
652*cb5466b0SMatthias Ringwald  *
653*cb5466b0SMatthias Ringwald  * \remark This variable is defined and initialized in the specific radio
654*cb5466b0SMatthias Ringwald  *         board implementation
655*cb5466b0SMatthias Ringwald  */
656*cb5466b0SMatthias Ringwald extern const struct Radio_s Radio;
657*cb5466b0SMatthias Ringwald 
658*cb5466b0SMatthias Ringwald #endif // __RADIO_H__
659