forked from hubertmis/nRF-IEEE-802.15.4-radio-driver
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nrf_802154_swi.h
263 lines (233 loc) · 10.2 KB
/
nrf_802154_swi.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
/* Copyright (c) 2017 - 2019, Nordic Semiconductor ASA
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef NRF_802154_SWI_H__
#define NRF_802154_SWI_H__
#include <stdbool.h>
#include <stdint.h>
#include "nrf_802154.h"
#include "nrf_802154_const.h"
#include "nrf_802154_notification.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup nrf_802154_swi 802.15.4 driver SWI management
* @{
* @ingroup nrf_802154
* @brief SWI manager for the 802.15.4 driver.
*/
/**
* @brief Initializes the SWI module.
*/
void nrf_802154_swi_init(void);
/**
* @brief Notifies the next higher layer that a frame was received.
*
* The notification is triggered from the SWI priority level.
*
* @param[in] p_data Pointer to a buffer that contains PHR and PSDU of the received frame.
* @param[in] power RSSI measured during the frame reception.
* @param[in] lqi LQI that indicates the measured link quality during the frame reception.
*/
void nrf_802154_swi_notify_received(uint8_t * p_data, int8_t power, uint8_t lqi);
/**
* @brief Notifies the next higher layer that the reception of a frame failed.
*
* @param[in] error Error code that indicates reason of the failure.
*/
void nrf_802154_swi_notify_receive_failed(nrf_802154_rx_error_t error);
/**
* @brief Notifies the next higher layer that a frame was transmitted
*
* The notification is triggered from the SWI priority level.
*
* @param[in] p_frame Pointer to a buffer that contains PHR and PSDU of the transmitted frame.
* @param[in] p_ack Pointer to a buffer that contains PHR and PSDU of ACK frame. NULL if ACK was
* not requested.
* @param[in] power RSSI of the received frame, or 0 if ACK was not requested.
* @param[in] lqi LQI of the received frame, or 0 if ACK was not requested.
*/
void nrf_802154_swi_notify_transmitted(const uint8_t * p_frame,
uint8_t * p_data,
int8_t power,
uint8_t lqi);
/**
* @brief Notifies the next higher layer that a frame was not transmitted from the SWI priority
* level.
*
* @param[in] p_frame Pointer to a buffer that contains PHR and PSDU of the frame that failed
* the transmission.
* @param[in] error Reason of the transmission failure.
*/
void nrf_802154_swi_notify_transmit_failed(const uint8_t * p_frame, nrf_802154_tx_error_t error);
/**
* @brief Notifies the next higher layer that the energy detection procedure ended from
* the SWI priority level.
*
* @param[in] result Detected energy level.
*/
void nrf_802154_swi_notify_energy_detected(uint8_t result);
/**
* @brief Notifies the next higher layer that the energy detection procedure failed from
* the SWI priority level.
*
* @param[in] error Reason of the energy detection failure.
*/
void nrf_802154_swi_notify_energy_detection_failed(nrf_802154_ed_error_t error);
/**
* @brief Notifies the next higher layer that the Clear Channel Assessment (CCA) procedure ended.
*
* The notification is triggered from the SWI priority level.
*
* @param[in] channel_free If a free channel was detected.
*/
void nrf_802154_swi_notify_cca(bool channel_free);
/**
* @brief Notifies the next higher layer that the Clear Channel Assessment (CCA) procedure failed.
*
* The notification is triggered from the SWI priority level.
*
* @param[in] error Reason of the CCA failure.
*/
void nrf_802154_swi_notify_cca_failed(nrf_802154_cca_error_t error);
/**
* @brief Requests a stop of the HF clock.
*
* The notification is triggered from the SWI priority level.
*
* @note This function is to be called through notification module to prevent calling it from
* the arbiter context.
*/
void nrf_802154_swi_hfclk_stop(void);
/**
* @brief Terminates the stopping of the HF clock.
*
* @note This function terminates the stopping of the HF clock only if it has not been performed
* yet.
*/
void nrf_802154_swi_hfclk_stop_terminate(void);
/**
* @brief Requests entering the @ref RADIO_STATE_SLEEP state from the SWI priority.
*
* @param[in] term_lvl Termination level of this request. Selects procedures to abort.
* @param[out] p_result Result of entering the sleep state.
*/
void nrf_802154_swi_sleep(nrf_802154_term_t term_lvl, bool * p_result);
/**
* @brief Requests entering the @ref RADIO_STATE_RX state from the SWI priority.
*
* @param[in] term_lvl Termination level of this request. Selects procedures to abort.
* @param[in] req_orig Module that originates this request.
* @param[in] notify_function Function called to notify the status of the procedure. May be NULL.
* @param[in] notify_abort If abort notification should be triggered automatically.
* @param[out] p_result Result of entering the receive state.
*/
void nrf_802154_swi_receive(nrf_802154_term_t term_lvl,
req_originator_t req_orig,
nrf_802154_notification_func_t notify_function,
bool notify_abort,
bool * p_result);
/**
* @biref Requests entering the @ref RADIO_STATE_TX state from the SWI priority.
*
* @param[in] term_lvl Termination level of this request. Selects procedures to abort.
* @param[in] req_orig Module that originates this request.
* @param[in] p_data Pointer to a buffer that contains PHR and PSDU of the frame to be
* transmitted.
* @param[in] cca If the driver should perform the CCA procedure before transmission.
* @param[in] immediate If true, the driver schedules transmission immediately or never;
* if false, the transmission may be postponed until TX preconditions
* are met.
* @param[in] notify_function Function called to notify the status of this procedure instead of
* the default notification. If NULL, the default notification
* is used.
* @param[out] p_result Result of entering the transmit state.
*/
void nrf_802154_swi_transmit(nrf_802154_term_t term_lvl,
req_originator_t req_orig,
const uint8_t * p_data,
bool cca,
bool immediate,
nrf_802154_notification_func_t notify_function,
bool * p_result);
/**
* @brief Requests entering the @ref RADIO_STATE_ED state from the SWI priority.
*
* @param[in] term_lvl Termination level of this request. Selects procedures to abort.
* @param[in] time_us Requested duration of the energy detection procedure.
* @param[out] p_result Result of entering the energy detection state.
*/
void nrf_802154_swi_energy_detection(nrf_802154_term_t term_lvl,
uint32_t time_us,
bool * p_result);
/**
* @brief Requests entering the @ref RADIO_STATE_CCA state from the SWI priority.
*
* @param[in] term_lvl Termination level of this request. Selects procedures to abort.
* @param[out] p_result Result of entering the CCA state.
*/
void nrf_802154_swi_cca(nrf_802154_term_t term_lvl, bool * p_result);
/**
* @brief Requests entering the @ref RADIO_STATE_CONTINUOUS_CARRIER state from the SWI priority.
*
* @param[in] term_lvl Termination level of this request. Selects procedures to abort.
* @param[out] p_result Result of entering the continuous carrier state.
*/
void nrf_802154_swi_continuous_carrier(nrf_802154_term_t term_lvl, bool * p_result);
/**
* @brief Notifies the core module that the given buffer is not used anymore and can be freed.
*
* @param[in] p_data Pointer to the buffer to be freed.
*/
void nrf_802154_swi_buffer_free(uint8_t * p_data, bool * p_result);
/**
* @brief Notifies the core module that the next higher layer has requested a channel change.
*/
void nrf_802154_swi_channel_update(bool * p_result);
/**
* @brief Notifies the core module that the next higher layer has requested a CCA configuration
* change.
*/
void nrf_802154_swi_cca_cfg_update(bool * p_result);
/**
* @brief Notifies the core module that the next higher layer requested the RSSI measurement.
*/
void nrf_802154_swi_rssi_measure(bool * p_result);
/**
* @brief Gets the last RSSI measurement result from the core module.
*/
void nrf_802154_swi_rssi_measurement_get(int8_t * p_rssi, bool * p_result);
/**
*@}
**/
#ifdef __cplusplus
}
#endif
#endif // NRF_802154_SWI_H__