caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_dev_led.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_DEV_LED_H
7#define CAFFEINE_SAL_DEV_LED_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_DEV_TYPE_LED CFN_SAL_TYPE('L', 'E', 'D')
20
21/* Types Enums ------------------------------------------------------*/
22
28
29typedef struct
30{
31 uint8_t r;
32 uint8_t g;
33 uint8_t b;
35
36/* Types Structs ----------------------------------------------------*/
37
38typedef struct
39{
41 void *custom;
43
44typedef struct cfn_sal_dev_led_s cfn_sal_dev_led_t;
46
47typedef void (*cfn_sal_dev_led_callback_t)(cfn_sal_dev_led_t *driver, uint32_t event, uint32_t error, void *user_arg);
48
53{
54 cfn_hal_api_base_t base;
55
56 /* Basic Operations */
57 cfn_hal_error_code_t (*set_state)(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_state_t state);
58 cfn_hal_error_code_t (*get_state)(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_state_t *state_out);
59 cfn_hal_error_code_t (*toggle)(cfn_sal_dev_led_t *driver);
60
61 /* Dimming (PWM-capable) */
62 cfn_hal_error_code_t (*set_brightness)(cfn_sal_dev_led_t *driver, uint8_t percent);
63 cfn_hal_error_code_t (*get_brightness)(cfn_sal_dev_led_t *driver, uint8_t *percent_out);
64
65 /* Color (RGB-capable) */
66 cfn_hal_error_code_t (*set_color)(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_color_t color);
67
68 /* Effects */
69 cfn_hal_error_code_t (*blink_start)(cfn_sal_dev_led_t *driver, uint32_t period_ms);
70 cfn_hal_error_code_t (*blink_stop)(cfn_sal_dev_led_t *driver);
71 cfn_hal_error_code_t (*set_blink)(cfn_sal_dev_led_t *driver, uint32_t interval_ms, uint32_t count);
72};
73
75
78
79/* Functions inline ------------------------------------------------- */
80
81CFN_HAL_INLINE void cfn_sal_dev_led_populate(cfn_sal_dev_led_t *driver,
82 uint32_t peripheral_id,
83 void *dependency,
84 const cfn_sal_dev_led_api_t *api,
85 const cfn_sal_phy_t *phy,
86 const cfn_sal_dev_led_config_t *config,
88 void *user_arg)
89{
90 CFN_HAL_POPULATE_DRIVER(
91 driver, CFN_SAL_DEV_TYPE_LED, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
92}
93
94cfn_hal_error_code_t cfn_sal_dev_led_construct(cfn_sal_dev_led_t *driver,
95 const cfn_sal_dev_led_config_t *config,
96 const cfn_sal_phy_t *phy,
97 void *dependency,
99 void *user_arg);
100cfn_hal_error_code_t cfn_sal_dev_led_destruct(cfn_sal_dev_led_t *driver);
101
102CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_init(cfn_sal_dev_led_t *driver)
103{
104 if (!driver)
105 {
106 return CFN_HAL_ERROR_BAD_PARAM;
107 }
108 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
109 return cfn_hal_base_init(&driver->base, CFN_SAL_DEV_TYPE_LED);
110}
111
112CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_deinit(cfn_sal_dev_led_t *driver)
113{
114 if (!driver)
115 {
116 return CFN_HAL_ERROR_BAD_PARAM;
117 }
118 return cfn_hal_base_deinit(&driver->base, CFN_SAL_DEV_TYPE_LED);
119}
120
121CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_config_set(cfn_sal_dev_led_t *driver,
122 const cfn_sal_dev_led_config_t *config)
123{
124 if (!driver)
125 {
126 return CFN_HAL_ERROR_BAD_PARAM;
127 }
128 driver->config = config;
129 return cfn_hal_base_config_set(&driver->base, CFN_SAL_DEV_TYPE_LED, (const void *) config);
130}
131
132CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_config_get(cfn_sal_dev_led_t *driver,
134{
135 if (!driver || !config || !driver->config)
136 {
137 return CFN_HAL_ERROR_BAD_PARAM;
138 }
139 *config = *(driver->config);
140 return CFN_HAL_ERROR_OK;
141}
142
143CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_callback_register(cfn_sal_dev_led_t *driver,
145 void *user_arg)
146{
147 if (!driver)
148 {
149 return CFN_HAL_ERROR_BAD_PARAM;
150 }
151 driver->cb = callback;
152 driver->cb_user_arg = user_arg;
153 return cfn_hal_base_callback_register(&driver->base, CFN_SAL_DEV_TYPE_LED, (cfn_hal_callback_t) callback, user_arg);
154}
155
156CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_power_state_set(cfn_sal_dev_led_t *driver,
157 cfn_hal_power_state_t state)
158{
159 if (!driver)
160 {
161 return CFN_HAL_ERROR_BAD_PARAM;
162 }
163 return cfn_hal_power_state_set(&driver->base, CFN_SAL_DEV_TYPE_LED, state);
164}
165
166CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_event_enable(cfn_sal_dev_led_t *driver, uint32_t event_mask)
167{
168 if (!driver)
169 {
170 return CFN_HAL_ERROR_BAD_PARAM;
171 }
172 return cfn_hal_base_event_enable(&driver->base, CFN_SAL_DEV_TYPE_LED, event_mask);
173}
174
175CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_event_disable(cfn_sal_dev_led_t *driver, uint32_t event_mask)
176{
177 if (!driver)
178 {
179 return CFN_HAL_ERROR_BAD_PARAM;
180 }
181 return cfn_hal_base_event_disable(&driver->base, CFN_SAL_DEV_TYPE_LED, event_mask);
182}
183
184CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_event_get(cfn_sal_dev_led_t *driver, uint32_t *event_mask)
185{
186 if (!driver)
187 {
188 return CFN_HAL_ERROR_BAD_PARAM;
189 }
190 return cfn_hal_base_event_get(&driver->base, CFN_SAL_DEV_TYPE_LED, event_mask);
191}
192
193CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_error_enable(cfn_sal_dev_led_t *driver, uint32_t error_mask)
194{
195 if (!driver)
196 {
197 return CFN_HAL_ERROR_BAD_PARAM;
198 }
199 return cfn_hal_base_error_enable(&driver->base, CFN_SAL_DEV_TYPE_LED, error_mask);
200}
201
202CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_error_disable(cfn_sal_dev_led_t *driver, uint32_t error_mask)
203{
204 if (!driver)
205 {
206 return CFN_HAL_ERROR_BAD_PARAM;
207 }
208 return cfn_hal_base_error_disable(&driver->base, CFN_SAL_DEV_TYPE_LED, error_mask);
209}
210
211CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_error_get(cfn_sal_dev_led_t *driver, uint32_t *error_mask)
212{
213 if (!driver)
214 {
215 return CFN_HAL_ERROR_BAD_PARAM;
216 }
217 return cfn_hal_base_error_get(&driver->base, CFN_SAL_DEV_TYPE_LED, error_mask);
218}
219
220/* Service Specific Functions --------------------------------------- */
221
222CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_set_state(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_state_t state)
223{
224 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
225 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_LED, set_state, driver, error, state);
226 return error;
227}
228
229CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_get_state(cfn_sal_dev_led_t *driver,
230 cfn_sal_dev_led_state_t *state_out)
231{
232 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
233 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_LED, get_state, driver, error, state_out);
234 return error;
235}
236
237CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_toggle(cfn_sal_dev_led_t *driver)
238{
239 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
240 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_DEV_TYPE_LED, toggle, driver, error);
241 return error;
242}
243
244CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_set_brightness(cfn_sal_dev_led_t *driver, uint8_t percent)
245{
246 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
247 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_LED, set_brightness, driver, error, percent);
248 return error;
249}
250
251CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_get_brightness(cfn_sal_dev_led_t *driver, uint8_t *percent_out)
252{
253 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
254 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_LED, get_brightness, driver, error, percent_out);
255 return error;
256}
257
258CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_set_color(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_color_t color)
259{
260 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
261 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_LED, set_color, driver, error, color);
262 return error;
263}
264
265CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_blink_start(cfn_sal_dev_led_t *driver, uint32_t period_ms)
266{
267 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
268 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_LED, blink_start, driver, error, period_ms);
269 return error;
270}
271
272CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_blink_stop(cfn_sal_dev_led_t *driver)
273{
274 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
275 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_DEV_TYPE_LED, blink_stop, driver, error);
276 return error;
277}
278
279CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_set_blink(cfn_sal_dev_led_t *driver,
280 uint32_t interval_ms,
281 uint32_t count)
282{
283 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
284 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_LED, set_blink, driver, error, interval_ms, count);
285 return error;
286}
287
288#ifdef __cplusplus
289}
290#endif
291
292#endif /* CAFFEINE_SAL_DEV_LED_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_dev_led_get_state(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_state_t *state_out)
Definition cfn_sal_dev_led.h:229
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_init(cfn_sal_dev_led_t *driver)
Definition cfn_sal_dev_led.h:102
cfn_hal_error_code_t cfn_sal_dev_led_destruct(cfn_sal_dev_led_t *driver)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_deinit(cfn_sal_dev_led_t *driver)
Definition cfn_sal_dev_led.h:112
struct cfn_sal_dev_led_s cfn_sal_dev_led_t
Definition cfn_sal_dev_led.h:44
cfn_sal_dev_led_state_t
Definition cfn_sal_dev_led.h:24
@ CFN_SAL_DEV_LED_STATE_ON
Definition cfn_sal_dev_led.h:26
@ CFN_SAL_DEV_LED_STATE_OFF
Definition cfn_sal_dev_led.h:25
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_config_get(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_config_t *config)
Definition cfn_sal_dev_led.h:132
cfn_hal_error_code_t cfn_sal_dev_led_construct(cfn_sal_dev_led_t *driver, const cfn_sal_dev_led_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_dev_led_callback_t callback, void *user_arg)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_get_brightness(cfn_sal_dev_led_t *driver, uint8_t *percent_out)
Definition cfn_sal_dev_led.h:251
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_event_enable(cfn_sal_dev_led_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_led.h:166
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_blink_start(cfn_sal_dev_led_t *driver, uint32_t period_ms)
Definition cfn_sal_dev_led.h:265
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_error_enable(cfn_sal_dev_led_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_led.h:193
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_error_get(cfn_sal_dev_led_t *driver, uint32_t *error_mask)
Definition cfn_sal_dev_led.h:211
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_set_brightness(cfn_sal_dev_led_t *driver, uint8_t percent)
Definition cfn_sal_dev_led.h:244
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_callback_register(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_callback_t callback, void *user_arg)
Definition cfn_sal_dev_led.h:143
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_toggle(cfn_sal_dev_led_t *driver)
Definition cfn_sal_dev_led.h:237
#define CFN_SAL_DEV_TYPE_LED
Definition cfn_sal_dev_led.h:19
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_set_blink(cfn_sal_dev_led_t *driver, uint32_t interval_ms, uint32_t count)
Definition cfn_sal_dev_led.h:279
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_config_set(cfn_sal_dev_led_t *driver, const cfn_sal_dev_led_config_t *config)
Definition cfn_sal_dev_led.h:121
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_event_get(cfn_sal_dev_led_t *driver, uint32_t *event_mask)
Definition cfn_sal_dev_led.h:184
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_error_disable(cfn_sal_dev_led_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_led.h:202
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_event_disable(cfn_sal_dev_led_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_led.h:175
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_power_state_set(cfn_sal_dev_led_t *driver, cfn_hal_power_state_t state)
Definition cfn_sal_dev_led.h:156
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_set_state(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_state_t state)
Definition cfn_sal_dev_led.h:222
CFN_HAL_VMT_CHECK(struct cfn_sal_dev_led_api_s)
void(* cfn_sal_dev_led_callback_t)(cfn_sal_dev_led_t *driver, uint32_t event, uint32_t error, void *user_arg)
Definition cfn_sal_dev_led.h:47
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_set_color(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_color_t color)
Definition cfn_sal_dev_led.h:258
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_led_blink_stop(cfn_sal_dev_led_t *driver)
Definition cfn_sal_dev_led.h:272
CFN_HAL_INLINE void cfn_sal_dev_led_populate(cfn_sal_dev_led_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_dev_led_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_dev_led_config_t *config, cfn_sal_dev_led_callback_t callback, void *user_arg)
Definition cfn_sal_dev_led.h:81
LED Virtual Method Table (VMT).
Definition cfn_sal_dev_led.h:53
cfn_hal_error_code_t(* set_blink)(cfn_sal_dev_led_t *driver, uint32_t interval_ms, uint32_t count)
Definition cfn_sal_dev_led.h:71
cfn_hal_error_code_t(* get_brightness)(cfn_sal_dev_led_t *driver, uint8_t *percent_out)
Definition cfn_sal_dev_led.h:63
cfn_hal_error_code_t(* blink_stop)(cfn_sal_dev_led_t *driver)
Definition cfn_sal_dev_led.h:70
cfn_hal_error_code_t(* toggle)(cfn_sal_dev_led_t *driver)
Definition cfn_sal_dev_led.h:59
cfn_hal_error_code_t(* get_state)(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_state_t *state_out)
Definition cfn_sal_dev_led.h:58
cfn_hal_error_code_t(* set_color)(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_color_t color)
Definition cfn_sal_dev_led.h:66
cfn_hal_error_code_t(* blink_start)(cfn_sal_dev_led_t *driver, uint32_t period_ms)
Definition cfn_sal_dev_led.h:69
cfn_hal_error_code_t(* set_brightness)(cfn_sal_dev_led_t *driver, uint8_t percent)
Definition cfn_sal_dev_led.h:62
cfn_hal_api_base_t base
Definition cfn_sal_dev_led.h:54
cfn_hal_error_code_t(* set_state)(cfn_sal_dev_led_t *driver, cfn_sal_dev_led_state_t state)
Definition cfn_sal_dev_led.h:57
Definition cfn_sal_dev_led.h:30
uint8_t r
Definition cfn_sal_dev_led.h:31
uint8_t b
Definition cfn_sal_dev_led.h:33
uint8_t g
Definition cfn_sal_dev_led.h:32
Definition cfn_sal_dev_led.h:39
void * custom
Definition cfn_sal_dev_led.h:41
bool active_low
Definition cfn_sal_dev_led.h:40
Generic physical mapping for services.
Definition cfn_sal_types.h:26