caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_nwk_transport.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_NWK_TRANSPORT_H
7#define CAFFEINE_SAL_NWK_TRANSPORT_H
8
9#ifdef __cplusplus
10extern "C"
11{
12#endif
13
14/* Includes ---------------------------------------------------------*/
15#include "cfn_sal.h"
16
17/* Defines ----------------------------------------------------------*/
18
19#define CFN_SAL_NWK_TYPE_TRANSPORT CFN_SAL_TYPE('T', 'P', 'T')
20
21/* Types Enums ------------------------------------------------------*/
22
30
31/* Types Structs ----------------------------------------------------*/
32
33typedef struct
34{
37 uint32_t baudrate; /* Optional, for serial-based transports */
38 void *custom;
40
41typedef struct cfn_sal_nwk_transport_s cfn_sal_nwk_transport_t;
43
45 cfn_sal_nwk_transport_t *driver, uint32_t event, uint32_t error, size_t data_len, void *user_arg);
46
51{
52 cfn_hal_api_base_t base;
53
54 /* Synchronous Operations (Blocking) */
55 cfn_hal_error_code_t (*send)(cfn_sal_nwk_transport_t *driver, const uint8_t *data, size_t len, uint32_t timeout);
56 cfn_hal_error_code_t (*receive)(
57 cfn_sal_nwk_transport_t *driver, uint8_t *buffer, size_t max_len, size_t *received_len, uint32_t timeout);
58
59 /* Asynchronous Operations (Non-blocking) */
60 cfn_hal_error_code_t (*send_async)(cfn_sal_nwk_transport_t *driver, const uint8_t *data, size_t len);
61 cfn_hal_error_code_t (*receive_async)(cfn_sal_nwk_transport_t *driver, uint8_t *buffer, size_t max_len);
62
63 /* Maintenance */
64 cfn_hal_error_code_t (*flush)(cfn_sal_nwk_transport_t *driver);
65 cfn_hal_error_code_t (*flush_rx)(cfn_sal_nwk_transport_t *driver);
66 cfn_hal_error_code_t (*flush_tx)(cfn_sal_nwk_transport_t *driver);
67
68 /* Connection Oriented (Server) */
69 cfn_hal_error_code_t (*listen)(cfn_sal_nwk_transport_t *driver, uint16_t port);
70 cfn_hal_error_code_t (*accept)(cfn_sal_nwk_transport_t *driver, cfn_sal_nwk_transport_t **client_driver_out);
71
72 /* Status */
73 cfn_hal_error_code_t (*get_bytes_available)(cfn_sal_nwk_transport_t *driver, size_t *count_out);
74};
75
77
83
84/* Functions inline ------------------------------------------------- */
85
87 uint32_t peripheral_id,
88 void *dependency,
90 const cfn_sal_phy_t *phy,
93 void *user_arg)
94{
95 CFN_HAL_POPULATE_DRIVER(
96 driver, CFN_SAL_NWK_TYPE_TRANSPORT, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
97}
98
100 const cfn_sal_nwk_transport_config_t *config,
101 const cfn_sal_phy_t *phy,
102 void *dependency,
104 void *user_arg);
106
107CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_init(cfn_sal_nwk_transport_t *driver)
108{
109 if (!driver)
110 {
111 return CFN_HAL_ERROR_BAD_PARAM;
112 }
113 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
114 return cfn_hal_base_init(&driver->base, CFN_SAL_NWK_TYPE_TRANSPORT);
115}
116
117CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_deinit(cfn_sal_nwk_transport_t *driver)
118{
119 if (!driver)
120 {
121 return CFN_HAL_ERROR_BAD_PARAM;
122 }
123 return cfn_hal_base_deinit(&driver->base, CFN_SAL_NWK_TYPE_TRANSPORT);
124}
125
126CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_config_set(cfn_sal_nwk_transport_t *driver,
127 const cfn_sal_nwk_transport_config_t *config)
128{
129 if (!driver)
130 {
131 return CFN_HAL_ERROR_BAD_PARAM;
132 }
133 driver->config = config;
134 return cfn_hal_base_config_set(&driver->base, CFN_SAL_NWK_TYPE_TRANSPORT, (const void *) config);
135}
136
137CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_config_get(cfn_sal_nwk_transport_t *driver,
139{
140 if (!driver || !config || !driver->config)
141 {
142 return CFN_HAL_ERROR_BAD_PARAM;
143 }
144 *config = *(driver->config);
145 return CFN_HAL_ERROR_OK;
146}
147
148CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_callback_register(cfn_sal_nwk_transport_t *driver,
150 void *user_arg)
151{
152 if (!driver)
153 {
154 return CFN_HAL_ERROR_BAD_PARAM;
155 }
156 driver->cb = callback;
157 driver->cb_user_arg = user_arg;
158 return cfn_hal_base_callback_register(
159 &driver->base, CFN_SAL_NWK_TYPE_TRANSPORT, (cfn_hal_callback_t) callback, user_arg);
160}
161
162CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_power_state_set(cfn_sal_nwk_transport_t *driver,
163 cfn_hal_power_state_t state)
164{
165 if (!driver)
166 {
167 return CFN_HAL_ERROR_BAD_PARAM;
168 }
169 return cfn_hal_power_state_set(&driver->base, CFN_SAL_NWK_TYPE_TRANSPORT, state);
170}
171
172CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_event_enable(cfn_sal_nwk_transport_t *driver,
173 uint32_t event_mask)
174{
175 if (!driver)
176 {
177 return CFN_HAL_ERROR_BAD_PARAM;
178 }
179 return cfn_hal_base_event_enable(&driver->base, CFN_SAL_NWK_TYPE_TRANSPORT, event_mask);
180}
181
182CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_event_disable(cfn_sal_nwk_transport_t *driver,
183 uint32_t event_mask)
184{
185 if (!driver)
186 {
187 return CFN_HAL_ERROR_BAD_PARAM;
188 }
189 return cfn_hal_base_event_disable(&driver->base, CFN_SAL_NWK_TYPE_TRANSPORT, event_mask);
190}
191
192CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_event_get(cfn_sal_nwk_transport_t *driver,
193 uint32_t *event_mask)
194{
195 if (!driver)
196 {
197 return CFN_HAL_ERROR_BAD_PARAM;
198 }
199 return cfn_hal_base_event_get(&driver->base, CFN_SAL_NWK_TYPE_TRANSPORT, event_mask);
200}
201
202CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_error_enable(cfn_sal_nwk_transport_t *driver,
203 uint32_t error_mask)
204{
205 if (!driver)
206 {
207 return CFN_HAL_ERROR_BAD_PARAM;
208 }
209 return cfn_hal_base_error_enable(&driver->base, CFN_SAL_NWK_TYPE_TRANSPORT, error_mask);
210}
211
212CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_error_disable(cfn_sal_nwk_transport_t *driver,
213 uint32_t error_mask)
214{
215 if (!driver)
216 {
217 return CFN_HAL_ERROR_BAD_PARAM;
218 }
219 return cfn_hal_base_error_disable(&driver->base, CFN_SAL_NWK_TYPE_TRANSPORT, error_mask);
220}
221
222CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_error_get(cfn_sal_nwk_transport_t *driver,
223 uint32_t *error_mask)
224{
225 if (!driver)
226 {
227 return CFN_HAL_ERROR_BAD_PARAM;
228 }
229 return cfn_hal_base_error_get(&driver->base, CFN_SAL_NWK_TYPE_TRANSPORT, error_mask);
230}
231
232/* Service Specific Functions --------------------------------------- */
233
234CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_send(cfn_sal_nwk_transport_t *driver,
235 const uint8_t *data,
236 size_t len,
237 uint32_t timeout)
238{
239 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
240 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_NWK_TYPE_TRANSPORT, send, driver, error, data, len, timeout);
241 return error;
242}
243
244CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_receive(
245 cfn_sal_nwk_transport_t *driver, uint8_t *buffer, size_t max_len, size_t *received_len, uint32_t timeout)
246{
247 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
248 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(
249 CFN_SAL_NWK_TYPE_TRANSPORT, receive, driver, error, buffer, max_len, received_len, timeout);
250 return error;
251}
252
253CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_send_async(cfn_sal_nwk_transport_t *driver,
254 const uint8_t *data,
255 size_t len)
256{
257 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
258 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_NWK_TYPE_TRANSPORT, send_async, driver, error, data, len);
259 return error;
260}
261
262CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_receive_async(cfn_sal_nwk_transport_t *driver,
263 uint8_t *buffer,
264 size_t max_len)
265{
266 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
267 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_NWK_TYPE_TRANSPORT, receive_async, driver, error, buffer, max_len);
268 return error;
269}
270
271CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_flush(cfn_sal_nwk_transport_t *driver)
272{
273 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
274 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_NWK_TYPE_TRANSPORT, flush, driver, error);
275 return error;
276}
277
278CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_flush_rx(cfn_sal_nwk_transport_t *driver)
279{
280 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
281 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_NWK_TYPE_TRANSPORT, flush_rx, driver, error);
282 return error;
283}
284
285CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_flush_tx(cfn_sal_nwk_transport_t *driver)
286{
287 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
288 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_NWK_TYPE_TRANSPORT, flush_tx, driver, error);
289 return error;
290}
291
292CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_listen(cfn_sal_nwk_transport_t *driver, uint16_t port)
293{
294 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
295 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_NWK_TYPE_TRANSPORT, listen, driver, error, port);
296 return error;
297}
298
299CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_accept(cfn_sal_nwk_transport_t *driver,
300 cfn_sal_nwk_transport_t **client_driver_out)
301{
302 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
303 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_NWK_TYPE_TRANSPORT, accept, driver, error, client_driver_out);
304 return error;
305}
306
307CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_get_bytes_available(cfn_sal_nwk_transport_t *driver,
308 size_t *count_out)
309{
310 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
311 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_NWK_TYPE_TRANSPORT, get_bytes_available, driver, error, count_out);
312 return error;
313}
314
315#ifdef __cplusplus
316}
317#endif
318
319#endif /* CAFFEINE_SAL_NWK_TRANSPORT_H */
Core definitions and macros for Caffeine SAL.
#define CFN_SAL_CREATE_DRIVER_TYPE(prefix, config_type, api_type, phy_type, cb_type)
Definition cfn_sal.h:38
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_error_disable(cfn_sal_nwk_transport_t *driver, uint32_t error_mask)
Definition cfn_sal_nwk_transport.h:212
CFN_HAL_VMT_CHECK(struct cfn_sal_nwk_transport_api_s)
cfn_hal_error_code_t cfn_sal_nwk_transport_construct(cfn_sal_nwk_transport_t *driver, const cfn_sal_nwk_transport_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_nwk_transport_callback_t callback, void *user_arg)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_config_set(cfn_sal_nwk_transport_t *driver, const cfn_sal_nwk_transport_config_t *config)
Definition cfn_sal_nwk_transport.h:126
#define CFN_SAL_NWK_TYPE_TRANSPORT
Definition cfn_sal_nwk_transport.h:19
void(* cfn_sal_nwk_transport_callback_t)(cfn_sal_nwk_transport_t *driver, uint32_t event, uint32_t error, size_t data_len, void *user_arg)
Definition cfn_sal_nwk_transport.h:44
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_event_enable(cfn_sal_nwk_transport_t *driver, uint32_t event_mask)
Definition cfn_sal_nwk_transport.h:172
CFN_HAL_INLINE void cfn_sal_nwk_transport_populate(cfn_sal_nwk_transport_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_nwk_transport_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_nwk_transport_config_t *config, cfn_sal_nwk_transport_callback_t callback, void *user_arg)
Definition cfn_sal_nwk_transport.h:86
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_config_get(cfn_sal_nwk_transport_t *driver, cfn_sal_nwk_transport_config_t *config)
Definition cfn_sal_nwk_transport.h:137
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_flush_rx(cfn_sal_nwk_transport_t *driver)
Definition cfn_sal_nwk_transport.h:278
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_error_get(cfn_sal_nwk_transport_t *driver, uint32_t *error_mask)
Definition cfn_sal_nwk_transport.h:222
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_callback_register(cfn_sal_nwk_transport_t *driver, cfn_sal_nwk_transport_callback_t callback, void *user_arg)
Definition cfn_sal_nwk_transport.h:148
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_send_async(cfn_sal_nwk_transport_t *driver, const uint8_t *data, size_t len)
Definition cfn_sal_nwk_transport.h:253
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_accept(cfn_sal_nwk_transport_t *driver, cfn_sal_nwk_transport_t **client_driver_out)
Definition cfn_sal_nwk_transport.h:299
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_deinit(cfn_sal_nwk_transport_t *driver)
Definition cfn_sal_nwk_transport.h:117
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_send(cfn_sal_nwk_transport_t *driver, const uint8_t *data, size_t len, uint32_t timeout)
Definition cfn_sal_nwk_transport.h:234
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_receive(cfn_sal_nwk_transport_t *driver, uint8_t *buffer, size_t max_len, size_t *received_len, uint32_t timeout)
Definition cfn_sal_nwk_transport.h:244
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_event_get(cfn_sal_nwk_transport_t *driver, uint32_t *event_mask)
Definition cfn_sal_nwk_transport.h:192
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_receive_async(cfn_sal_nwk_transport_t *driver, uint8_t *buffer, size_t max_len)
Definition cfn_sal_nwk_transport.h:262
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_power_state_set(cfn_sal_nwk_transport_t *driver, cfn_hal_power_state_t state)
Definition cfn_sal_nwk_transport.h:162
cfn_hal_error_code_t cfn_sal_nwk_transport_destruct(cfn_sal_nwk_transport_t *driver)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_get_bytes_available(cfn_sal_nwk_transport_t *driver, size_t *count_out)
Definition cfn_sal_nwk_transport.h:307
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_init(cfn_sal_nwk_transport_t *driver)
Definition cfn_sal_nwk_transport.h:107
cfn_sal_nwk_transport_event_t
Definition cfn_sal_nwk_transport.h:24
@ CFN_SAL_NWK_TRANSPORT_EVENT_NONE
Definition cfn_sal_nwk_transport.h:25
@ CFN_SAL_NWK_TRANSPORT_EVENT_BUFFER_OVERFLOW
Definition cfn_sal_nwk_transport.h:28
@ CFN_SAL_NWK_TRANSPORT_EVENT_RX_READY
Definition cfn_sal_nwk_transport.h:27
@ CFN_SAL_NWK_TRANSPORT_EVENT_TX_COMPLETE
Definition cfn_sal_nwk_transport.h:26
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_listen(cfn_sal_nwk_transport_t *driver, uint16_t port)
Definition cfn_sal_nwk_transport.h:292
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_flush(cfn_sal_nwk_transport_t *driver)
Definition cfn_sal_nwk_transport.h:271
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_error_enable(cfn_sal_nwk_transport_t *driver, uint32_t error_mask)
Definition cfn_sal_nwk_transport.h:202
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_flush_tx(cfn_sal_nwk_transport_t *driver)
Definition cfn_sal_nwk_transport.h:285
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_nwk_transport_event_disable(cfn_sal_nwk_transport_t *driver, uint32_t event_mask)
Definition cfn_sal_nwk_transport.h:182
struct cfn_sal_nwk_transport_s cfn_sal_nwk_transport_t
Definition cfn_sal_nwk_transport.h:41
Transport Virtual Method Table (VMT).
Definition cfn_sal_nwk_transport.h:51
cfn_hal_error_code_t(* accept)(cfn_sal_nwk_transport_t *driver, cfn_sal_nwk_transport_t **client_driver_out)
Definition cfn_sal_nwk_transport.h:70
cfn_hal_api_base_t base
Definition cfn_sal_nwk_transport.h:52
cfn_hal_error_code_t(* get_bytes_available)(cfn_sal_nwk_transport_t *driver, size_t *count_out)
Definition cfn_sal_nwk_transport.h:73
cfn_hal_error_code_t(* receive_async)(cfn_sal_nwk_transport_t *driver, uint8_t *buffer, size_t max_len)
Definition cfn_sal_nwk_transport.h:61
cfn_hal_error_code_t(* flush_tx)(cfn_sal_nwk_transport_t *driver)
Definition cfn_sal_nwk_transport.h:66
cfn_hal_error_code_t(* listen)(cfn_sal_nwk_transport_t *driver, uint16_t port)
Definition cfn_sal_nwk_transport.h:69
cfn_hal_error_code_t(* flush_rx)(cfn_sal_nwk_transport_t *driver)
Definition cfn_sal_nwk_transport.h:65
cfn_hal_error_code_t(* receive)(cfn_sal_nwk_transport_t *driver, uint8_t *buffer, size_t max_len, size_t *received_len, uint32_t timeout)
Definition cfn_sal_nwk_transport.h:56
cfn_hal_error_code_t(* send)(cfn_sal_nwk_transport_t *driver, const uint8_t *data, size_t len, uint32_t timeout)
Definition cfn_sal_nwk_transport.h:55
cfn_hal_error_code_t(* send_async)(cfn_sal_nwk_transport_t *driver, const uint8_t *data, size_t len)
Definition cfn_sal_nwk_transport.h:60
cfn_hal_error_code_t(* flush)(cfn_sal_nwk_transport_t *driver)
Definition cfn_sal_nwk_transport.h:64
Definition cfn_sal_nwk_transport.h:34
void * custom
Definition cfn_sal_nwk_transport.h:38
size_t rx_buffer_size
Definition cfn_sal_nwk_transport.h:36
size_t tx_buffer_size
Definition cfn_sal_nwk_transport.h:35
uint32_t baudrate
Definition cfn_sal_nwk_transport.h:37
Generic physical mapping for services.
Definition cfn_sal_types.h:26