EFM32 Gecko Software Documentation  efm32g-doc-4.2.1
ezradio_plugin_manager.h
Go to the documentation of this file.
1 /***************************************************************************/
34 #ifndef EZRADIO_PLUGIN_MANAGER_H_
35 #define EZRADIO_PLUGIN_MANAGER_H_
36 
37 #include "ecode.h"
38 
39 // Include the generated EzRadio application configuration file.
40 #include "app-config.h"
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
47 
48 #define RADIO_CHIP_FAMILY_EZRADIO 1u
49 #define RADIO_CHIP_FAMILY_EZRADIOPRO 2u
50 
51 #define FALSE 0u
52 #define TRUE 1u
53 
55 
56 /* Question: How to use my own radio configuration header file?
57  *
58  * Answer (Simplicity Studio): Simply open the bundled radio configurator
59  * located in the RadioConfig source group. Whenever a new header file
60  * is generated the project will reconfigure itself to use the generated
61  * instead of the default.
62  * If one is to go back to use the default radio header file, the
63  * RADIO_USE_GENERATED_CONFIGURATION macro should be removed (or set to 0)
64  * under the 'Path and Symbols' menu in the 'Properties' of the project.
65  *
66  * Answer (Other development tool: Add the following definition to your project
67  * in order to use your own generated radio configuration header file, instead
68  * of the kit default one.
69  * #define RADIO_USE_GENERATED_CONFIGURATION
70  */
71 
72 #if ( (defined RADIO_USE_GENERATED_CONFIGURATION) && (RADIO_USE_GENERATED_CONFIGURATION == 1) )
73 /* Include the generated radio configuration */
74 #include "radio-config-wds-gen.h"
75 #else
76 /* Include the default radio configuration for the board */
77 #if ( (defined SL_WSTK6200A) || (defined SL_WSTK6220A) )
78 #include "radio-config-wds-gen_R60-868MHz-13dBm.h"
79 #elif (defined SL_WSTK6240A)
80 #include "radio-config-wds-gen_R61-868MHz-16dBm.h"
81 #elif ( (defined SL_WSTK6201A) || (defined SL_WSTK6221A) || (defined SL_WSTK6241A) )
82 #include "radio-config-wds-gen_R55-434MHz-10dBm.h"
83 #elif ( (defined SL_WSTK6202A) || (defined SL_WSTK6222A) || (defined SL_WSTK6242A) )
84 #include "radio-config-wds-gen_R63-915MHz-20dBm.h"
85 #elif ( (defined SL_WSTK6223A) || (defined SL_WSTK6243A) )
86 #include "radio-config-wds-gen_R63-490MHz-20dBm.h"
87 #elif ( (defined SL_WSTK6224A) || (defined SL_WSTK6244A) )
88 #include "radio-config-wds-gen_R63-169MHz-20dBm.h"
89 #else
90 #error No radio configuration is defined! Create your own radio configuration or define your kit properly!
91 #endif
92 #endif
93 
94 /***************************************************************************/
99 /***************************************************************************/
107 /***************************************************************************/
114 /***************************************************************************/
121 // Error code definitions of EZRadioDrv
122 #define ECODE_EMDRV_EZRADIODRV_OK ( ECODE_OK )
123 #define ECODE_EMDRV_EZRADIODRV_ILLEGAL_HANDLE ( ECODE_EMDRV_EZRADIODRV_BASE | 0x00000001 )
124 
125 #define ECODE_EMDRV_EZRADIODRV_TRANSMIT_PLUGIN_BASE ( ECODE_EMDRV_EZRADIODRV_BASE | 0x00000100 )
126 #define ECODE_EMDRV_EZRADIODRV_RECEIVE_PLUGIN_BASE ( ECODE_EMDRV_EZRADIODRV_BASE | 0x00000200 )
127 #define ECODE_EMDRV_EZRADIODRV_CRC_ERROR_PLUGIN_BASE ( ECODE_EMDRV_EZRADIODRV_BASE | 0x00000300 )
128 #define ECODE_EMDRV_EZRADIODRV_AUTO_ACK_PLUGIN_BASE ( ECODE_EMDRV_EZRADIODRV_BASE | 0x00000400 )
129 #define ECODE_EMDRV_EZRADIODRV_UNMOD_CARRIER_PLUGIN_BASE ( ECODE_EMDRV_EZRADIODRV_BASE | 0x00000500 )
130 #define ECODE_EMDRV_EZRADIODRV_PN9_PLUGIN_BASE ( ECODE_EMDRV_EZRADIODRV_BASE | 0x00000600 )
131 #define ECODE_EMDRV_EZRADIODRV_DIRECT_TRANSMIT_PLUGIN_BASE ( ECODE_EMDRV_EZRADIODRV_BASE | 0x00000700 )
132 #define ECODE_EMDRV_EZRADIODRV_DIRECT_RECEIVE_PLUGIN_BASE ( ECODE_EMDRV_EZRADIODRV_BASE | 0x00000800 )
133 
134 
135 #if (!defined RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY)
136 #error RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY is not defined!
137 #elif ( !(RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIO) && !(RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIOPRO) )
138 #error RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY is not defined properly!
139 #endif
140 
141 
142 #if ( ( defined EZRADIO_PLUGIN_TRANSMIT ) || ( defined EZRADIO_PLUGIN_RECEIVE ) )
143 // Radio packet field length array definition for various radio chip families
144 #if (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIO)
145 #define RADIO_CONFIG_DATA_FIELD_LENGTH \
146  { \
147  RADIO_CONFIG_DATA_FIELD1_LENGTH, \
148  0u, \
149  0u, \
150  0u, \
151  0u, \
152  }
153 #elif (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIOPRO)
154 #define RADIO_CONFIG_DATA_FIELD_LENGTH \
155  { \
156  RADIO_CONFIG_DATA_FIELD1_LENGTH, \
157  RADIO_CONFIG_DATA_FIELD2_LENGTH, \
158  RADIO_CONFIG_DATA_FIELD3_LENGTH, \
159  RADIO_CONFIG_DATA_FIELD4_LENGTH, \
160  RADIO_CONFIG_DATA_FIELD5_LENGTH \
161  }
162 #endif
163 
164 // Max radio packet length definition for various radio chip families
165 #if (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIO)
166 #define RADIO_CONFIG_DATA_MAX_PACKET_LENGTH RADIO_CONFIG_DATA_FIELD1_LENGTH
167 #elif (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIOPRO)
168 #define RADIO_CONFIG_DATA_MAX_PACKET_LENGTH \
169  RADIO_CONFIG_DATA_FIELD1_LENGTH + \
170  RADIO_CONFIG_DATA_FIELD2_LENGTH + \
171  RADIO_CONFIG_DATA_FIELD3_LENGTH + \
172  RADIO_CONFIG_DATA_FIELD4_LENGTH + \
173  RADIO_CONFIG_DATA_FIELD5_LENGTH
174 #endif
175 #endif //#if ( ( defined EZRADIO_PLUGIN_TRANSMIT ) || ( defined EZRADIO_PLUGIN_RECEIVE ) )
176 
177 // Various build time error messages, to make sure, that all necessary definitions are defined properly.
178 #if ( (defined RADIO_CONFIGURATION_DATA_PKT_VARIABLE_PACKET_LENGTH_ENABLE ) && (RADIO_CONFIGURATION_DATA_PKT_VARIABLE_PACKET_LENGTH_ENABLE > 0) )
179 
180 #if (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIO)
181 #if ( !(defined RADIO_CONFIGURATION_DATA_PKT_VARIABLE_LENGTH_FIELD ) || !(RADIO_CONFIGURATION_DATA_PKT_VARIABLE_LENGTH_FIELD == 1))
182 #error RADIO_CONFIGURATION_DATA_PKT_VARIABLE_LENGTH_FIELD is not defined properly!
183 #endif
184 #elif (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIOPRO)
185 #if ( !(defined RADIO_CONFIGURATION_DATA_PKT_VARIABLE_LENGTH_FIELD ) || (RADIO_CONFIGURATION_DATA_PKT_VARIABLE_LENGTH_FIELD < 2) || (RADIO_CONFIGURATION_DATA_PKT_VARIABLE_LENGTH_FIELD > 5) )
186 #error RADIO_CONFIGURATION_DATA_PKT_VARIABLE_LENGTH_FIELD is not defined properly!
187 #endif
188 #endif
189 
190 #if ( !(defined RADIO_CONFIGURATION_DATA_PH_FIELD_SPLIT) || (RADIO_CONFIGURATION_DATA_PH_FIELD_SPLIT == FALSE) )
191 #error EzRadio plugin manager can only support variable packet configuration for split packets curently!
192 #endif
193 
194 #if ( (defined RADIO_CONFIGURATION_DATA_PKT_LEN_ADD_TO_RX_FIFO) && (RADIO_CONFIGURATION_DATA_PKT_LEN_ADD_TO_RX_FIFO > 0) )
195 
196 #if (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIO)
197 #if ( !(defined RADIO_CONFIGURATION_DATA_PKT_FIELD_CONTAINING_LENGTH ) || !(RADIO_CONFIGURATION_DATA_PKT_FIELD_CONTAINING_LENGTH == 1) )
198 #error RADIO_CONFIGURATION_DATA_PKT_FIELD_CONTAINING_LENGTH is not defined properly!
199 #endif
200 #elif (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIOPRO)
201 #if ( !(defined RADIO_CONFIGURATION_DATA_PKT_FIELD_CONTAINING_LENGTH ) || (RADIO_CONFIGURATION_DATA_PKT_FIELD_CONTAINING_LENGTH < 1) || (RADIO_CONFIGURATION_DATA_PKT_FIELD_CONTAINING_LENGTH > 4) )
202 #error RADIO_CONFIGURATION_DATA_PKT_FIELD_CONTAINING_LENGTH is not defined properly!
203 #endif
204 #endif
205 
206 #if (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIO)
207 #if ( !(defined RADIO_CONFIGURATION_DATA_PKT_LENGTH_SIZE ) || !(RADIO_CONFIGURATION_DATA_PKT_LENGTH_SIZE == 1) )
208 #error RADIO_CONFIGURATION_DATA_PKT_LENGTH_SIZE is not defined properly!
209 #endif
210 #elif (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIOPRO)
211 #if ( !(defined RADIO_CONFIGURATION_DATA_PKT_LENGTH_SIZE ) || (RADIO_CONFIGURATION_DATA_PKT_LENGTH_SIZE < 1) || (RADIO_CONFIGURATION_DATA_PKT_LENGTH_SIZE > 2) )
212 #error RADIO_CONFIGURATION_DATA_PKT_LENGTH_SIZE is not defined properly!
213 #endif
214 #endif
215 
216 #if (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIO)
217 #define EZRADIO_LENGTH_WORD_START 0u
218 
219 #elif (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIOPRO)
220 #if (RADIO_CONFIGURATION_DATA_PKT_FIELD_CONTAINING_LENGTH == 1)
221 #define EZRADIO_LENGTH_WORD_START 0u
222 
223 #elif (RADIO_CONFIGURATION_DATA_PKT_FIELD_CONTAINING_LENGTH == 2)
224 #define EZRADIO_LENGTH_WORD_START RADIO_CONFIG_DATA_FIELD1_LENGTH
225 
226 #elif (RADIO_CONFIGURATION_DATA_PKT_FIELD_CONTAINING_LENGTH == 3)
227 #define EZRADIO_LENGTH_WORD_START (RADIO_CONFIG_DATA_FIELD1_LENGTH + RADIO_CONFIG_DATA_FIELD2_LENGTH)
228 
229 #elif (RADIO_CONFIGURATION_DATA_PKT_FIELD_CONTAINING_LENGTH == 4)
230 #define EZRADIO_LENGTH_WORD_START (RADIO_CONFIG_DATA_FIELD1_LENGTH + RADIO_CONFIG_DATA_FIELD2_LENGTH + RADIO_CONFIG_DATA_FIELD3_LENGTH)
231 
232 #endif // RADIO_CONFIGURATION_DATA_PKT_FIELD_CONTAINING_LENGTH
233 #endif //#elif (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIOPRO)
234 
235 #else //#if ( (defined RADIO_CONFIGURATION_DATA_PKT_LEN_ADD_TO_RX_FIFO) && (RADIO_CONFIGURATION_DATA_PKT_LEN_ADD_TO_RX_FIFO > 0) )
236 #undef RADIO_CONFIGURATION_DATA_PKT_LENGTH_SIZE
237 #define RADIO_CONFIGURATION_DATA_PKT_LENGTH_SIZE 0u
238 #endif //#if ( (defined RADIO_CONFIGURATION_DATA_PKT_LEN_ADD_TO_RX_FIFO) && (RADIO_CONFIGURATION_DATA_PKT_LEN_ADD_TO_RX_FIFO > 0) )
239 
240 #if (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIO)
241 #define EZRADIO_VARIABLE_DATA_START RADIO_CONFIGURATION_DATA_PKT_LENGTH_SIZE
242 
243 #elif (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIOPRO)
244 #if (RADIO_CONFIGURATION_DATA_PKT_VARIABLE_LENGTH_FIELD == 2)
245 #define EZRADIO_VARIABLE_DATA_START RADIO_CONFIG_DATA_FIELD1_LENGTH
246 
247 #elif (RADIO_CONFIGURATION_DATA_PKT_VARIABLE_LENGTH_FIELD == 3)
248 #define EZRADIO_VARIABLE_DATA_START (RADIO_CONFIG_DATA_FIELD1_LENGTH + RADIO_CONFIG_DATA_FIELD2_LENGTH)
249 
250 #elif (RADIO_CONFIGURATION_DATA_PKT_VARIABLE_LENGTH_FIELD == 4)
251 #define EZRADIO_VARIABLE_DATA_START (RADIO_CONFIG_DATA_FIELD1_LENGTH + RADIO_CONFIG_DATA_FIELD2_LENGTH + RADIO_CONFIG_DATA_FIELD3_LENGTH)
252 
253 #elif (RADIO_CONFIGURATION_DATA_PKT_VARIABLE_LENGTH_FIELD == 5)
254 #define EZRADIO_VARIABLE_DATA_START (RADIO_CONFIG_DATA_FIELD1_LENGTH + RADIO_CONFIG_DATA_FIELD2_LENGTH + RADIO_CONFIG_DATA_FIELD3_LENGTH + RADIO_CONFIG_DATA_FIELD4_LENGTH)
255 
256 #endif // RADIO_CONFIGURATION_DATA_PKT_VARIABLE_LENGTH_FIELD
257 #endif //#elif (RADIO_CONFIGURATION_DATA_RADIO_CHIP_FAMILY == RADIO_CHIP_FAMILY_EZRADIOPRO)
258 
259 #else //#if ( (defined RADIO_CONFIGURATION_DATA_PKT_VARIABLE_PACKET_LENGTH_ENABLE ) && (RADIO_CONFIGURATION_DATA_PKT_VARIABLE_PACKET_LENGTH_ENABLE > 0) )
260 /* Note: Neither EZRADIO_LENGTH_WORD_START or EZRADIO_VARIABLE_DATA_START is defined, so application knows
261  * that incoming data starts at the really beginning of the packet. */
262 #endif //#if ( (defined RADIO_CONFIGURATION_DATA_PKT_VARIABLE_PACKET_LENGTH_ENABLE ) && (RADIO_CONFIGURATION_DATA_PKT_VARIABLE_PACKET_LENGTH_ENABLE > 0) )
263 
265 struct EZRADIODRV_HandleData;
266 
269 
272 
274 typedef ezradio_cmd_reply_t * EZRADIODRV_ReplyHandle_t;
275 
276 /***************************************************************************/
285 typedef void (*EZRADIODRV_Callback_t)( EZRADIODRV_Handle_t handle,
286  Ecode_t status );
287 
288 // Inclusion of all the underlying EzRadio plug-in headers.
289 #include "ezradio_transmit_plugin.h"
290 #include "ezradio_receive_plugin.h"
291 #include "ezradio_crcerror_plugin.h"
292 #include "ezradio_auto_ack_plugin.h"
294 #include "ezradio_pn9_plugin.h"
297 
298 
307 {
308 
309 #if ( defined EZRADIO_PLUGIN_TRANSMIT )
311 #endif
312 
313 #if ( defined EZRADIO_PLUGIN_RECEIVE )
315 #endif
316 
317 #if ( defined EZRADIO_PLUGIN_CRC_ERROR )
319 #endif
320 
321 #if ( ( defined EZRADIO_PLUGIN_AUTO_ACK ) && ( defined EZRADIO_PLUGIN_TRANSMIT ) && ( defined EZRADIO_PLUGIN_RECEIVE ) )
323 #endif
324 
325 #if ( defined EZRADIO_PLUGIN_UNMOD_CARRIER )
327 #endif
328 
329 #if ( defined EZRADIO_PLUGIN_PN9 )
331 #endif
332 
333 #if ( defined EZRADIO_PLUGIN_DIRECT_TRANSMIT )
335 #endif
336 
337 #if ( defined EZRADIO_PLUGIN_DIRECT_RECEIVE )
339 #endif
340 
341 };
342 
343 
345 #define EZRADIODRV_INIT_DEFAULT \
346 { \
347  EZRADIODRV_TRANSMIT_PLUGIN_INIT_DEFAULT /* Tx plugin init */ \
348  EZRADIODRV_RECEIVE_PLUGIN_INIT_DEFAULT /* Rx plugin init */ \
349  EZRADIODRV_CRC_ERROR_PLUGIN_INIT_DEFAULT /* CRC error plugin init */ \
350  EZRADIODRV_AUTO_ACK_PLUGIN_INIT_DEFAULT /* Auto-ack plugin init */ \
351  EZRADIODRV_UNMOD_CARRIER_PLUGIN_INIT_DEFAULT /* CW plugin init */ \
352  EZRADIODRV_PN9_PLUGIN_INIT_DEFAULT /* PN9 plugin init */ \
353  EZRADIODRV_DIRECT_TRANSMIT_PLUGIN_INIT_DEFAULT /* Direct Tx plugin init */ \
354  EZRADIODRV_DIRECT_RECEIVE_PLUGIN_INIT_DEFAULT /* Direct Rx plugin init */ \
355 }
356 
357 void ezradioInit( EZRADIODRV_Handle_t handle );
358 Ecode_t ezradioPluginManager( EZRADIODRV_Handle_t handle );
359 void ezradioResetTRxFifo(void);
360 
366 #ifdef __cplusplus
367 }
368 #endif
369 
370 #endif /* EZRADIO_PLUGIN_MANAGER_H_ */
void ezradioResetTRxFifo(void)
Resets both the TX and RX FIFOs.
void ezradioInit(EZRADIODRV_Handle_t handle)
Radio Initialization.
EZRADIODRV_PacketTxHandle_t packetTx
Packet transmission plug-in handler.
EzRadio transmit plug-in managed by the plug-in manager if enabled.
EzRadio auto acknowledge plug-in managed by the plug-in manager if enabled.
EZRADIODRV_PacketCrcErrorHandle_t packetCrcError
Packet reception with CRC error plug-in handler.
EZRADIODRV_UnmodCarrierHandle_t unmodCarrier
Unmodulated carrier plug-in handler.
Energy Aware drivers error code definitions.
EzRadio direct transmission plug-in managed by the plug-in manager if enabled.
EzRadio transmit plug-in managed by the plug-in manager if enabled.
EzRadio PN9 plug-in instance initialization and handler structure.
EZRADIODRV_AutoAckHandle_t autoAck
Auto-acknowledge plug-in handler.
EZRADIODRV_DirectRxHandle_t directRx
Direct reception plug-in handler.
EZRADIODRV_Pn9Handle_t pn9
PN9 plug-in handler.
EZRADIODRV_HandleData_t * EZRADIODRV_Handle_t
EZRadio driver instance handle.
EzRadio PN9 plug-in managed by the plug-in manager if enabled.
EzRadio transmit plug-in instance initialization and handler structure.
EzRadio CRC error packet receive plug-in instance initialization and handler structure.
void(* EZRADIODRV_Callback_t)(EZRADIODRV_Handle_t handle, Ecode_t status)
EZRADIODRV feature callback function interface.
EZRADIODRV_DirectTxHandle_t directTx
Direct transmission plug-in handler.
EZRADIODRV_PacketRxHandle_t packetRx
Packet reception plug-in handler.
EzRadio auto acknowledge plug-in instance initialization and handler structure.
EzRadio receive plug-in instance initialization and handler structure.
EzRadio direct rx plug-in instance initialization and handler structure.
EzRadio unmodulated carrier plug-in instance initialization and handler structure.
EzRadio direct reception plug-in managed by the plug-in manager if enabled.
uint32_t Ecode_t
Typedef for API function errorcode return values.
Definition: ecode.h:31
EzRadio direct tx plug-in instance initialization and handler structure.
ezradio_cmd_reply_t * EZRADIODRV_ReplyHandle_t
EZradio reply union handle.
EzRadio unmodulated carrier plug-in managed by the plug-in manager if enabled.
EzRadio CRC error plug-in managed by the plug-in manager if enabled.
Ecode_t ezradioPluginManager(EZRADIODRV_Handle_t handle)
EzRadio plugin manager state machine handler. This function should be called in the application in an...