caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_utl_cli.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_UTL_CLI_H
7#define CAFFEINE_SAL_UTL_CLI_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_CLI CFN_SAL_TYPE('C', 'L', 'I')
20
21/* Types Enums ------------------------------------------------------*/
22
29
30/* Types Structs ----------------------------------------------------*/
31
32typedef struct
33{
34 const char *name;
35 const char *help;
36 int (*handler)(int argc, char **argv);
38
39typedef struct
40{
41 const char *prompt;
42 const char *welcome_msg;
44 void *custom;
46
47typedef struct cfn_sal_utl_cli_s cfn_sal_utl_cli_t;
49
50typedef void (*cfn_sal_utl_cli_callback_t)(cfn_sal_utl_cli_t *driver, uint32_t event, uint32_t error, void *user_arg);
51
56{
57 cfn_hal_api_base_t base;
58
59 /* Input/Output */
60 cfn_hal_error_code_t (*feed_char)(cfn_sal_utl_cli_t *driver, char c);
61 cfn_hal_error_code_t (*print_string)(cfn_sal_utl_cli_t *driver, const char *str);
62 cfn_hal_error_code_t (*print_line)(cfn_sal_utl_cli_t *driver, const char *str);
63
64 /* Command Management */
65 cfn_hal_error_code_t (*register_command)(cfn_sal_utl_cli_t *driver, const cfn_sal_utl_cli_cmd_t *cmd);
66 cfn_hal_error_code_t (*unregister_command)(cfn_sal_utl_cli_t *driver, const char *name);
67 cfn_hal_error_code_t (*register_command_simple)(cfn_sal_utl_cli_t *driver, const char *cmd, void *callback);
68 cfn_hal_error_code_t (*print_help)(cfn_sal_utl_cli_t *driver);
69
70 /* UI Control */
71 cfn_hal_error_code_t (*set_prompt)(cfn_sal_utl_cli_t *driver, const char *prompt);
72 cfn_hal_error_code_t (*clear_screen)(cfn_sal_utl_cli_t *driver);
73
74 /* History */
75 cfn_hal_error_code_t (*history_prev)(cfn_sal_utl_cli_t *driver);
76 cfn_hal_error_code_t (*history_next)(cfn_sal_utl_cli_t *driver);
77};
78
80
83
84/* Functions inline ------------------------------------------------- */
85
86CFN_HAL_INLINE void cfn_sal_utl_cli_populate(cfn_sal_utl_cli_t *driver,
87 uint32_t peripheral_id,
88 void *dependency,
89 const cfn_sal_utl_cli_api_t *api,
90 const cfn_sal_phy_t *phy,
91 const cfn_sal_utl_cli_config_t *config,
93 void *user_arg)
94{
95 CFN_HAL_POPULATE_DRIVER(
96 driver, CFN_SAL_UTL_TYPE_CLI, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
97}
98
99cfn_hal_error_code_t cfn_sal_utl_cli_construct(cfn_sal_utl_cli_t *driver,
100 const cfn_sal_utl_cli_config_t *config,
101 const cfn_sal_phy_t *phy,
102 void *dependency,
104 void *user_arg);
105cfn_hal_error_code_t cfn_sal_utl_cli_destruct(cfn_sal_utl_cli_t *driver);
106
107CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_init(cfn_sal_utl_cli_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_UTL_TYPE_CLI);
115}
116
117CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_deinit(cfn_sal_utl_cli_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_UTL_TYPE_CLI);
124}
125
126CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_config_set(cfn_sal_utl_cli_t *driver,
127 const cfn_sal_utl_cli_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_UTL_TYPE_CLI, (const void *) config);
135}
136
137CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_config_get(cfn_sal_utl_cli_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_utl_cli_callback_register(cfn_sal_utl_cli_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(&driver->base, CFN_SAL_UTL_TYPE_CLI, (cfn_hal_callback_t) callback, user_arg);
159}
160
161CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_power_state_set(cfn_sal_utl_cli_t *driver,
162 cfn_hal_power_state_t state)
163{
164 if (!driver)
165 {
166 return CFN_HAL_ERROR_BAD_PARAM;
167 }
168 return cfn_hal_power_state_set(&driver->base, CFN_SAL_UTL_TYPE_CLI, state);
169}
170
171CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_event_enable(cfn_sal_utl_cli_t *driver, uint32_t event_mask)
172{
173 if (!driver)
174 {
175 return CFN_HAL_ERROR_BAD_PARAM;
176 }
177 return cfn_hal_base_event_enable(&driver->base, CFN_SAL_UTL_TYPE_CLI, event_mask);
178}
179
180CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_event_disable(cfn_sal_utl_cli_t *driver, uint32_t event_mask)
181{
182 if (!driver)
183 {
184 return CFN_HAL_ERROR_BAD_PARAM;
185 }
186 return cfn_hal_base_event_disable(&driver->base, CFN_SAL_UTL_TYPE_CLI, event_mask);
187}
188
189CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_event_get(cfn_sal_utl_cli_t *driver, uint32_t *event_mask)
190{
191 if (!driver)
192 {
193 return CFN_HAL_ERROR_BAD_PARAM;
194 }
195 return cfn_hal_base_event_get(&driver->base, CFN_SAL_UTL_TYPE_CLI, event_mask);
196}
197
198CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_error_enable(cfn_sal_utl_cli_t *driver, uint32_t error_mask)
199{
200 if (!driver)
201 {
202 return CFN_HAL_ERROR_BAD_PARAM;
203 }
204 return cfn_hal_base_error_enable(&driver->base, CFN_SAL_UTL_TYPE_CLI, error_mask);
205}
206
207CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_error_disable(cfn_sal_utl_cli_t *driver, uint32_t error_mask)
208{
209 if (!driver)
210 {
211 return CFN_HAL_ERROR_BAD_PARAM;
212 }
213 return cfn_hal_base_error_disable(&driver->base, CFN_SAL_UTL_TYPE_CLI, error_mask);
214}
215
216CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_error_get(cfn_sal_utl_cli_t *driver, uint32_t *error_mask)
217{
218 if (!driver)
219 {
220 return CFN_HAL_ERROR_BAD_PARAM;
221 }
222 return cfn_hal_base_error_get(&driver->base, CFN_SAL_UTL_TYPE_CLI, error_mask);
223}
224
225/* Service Specific Functions --------------------------------------- */
226
227CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_feed_char(cfn_sal_utl_cli_t *driver, char c)
228{
229 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
230 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_CLI, feed_char, driver, error, c);
231 return error;
232}
233
234CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_print(cfn_sal_utl_cli_t *driver, const char *str)
235{
236 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
237 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_CLI, print_string, driver, error, str);
238 return error;
239}
240
241CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_print_line(cfn_sal_utl_cli_t *driver, const char *str)
242{
243 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
244 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_CLI, print_line, driver, error, str);
245 return error;
246}
247
248CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_register_command(cfn_sal_utl_cli_t *driver,
249 const cfn_sal_utl_cli_cmd_t *cmd)
250{
251 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
252 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_CLI, register_command, driver, error, cmd);
253 return error;
254}
255
256CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_unregister_command(cfn_sal_utl_cli_t *driver, const char *name)
257{
258 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
259 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_CLI, unregister_command, driver, error, name);
260 return error;
261}
262
263CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_set_prompt(cfn_sal_utl_cli_t *driver, const char *prompt)
264{
265 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
266 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_CLI, set_prompt, driver, error, prompt);
267 return error;
268}
269
270CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_clear_screen(cfn_sal_utl_cli_t *driver)
271{
272 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
273 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_UTL_TYPE_CLI, clear_screen, driver, error);
274 return error;
275}
276
277CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_register_command_simple(cfn_sal_utl_cli_t *driver,
278 const char *cmd,
279 void *callback)
280{
281 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
282 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_CLI, register_command_simple, driver, error, cmd, callback);
283 return error;
284}
285
286CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_print_help(cfn_sal_utl_cli_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_CLI, print_help, driver, error);
290 return error;
291}
292
293CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_history_prev(cfn_sal_utl_cli_t *driver)
294{
295 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
296 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_UTL_TYPE_CLI, history_prev, driver, error);
297 return error;
298}
299
300CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_history_next(cfn_sal_utl_cli_t *driver)
301{
302 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
303 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_UTL_TYPE_CLI, history_next, driver, error);
304 return error;
305}
306
307#ifdef __cplusplus
308}
309#endif
310
311#endif /* CAFFEINE_SAL_UTL_CLI_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_cli_register_command(cfn_sal_utl_cli_t *driver, const cfn_sal_utl_cli_cmd_t *cmd)
Definition cfn_sal_utl_cli.h:248
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_config_get(cfn_sal_utl_cli_t *driver, cfn_sal_utl_cli_config_t *config)
Definition cfn_sal_utl_cli.h:137
#define CFN_SAL_UTL_TYPE_CLI
Definition cfn_sal_utl_cli.h:19
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_config_set(cfn_sal_utl_cli_t *driver, const cfn_sal_utl_cli_config_t *config)
Definition cfn_sal_utl_cli.h:126
CFN_HAL_VMT_CHECK(struct cfn_sal_utl_cli_api_s)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_history_next(cfn_sal_utl_cli_t *driver)
Definition cfn_sal_utl_cli.h:300
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_deinit(cfn_sal_utl_cli_t *driver)
Definition cfn_sal_utl_cli.h:117
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_print(cfn_sal_utl_cli_t *driver, const char *str)
Definition cfn_sal_utl_cli.h:234
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_print_line(cfn_sal_utl_cli_t *driver, const char *str)
Definition cfn_sal_utl_cli.h:241
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_error_disable(cfn_sal_utl_cli_t *driver, uint32_t error_mask)
Definition cfn_sal_utl_cli.h:207
cfn_sal_utl_cli_event_t
Definition cfn_sal_utl_cli.h:24
@ CFN_SAL_UTL_CLI_EVENT_NONE
Definition cfn_sal_utl_cli.h:25
@ CFN_SAL_UTL_CLI_EVENT_CMD_START
Definition cfn_sal_utl_cli.h:26
@ CFN_SAL_UTL_CLI_EVENT_CMD_DONE
Definition cfn_sal_utl_cli.h:27
void(* cfn_sal_utl_cli_callback_t)(cfn_sal_utl_cli_t *driver, uint32_t event, uint32_t error, void *user_arg)
Definition cfn_sal_utl_cli.h:50
cfn_hal_error_code_t cfn_sal_utl_cli_destruct(cfn_sal_utl_cli_t *driver)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_init(cfn_sal_utl_cli_t *driver)
Definition cfn_sal_utl_cli.h:107
struct cfn_sal_utl_cli_s cfn_sal_utl_cli_t
Definition cfn_sal_utl_cli.h:47
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_error_get(cfn_sal_utl_cli_t *driver, uint32_t *error_mask)
Definition cfn_sal_utl_cli.h:216
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_error_enable(cfn_sal_utl_cli_t *driver, uint32_t error_mask)
Definition cfn_sal_utl_cli.h:198
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_history_prev(cfn_sal_utl_cli_t *driver)
Definition cfn_sal_utl_cli.h:293
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_unregister_command(cfn_sal_utl_cli_t *driver, const char *name)
Definition cfn_sal_utl_cli.h:256
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_event_enable(cfn_sal_utl_cli_t *driver, uint32_t event_mask)
Definition cfn_sal_utl_cli.h:171
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_register_command_simple(cfn_sal_utl_cli_t *driver, const char *cmd, void *callback)
Definition cfn_sal_utl_cli.h:277
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_event_get(cfn_sal_utl_cli_t *driver, uint32_t *event_mask)
Definition cfn_sal_utl_cli.h:189
CFN_HAL_INLINE void cfn_sal_utl_cli_populate(cfn_sal_utl_cli_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_utl_cli_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_utl_cli_config_t *config, cfn_sal_utl_cli_callback_t callback, void *user_arg)
Definition cfn_sal_utl_cli.h:86
cfn_hal_error_code_t cfn_sal_utl_cli_construct(cfn_sal_utl_cli_t *driver, const cfn_sal_utl_cli_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_utl_cli_callback_t callback, void *user_arg)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_callback_register(cfn_sal_utl_cli_t *driver, cfn_sal_utl_cli_callback_t callback, void *user_arg)
Definition cfn_sal_utl_cli.h:148
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_power_state_set(cfn_sal_utl_cli_t *driver, cfn_hal_power_state_t state)
Definition cfn_sal_utl_cli.h:161
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_event_disable(cfn_sal_utl_cli_t *driver, uint32_t event_mask)
Definition cfn_sal_utl_cli.h:180
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_feed_char(cfn_sal_utl_cli_t *driver, char c)
Definition cfn_sal_utl_cli.h:227
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_print_help(cfn_sal_utl_cli_t *driver)
Definition cfn_sal_utl_cli.h:286
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_clear_screen(cfn_sal_utl_cli_t *driver)
Definition cfn_sal_utl_cli.h:270
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_cli_set_prompt(cfn_sal_utl_cli_t *driver, const char *prompt)
Definition cfn_sal_utl_cli.h:263
Generic physical mapping for services.
Definition cfn_sal_types.h:26
CLI Virtual Method Table (VMT).
Definition cfn_sal_utl_cli.h:56
cfn_hal_error_code_t(* print_line)(cfn_sal_utl_cli_t *driver, const char *str)
Definition cfn_sal_utl_cli.h:62
cfn_hal_error_code_t(* register_command_simple)(cfn_sal_utl_cli_t *driver, const char *cmd, void *callback)
Definition cfn_sal_utl_cli.h:67
cfn_hal_error_code_t(* history_prev)(cfn_sal_utl_cli_t *driver)
Definition cfn_sal_utl_cli.h:75
cfn_hal_error_code_t(* clear_screen)(cfn_sal_utl_cli_t *driver)
Definition cfn_sal_utl_cli.h:72
cfn_hal_error_code_t(* unregister_command)(cfn_sal_utl_cli_t *driver, const char *name)
Definition cfn_sal_utl_cli.h:66
cfn_hal_api_base_t base
Definition cfn_sal_utl_cli.h:57
cfn_hal_error_code_t(* print_help)(cfn_sal_utl_cli_t *driver)
Definition cfn_sal_utl_cli.h:68
cfn_hal_error_code_t(* feed_char)(cfn_sal_utl_cli_t *driver, char c)
Definition cfn_sal_utl_cli.h:60
cfn_hal_error_code_t(* register_command)(cfn_sal_utl_cli_t *driver, const cfn_sal_utl_cli_cmd_t *cmd)
Definition cfn_sal_utl_cli.h:65
cfn_hal_error_code_t(* history_next)(cfn_sal_utl_cli_t *driver)
Definition cfn_sal_utl_cli.h:76
cfn_hal_error_code_t(* print_string)(cfn_sal_utl_cli_t *driver, const char *str)
Definition cfn_sal_utl_cli.h:61
cfn_hal_error_code_t(* set_prompt)(cfn_sal_utl_cli_t *driver, const char *prompt)
Definition cfn_sal_utl_cli.h:71
Definition cfn_sal_utl_cli.h:33
const char * name
Definition cfn_sal_utl_cli.h:34
const char * help
Definition cfn_sal_utl_cli.h:35
Definition cfn_sal_utl_cli.h:40
const char * welcome_msg
Definition cfn_sal_utl_cli.h:42
const char * prompt
Definition cfn_sal_utl_cli.h:41
void * custom
Definition cfn_sal_utl_cli.h:44
bool echo_enabled
Definition cfn_sal_utl_cli.h:43