caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_utl_at_parser.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_UTL_AT_PARSER_H
7#define CAFFEINE_SAL_UTL_AT_PARSER_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_UTL_TYPE_AT_PARSER CFN_SAL_TYPE('A', 'T', 'P')
20
21/* Types Enums ------------------------------------------------------*/
22
28
29/* Types Structs ----------------------------------------------------*/
30
31typedef struct
32{
33 const char *line_terminator;
35 void *custom;
37
38typedef struct cfn_sal_utl_at_parser_s cfn_sal_utl_at_parser_t;
40
42 const char *urc_line,
43 void *user_arg);
44
49{
50 cfn_hal_api_base_t base;
51
52 /* Basic Exchange */
53 cfn_hal_error_code_t (*send_command)(cfn_sal_utl_at_parser_t *driver, const char *cmd);
54 cfn_hal_error_code_t (*send_command_wait_resp)(cfn_sal_utl_at_parser_t *driver,
55 const char *cmd,
56 const char *expected_resp,
57 uint32_t timeout_ms);
58 cfn_hal_error_code_t (*send_data)(cfn_sal_utl_at_parser_t *driver, const uint8_t *data, size_t len);
59 cfn_hal_error_code_t (*read_response)(cfn_sal_utl_at_parser_t *driver,
60 char *buffer,
61 size_t max_len,
62 uint32_t timeout_ms);
63
64 /* URC Management */
65 cfn_hal_error_code_t (*register_urc)(cfn_sal_utl_at_parser_t *driver,
66 const char *prefix,
68 void *user_arg);
69 cfn_hal_error_code_t (*register_urc_simple)(cfn_sal_utl_at_parser_t *driver,
70 const char *urc_string,
71 void *callback);
72 cfn_hal_error_code_t (*unregister_urc)(cfn_sal_utl_at_parser_t *driver, const char *prefix);
73
74 /* Flow Control */
75 cfn_hal_error_code_t (*set_echo)(cfn_sal_utl_at_parser_t *driver, bool enabled);
76 cfn_hal_error_code_t (*flush_rx)(cfn_sal_utl_at_parser_t *driver);
77 cfn_hal_error_code_t (*set_timeout)(cfn_sal_utl_at_parser_t *driver, uint32_t timeout_ms);
78};
79
81
83 sal_utl_at_parser, cfn_sal_utl_at_parser_config_t, cfn_sal_utl_at_parser_api_t, cfn_sal_phy_t, cfn_hal_callback_t);
84
85/* Functions inline ------------------------------------------------- */
86
88 uint32_t peripheral_id,
89 void *dependency,
91 const cfn_sal_phy_t *phy,
93 cfn_hal_callback_t callback,
94 void *user_arg)
95{
96 CFN_HAL_POPULATE_DRIVER(
97 driver, CFN_SAL_UTL_TYPE_AT_PARSER, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
98}
99
101 const cfn_sal_utl_at_parser_config_t *config,
102 const cfn_sal_phy_t *phy,
103 void *dependency,
104 cfn_hal_callback_t callback,
105 void *user_arg);
107
108CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_init(cfn_sal_utl_at_parser_t *driver)
109{
110 if (!driver)
111 {
112 return CFN_HAL_ERROR_BAD_PARAM;
113 }
114 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
115 return cfn_hal_base_init(&driver->base, CFN_SAL_UTL_TYPE_AT_PARSER);
116}
117
118CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_deinit(cfn_sal_utl_at_parser_t *driver)
119{
120 if (!driver)
121 {
122 return CFN_HAL_ERROR_BAD_PARAM;
123 }
124 return cfn_hal_base_deinit(&driver->base, CFN_SAL_UTL_TYPE_AT_PARSER);
125}
126
127CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_config_set(cfn_sal_utl_at_parser_t *driver,
128 const cfn_sal_utl_at_parser_config_t *config)
129{
130 if (!driver)
131 {
132 return CFN_HAL_ERROR_BAD_PARAM;
133 }
134 driver->config = config;
135 return cfn_hal_base_config_set(&driver->base, CFN_SAL_UTL_TYPE_AT_PARSER, (const void *) config);
136}
137
138CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_config_get(cfn_sal_utl_at_parser_t *driver,
140{
141 if (!driver || !config || !driver->config)
142 {
143 return CFN_HAL_ERROR_BAD_PARAM;
144 }
145 *config = *(driver->config);
146 return CFN_HAL_ERROR_OK;
147}
148
149CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_callback_register(cfn_sal_utl_at_parser_t *driver,
150 cfn_hal_callback_t callback,
151 void *user_arg)
152{
153 if (!driver)
154 {
155 return CFN_HAL_ERROR_BAD_PARAM;
156 }
157 driver->cb = callback;
158 driver->cb_user_arg = user_arg;
159 return cfn_hal_base_callback_register(&driver->base, CFN_SAL_UTL_TYPE_AT_PARSER, callback, user_arg);
160}
161
162CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_power_state_set(cfn_sal_utl_at_parser_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_UTL_TYPE_AT_PARSER, state);
170}
171
172CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_event_enable(cfn_sal_utl_at_parser_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_UTL_TYPE_AT_PARSER, event_mask);
180}
181
182CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_event_disable(cfn_sal_utl_at_parser_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_UTL_TYPE_AT_PARSER, event_mask);
190}
191
192CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_event_get(cfn_sal_utl_at_parser_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_UTL_TYPE_AT_PARSER, event_mask);
200}
201
202CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_error_enable(cfn_sal_utl_at_parser_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_UTL_TYPE_AT_PARSER, error_mask);
210}
211
212CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_error_disable(cfn_sal_utl_at_parser_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_UTL_TYPE_AT_PARSER, error_mask);
220}
221
222CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_error_get(cfn_sal_utl_at_parser_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_UTL_TYPE_AT_PARSER, error_mask);
230}
231
232/* Service Specific Functions --------------------------------------- */
233
234CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_send_command(cfn_sal_utl_at_parser_t *driver, const char *cmd)
235{
236 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
237 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_AT_PARSER, send_command, driver, error, cmd);
238 return error;
239}
240
241CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_send_data(cfn_sal_utl_at_parser_t *driver,
242 const uint8_t *data,
243 size_t len)
244{
245 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
246 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_AT_PARSER, send_data, driver, error, data, len);
247 return error;
248}
249
250CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_read_response(cfn_sal_utl_at_parser_t *driver,
251 char *buffer,
252 size_t max_len,
253 uint32_t timeout_ms)
254{
255 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
256 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(
257 CFN_SAL_UTL_TYPE_AT_PARSER, read_response, driver, error, buffer, max_len, timeout_ms);
258 return error;
259}
260
261CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_register_urc(cfn_sal_utl_at_parser_t *driver,
262 const char *prefix,
264 void *user_arg)
265{
266 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
267 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_AT_PARSER, register_urc, driver, error, prefix, cb, user_arg);
268 return error;
269}
270
271CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_unregister_urc(cfn_sal_utl_at_parser_t *driver,
272 const char *prefix)
273{
274 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
275 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_AT_PARSER, unregister_urc, driver, error, prefix);
276 return error;
277}
278
279CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_set_echo(cfn_sal_utl_at_parser_t *driver, bool enabled)
280{
281 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
282 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_AT_PARSER, set_echo, driver, error, enabled);
283 return error;
284}
285
286CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_flush_rx(cfn_sal_utl_at_parser_t *driver)
287{
288 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
289 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_UTL_TYPE_AT_PARSER, flush_rx, driver, error);
290 return error;
291}
292
294 const char *cmd,
295 const char *expected_resp,
296 uint32_t timeout_ms)
297{
298 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
299 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(
300 CFN_SAL_UTL_TYPE_AT_PARSER, send_command_wait_resp, driver, error, cmd, expected_resp, timeout_ms);
301 return error;
302}
303
304CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_register_urc_simple(cfn_sal_utl_at_parser_t *driver,
305 const char *urc_string,
306 void *callback)
307{
308 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
309 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(
310 CFN_SAL_UTL_TYPE_AT_PARSER, register_urc_simple, driver, error, urc_string, callback);
311 return error;
312}
313
314CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_set_timeout(cfn_sal_utl_at_parser_t *driver,
315 uint32_t timeout_ms)
316{
317 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
318 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_AT_PARSER, set_timeout, driver, error, timeout_ms);
319 return error;
320}
321
322#ifdef __cplusplus
323}
324#endif
325
326#endif /* CAFFEINE_SAL_UTL_AT_PARSER_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_utl_at_parser_deinit(cfn_sal_utl_at_parser_t *driver)
Definition cfn_sal_utl_at_parser.h:118
CFN_HAL_VMT_CHECK(struct cfn_sal_utl_at_parser_api_s)
CFN_HAL_INLINE void cfn_sal_utl_at_parser_populate(cfn_sal_utl_at_parser_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_utl_at_parser_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_utl_at_parser_config_t *config, cfn_hal_callback_t callback, void *user_arg)
Definition cfn_sal_utl_at_parser.h:87
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_error_get(cfn_sal_utl_at_parser_t *driver, uint32_t *error_mask)
Definition cfn_sal_utl_at_parser.h:222
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_read_response(cfn_sal_utl_at_parser_t *driver, char *buffer, size_t max_len, uint32_t timeout_ms)
Definition cfn_sal_utl_at_parser.h:250
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_register_urc(cfn_sal_utl_at_parser_t *driver, const char *prefix, cfn_sal_utl_at_parser_urc_callback_t cb, void *user_arg)
Definition cfn_sal_utl_at_parser.h:261
cfn_hal_error_code_t cfn_sal_utl_at_parser_construct(cfn_sal_utl_at_parser_t *driver, const cfn_sal_utl_at_parser_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_hal_callback_t callback, void *user_arg)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_error_disable(cfn_sal_utl_at_parser_t *driver, uint32_t error_mask)
Definition cfn_sal_utl_at_parser.h:212
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_event_get(cfn_sal_utl_at_parser_t *driver, uint32_t *event_mask)
Definition cfn_sal_utl_at_parser.h:192
#define CFN_SAL_UTL_TYPE_AT_PARSER
Definition cfn_sal_utl_at_parser.h:19
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_config_set(cfn_sal_utl_at_parser_t *driver, const cfn_sal_utl_at_parser_config_t *config)
Definition cfn_sal_utl_at_parser.h:127
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_config_get(cfn_sal_utl_at_parser_t *driver, cfn_sal_utl_at_parser_config_t *config)
Definition cfn_sal_utl_at_parser.h:138
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_send_command_wait_resp(cfn_sal_utl_at_parser_t *driver, const char *cmd, const char *expected_resp, uint32_t timeout_ms)
Definition cfn_sal_utl_at_parser.h:293
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_register_urc_simple(cfn_sal_utl_at_parser_t *driver, const char *urc_string, void *callback)
Definition cfn_sal_utl_at_parser.h:304
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_unregister_urc(cfn_sal_utl_at_parser_t *driver, const char *prefix)
Definition cfn_sal_utl_at_parser.h:271
cfn_hal_error_code_t cfn_sal_utl_at_parser_destruct(cfn_sal_utl_at_parser_t *driver)
struct cfn_sal_utl_at_parser_s cfn_sal_utl_at_parser_t
Definition cfn_sal_utl_at_parser.h:38
void(* cfn_sal_utl_at_parser_urc_callback_t)(cfn_sal_utl_at_parser_t *driver, const char *urc_line, void *user_arg)
Definition cfn_sal_utl_at_parser.h:41
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_set_timeout(cfn_sal_utl_at_parser_t *driver, uint32_t timeout_ms)
Definition cfn_sal_utl_at_parser.h:314
cfn_sal_utl_at_parser_event_t
Definition cfn_sal_utl_at_parser.h:24
@ CFN_SAL_UTL_AT_PARSER_EVENT_NONE
Definition cfn_sal_utl_at_parser.h:25
@ CFN_SAL_UTL_AT_PARSER_EVENT_URC_RECEIVED
Definition cfn_sal_utl_at_parser.h:26
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_send_command(cfn_sal_utl_at_parser_t *driver, const char *cmd)
Definition cfn_sal_utl_at_parser.h:234
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_error_enable(cfn_sal_utl_at_parser_t *driver, uint32_t error_mask)
Definition cfn_sal_utl_at_parser.h:202
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_event_disable(cfn_sal_utl_at_parser_t *driver, uint32_t event_mask)
Definition cfn_sal_utl_at_parser.h:182
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_callback_register(cfn_sal_utl_at_parser_t *driver, cfn_hal_callback_t callback, void *user_arg)
Definition cfn_sal_utl_at_parser.h:149
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_send_data(cfn_sal_utl_at_parser_t *driver, const uint8_t *data, size_t len)
Definition cfn_sal_utl_at_parser.h:241
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_flush_rx(cfn_sal_utl_at_parser_t *driver)
Definition cfn_sal_utl_at_parser.h:286
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_event_enable(cfn_sal_utl_at_parser_t *driver, uint32_t event_mask)
Definition cfn_sal_utl_at_parser.h:172
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_init(cfn_sal_utl_at_parser_t *driver)
Definition cfn_sal_utl_at_parser.h:108
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_set_echo(cfn_sal_utl_at_parser_t *driver, bool enabled)
Definition cfn_sal_utl_at_parser.h:279
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_at_parser_power_state_set(cfn_sal_utl_at_parser_t *driver, cfn_hal_power_state_t state)
Definition cfn_sal_utl_at_parser.h:162
Generic physical mapping for services.
Definition cfn_sal_types.h:26
AT Parser Virtual Method Table (VMT).
Definition cfn_sal_utl_at_parser.h:49
cfn_hal_error_code_t(* unregister_urc)(cfn_sal_utl_at_parser_t *driver, const char *prefix)
Definition cfn_sal_utl_at_parser.h:72
cfn_hal_error_code_t(* flush_rx)(cfn_sal_utl_at_parser_t *driver)
Definition cfn_sal_utl_at_parser.h:76
cfn_hal_error_code_t(* send_command_wait_resp)(cfn_sal_utl_at_parser_t *driver, const char *cmd, const char *expected_resp, uint32_t timeout_ms)
Definition cfn_sal_utl_at_parser.h:54
cfn_hal_error_code_t(* set_timeout)(cfn_sal_utl_at_parser_t *driver, uint32_t timeout_ms)
Definition cfn_sal_utl_at_parser.h:77
cfn_hal_error_code_t(* send_data)(cfn_sal_utl_at_parser_t *driver, const uint8_t *data, size_t len)
Definition cfn_sal_utl_at_parser.h:58
cfn_hal_error_code_t(* set_echo)(cfn_sal_utl_at_parser_t *driver, bool enabled)
Definition cfn_sal_utl_at_parser.h:75
cfn_hal_api_base_t base
Definition cfn_sal_utl_at_parser.h:50
cfn_hal_error_code_t(* read_response)(cfn_sal_utl_at_parser_t *driver, char *buffer, size_t max_len, uint32_t timeout_ms)
Definition cfn_sal_utl_at_parser.h:59
cfn_hal_error_code_t(* register_urc_simple)(cfn_sal_utl_at_parser_t *driver, const char *urc_string, void *callback)
Definition cfn_sal_utl_at_parser.h:69
cfn_hal_error_code_t(* send_command)(cfn_sal_utl_at_parser_t *driver, const char *cmd)
Definition cfn_sal_utl_at_parser.h:53
cfn_hal_error_code_t(* register_urc)(cfn_sal_utl_at_parser_t *driver, const char *prefix, cfn_sal_utl_at_parser_urc_callback_t cb, void *user_arg)
Definition cfn_sal_utl_at_parser.h:65
Definition cfn_sal_utl_at_parser.h:32
const char * line_terminator
Definition cfn_sal_utl_at_parser.h:33
void * custom
Definition cfn_sal_utl_at_parser.h:35
uint32_t default_timeout_ms
Definition cfn_sal_utl_at_parser.h:34