xref: /nrf52832-nimble/nordic/nrfx/hal/nrf_radio.h (revision 150812a83cab50279bd772ef6db1bfaf255f2c5b)
1 /*
2  * Copyright (c) 2018, Nordic Semiconductor ASA
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice, this
9  *    list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its
16  *    contributors may be used to endorse or promote products derived from this
17  *    software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #ifndef NRF_RADIO_H__
33 #define NRF_RADIO_H__
34 
35 #include <nrfx.h>
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 /**
42  * @defgroup nrf_radio_hal RADIO HAL
43  * @{
44  * @ingroup nrf_radio
45  * @brief   Hardware access layer for managing the RADIO peripheral.
46  */
47 
48 /**
49  * @brief RADIO tasks.
50  */
51 typedef enum
52 {
53     /*lint -save -e30*/
54     NRF_RADIO_TASK_TXEN      = offsetof(NRF_RADIO_Type, TASKS_TXEN),      /**< Enable RADIO in TX mode. */
55     NRF_RADIO_TASK_RXEN      = offsetof(NRF_RADIO_Type, TASKS_RXEN),      /**< Enable RADIO in RX mode. */
56     NRF_RADIO_TASK_START     = offsetof(NRF_RADIO_Type, TASKS_START),     /**< Start RADIO. */
57     NRF_RADIO_TASK_STOP      = offsetof(NRF_RADIO_Type, TASKS_STOP),      /**< Stop RADIO. */
58     NRF_RADIO_TASK_DISABLE   = offsetof(NRF_RADIO_Type, TASKS_DISABLE),   /**< Disable RADIO. */
59     NRF_RADIO_TASK_RSSISTART = offsetof(NRF_RADIO_Type, TASKS_RSSISTART), /**< Start the RSSI and take one single sample of the receive signal strength. */
60     NRF_RADIO_TASK_RSSISTOP  = offsetof(NRF_RADIO_Type, TASKS_RSSISTOP),  /**< Stop the RSSI measurement. */
61     NRF_RADIO_TASK_BCSTART   = offsetof(NRF_RADIO_Type, TASKS_BCSTART),   /**< Start the bit counter. */
62     NRF_RADIO_TASK_BCSTOP    = offsetof(NRF_RADIO_Type, TASKS_BCSTOP),    /**< Stop the bit counter. */
63 #if defined(RADIO_TASKS_EDSTART_TASKS_EDSTART_Msk) || defined(__NRFX_DOXYGEN__)
64     NRF_RADIO_TASK_EDSTART   = offsetof(NRF_RADIO_Type, TASKS_EDSTART),   /**< Start the Energy Detect measurement used in IEEE 802.15.4 mode. */
65 #endif
66 #if defined(RADIO_TASKS_EDSTOP_TASKS_EDSTOP_Msk) || defined(__NRFX_DOXYGEN__)
67     NRF_RADIO_TASK_EDSTOP    = offsetof(NRF_RADIO_Type, TASKS_EDSTOP),    /**< Stop the Energy Detect measurement. */
68 #endif
69 #if defined(RADIO_TASKS_CCASTART_TASKS_CCASTART_Msk) || defined(__NRFX_DOXYGEN__)
70     NRF_RADIO_TASK_CCASTART  = offsetof(NRF_RADIO_Type, TASKS_CCASTART),  /**< Start the Clear Channel Assessment used in IEEE 802.15.4 mode. */
71 #endif
72 #if defined(RADIO_TASKS_CCASTOP_TASKS_CCASTOP_Msk) || defined(__NRFX_DOXYGEN__)
73     NRF_RADIO_TASK_CCASTOP   = offsetof(NRF_RADIO_Type, TASKS_CCASTOP),   /**< Stop the Clear Channel Assessment. */
74 #endif
75     /*lint -restore*/
76 } nrf_radio_task_t;
77 
78 /**
79  * @brief RADIO events.
80  */
81 typedef enum
82 {
83     /*lint -save -e30*/
84     NRF_RADIO_EVENT_READY      = offsetof(NRF_RADIO_Type, EVENTS_READY),      /**< Radio has ramped up and is ready to be started. */
85     NRF_RADIO_EVENT_ADDRESS    = offsetof(NRF_RADIO_Type, EVENTS_ADDRESS),    /**< Address sent or received. */
86     NRF_RADIO_EVENT_PAYLOAD    = offsetof(NRF_RADIO_Type, EVENTS_PAYLOAD),    /**< Packet payload sent or received. */
87     NRF_RADIO_EVENT_END        = offsetof(NRF_RADIO_Type, EVENTS_END),        /**< Packet transmitted or received. */
88     NRF_RADIO_EVENT_DISABLED   = offsetof(NRF_RADIO_Type, EVENTS_DISABLED),   /**< RADIO has been disabled. */
89     NRF_RADIO_EVENT_DEVMATCH   = offsetof(NRF_RADIO_Type, EVENTS_DEVMATCH),   /**< A device address match occurred on the last received packet. */
90     NRF_RADIO_EVENT_DEVMISS    = offsetof(NRF_RADIO_Type, EVENTS_DEVMISS),    /**< No device address match occurred on the last received packet. */
91     NRF_RADIO_EVENT_RSSIEND    = offsetof(NRF_RADIO_Type, EVENTS_RSSIEND),    /**< Sampling of receive signal strength complete. */
92     NRF_RADIO_EVENT_BCMATCH    = offsetof(NRF_RADIO_Type, EVENTS_BCMATCH),    /**< Bit counter reached bit count value. */
93 #if defined(RADIO_INTENSET_CRCOK_Msk) || defined(__NRFX_DOXYGEN__)
94     NRF_RADIO_EVENT_CRCOK      = offsetof(NRF_RADIO_Type, EVENTS_CRCOK),      /**< Packet received with correct CRC. */
95 #endif
96 #if defined(RADIO_INTENSET_CRCERROR_Msk) || defined(__NRFX_DOXYGEN__)
97     NRF_RADIO_EVENT_CRCERROR   = offsetof(NRF_RADIO_Type, EVENTS_CRCERROR),   /**< Packet received with incorrect CRC. */
98 #endif
99 #if defined(RADIO_INTENSET_FRAMESTART_Msk) || defined(__NRFX_DOXYGEN__)
100     NRF_RADIO_EVENT_FRAMESTART = offsetof(NRF_RADIO_Type, EVENTS_FRAMESTART), /**< IEEE 802.15.4 length field received. */
101 #endif
102 #if defined(RADIO_INTENSET_EDEND_Msk) || defined(__NRFX_DOXYGEN__)
103     NRF_RADIO_EVENT_EDEND      = offsetof(NRF_RADIO_Type, EVENTS_EDEND),      /**< Energy Detection procedure ended. */
104 #endif
105 #if defined(RADIO_INTENSET_EDSTOPPED_Msk) || defined(__NRFX_DOXYGEN__)
106     NRF_RADIO_EVENT_EDSTOPPED  = offsetof(NRF_RADIO_Type, EVENTS_EDSTOPPED),  /**< The sampling of Energy Detection has stopped. */
107 #endif
108 #if defined(RADIO_INTENSET_CCAIDLE_Msk) || defined(__NRFX_DOXYGEN__)
109     NRF_RADIO_EVENT_CCAIDLE    = offsetof(NRF_RADIO_Type, EVENTS_CCAIDLE),    /**< Wireless medium in idle - clear to send. */
110 #endif
111 #if defined(RADIO_INTENSET_CCABUSY_Msk) || defined(__NRFX_DOXYGEN__)
112     NRF_RADIO_EVENT_CCABUSY    = offsetof(NRF_RADIO_Type, EVENTS_CCABUSY),    /**< Wireless medium busy - do not send. */
113 #endif
114 #if defined(RADIO_INTENSET_CCASTOPPED_Msk) || defined(__NRFX_DOXYGEN__)
115     NRF_RADIO_EVENT_CCASTOPPED = offsetof(NRF_RADIO_Type, EVENTS_CCASTOPPED), /**< The CCA has stopped. */
116 #endif
117 #if defined(RADIO_INTENSET_RATEBOOST_Msk) || defined(__NRFX_DOXYGEN__)
118     NRF_RADIO_EVENT_RATEBOOST  = offsetof(NRF_RADIO_Type, EVENTS_RATEBOOST),  /**< Ble_LR CI field received, receive mode is changed from Ble_LR125Kbit to Ble_LR500Kbit. */
119 #endif
120 #if defined(RADIO_INTENSET_TXREADY_Msk) || defined(__NRFX_DOXYGEN__)
121     NRF_RADIO_EVENT_TXREADY    = offsetof(NRF_RADIO_Type, EVENTS_TXREADY),    /**< RADIO has ramped up and is ready to be started TX path. */
122 #endif
123 #if defined(RADIO_INTENSET_RXREADY_Msk) || defined(__NRFX_DOXYGEN__)
124     NRF_RADIO_EVENT_RXREADY    = offsetof(NRF_RADIO_Type, EVENTS_RXREADY),    /**< RADIO has ramped up and is ready to be started RX path. */
125 #endif
126 #if defined(RADIO_INTENSET_MHRMATCH_Msk) || defined(__NRFX_DOXYGEN__)
127     NRF_RADIO_EVENT_MHRMATCH   = offsetof(NRF_RADIO_Type, EVENTS_MHRMATCH),   /**< MAC Header match found. */
128 #endif
129 #if defined(RADIO_INTENSET_PHYEND_Msk) || defined(__NRFX_DOXYGEN__)
130     NRF_RADIO_EVENT_PHYEND     = offsetof(NRF_RADIO_Type, EVENTS_PHYEND),     /**< Generated in Ble_LR125Kbit, Ble_LR500Kbit
131                                                                                    and BleIeee802154_250Kbit modes when last
132                                                                                    bit is sent on the air. */
133 #endif
134     /*lint -restore*/
135 } nrf_radio_event_t;
136 
137 /**
138  * @brief RADIO interrupts.
139  */
140 typedef enum
141 {
142     NRF_RADIO_INT_READY_MASK      = RADIO_INTENSET_READY_Msk,      /**< Interrupt on READY event.  */
143     NRF_RADIO_INT_ADDRESS_MASK    = RADIO_INTENSET_ADDRESS_Msk,    /**< Interrupt on ADDRESS event. */
144     NRF_RADIO_INT_PAYLOAD_MASK    = RADIO_INTENSET_PAYLOAD_Msk,    /**< Interrupt on PAYLOAD event. */
145     NRF_RADIO_INT_END_MASK        = RADIO_INTENSET_END_Msk,        /**< Interrupt on END event. */
146     NRF_RADIO_INT_DISABLED_MASK   = RADIO_INTENSET_DISABLED_Msk,   /**< Interrupt on DISABLED event. */
147     NRF_RADIO_INT_DEVMATCH_MASK   = RADIO_INTENSET_DEVMATCH_Msk,   /**< Interrupt on DEVMATCH event. */
148     NRF_RADIO_INT_DEVMISS_MASK    = RADIO_INTENSET_DEVMISS_Msk,    /**< Interrupt on DEVMISS event. */
149     NRF_RADIO_INT_RSSIEND_MASK    = RADIO_INTENSET_RSSIEND_Msk,    /**< Interrupt on RSSIEND event. */
150     NRF_RADIO_INT_BCMATCH_MASK    = RADIO_INTENSET_BCMATCH_Msk,    /**< Interrupt on BCMATCH event. */
151 #if defined(RADIO_INTENSET_CRCOK_Msk) || defined(__NRFX_DOXYGEN__)
152     NRF_RADIO_INT_CRCOK_MASK      = RADIO_INTENSET_CRCOK_Msk,      /**< Interrupt on CRCOK event. */
153 #endif
154 #if defined(RADIO_INTENSET_CRCERROR_Msk) || defined(__NRFX_DOXYGEN__)
155     NRF_RADIO_INT_CRCERROR_MASK   = RADIO_INTENSET_CRCERROR_Msk,   /**< Interrupt on CRCERROR event. */
156 #endif
157 #if defined(RADIO_INTENSET_FRAMESTART_Msk) || defined(__NRFX_DOXYGEN__)
158     NRF_RADIO_INT_FRAMESTART_MASK = RADIO_INTENSET_FRAMESTART_Msk, /**< Interrupt on FRAMESTART event. */
159 #endif
160 #if defined(RADIO_INTENSET_EDEND_Msk) || defined(__NRFX_DOXYGEN__)
161     NRF_RADIO_INT_EDEND_MASK      = RADIO_INTENSET_EDEND_Msk,      /**< Interrupt on EDEND event. */
162 #endif
163 #if defined(RADIO_INTENSET_EDSTOPPED_Msk) || defined(__NRFX_DOXYGEN__)
164     NRF_RADIO_INT_EDSTOPPED_MASK  = RADIO_INTENSET_EDSTOPPED_Msk,  /**< Interrupt on EDSTOPPED event. */
165 #endif
166 #if defined(RADIO_INTENSET_CCAIDLE_Msk) || defined(__NRFX_DOXYGEN__)
167     NRF_RADIO_INT_CCAIDLE_MASK    = RADIO_INTENSET_CCAIDLE_Msk,    /**< Interrupt on CCAIDLE event. */
168 #endif
169 #if defined(RADIO_INTENSET_CCABUSY_Msk) || defined(__NRFX_DOXYGEN__)
170     NRF_RADIO_INT_CCABUSY_MASK    = RADIO_INTENSET_CCABUSY_Msk,    /**< Interrupt on CCABUSY event. */
171 #endif
172 #if defined(RADIO_INTENSET_CCASTOPPED_Msk) || defined(__NRFX_DOXYGEN__)
173     NRF_RADIO_INT_CCASTOPPED_MASK = RADIO_INTENSET_CCASTOPPED_Msk, /**< Interrupt on CCASTOPPED event. */
174 #endif
175 #if defined(RADIO_INTENSET_RATEBOOST_Msk) || defined(__NRFX_DOXYGEN__)
176     NRF_RADIO_INT_RATEBOOST_MASK  = RADIO_INTENSET_RATEBOOST_Msk,  /**< Interrupt on RATEBOOST event. */
177 #endif
178 #if defined(RADIO_INTENSET_TXREADY_Msk) || defined(__NRFX_DOXYGEN__)
179     NRF_RADIO_INT_TXREADY_MASK    = RADIO_INTENSET_TXREADY_Msk,    /**< Interrupt on TXREADY event. */
180 #endif
181 #if defined(RADIO_INTENSET_RXREADY_Msk) || defined(__NRFX_DOXYGEN__)
182     NRF_RADIO_INT_RXREADY_MASK    = RADIO_INTENSET_RXREADY_Msk,    /**< Interrupt on RXREADY event. */
183 #endif
184 #if defined(RADIO_INTENSET_MHRMATCH_Msk) || defined(__NRFX_DOXYGEN__)
185     NRF_RADIO_INT_MHRMATCH_MASK   = RADIO_INTENSET_MHRMATCH_Msk,   /**< Interrupt on MHRMATCH event. */
186 #endif
187 #if defined(RADIO_INTENSET_PHYEND_Msk) || defined(__NRFX_DOXYGEN__)
188     NRF_RADIO_INT_PHYEND_MASK     = RADIO_INTENSET_PHYEND_Msk,     /**< Interrupt on PHYEND event. */
189 #endif
190 } nrf_radio_int_mask_t;
191 
192 /**
193  * @brief RADIO shortcuts.
194  */
195 typedef enum
196 {
197     NRF_RADIO_SHORT_READY_START_MASK        = RADIO_SHORTS_READY_START_Msk,        /**< Shortcut between READY event and START task. */
198     NRF_RADIO_SHORT_END_DISABLE_MASK        = RADIO_SHORTS_END_DISABLE_Msk,        /**< Shortcut between END event and DISABLE task. */
199     NRF_RADIO_SHORT_DISABLED_TXEN_MASK      = RADIO_SHORTS_DISABLED_TXEN_Msk,      /**< Shortcut between DISABLED event and TXEN task. */
200     NRF_RADIO_SHORT_DISABLED_RXEN_MASK      = RADIO_SHORTS_DISABLED_RXEN_Msk,      /**< Shortcut between DISABLED event and RXEN task. */
201     NRF_RADIO_SHORT_ADDRESS_RSSISTART_MASK  = RADIO_SHORTS_ADDRESS_RSSISTART_Msk,  /**< Shortcut between ADDRESS event and RSSISTART task. */
202     NRF_RADIO_SHORT_END_START_MASK          = RADIO_SHORTS_END_START_Msk,          /**< Shortcut between END event and START task. */
203     NRF_RADIO_SHORT_ADDRESS_BCSTART_MASK    = RADIO_SHORTS_ADDRESS_BCSTART_Msk,    /**< Shortcut between ADDRESS event and BCSTART task. */
204     NRF_RADIO_SHORT_DISABLED_RSSISTOP_MASK  = RADIO_SHORTS_DISABLED_RSSISTOP_Msk,  /**< Shortcut between DISABLED event and RSSISTOP task. */
205 #if defined(RADIO_SHORTS_RXREADY_CCASTART_Msk) || defined(__NRFX_DOXYGEN__)
206     NRF_RADIO_SHORT_RXREADY_CCASTART_MASK   = RADIO_SHORTS_RXREADY_CCASTART_Msk,   /**< Shortcut between RXREADY event and CCASTART task. */
207 #endif
208 #if defined(RADIO_SHORTS_CCAIDLE_TXEN_Msk) || defined(__NRFX_DOXYGEN__)
209     NRF_RADIO_SHORT_CCAIDLE_TXEN_MASK       = RADIO_SHORTS_CCAIDLE_TXEN_Msk,       /**< Shortcut between CCAIDLE event and TXEN task. */
210 #endif
211 #if defined(RADIO_SHORTS_CCABUSY_DISABLE_Msk) || defined(__NRFX_DOXYGEN__)
212     NRF_RADIO_SHORT_CCABUSY_DISABLE_MASK    = RADIO_SHORTS_CCABUSY_DISABLE_Msk,    /**< Shortcut between CCABUSY event and DISABLE task. */
213 #endif
214 #if defined(RADIO_SHORTS_FRAMESTART_BCSTART_Msk) || defined(__NRFX_DOXYGEN__)
215     NRF_RADIO_SHORT_FRAMESTART_BCSTART_MASK = RADIO_SHORTS_FRAMESTART_BCSTART_Msk, /**< Shortcut between FRAMESTART event and BCSTART task. */
216 #endif
217 #if defined(RADIO_SHORTS_READY_EDSTART_Msk) || defined(__NRFX_DOXYGEN__)
218     NRF_RADIO_SHORT_READY_EDSTART_MASK      = RADIO_SHORTS_READY_EDSTART_Msk,      /**< Shortcut between READY event and EDSTART task. */
219 #endif
220 #if defined(RADIO_SHORTS_EDEND_DISABLE_Msk) || defined(__NRFX_DOXYGEN__)
221     NRF_RADIO_SHORT_EDEND_DISABLE_MASK      = RADIO_SHORTS_EDEND_DISABLE_Msk,      /**< Shortcut between EDEND event and DISABLE task. */
222 #endif
223 #if defined(RADIO_SHORTS_CCAIDLE_STOP_Msk) || defined(__NRFX_DOXYGEN__)
224     NRF_RADIO_SHORT_CCAIDLE_STOP_MASK       = RADIO_SHORTS_CCAIDLE_STOP_Msk,       /**< Shortcut between CCAIDLE event and STOP task. */
225 #endif
226 #if defined(RADIO_SHORTS_TXREADY_START_Msk) || defined(__NRFX_DOXYGEN__)
227     NRF_RADIO_SHORT_TXREADY_START_MASK      = RADIO_SHORTS_TXREADY_START_Msk,      /**< Shortcut between TXREADY event and START task. */
228 #endif
229 #if defined(RADIO_SHORTS_RXREADY_START_Msk) || defined(__NRFX_DOXYGEN__)
230     NRF_RADIO_SHORT_RXREADY_START_MASK      = RADIO_SHORTS_RXREADY_START_Msk,      /**< Shortcut between RXREADY event and START task. */
231 #endif
232 #if defined(RADIO_SHORTS_PHYEND_DISABLE_Msk) || defined(__NRFX_DOXYGEN__)
233     NRF_RADIO_SHORT_PHYEND_DISABLE_MASK     = RADIO_SHORTS_PHYEND_DISABLE_Msk,     /**< Shortcut between PHYEND event and DISABLE task. */
234 #endif
235 #if defined(RADIO_SHORTS_PHYEND_START_Msk) || defined(__NRFX_DOXYGEN__)
236     NRF_RADIO_SHORT_PHYEND_START_MASK       = RADIO_SHORTS_PHYEND_START_Msk,       /**< Shortcut between PHYEND event and START task. */
237 #endif
238 } nrf_radio_short_mask_t;
239 
240 #if defined(RADIO_CCACTRL_CCAMODE_Msk) || defined(__NRFX_DOXYGEN__)
241 /**
242  * @brief RADIO Clear Channel Assessment modes.
243  */
244 typedef enum
245 {
246     NRF_RADIO_CCA_MODE_ED             = RADIO_CCACTRL_CCAMODE_EdMode,           /**< Energy Above Threshold. Will report busy whenever energy is detected above set threshold. */
247     NRF_RADIO_CCA_MODE_CARRIER        = RADIO_CCACTRL_CCAMODE_CarrierMode,      /**< Carrier Seen. Will report busy whenever compliant IEEE 802.15.4 signal is seen. */
248     NRF_RADIO_CCA_MODE_CARRIER_AND_ED = RADIO_CCACTRL_CCAMODE_CarrierAndEdMode, /**< Energy Above Threshold AND Carrier Seen. */
249     NRF_RADIO_CCA_MODE_CARRIER_OR_ED  = RADIO_CCACTRL_CCAMODE_CarrierOrEdMode,  /**< Energy Above Threshold OR Carrier Seen. */
250     NRF_RADIO_CCA_MODE_ED_TEST1       = RADIO_CCACTRL_CCAMODE_EdModeTest1,      /**< Energy Above Threshold test mode that will abort when first ED measurement over threshold is seen. No averaging. */
251 } nrf_radio_cca_mode_t;
252 #endif // defined(RADIO_CCACTRL_CCAMODE_Msk) || defined(__NRFX_DOXYGEN__)
253 
254 /**
255  * @brief Types of RADIO States.
256  */
257 typedef enum
258 {
259     NRF_RADIO_STATE_DISABLED  = RADIO_STATE_STATE_Disabled,  /**< No operations are going on inside the radio and the power consumption is at a minimum. */
260     NRF_RADIO_STATE_RXRU      = RADIO_STATE_STATE_RxRu,      /**< The radio is ramping up and preparing for reception. */
261     NRF_RADIO_STATE_RXIDLE    = RADIO_STATE_STATE_RxIdle,    /**< The radio is ready for reception to start. */
262     NRF_RADIO_STATE_RX        = RADIO_STATE_STATE_Rx,        /**< Reception has been started. */
263     NRF_RADIO_STATE_RXDISABLE = RADIO_STATE_STATE_RxDisable, /**< The radio is disabling the receiver. */
264     NRF_RADIO_STATE_TXRU      = RADIO_STATE_STATE_TxRu,      /**< The radio is ramping up and preparing for transmission. */
265     NRF_RADIO_STATE_TXIDLE    = RADIO_STATE_STATE_TxIdle,    /**< The radio is ready for transmission to start. */
266     NRF_RADIO_STATE_TX        = RADIO_STATE_STATE_Tx,        /**< The radio is transmitting a packet. */
267     NRF_RADIO_STATE_TXDISABLE = RADIO_STATE_STATE_TxDisable, /**< The radio is disabling the transmitter. */
268 } nrf_radio_state_t;
269 
270 /**
271  * @brief Types of RADIO TX power.
272  */
273 typedef enum
274 {
275 #if defined(RADIO_TXPOWER_TXPOWER_Pos8dBm) || defined(__NRFX_DOXYGEN__)
276     NRF_RADIO_TXPOWER_POS8DBM  = RADIO_TXPOWER_TXPOWER_Pos8dBm,  /**< 8 dBm. */
277 #endif
278 #if defined(RADIO_TXPOWER_TXPOWER_Pos7dBm) || defined(__NRFX_DOXYGEN__)
279     NRF_RADIO_TXPOWER_POS7DBM  = RADIO_TXPOWER_TXPOWER_Pos7dBm,  /**< 7 dBm. */
280 #endif
281 #if defined(RADIO_TXPOWER_TXPOWER_Pos6dBm) || defined(__NRFX_DOXYGEN__)
282     NRF_RADIO_TXPOWER_POS6DBM  = RADIO_TXPOWER_TXPOWER_Pos6dBm,  /**< 6 dBm. */
283 #endif
284 #if defined(RADIO_TXPOWER_TXPOWER_Pos5dBm) || defined(__NRFX_DOXYGEN__)
285     NRF_RADIO_TXPOWER_POS5DBM  = RADIO_TXPOWER_TXPOWER_Pos5dBm,  /**< 5 dBm. */
286 #endif
287     NRF_RADIO_TXPOWER_POS4DBM  = RADIO_TXPOWER_TXPOWER_Pos4dBm,  /**< 4 dBm. */
288 #if defined(RADIO_TXPOWER_TXPOWER_Pos3dBm) || defined(__NRFX_DOXYGEN__)
289     NRF_RADIO_TXPOWER_POS3DBM  = RADIO_TXPOWER_TXPOWER_Pos3dBm,  /**< 3 dBm. */
290 #endif
291 #if defined(RADIO_TXPOWER_TXPOWER_Pos2dBm) || defined(__NRFX_DOXYGEN__)
292     NRF_RADIO_TXPOWER_POS2DBM  = RADIO_TXPOWER_TXPOWER_Pos2dBm,  /**< 2 dBm. */
293 #endif
294     NRF_RADIO_TXPOWER_0DBM     = RADIO_TXPOWER_TXPOWER_0dBm,     /**< 0 dBm. */
295     NRF_RADIO_TXPOWER_NEG4DBM  = RADIO_TXPOWER_TXPOWER_Neg4dBm,  /**< -4 dBm. */
296     NRF_RADIO_TXPOWER_NEG8DBM  = RADIO_TXPOWER_TXPOWER_Neg8dBm,  /**< -8 dBm. */
297     NRF_RADIO_TXPOWER_NEG12DBM = RADIO_TXPOWER_TXPOWER_Neg12dBm, /**< -12 dBm. */
298     NRF_RADIO_TXPOWER_NEG16DBM = RADIO_TXPOWER_TXPOWER_Neg16dBm, /**< -16 dBm. */
299     NRF_RADIO_TXPOWER_NEG20DBM = RADIO_TXPOWER_TXPOWER_Neg20dBm, /**< -20 dBm. */
300     NRF_RADIO_TXPOWER_NEG30DBM = RADIO_TXPOWER_TXPOWER_Neg30dBm, /**< -30 dBm. */
301 #if defined(RADIO_TXPOWER_TXPOWER_Neg40dBm) || defined(__NRFX_DOXYGEN__)
302     NRF_RADIO_TXPOWER_NEG40DBM = RADIO_TXPOWER_TXPOWER_Neg40dBm, /**< -40 dBm. */
303 #endif
304 } nrf_radio_txpower_t;
305 
306 /**
307  * @brief Types of RADIO modes (data rate and modulation).
308  */
309 typedef enum
310 {
311     NRF_RADIO_MODE_NRF_1MBIT          = RADIO_MODE_MODE_Nrf_1Mbit,          /**< 1Mbit/s Nordic proprietary radio mode. */
312     NRF_RADIO_MODE_NRF_2MBIT          = RADIO_MODE_MODE_Nrf_2Mbit,          /**< 2Mbit/s Nordic proprietary radio mode. */
313 #if defined(RADIO_MODE_MODE_Nrf_250Kbit) || defined(__NRFX_DOXYGEN__)
314     NRF_RADIO_MODE_NRF_250KBIT        = RADIO_MODE_MODE_Nrf_250Kbit,        /**< 250Kbit/s Nordic proprietary radio mode. */
315 #endif
316     NRF_RADIO_MODE_BLE_1MBIT          = RADIO_MODE_MODE_Ble_1Mbit,          /**< 1 Mbit/s Bluetooth Low Energy. */
317 #if defined(RADIO_MODE_MODE_Ble_2Mbit) || defined(__NRFX_DOXYGEN__)
318     NRF_RADIO_MODE_BLE_2MBIT          = RADIO_MODE_MODE_Ble_2Mbit,          /**< 2 Mbit/s Bluetooth Low Energy. */
319 #endif
320 #if defined(RADIO_MODE_MODE_Ble_LR125Kbit) || defined(__NRFX_DOXYGEN__)
321     NRF_RADIO_MODE_BLE_LR125KBIT      = RADIO_MODE_MODE_Ble_LR125Kbit,      /*!< Bluetooth Low Energy Long range 125 kbit/s TX, 125 kbit/s and 500 kbit/s RX */
322 #endif
323 #if defined(RADIO_MODE_MODE_Ble_LR500Kbit) || defined(__NRFX_DOXYGEN__)
324     NRF_RADIO_MODE_BLE_LR500KBIT      = RADIO_MODE_MODE_Ble_LR500Kbit,      /*!< Bluetooth Low Energy Long range 500 kbit/s TX, 125 kbit/s and 500 kbit/s RX */
325 #endif
326 #if defined(RADIO_MODE_MODE_Ieee802154_250Kbit) || defined(__NRFX_DOXYGEN__)
327     NRF_RADIO_MODE_IEEE802154_250KBIT = RADIO_MODE_MODE_Ieee802154_250Kbit, /**< IEEE 802.15.4-2006 250 kbit/s. */
328 #endif
329 } nrf_radio_mode_t;
330 
331 #if defined(RADIO_PCNF0_PLEN_Msk) || defined(__NRFX_DOXYGEN__)
332 /**
333  * @brief Types of preamble length.
334  */
335 typedef enum
336 {
337     NRF_RADIO_PREAMBLE_LENGTH_8BIT       = RADIO_PCNF0_PLEN_8bit,      /**< 8-bit preamble. */
338     NRF_RADIO_PREAMBLE_LENGTH_16BIT      = RADIO_PCNF0_PLEN_16bit,     /**< 16-bit preamble. */
339 #if defined(RADIO_PCNF0_PLEN_32bitZero) || defined(__NRFX_DOXYGEN__)
340     NRF_RADIO_PREAMBLE_LENGTH_32BIT_ZERO = RADIO_PCNF0_PLEN_32bitZero, /**< 32-bit zero preamble used for IEEE 802.15.4. */
341 #endif
342 #if defined(RADIO_PCNF0_PLEN_LongRange) || defined(__NRFX_DOXYGEN__)
343     NRF_RADIO_PREAMBLE_LENGTH_LONG_RANGE = RADIO_PCNF0_PLEN_LongRange, /**< Preamble - used for BTLE Long Range. */
344 #endif
345 } nrf_radio_preamble_length_t;
346 #endif // defined(RADIO_PCNF0_PLEN_Msk) || defined(__NRFX_DOXYGEN__)
347 
348 /**
349  * @brief Types of CRC calculatons regarding address.
350  */
351 typedef enum
352 {
353     NRF_RADIO_CRC_ADDR_INCLUDE    = RADIO_CRCCNF_SKIPADDR_Include,    /**< CRC calculation includes address field. */
354     NRF_RADIO_CRC_ADDR_SKIP       = RADIO_CRCCNF_SKIPADDR_Skip,       /**< CRC calculation does not include address field. */
355 #if defined(RADIO_CRCCNF_SKIPADDR_Ieee802154) || defined(__NRFX_DOXYGEN__)
356     NRF_RADIO_CRC_ADDR_IEEE802154 = RADIO_CRCCNF_SKIPADDR_Ieee802154, /**< CRC calculation as per 802.15.4 standard. */
357 #endif
358 } nrf_radio_crc_addr_t;
359 
360 /**
361  * @brief Packet configuration.
362  */
363 typedef struct
364 {
365     uint8_t lflen;                    /**< Length on air of LENGTH field in number of bits. */
366     uint8_t s0len;                    /**< Length on air of S0 field in number of bytes. */
367     uint8_t s1len;                    /**< Length on air of S1 field in number of bits. */
368 #if defined(RADIO_PCNF0_S1INCL_Msk) || defined(__NRFX_DOXYGEN__)
369     bool s1incl;                      /**< Include or exclude S1 field in RAM. */
370 #endif
371 #if defined(RADIO_PCNF0_CILEN_Msk) || defined(__NRFX_DOXYGEN__)
372     uint8_t cilen;                    /**< Length of code indicator - long range. */
373 #endif
374 #if defined(RADIO_PCNF0_PLEN_Msk) || defined(__NRFX_DOXYGEN__)
375     nrf_radio_preamble_length_t plen; /**< Length of preamble on air. Decision point: TASKS_START task. */
376 #endif
377 #if defined(RADIO_PCNF0_CRCINC_Msk) || defined(__NRFX_DOXYGEN__)
378     bool crcinc;                      /**< Indicates if LENGTH field contains CRC or not. */
379 #endif
380 #if defined(RADIO_PCNF0_TERMLEN_Msk) || defined(__NRFX_DOXYGEN__)
381     uint8_t termlen;                  /**< Length of TERM field in Long Range operation. */
382 #endif
383     uint8_t maxlen;                   /**< Maximum length of packet payload. */
384     uint8_t statlen;                  /**< Static length in number of bytes. */
385     uint8_t balen;                    /**< Base address length in number of bytes. */
386     bool big_endian;                  /**< On air endianness of packet. */
387     bool whiteen;                     /**< Enable or disable packet whitening. */
388 } nrf_radio_packet_conf_t;
389 
390 /**
391  * @brief Function for activating a specific RADIO task.
392  *
393  * @param[in] radio_task Task to activate.
394  */
395 __STATIC_INLINE void nrf_radio_task_trigger(nrf_radio_task_t radio_task);
396 
397 /**
398  * @brief Function for getting the address of a specific RADIO task register.
399  *
400  * This function can be used by the PPI module.
401  *
402  * @param[in] radio_task Requested task.
403  *
404  * @return Address of the specified task register.
405  */
406 __STATIC_INLINE uint32_t nrf_radio_task_address_get(nrf_radio_task_t radio_task);
407 
408 /**
409  * @brief Function for clearing a specific RADIO event.
410  *
411  * @param[in] radio_event Event to clean.
412  */
413 __STATIC_INLINE void nrf_radio_event_clear(nrf_radio_event_t radio_event);
414 
415 /**
416  * @brief Function for checking the state of a specific RADIO event.
417  *
418  * @param[in] radio_event Event to check.
419  *
420  * @retval true  If the event is set.
421  * @retval false If the event is not set.
422  */
423 __STATIC_INLINE bool nrf_radio_event_check(nrf_radio_event_t radio_event);
424 
425 /**
426  * @brief Function for getting the address of a specific RADIO event register.
427  *
428  * This function can be used by the PPI module.
429  *
430  * @param[in] radio_event Requested Event.
431  *
432  * @return Address of the specified event register.
433  */
434 __STATIC_INLINE uint32_t nrf_radio_event_address_get(nrf_radio_event_t radio_event);
435 
436 /**
437  * @brief Function for enabling specified RADIO shortcuts.
438  *
439  * @param[in] radio_shorts_mask Mask of shortcuts.
440  *
441  */
442 __STATIC_INLINE void nrf_radio_shorts_enable(uint32_t radio_shorts_mask);
443 
444 /**
445  * @brief Function for disabling specified RADIO shortcuts.
446  *
447  * @param[in] radio_shorts_mask Mask of shortcuts.
448  */
449 __STATIC_INLINE void nrf_radio_shorts_disable(uint32_t radio_shorts_mask);
450 
451 /**
452  * @brief Function for setting the configuration of RADIO shortcuts.
453  *
454  * @param[in] radio_shorts_mask Shortcuts configuration to set.
455  */
456 __STATIC_INLINE void nrf_radio_shorts_set(uint32_t radio_shorts_mask);
457 
458 /**
459  * @brief Function for getting the configuration of RADIO shortcuts.
460  *
461  * @return Mask of currently enabled shortcuts.
462  */
463 __STATIC_INLINE uint32_t nrf_radio_shorts_get(void);
464 
465 /**
466  * @brief Function for enabling specified RADIO interrupts.
467  *
468  * @param[in] radio_int_mask Mask of interrupts.
469  */
470 __STATIC_INLINE void nrf_radio_int_enable(uint32_t radio_int_mask);
471 
472 /**
473  * @brief Function for disabling specified RADIO interrupts.
474  *
475  * @param[in] radio_int_mask Mask of interrupts.
476  */
477 __STATIC_INLINE void nrf_radio_int_disable(uint32_t radio_int_mask);
478 
479 /**
480  * @brief Function for getting the state of a specific interrupt.
481  *
482  * @param[in] radio_int_mask Interrupt to check.
483  *
484  * @retval true  If the interrupt is enabled.
485  * @retval false If the interrupt is not enabled.
486  */
487 __STATIC_INLINE bool nrf_radio_int_enable_check(nrf_radio_int_mask_t radio_int_mask);
488 
489 /**
490  * @brief Function for getting CRC status of last received packet.
491  *
492  * @retval true  If the packet was received without CRC error .
493  * @retval false If the packet was received with CRC error.
494  */
495 __STATIC_INLINE bool nrf_radio_crc_status_check(void);
496 
497 /**
498  * @brief Function for getting the received address.
499  *
500  * @return Received address.
501  */
502 __STATIC_INLINE uint8_t nrf_radio_rxmatch_get(void);
503 
504 /**
505  * @brief Function for getting CRC field of the last received packet.
506  *
507  * @return CRC field of previously received packet.
508  */
509 __STATIC_INLINE uint32_t nrf_radio_rxcrc_get(void);
510 
511 /**
512  * @brief Function for getting the device address match index.
513  *
514  * @return Device adress match index.
515  */
516 __STATIC_INLINE uint8_t nrf_radio_dai_get(void);
517 
518 #if defined(RADIO_PDUSTAT_PDUSTAT_Msk) || defined(__NRFX_DOXYGEN__)
519 /**
520  * @brief Function for getting status on payload length.
521  *
522  * @retval 0 If the payload is lesser than PCNF1.MAXLEN.
523  * @retval 1 If the payload is greater than PCNF1.MAXLEN.
524  */
525 __STATIC_INLINE uint8_t nrf_radio_pdustat_get(void);
526 
527 /**
528  * @brief Function for getting status on what rate packet is received with in Long Range.
529  *
530  * @retval 0 If the frame is received at 125kbps.
531  * @retval 1 If the frame is received at 500kbps.
532  */
533 __STATIC_INLINE uint8_t nrf_radio_cistat_get(void);
534 #endif // defined(RADIO_PDUSTAT_PDUSTAT_Msk) || defined(__NRFX_DOXYGEN__)
535 
536 /**
537  * @brief Function for setting packet pointer to given location in memory.
538  *
539  * @param[in] p_packet Packet pointer.
540  */
541 __STATIC_INLINE void nrf_radio_packetptr_set(const void * p_packet);
542 
543 /**
544  * @brief Function for getting packet pointer.
545  *
546  * @return Pointer to tx or rx packet buffer.
547  */
548 __STATIC_INLINE void * nrf_radio_packetptr_get(void);
549 
550 /**
551  * @brief Function for setting the radio frequency.
552  *
553  * @param[in] radio_frequency Frequency in MHz.
554  */
555 __STATIC_INLINE void nrf_radio_frequency_set(uint16_t radio_frequency);
556 
557 /**
558  * @brief Function for getting the radio frequency.
559  *
560  * @return Frequency in MHz.
561  */
562 __STATIC_INLINE uint16_t nrf_radio_frequency_get(void);
563 
564 /**
565  * @brief Function for setting the radio transmit power.
566  *
567  * @param[in] tx_power Transmit power of the radio [dBm].
568  */
569 __STATIC_INLINE void nrf_radio_txpower_set(nrf_radio_txpower_t tx_power);
570 
571 /**
572  * @brief Function for getting the radio transmit power.
573  *
574  * @return Transmit power of the radio.
575  */
576 __STATIC_INLINE nrf_radio_txpower_t nrf_radio_txpower_get(void);
577 
578 /**
579  * @brief Function for setting the radio data rate and modulation settings.
580  *
581  * @param[in] radio_mode Radio data rate and modulation.
582  */
583 __STATIC_INLINE void nrf_radio_mode_set(nrf_radio_mode_t radio_mode);
584 
585 /**
586  * @brief Function for getting Radio data rate and modulation settings.
587  *
588  * @return Radio data rate and modulation.
589  */
590 __STATIC_INLINE nrf_radio_mode_t nrf_radio_mode_get(void);
591 
592 /**
593  * @brief Function for setting the packet configuration.
594  *
595  * @param[in] p_config Pointer to the structure with packet configuration.
596  */
597 __STATIC_INLINE void nrf_radio_packet_configure(const nrf_radio_packet_conf_t * p_config);
598 
599 /**
600  * @brief Function for setting the base address 0.
601  *
602  * @param address Base address 0 value.
603  */
604 __STATIC_INLINE void nrf_radio_base0_set(uint32_t address);
605 
606 /**
607  * @brief Function for getting the base address 0.
608  *
609  * @return Base address 0.
610  */
611 __STATIC_INLINE uint32_t nrf_radio_base0_get(void);
612 
613 /**
614  * @brief Function for setting Base address 1.
615  *
616  * @param address Base address 1 value.
617  */
618 __STATIC_INLINE void nrf_radio_base1_set(uint32_t address);
619 
620 /**
621  * @brief Function for getting base address 1.
622  *
623  * @return Base address 1.
624  */
625 __STATIC_INLINE uint32_t nrf_radio_base1_get(void);
626 
627 /**
628  * @brief Function for setting prefixes bytes for logical addresses 0-3.
629  *
630  * @param prefixes Prefixes bytes for logical addresses 0-3.
631  */
632 __STATIC_INLINE void nrf_radio_prefix0_set(uint32_t prefixes);
633 
634 /**
635  * @brief Function for getting prefixes bytes for logical addresses 0-3
636  *
637  * @return Prefixes bytes for logical addresses 0-3
638  */
639 __STATIC_INLINE uint32_t nrf_radio_prefix0_get(void);
640 
641 /**
642  * @brief Function for setting prefixes bytes for logical addresses 4-7.
643  *
644  * @param prefixes Prefixes bytes for logical addresses 4-7.
645  */
646 __STATIC_INLINE void nrf_radio_prefix1_set(uint32_t prefixes);
647 
648 /**
649  * @brief Function for getting prefixes bytes for logical addresses 4-7
650  *
651  * @return Prefixes bytes for logical addresses 4-7
652  */
653 __STATIC_INLINE uint32_t nrf_radio_prefix1_get(void);
654 
655 /**
656  * @brief Function for setting the transmit address.
657  *
658  * @param txaddress Logical address to be used when transmitting a packet.
659  */
660 __STATIC_INLINE void nrf_radio_txaddress_set(uint8_t txaddress);
661 
662 /**
663  * @brief Function for getting the transmit address select.
664  *
665  * @return Logical address to be used when transmitting a packet.
666  */
667 __STATIC_INLINE uint8_t nrf_radio_txaddress_get(void);
668 
669 /**
670  * @brief Function for for selecting the receive addresses.
671  *
672  * @param rxaddresses Enable or disable reception on logical address i.
673  *                    Read more in the Product Specification.
674  */
675 __STATIC_INLINE void nrf_radio_rxaddresses_set(uint8_t rxaddresses);
676 
677 /**
678  * @brief Function for getting receive address select.
679  *
680  * @return Receive address select.
681  */
682 __STATIC_INLINE uint8_t nrf_radio_rxaddresses_get(void);
683 
684 /**
685  * @brief Function for configure CRC.
686  *
687  * @param[in] crc_length      CRC length in number of bytes [0-3].
688  * @param[in] crc_address     Include or exclude packet address field out of CRC.
689  * @param[in] crc_polynominal CRC polynominal to set.
690  */
691 __STATIC_INLINE void nrf_radio_crc_configure(uint8_t              crc_length,
692                                              nrf_radio_crc_addr_t crc_address,
693                                              uint32_t             crc_polynominal);
694 
695 /**
696  * @brief Function for setting CRC initial value.
697  *
698  * @param crc_init_value CRC initial value
699  */
700 __STATIC_INLINE void nrf_radio_crcinit_set(uint32_t crc_init_value);
701 
702 /**
703  * @brief Function for getting CRC initial value.
704  *
705  * @return CRC initial value.
706  */
707 __STATIC_INLINE uint32_t nrf_radio_crcinit_get(void);
708 
709 /**
710  * @brief Function for setting Inter Frame Spacing interval.
711  *
712  * @param[in] radio_ifs Inter frame spacing interval [us].
713  */
714 __STATIC_INLINE void nrf_radio_ifs_set(uint32_t radio_ifs);
715 
716 /**
717  * @brief Function for getting Inter Frame Spacing interval.
718  *
719  * @return Inter frame spacing interval [us].
720  */
721 __STATIC_INLINE uint32_t nrf_radio_ifs_get(void);
722 
723 /**
724  * @brief Function for getting RSSI sample result.
725  *
726  * @note The read value is a positive value while the actual received signal
727  *       is a negative value. Actual received signal strength is therefore as follows:
728  *       received signal strength = - read_value dBm .
729  *
730  * @return RSSI sample result.
731  */
732 __STATIC_INLINE uint8_t nrf_radio_rssi_sample_get(void);
733 
734 /**
735  * @brief Function for getting the current state of the radio module.
736  *
737  * @return Current radio state.
738  */
739 __STATIC_INLINE nrf_radio_state_t nrf_radio_state_get(void);
740 
741 /**
742  * @brief Function for setting the data whitening initial value.
743  *
744  * @param datawhiteiv Data whitening initial value.
745  */
746 __STATIC_INLINE void nrf_radio_datawhiteiv_set(uint8_t datawhiteiv);
747 
748 /**
749  * @brief Function for getting the data whitening initial value.
750  *
751  * @return Data whitening initial value.
752  */
753 __STATIC_INLINE uint8_t nrf_radio_datawhiteiv_get(void);
754 
755 /**
756  * @brief Function for setting Bit counter compare.
757  *
758  * @param[in] radio_bcc Bit counter compare [bits].
759  */
760 __STATIC_INLINE void nrf_radio_bcc_set(uint32_t radio_bcc);
761 
762 /**
763  * @brief Function for getting Bit counter compare.
764  *
765  * @return Bit counter compare.
766  */
767 __STATIC_INLINE uint32_t nrf_radio_bcc_get(void);
768 
769 /**
770  * @brief Function for setting Device address base segment.
771  *
772  * @param dab_value Particular base segment value.
773  * @param segment   Index of the particular Device address base segment register.
774  */
775 __STATIC_INLINE void nrf_radio_dab_set(uint32_t dab_value, uint8_t segment);
776 
777 /**
778  * @brief Function for getting Device address base segment.
779  *
780  * @param segment Number of the Device address base segment.
781  *
782  * @return Particular segment of the Device address base.
783  */
784 __STATIC_INLINE uint32_t nrf_radio_dab_get(uint8_t segment);
785 
786 /**
787  * @brief Function for setting device address prefix.
788  *
789  * @param dap_value    Particular device address prefix value.
790  * @param prefix_index Index of the particular device address prefix register.
791  */
792 __STATIC_INLINE void nrf_radio_dap_set(uint16_t dap_value, uint8_t prefix_index);
793 
794 /**
795  * @brief Function for getting Device address prefix.
796  *
797  * @param prefix_index Number of the Device address prefix segment.
798  *
799  * @return Particular segment of the Device address prefix.
800  */
801 __STATIC_INLINE uint32_t nrf_radio_dap_get(uint8_t prefix_index);
802 
803 /**
804  * @brief Function for setting device address match configuration.
805  *
806  * @note Read more about configuring device address match in the Product Specification.
807  *
808  * @param ena   Device address matching bitmask.
809  * @param txadd TxAdd bitmask.
810  */
811 __STATIC_INLINE void nrf_radio_dacnf_set(uint8_t ena, uint8_t txadd);
812 
813 /**
814  * @brief Function for getting ENA field of the Device address match configuration register.
815  *
816  * @return ENA field of the Device address match configuration register.
817  */
818 __STATIC_INLINE uint8_t nrf_radio_dacnf_ena_get(void);
819 
820 /**
821  * @brief Function for getting TXADD field of the Device address match configuration register.
822  *
823  * @return TXADD field of the Device address match configuration register.
824  */
825 __STATIC_INLINE uint8_t nrf_radio_dacnf_txadd_get(void);
826 
827 #if defined(RADIO_INTENSET_MHRMATCH_Msk) || defined(__NRFX_DOXYGEN__)
828 /**
829  * @brief Function for setting MAC Header Match Unit search pattern configuration.
830  *
831  * @param[in] radio_mhmu_search_pattern Search Pattern Configuration.
832  */
833 __STATIC_INLINE void nrf_radio_mhmu_search_pattern_set(uint32_t radio_mhmu_search_pattern);
834 
835 /**
836  * @brief Function for getting MAC Header Match Unit search pattern configuration.
837  *
838  * @return Search Pattern Configuration.
839  */
840 __STATIC_INLINE uint32_t nrf_radio_mhmu_search_pattern_get(void);
841 
842 /**
843  * @brief Function for setting MAC Header Match Unit pattern mask configuration.
844  *
845  * @param[in] radio_mhmu_pattern_mask Pattern mask.
846  */
847 __STATIC_INLINE void nrf_radio_mhmu_pattern_mask_set(uint32_t radio_mhmu_pattern_mask);
848 
849 /**
850  * @brief Function for getting MAC Header Match Unit pattern mask configuration.
851  *
852  * @return Pattern mask.
853  */
854 __STATIC_INLINE uint32_t nrf_radio_mhmu_pattern_mask_get(void);
855 #endif // defined(RADIO_INTENSET_MHRMATCH_Msk) || defined(__NRFX_DOXYGEN__)
856 
857 #if defined(RADIO_MODECNF0_RU_Msk) || defined(__NRFX_DOXYGEN__)
858 /**
859  * @brief Function for setting Radio mode configuration register 0.
860  *
861  * @param fast_ramp_up Use fast radio ramp-up time
862  * @param default_tx   Default TX value during inactivity.
863  */
864 __STATIC_INLINE void nrf_radio_modecnf0_set(bool fast_ramp_up, uint8_t default_tx);
865 
866 /**
867  * @brief Function for getting ramp-up time configuration of the Radio mode configuration register 0.
868  *
869  * @retval true  If the ramp-up time is set to fast.
870  * @retval false If the ramp-up time is set to default.
871  */
872 __STATIC_INLINE bool nrf_radio_modecnf0_ru_get(void);
873 
874 /**
875  * @brief Function for getting default TX value of the Radio mode configuration register 0.
876  *
877  * @return Default TX value.
878  */
879 __STATIC_INLINE uint8_t nrf_radio_modecnf0_dtx_get(void);
880 #endif // defined(RADIO_MODECNF0_RU_Msk) || defined(__NRFX_DOXYGEN__)
881 
882 #if defined(RADIO_SFD_SFD_Msk) || defined(__NRFX_DOXYGEN__)
883 /**
884  * @brief Function for setting IEEE 802.15.4 start of frame delimiter.
885  *
886  * @param sfd IEEE 802.15.4 start of frame delimiter.
887  */
888 __STATIC_INLINE void nrf_radio_sfd_set(uint8_t sfd);
889 
890 /**
891  * @brief Function for getting IEEE 802.15.4 start of frame delimiter.
892  *
893  * @return IEEE 802.15.4 start of frame delimiter.
894  */
895 __STATIC_INLINE uint8_t nrf_radio_sfd_get(void);
896 #endif // defined(RADIO_SFD_SFD_Msk) || defined(__NRFX_DOXYGEN__)
897 
898 #if defined(RADIO_EDCNT_EDCNT_Msk) || defined(__NRFX_DOXYGEN__)
899 /**
900  * @brief Function for setting number of iterations to perform ED scan.
901  *
902  * @param[in] ed_loop_count Number of iterations during ED procedure.
903  */
904 __STATIC_INLINE void nrf_radio_ed_loop_count_set(uint32_t ed_loop_count);
905 #endif // defined(RADIO_EDCNT_EDCNT_Msk) || defined(__NRFX_DOXYGEN__)
906 
907 #if defined(RADIO_EDSAMPLE_EDLVL_Msk) || defined(__NRFX_DOXYGEN__)
908 /**
909  * @brief Function for getting Energy Detection level.
910  *
911  * @return IEEE 802.15.4 energy detect level.
912  */
913 __STATIC_INLINE uint8_t nrf_radio_ed_sample_get(void);
914 #endif // defined(RADIO_EDSAMPLE_EDLVL_Msk) || defined(__NRFX_DOXYGEN__)
915 
916 #if defined(RADIO_CCACTRL_CCAMODE_Msk) || defined(__NRFX_DOXYGEN__)
917 /**
918  * @brief Function for configuring the IEEE 802.15.4 clear channel assessment.
919  *
920  * @param cca_mode           Mode of CCA.
921  * @param cca_ed_threshold   Energy Detection threshold value.
922  * @param cca_corr_threshold Correlator Busy Threshold.
923  * @param cca_corr_cnt       Limit of occurances above Correlator Threshold.
924  *                           When not equal to zero the correlator based
925  *                           signal detect is enabled.
926  */
927 __STATIC_INLINE void nrf_radio_cca_configure(nrf_radio_cca_mode_t cca_mode,
928                                              uint8_t              cca_ed_threshold,
929                                              uint8_t              cca_corr_threshold,
930                                              uint8_t              cca_corr_cnt);
931 #endif // defined(RADIO_CCACTRL_CCAMODE_Msk) || defined(__NRFX_DOXYGEN__)
932 
933 /**
934  * @brief Function for setting power mode of the radio peripheral.
935  *
936  * @param[in] radio_power If radio should be powered on.
937  */
938 __STATIC_INLINE void nrf_radio_power_set(bool radio_power);
939 
940 
941 #ifndef SUPPRESS_INLINE_IMPLEMENTATION
942 
nrf_radio_task_trigger(nrf_radio_task_t radio_task)943 __STATIC_INLINE void nrf_radio_task_trigger(nrf_radio_task_t radio_task)
944 {
945     *((volatile uint32_t *)((uint8_t *)NRF_RADIO + radio_task)) = 0x1UL;
946 }
947 
nrf_radio_task_address_get(nrf_radio_task_t radio_task)948 __STATIC_INLINE uint32_t nrf_radio_task_address_get(nrf_radio_task_t radio_task)
949 {
950     return ((uint32_t)NRF_RADIO + (uint32_t)radio_task);
951 }
952 
nrf_radio_event_clear(nrf_radio_event_t radio_event)953 __STATIC_INLINE void nrf_radio_event_clear(nrf_radio_event_t radio_event)
954 {
955     *((volatile uint32_t *)((uint8_t *)NRF_RADIO + radio_event)) = 0x0UL;
956 #if __CORTEX_M == 0x04
957     volatile uint32_t dummy = *((volatile uint32_t *)((uint8_t *)NRF_RADIO + radio_event));
958     (void)dummy;
959 #endif
960 }
961 
nrf_radio_event_check(nrf_radio_event_t radio_event)962 __STATIC_INLINE bool nrf_radio_event_check(nrf_radio_event_t radio_event)
963 {
964     return (bool) *((volatile uint32_t *)((uint8_t *)NRF_RADIO + radio_event));
965 }
966 
nrf_radio_event_address_get(nrf_radio_event_t radio_event)967 __STATIC_INLINE uint32_t nrf_radio_event_address_get(nrf_radio_event_t radio_event)
968 {
969     return ((uint32_t)NRF_RADIO + (uint32_t)radio_event);
970 }
971 
nrf_radio_shorts_enable(uint32_t radio_shorts_mask)972 __STATIC_INLINE void nrf_radio_shorts_enable(uint32_t radio_shorts_mask)
973 {
974     NRF_RADIO->SHORTS |= radio_shorts_mask;
975 }
976 
nrf_radio_shorts_disable(uint32_t radio_shorts_mask)977 __STATIC_INLINE void nrf_radio_shorts_disable(uint32_t radio_shorts_mask)
978 {
979     NRF_RADIO->SHORTS &= ~radio_shorts_mask;
980 }
981 
nrf_radio_shorts_set(uint32_t radio_shorts_mask)982 __STATIC_INLINE void nrf_radio_shorts_set(uint32_t radio_shorts_mask)
983 {
984     NRF_RADIO->SHORTS = radio_shorts_mask;
985 }
986 
nrf_radio_shorts_get(void)987 __STATIC_INLINE uint32_t nrf_radio_shorts_get(void)
988 {
989     return NRF_RADIO->SHORTS;
990 }
991 
nrf_radio_int_enable(uint32_t radio_int_mask)992 __STATIC_INLINE void nrf_radio_int_enable(uint32_t radio_int_mask)
993 {
994     NRF_RADIO->INTENSET = radio_int_mask;
995 }
996 
nrf_radio_int_disable(uint32_t radio_int_mask)997 __STATIC_INLINE void nrf_radio_int_disable(uint32_t radio_int_mask)
998 {
999     NRF_RADIO->INTENCLR = radio_int_mask;
1000 }
1001 
nrf_radio_int_enable_check(nrf_radio_int_mask_t radio_int_mask)1002 __STATIC_INLINE bool nrf_radio_int_enable_check(nrf_radio_int_mask_t radio_int_mask)
1003 {
1004     return (bool)(NRF_RADIO->INTENSET & radio_int_mask);
1005 }
1006 
nrf_radio_crc_status_check(void)1007 __STATIC_INLINE bool nrf_radio_crc_status_check(void)
1008 {
1009     return ((NRF_RADIO->CRCSTATUS & RADIO_CRCSTATUS_CRCSTATUS_Msk) >> RADIO_CRCSTATUS_CRCSTATUS_Pos)
1010              == RADIO_CRCSTATUS_CRCSTATUS_CRCOk ;
1011 }
1012 
nrf_radio_rxmatch_get(void)1013 __STATIC_INLINE uint8_t nrf_radio_rxmatch_get(void)
1014 {
1015     return (uint8_t)NRF_RADIO->RXMATCH;
1016 }
1017 
nrf_radio_rxcrc_get(void)1018 __STATIC_INLINE uint32_t nrf_radio_rxcrc_get(void)
1019 {
1020     return NRF_RADIO->RXCRC;
1021 }
1022 
nrf_radio_dai_get(void)1023 __STATIC_INLINE uint8_t nrf_radio_dai_get(void)
1024 {
1025     return (uint8_t)NRF_RADIO->DAI;
1026 }
1027 
1028 #if defined(RADIO_PDUSTAT_PDUSTAT_Msk)
nrf_radio_pdustat_get(void)1029 __STATIC_INLINE uint8_t nrf_radio_pdustat_get(void)
1030 {
1031     return (uint8_t)(NRF_RADIO->PDUSTAT & RADIO_PDUSTAT_PDUSTAT_Msk);
1032 }
1033 
nrf_radio_cistat_get(void)1034 __STATIC_INLINE uint8_t nrf_radio_cistat_get(void)
1035 {
1036     return (uint8_t)((NRF_RADIO->PDUSTAT & RADIO_PDUSTAT_CISTAT_Msk) >> RADIO_PDUSTAT_CISTAT_Pos);
1037 }
1038 #endif // defined(RADIO_PDUSTAT_PDUSTAT_Msk)
1039 
nrf_radio_packetptr_set(const void * p_packet)1040 __STATIC_INLINE void nrf_radio_packetptr_set(const void * p_packet)
1041 {
1042     NRF_RADIO->PACKETPTR = (uint32_t)p_packet;
1043 }
1044 
nrf_radio_packetptr_get(void)1045 __STATIC_INLINE void * nrf_radio_packetptr_get(void)
1046 {
1047     return (void *)NRF_RADIO->PACKETPTR;
1048 }
1049 
nrf_radio_frequency_set(uint16_t radio_frequency)1050 __STATIC_INLINE void nrf_radio_frequency_set(uint16_t radio_frequency)
1051 {
1052     NRFX_ASSERT(radio_frequency <= 2500);
1053 
1054 #if defined(RADIO_FREQUENCY_MAP_Msk)
1055     NRFX_ASSERT(radio_frequency >= 2360);
1056 
1057     uint32_t delta;
1058     if (radio_frequency < 2400)
1059     {
1060         delta = ((uint32_t)(radio_frequency - 2360)) |
1061                 (RADIO_FREQUENCY_MAP_Low << RADIO_FREQUENCY_MAP_Pos);
1062     }
1063     else
1064     {
1065         delta = ((uint32_t)(radio_frequency - 2400)) |
1066                 (RADIO_FREQUENCY_MAP_Default << RADIO_FREQUENCY_MAP_Pos);
1067     }
1068 
1069     NRF_RADIO->FREQUENCY = delta;
1070 #else
1071     NRFX_ASSERT(radio_frequency >= 2400);
1072     NRF_RADIO->FREQUENCY = (uint32_t)(2400 - radio_frequency);
1073 #endif //defined(RADIO_FREQUENCY_MAP_Msk)
1074 }
1075 
nrf_radio_frequency_get(void)1076 __STATIC_INLINE uint16_t nrf_radio_frequency_get(void)
1077 {
1078     uint32_t freq;
1079 
1080 #if defined(RADIO_FREQUENCY_MAP_Msk)
1081     if (((NRF_RADIO->FREQUENCY & RADIO_FREQUENCY_MAP_Msk) >> RADIO_FREQUENCY_MAP_Pos) ==
1082         RADIO_FREQUENCY_MAP_Low)
1083     {
1084         freq = 2360;
1085     }
1086     else
1087 #endif
1088     {
1089         freq = 2400;
1090     }
1091     freq += NRF_RADIO->FREQUENCY & RADIO_FREQUENCY_FREQUENCY_Msk;
1092 
1093     return freq;
1094 }
1095 
nrf_radio_txpower_set(nrf_radio_txpower_t tx_power)1096 __STATIC_INLINE void nrf_radio_txpower_set(nrf_radio_txpower_t tx_power)
1097 {
1098     NRF_RADIO->TXPOWER = (((uint32_t)tx_power) << RADIO_TXPOWER_TXPOWER_Pos);
1099 }
1100 
nrf_radio_txpower_get(void)1101 __STATIC_INLINE nrf_radio_txpower_t nrf_radio_txpower_get(void)
1102 {
1103     return (nrf_radio_txpower_t)(NRF_RADIO->TXPOWER >> RADIO_TXPOWER_TXPOWER_Pos);
1104 }
1105 
nrf_radio_mode_set(nrf_radio_mode_t radio_mode)1106 __STATIC_INLINE void nrf_radio_mode_set(nrf_radio_mode_t radio_mode)
1107 {
1108     NRF_RADIO->MODE = ((uint32_t) radio_mode << RADIO_MODE_MODE_Pos);
1109 }
1110 
nrf_radio_mode_get(void)1111 __STATIC_INLINE nrf_radio_mode_t nrf_radio_mode_get(void)
1112 {
1113     return (nrf_radio_mode_t)((NRF_RADIO->MODE & RADIO_MODE_MODE_Msk) >> RADIO_MODE_MODE_Pos);
1114 }
1115 
nrf_radio_packet_configure(const nrf_radio_packet_conf_t * p_config)1116 __STATIC_INLINE void nrf_radio_packet_configure(const nrf_radio_packet_conf_t * p_config)
1117 {
1118     NRF_RADIO->PCNF0 = (((uint32_t)p_config->lflen << RADIO_PCNF0_LFLEN_Pos) |
1119                         ((uint32_t)p_config->s0len << RADIO_PCNF0_S0LEN_Pos) |
1120                         ((uint32_t)p_config->s1len << RADIO_PCNF0_S1LEN_Pos) |
1121 #if defined(RADIO_PCNF0_S1INCL_Msk)
1122                         (p_config->s1incl ?
1123                              (RADIO_PCNF0_S1INCL_Include   << RADIO_PCNF0_S1INCL_Pos) :
1124                              (RADIO_PCNF0_S1INCL_Automatic << RADIO_PCNF0_S1INCL_Pos) ) |
1125 #endif
1126 #if defined(RADIO_PCNF0_CILEN_Msk)
1127                         ((uint32_t)p_config->cilen << RADIO_PCNF0_CILEN_Pos) |
1128 #endif
1129 #if defined(RADIO_PCNF0_PLEN_Msk)
1130                         ((uint32_t)p_config->plen << RADIO_PCNF0_PLEN_Pos) |
1131 #endif
1132 #if defined(RADIO_PCNF0_CRCINC_Msk)
1133                         (p_config->crcinc ?
1134                              (RADIO_PCNF0_CRCINC_Include << RADIO_PCNF0_CRCINC_Pos) :
1135                              (RADIO_PCNF0_CRCINC_Exclude << RADIO_PCNF0_CRCINC_Pos) ) |
1136 #endif
1137 #if defined(RADIO_PCNF0_TERMLEN_Msk)
1138                         ((uint32_t)p_config->termlen << RADIO_PCNF0_TERMLEN_Pos) |
1139 #endif
1140                         0);
1141 
1142     NRF_RADIO->PCNF1 = (((uint32_t)p_config->maxlen  << RADIO_PCNF1_MAXLEN_Pos) |
1143                         ((uint32_t)p_config->statlen << RADIO_PCNF1_STATLEN_Pos) |
1144                         ((uint32_t)p_config->balen   << RADIO_PCNF1_BALEN_Pos) |
1145                         (p_config->big_endian ?
1146                              (RADIO_PCNF1_ENDIAN_Big    << RADIO_PCNF1_ENDIAN_Pos) :
1147                              (RADIO_PCNF1_ENDIAN_Little << RADIO_PCNF1_ENDIAN_Pos) ) |
1148                         (p_config->whiteen ?
1149                              (RADIO_PCNF1_WHITEEN_Enabled  << RADIO_PCNF1_WHITEEN_Pos) :
1150                              (RADIO_PCNF1_WHITEEN_Disabled << RADIO_PCNF1_WHITEEN_Pos) ));
1151 }
1152 
nrf_radio_base0_set(uint32_t address)1153 __STATIC_INLINE void nrf_radio_base0_set(uint32_t address)
1154 {
1155     NRF_RADIO->BASE0 = address;
1156 }
1157 
nrf_radio_base0_get(void)1158 __STATIC_INLINE uint32_t nrf_radio_base0_get(void)
1159 {
1160     return NRF_RADIO->BASE0;
1161 }
1162 
nrf_radio_base1_set(uint32_t address)1163 __STATIC_INLINE void nrf_radio_base1_set(uint32_t address)
1164 {
1165     NRF_RADIO->BASE1 = address;
1166 }
1167 
nrf_radio_base1_get(void)1168 __STATIC_INLINE uint32_t nrf_radio_base1_get(void)
1169 {
1170     return NRF_RADIO->BASE1;
1171 }
1172 
nrf_radio_prefix0_set(uint32_t prefix0_value)1173 __STATIC_INLINE void nrf_radio_prefix0_set(uint32_t prefix0_value)
1174 {
1175     NRF_RADIO->PREFIX0 = prefix0_value;
1176 }
1177 
nrf_radio_prefix0_get(void)1178 __STATIC_INLINE uint32_t nrf_radio_prefix0_get(void)
1179 {
1180     return NRF_RADIO->PREFIX0;
1181 }
1182 
nrf_radio_prefix1_set(uint32_t prefix1_value)1183 __STATIC_INLINE void nrf_radio_prefix1_set(uint32_t prefix1_value)
1184 {
1185     NRF_RADIO->PREFIX1 = prefix1_value;
1186 }
1187 
nrf_radio_prefix1_get(void)1188 __STATIC_INLINE uint32_t nrf_radio_prefix1_get(void)
1189 {
1190     return NRF_RADIO->PREFIX1;
1191 }
1192 
nrf_radio_txaddress_set(uint8_t txaddress)1193 __STATIC_INLINE void nrf_radio_txaddress_set(uint8_t txaddress)
1194 {
1195     NRF_RADIO->TXADDRESS = ((uint32_t)txaddress) << RADIO_TXADDRESS_TXADDRESS_Pos;
1196 }
1197 
nrf_radio_txaddress_get(void)1198 __STATIC_INLINE uint8_t nrf_radio_txaddress_get(void)
1199 {
1200     return (uint8_t)((NRF_RADIO->TXADDRESS & RADIO_TXADDRESS_TXADDRESS_Msk) >>
1201                      RADIO_TXADDRESS_TXADDRESS_Pos);
1202 }
1203 
nrf_radio_rxaddresses_set(uint8_t rxaddresses)1204 __STATIC_INLINE void nrf_radio_rxaddresses_set(uint8_t rxaddresses)
1205 {
1206     NRF_RADIO->RXADDRESSES = (uint32_t)(rxaddresses);
1207 }
1208 
nrf_radio_rxaddresses_get(void)1209 __STATIC_INLINE uint8_t nrf_radio_rxaddresses_get(void)
1210 {
1211     return (uint8_t)(NRF_RADIO->RXADDRESSES);
1212 }
1213 
nrf_radio_crc_configure(uint8_t crc_length,nrf_radio_crc_addr_t crc_address,uint32_t crc_polynominal)1214 __STATIC_INLINE void nrf_radio_crc_configure(uint8_t              crc_length,
1215                                              nrf_radio_crc_addr_t crc_address,
1216                                              uint32_t             crc_polynominal)
1217 {
1218     NRF_RADIO->CRCCNF = ((uint32_t)crc_length  << RADIO_CRCCNF_LEN_Pos) |
1219                         ((uint32_t)crc_address << RADIO_CRCCNF_SKIPADDR_Pos);
1220     NRF_RADIO->CRCPOLY = (crc_polynominal << RADIO_CRCPOLY_CRCPOLY_Pos);
1221 }
1222 
nrf_radio_crcinit_set(uint32_t crc_init_value)1223 __STATIC_INLINE void nrf_radio_crcinit_set(uint32_t crc_init_value)
1224 {
1225     NRF_RADIO->CRCINIT = crc_init_value;
1226 }
1227 
nrf_radio_crcinit_get(void)1228 __STATIC_INLINE uint32_t nrf_radio_crcinit_get(void)
1229 {
1230     return NRF_RADIO->CRCINIT;
1231 }
1232 
nrf_radio_ifs_set(uint32_t radio_ifs)1233 __STATIC_INLINE void nrf_radio_ifs_set(uint32_t radio_ifs)
1234 {
1235     NRF_RADIO->TIFS = radio_ifs;
1236 }
1237 
nrf_radio_ifs_get(void)1238 __STATIC_INLINE uint32_t nrf_radio_ifs_get(void)
1239 {
1240     return NRF_RADIO->TIFS;
1241 }
1242 
nrf_radio_rssi_sample_get(void)1243 __STATIC_INLINE uint8_t nrf_radio_rssi_sample_get(void)
1244 {
1245     return (uint8_t)((NRF_RADIO->RSSISAMPLE & RADIO_RSSISAMPLE_RSSISAMPLE_Msk) >>
1246                      RADIO_RSSISAMPLE_RSSISAMPLE_Pos);
1247 }
1248 
nrf_radio_state_get(void)1249 __STATIC_INLINE nrf_radio_state_t nrf_radio_state_get(void)
1250 {
1251     return (nrf_radio_state_t) NRF_RADIO->STATE;
1252 }
1253 
nrf_radio_datawhiteiv_set(uint8_t datawhiteiv)1254 __STATIC_INLINE void nrf_radio_datawhiteiv_set(uint8_t datawhiteiv)
1255 {
1256     NRF_RADIO->DATAWHITEIV = (((uint32_t)datawhiteiv) & RADIO_DATAWHITEIV_DATAWHITEIV_Msk);
1257 }
1258 
nrf_radio_datawhiteiv_get(void)1259 __STATIC_INLINE uint8_t nrf_radio_datawhiteiv_get(void)
1260 {
1261     return (uint8_t)(NRF_RADIO->DATAWHITEIV & RADIO_DATAWHITEIV_DATAWHITEIV_Msk);
1262 }
1263 
nrf_radio_bcc_set(uint32_t radio_bcc)1264 __STATIC_INLINE void nrf_radio_bcc_set(uint32_t radio_bcc)
1265 {
1266     NRF_RADIO->BCC = radio_bcc;
1267 }
1268 
nrf_radio_bcc_get(void)1269 __STATIC_INLINE uint32_t nrf_radio_bcc_get(void)
1270 {
1271     return NRF_RADIO->BCC;
1272 }
1273 
nrf_radio_dab_set(uint32_t dab_value,uint8_t segment)1274 __STATIC_INLINE void nrf_radio_dab_set(uint32_t dab_value, uint8_t segment)
1275 {
1276     NRFX_ASSERT(segment < 8);
1277     NRF_RADIO->DAB[segment] = dab_value;
1278 }
1279 
nrf_radio_dab_get(uint8_t segment)1280 __STATIC_INLINE uint32_t nrf_radio_dab_get(uint8_t segment)
1281 {
1282     NRFX_ASSERT(segment < 8);
1283     return NRF_RADIO->DAB[segment];
1284 }
1285 
nrf_radio_dap_set(uint16_t dap_value,uint8_t prefix_index)1286 __STATIC_INLINE void nrf_radio_dap_set(uint16_t dap_value, uint8_t prefix_index)
1287 {
1288     NRFX_ASSERT(prefix_index < 8);
1289     NRF_RADIO->DAP[prefix_index] = (uint32_t)dap_value;
1290 }
1291 
nrf_radio_dap_get(uint8_t prefix_index)1292 __STATIC_INLINE uint32_t nrf_radio_dap_get(uint8_t prefix_index)
1293 {
1294     NRFX_ASSERT(prefix_index < 8);
1295     return NRF_RADIO->DAP[prefix_index];
1296 }
1297 
nrf_radio_dacnf_set(uint8_t ena,uint8_t txadd)1298 __STATIC_INLINE void nrf_radio_dacnf_set(uint8_t ena, uint8_t txadd)
1299 {
1300     NRF_RADIO->DACNF = (((uint32_t)ena   << RADIO_DACNF_ENA0_Pos) |
1301                         ((uint32_t)txadd << RADIO_DACNF_TXADD0_Pos));
1302 }
1303 
nrf_radio_dacnf_ena_get(void)1304 __STATIC_INLINE uint8_t nrf_radio_dacnf_ena_get(void)
1305 {
1306     return (NRF_RADIO->DACNF & (RADIO_DACNF_ENA0_Msk |
1307                                 RADIO_DACNF_ENA1_Msk |
1308                                 RADIO_DACNF_ENA2_Msk |
1309                                 RADIO_DACNF_ENA3_Msk |
1310                                 RADIO_DACNF_ENA4_Msk |
1311                                 RADIO_DACNF_ENA5_Msk |
1312                                 RADIO_DACNF_ENA6_Msk |
1313                                 RADIO_DACNF_ENA7_Msk)) >> RADIO_DACNF_ENA0_Pos;
1314 }
1315 
nrf_radio_dacnf_txadd_get(void)1316 __STATIC_INLINE uint8_t nrf_radio_dacnf_txadd_get(void)
1317 {
1318     return (NRF_RADIO->DACNF & (RADIO_DACNF_TXADD0_Msk |
1319                                 RADIO_DACNF_TXADD1_Msk |
1320                                 RADIO_DACNF_TXADD2_Msk |
1321                                 RADIO_DACNF_TXADD3_Msk |
1322                                 RADIO_DACNF_TXADD4_Msk |
1323                                 RADIO_DACNF_TXADD5_Msk |
1324                                 RADIO_DACNF_TXADD6_Msk |
1325                                 RADIO_DACNF_TXADD7_Msk)) >> RADIO_DACNF_TXADD0_Pos;
1326 }
1327 
1328 #if defined(RADIO_INTENSET_MHRMATCH_Msk)
nrf_radio_mhmu_search_pattern_set(uint32_t radio_mhmu_search_pattern)1329 __STATIC_INLINE void nrf_radio_mhmu_search_pattern_set(uint32_t radio_mhmu_search_pattern)
1330 {
1331     NRF_RADIO->MHRMATCHCONF = radio_mhmu_search_pattern;
1332 }
1333 
nrf_radio_mhmu_search_pattern_get(void)1334 __STATIC_INLINE uint32_t nrf_radio_mhmu_search_pattern_get(void)
1335 {
1336     return NRF_RADIO->MHRMATCHCONF;
1337 }
1338 
nrf_radio_mhmu_pattern_mask_set(uint32_t radio_mhmu_pattern_mask)1339 __STATIC_INLINE void nrf_radio_mhmu_pattern_mask_set(uint32_t radio_mhmu_pattern_mask)
1340 {
1341     NRF_RADIO->MHRMATCHMAS = radio_mhmu_pattern_mask;
1342 }
1343 
nrf_radio_mhmu_pattern_mask_get(void)1344 __STATIC_INLINE uint32_t nrf_radio_mhmu_pattern_mask_get(void)
1345 {
1346     return NRF_RADIO->MHRMATCHMAS;
1347 }
1348 #endif // defined(RADIO_INTENSET_MHRMATCH_Msk)
1349 
1350 #if defined(RADIO_MODECNF0_RU_Msk)
nrf_radio_modecnf0_set(bool fast_ramp_up,uint8_t default_tx)1351 __STATIC_INLINE void nrf_radio_modecnf0_set(bool fast_ramp_up, uint8_t default_tx)
1352 {
1353     NRF_RADIO->MODECNF0 = (fast_ramp_up ? (RADIO_MODECNF0_RU_Fast    << RADIO_MODECNF0_RU_Pos) :
1354                                           (RADIO_MODECNF0_RU_Default << RADIO_MODECNF0_RU_Pos) ) |
1355                           (((uint32_t)default_tx) << RADIO_MODECNF0_DTX_Pos);
1356 }
1357 
nrf_radio_modecnf0_ru_get(void)1358 __STATIC_INLINE bool nrf_radio_modecnf0_ru_get(void)
1359 {
1360     return ((NRF_RADIO->MODECNF0 & RADIO_MODECNF0_RU_Msk) >> RADIO_MODECNF0_RU_Pos) ==
1361             RADIO_MODECNF0_RU_Fast;
1362 }
1363 
nrf_radio_modecnf0_dtx_get(void)1364 __STATIC_INLINE uint8_t nrf_radio_modecnf0_dtx_get(void)
1365 {
1366     return (uint8_t)((NRF_RADIO->MODECNF0 & RADIO_MODECNF0_DTX_Msk) >> RADIO_MODECNF0_DTX_Pos);
1367 }
1368 #endif // defined(RADIO_MODECNF0_RU_Msk)
1369 
1370 #if defined(RADIO_SFD_SFD_Msk)
nrf_radio_sfd_set(uint8_t sfd)1371 __STATIC_INLINE void nrf_radio_sfd_set(uint8_t sfd)
1372 {
1373     NRF_RADIO->SFD = ((uint32_t)sfd) << RADIO_SFD_SFD_Pos;
1374 }
1375 
nrf_radio_sfd_get(void)1376 __STATIC_INLINE uint8_t nrf_radio_sfd_get(void)
1377 {
1378     return (uint8_t)((NRF_RADIO->SFD & RADIO_SFD_SFD_Msk) >> RADIO_SFD_SFD_Pos);
1379 }
1380 #endif // defined(RADIO_SFD_SFD_Msk)
1381 
1382 #if defined(RADIO_EDCNT_EDCNT_Msk)
nrf_radio_ed_loop_count_set(uint32_t ed_loop_count)1383 __STATIC_INLINE void nrf_radio_ed_loop_count_set(uint32_t ed_loop_count)
1384 {
1385     NRF_RADIO->EDCNT = (ed_loop_count & RADIO_EDCNT_EDCNT_Msk);
1386 }
1387 #endif
1388 
1389 #if defined(RADIO_EDSAMPLE_EDLVL_Msk)
nrf_radio_ed_sample_get(void)1390 __STATIC_INLINE uint8_t nrf_radio_ed_sample_get(void)
1391 {
1392     return (uint8_t) NRF_RADIO->EDSAMPLE;
1393 }
1394 #endif
1395 
1396 #if defined(RADIO_CCACTRL_CCAMODE_Msk)
1397 
nrf_radio_cca_configure(nrf_radio_cca_mode_t cca_mode,uint8_t cca_ed_threshold,uint8_t cca_corr_threshold,uint8_t cca_corr_cnt)1398 __STATIC_INLINE void nrf_radio_cca_configure(nrf_radio_cca_mode_t cca_mode,
1399                                              uint8_t              cca_ed_threshold,
1400                                              uint8_t              cca_corr_threshold,
1401                                              uint8_t              cca_corr_cnt)
1402 {
1403     NRF_RADIO->CCACTRL = (((uint32_t)cca_mode           << RADIO_CCACTRL_CCAMODE_Pos) |
1404                           ((uint32_t)cca_ed_threshold   << RADIO_CCACTRL_CCAEDTHRES_Pos) |
1405                           ((uint32_t)cca_corr_threshold << RADIO_CCACTRL_CCACORRTHRES_Pos) |
1406                           ((uint32_t)cca_corr_cnt       << RADIO_CCACTRL_CCACORRCNT_Pos));
1407 }
1408 #endif
1409 
nrf_radio_power_set(bool radio_power)1410 __STATIC_INLINE void nrf_radio_power_set(bool radio_power)
1411 {
1412     NRF_RADIO->POWER = (uint32_t) radio_power;
1413 }
1414 #endif
1415 
1416 /** @} */
1417 
1418 #ifdef __cplusplus
1419 }
1420 #endif
1421 
1422 #endif // NRF_RADIO_H__
1423