caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_dev_button.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_DEV_BUTTON_H
7#define CAFFEINE_SAL_DEV_BUTTON_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_BUTTON CFN_SAL_TYPE('B', 'T', 'N')
20
21/* Types Enums ------------------------------------------------------*/
22
31
37
38/* Types Structs ----------------------------------------------------*/
39
40typedef struct
41{
43 uint32_t debounce_ms;
44 uint32_t long_press_ms;
45 void *custom;
47
48typedef struct cfn_sal_dev_button_s cfn_sal_dev_button_t;
50
55 uint32_t event_mask,
56 uint32_t error_mask,
57 void *user_arg);
58
63{
64 cfn_hal_api_base_t base;
65
66 /* Basic Operations */
67 cfn_hal_error_code_t (*get_state)(cfn_sal_dev_button_t *driver, cfn_sal_dev_button_state_t *state_out);
68 cfn_hal_error_code_t (*set_debounce_time)(cfn_sal_dev_button_t *driver, uint32_t ms);
69 cfn_hal_error_code_t (*is_pressed)(cfn_sal_dev_button_t *driver, bool *pressed_out);
70 cfn_hal_error_code_t (*is_released)(cfn_sal_dev_button_t *driver, bool *released_out);
71 cfn_hal_error_code_t (*get_click_count)(cfn_sal_dev_button_t *driver, uint8_t *count_out);
72 cfn_hal_error_code_t (*get_hold_time_ms)(cfn_sal_dev_button_t *driver, uint32_t *time_out);
73};
74
76
82
83/* Functions inline ------------------------------------------------- */
84
86 uint32_t peripheral_id,
87 void *dependency,
88 const cfn_sal_dev_button_api_t *api,
89 const cfn_sal_phy_t *phy,
90 const cfn_sal_dev_button_config_t *config,
92 void *user_arg)
93{
94 CFN_HAL_POPULATE_DRIVER(
95 driver, CFN_SAL_DEV_TYPE_BUTTON, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
96}
97
99 const cfn_sal_dev_button_config_t *config,
100 const cfn_sal_phy_t *phy,
101 void *dependency,
103 void *user_arg);
105
106CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_init(cfn_sal_dev_button_t *driver)
107{
108 if (!driver)
109 {
110 return CFN_HAL_ERROR_BAD_PARAM;
111 }
112 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
113 return cfn_hal_base_init(&driver->base, CFN_SAL_DEV_TYPE_BUTTON);
114}
115
116CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_deinit(cfn_sal_dev_button_t *driver)
117{
118 if (!driver)
119 {
120 return CFN_HAL_ERROR_BAD_PARAM;
121 }
122 return cfn_hal_base_deinit(&driver->base, CFN_SAL_DEV_TYPE_BUTTON);
123}
124
125CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_config_set(cfn_sal_dev_button_t *driver,
126 const cfn_sal_dev_button_config_t *config)
127{
128 if (!driver)
129 {
130 return CFN_HAL_ERROR_BAD_PARAM;
131 }
132 driver->config = config;
133 return cfn_hal_base_config_set(&driver->base, CFN_SAL_DEV_TYPE_BUTTON, (const void *) config);
134}
135
136CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_config_get(cfn_sal_dev_button_t *driver,
138{
139 if (!driver || !config || !driver->config)
140 {
141 return CFN_HAL_ERROR_BAD_PARAM;
142 }
143 *config = *(driver->config);
144 return CFN_HAL_ERROR_OK;
145}
146
147CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_callback_register(cfn_sal_dev_button_t *driver,
149 void *user_arg)
150{
151 if (!driver)
152 {
153 return CFN_HAL_ERROR_BAD_PARAM;
154 }
155 driver->cb = callback;
156 driver->cb_user_arg = user_arg;
157 return cfn_hal_base_callback_register(
158 &driver->base, CFN_SAL_DEV_TYPE_BUTTON, (cfn_hal_callback_t) callback, user_arg);
159}
160
161CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_power_state_set(cfn_sal_dev_button_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_DEV_TYPE_BUTTON, state);
169}
170
171CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_event_enable(cfn_sal_dev_button_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_DEV_TYPE_BUTTON, event_mask);
178}
179
180CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_event_disable(cfn_sal_dev_button_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_DEV_TYPE_BUTTON, event_mask);
187}
188
189CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_event_get(cfn_sal_dev_button_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_DEV_TYPE_BUTTON, event_mask);
196}
197
198CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_error_enable(cfn_sal_dev_button_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_DEV_TYPE_BUTTON, error_mask);
205}
206
207CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_error_disable(cfn_sal_dev_button_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_DEV_TYPE_BUTTON, error_mask);
214}
215
216CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_error_get(cfn_sal_dev_button_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_DEV_TYPE_BUTTON, error_mask);
223}
224
225/* Service Specific Functions --------------------------------------- */
226
227CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_get_state(cfn_sal_dev_button_t *driver,
229{
230 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
231 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_BUTTON, get_state, driver, error, state_out);
232 return error;
233}
234
235CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_set_debounce_time(cfn_sal_dev_button_t *driver, uint32_t ms)
236{
237 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
238 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_BUTTON, set_debounce_time, driver, error, ms);
239 return error;
240}
241
242CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_is_pressed(cfn_sal_dev_button_t *driver, bool *pressed_out)
243{
244 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
245 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_BUTTON, is_pressed, driver, error, pressed_out);
246 return error;
247}
248
249CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_is_released(cfn_sal_dev_button_t *driver, bool *released_out)
250{
251 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
252 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_BUTTON, is_released, driver, error, released_out);
253 return error;
254}
255
256CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_get_click_count(cfn_sal_dev_button_t *driver, uint8_t *count_out)
257{
258 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
259 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_BUTTON, get_click_count, driver, error, count_out);
260 return error;
261}
262
263CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_get_hold_time_ms(cfn_sal_dev_button_t *driver,
264 uint32_t *time_out)
265{
266 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
267 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_BUTTON, get_hold_time_ms, driver, error, time_out);
268 return error;
269}
270
271#ifdef __cplusplus
272}
273#endif
274
275#endif /* CAFFEINE_SAL_DEV_BUTTON_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_button_get_state(cfn_sal_dev_button_t *driver, cfn_sal_dev_button_state_t *state_out)
Definition cfn_sal_dev_button.h:227
struct cfn_sal_dev_button_s cfn_sal_dev_button_t
Definition cfn_sal_dev_button.h:48
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_error_disable(cfn_sal_dev_button_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_button.h:207
CFN_HAL_INLINE void cfn_sal_dev_button_populate(cfn_sal_dev_button_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_dev_button_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_dev_button_config_t *config, cfn_sal_dev_button_callback_t callback, void *user_arg)
Definition cfn_sal_dev_button.h:85
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_error_enable(cfn_sal_dev_button_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_button.h:198
void(* cfn_sal_dev_button_callback_t)(cfn_sal_dev_button_t *driver, uint32_t event_mask, uint32_t error_mask, void *user_arg)
Button callback signature.
Definition cfn_sal_dev_button.h:54
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_deinit(cfn_sal_dev_button_t *driver)
Definition cfn_sal_dev_button.h:116
cfn_sal_dev_button_state_t
Definition cfn_sal_dev_button.h:33
@ CFN_SAL_DEV_BUTTON_STATE_RELEASED
Definition cfn_sal_dev_button.h:34
@ CFN_SAL_DEV_BUTTON_STATE_PRESSED
Definition cfn_sal_dev_button.h:35
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_init(cfn_sal_dev_button_t *driver)
Definition cfn_sal_dev_button.h:106
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_get_hold_time_ms(cfn_sal_dev_button_t *driver, uint32_t *time_out)
Definition cfn_sal_dev_button.h:263
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_config_get(cfn_sal_dev_button_t *driver, cfn_sal_dev_button_config_t *config)
Definition cfn_sal_dev_button.h:136
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_event_disable(cfn_sal_dev_button_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_button.h:180
#define CFN_SAL_DEV_TYPE_BUTTON
Definition cfn_sal_dev_button.h:19
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_event_enable(cfn_sal_dev_button_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_button.h:171
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_event_get(cfn_sal_dev_button_t *driver, uint32_t *event_mask)
Definition cfn_sal_dev_button.h:189
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_error_get(cfn_sal_dev_button_t *driver, uint32_t *error_mask)
Definition cfn_sal_dev_button.h:216
cfn_hal_error_code_t cfn_sal_dev_button_construct(cfn_sal_dev_button_t *driver, const cfn_sal_dev_button_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_dev_button_callback_t callback, void *user_arg)
cfn_sal_dev_button_event_t
Definition cfn_sal_dev_button.h:24
@ CFN_SAL_DEV_BUTTON_EVENT_DOUBLE_CLICK
Definition cfn_sal_dev_button.h:29
@ CFN_SAL_DEV_BUTTON_EVENT_LONG_PRESS
Definition cfn_sal_dev_button.h:28
@ CFN_SAL_DEV_BUTTON_EVENT_NONE
Definition cfn_sal_dev_button.h:25
@ CFN_SAL_DEV_BUTTON_EVENT_PRESSED
Definition cfn_sal_dev_button.h:26
@ CFN_SAL_DEV_BUTTON_EVENT_RELEASED
Definition cfn_sal_dev_button.h:27
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_callback_register(cfn_sal_dev_button_t *driver, cfn_sal_dev_button_callback_t callback, void *user_arg)
Definition cfn_sal_dev_button.h:147
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_get_click_count(cfn_sal_dev_button_t *driver, uint8_t *count_out)
Definition cfn_sal_dev_button.h:256
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_is_pressed(cfn_sal_dev_button_t *driver, bool *pressed_out)
Definition cfn_sal_dev_button.h:242
cfn_hal_error_code_t cfn_sal_dev_button_destruct(cfn_sal_dev_button_t *driver)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_set_debounce_time(cfn_sal_dev_button_t *driver, uint32_t ms)
Definition cfn_sal_dev_button.h:235
CFN_HAL_VMT_CHECK(struct cfn_sal_dev_button_api_s)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_config_set(cfn_sal_dev_button_t *driver, const cfn_sal_dev_button_config_t *config)
Definition cfn_sal_dev_button.h:125
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_power_state_set(cfn_sal_dev_button_t *driver, cfn_hal_power_state_t state)
Definition cfn_sal_dev_button.h:161
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_button_is_released(cfn_sal_dev_button_t *driver, bool *released_out)
Definition cfn_sal_dev_button.h:249
Button Virtual Method Table (VMT).
Definition cfn_sal_dev_button.h:63
cfn_hal_error_code_t(* get_click_count)(cfn_sal_dev_button_t *driver, uint8_t *count_out)
Definition cfn_sal_dev_button.h:71
cfn_hal_error_code_t(* get_state)(cfn_sal_dev_button_t *driver, cfn_sal_dev_button_state_t *state_out)
Definition cfn_sal_dev_button.h:67
cfn_hal_error_code_t(* is_released)(cfn_sal_dev_button_t *driver, bool *released_out)
Definition cfn_sal_dev_button.h:70
cfn_hal_error_code_t(* get_hold_time_ms)(cfn_sal_dev_button_t *driver, uint32_t *time_out)
Definition cfn_sal_dev_button.h:72
cfn_hal_error_code_t(* is_pressed)(cfn_sal_dev_button_t *driver, bool *pressed_out)
Definition cfn_sal_dev_button.h:69
cfn_hal_error_code_t(* set_debounce_time)(cfn_sal_dev_button_t *driver, uint32_t ms)
Definition cfn_sal_dev_button.h:68
cfn_hal_api_base_t base
Definition cfn_sal_dev_button.h:64
Definition cfn_sal_dev_button.h:41
uint32_t debounce_ms
Definition cfn_sal_dev_button.h:43
void * custom
Definition cfn_sal_dev_button.h:45
bool active_low
Definition cfn_sal_dev_button.h:42
uint32_t long_press_ms
Definition cfn_sal_dev_button.h:44
Generic physical mapping for services.
Definition cfn_sal_types.h:26