caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_dev_proximity.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_DEV_PROXIMITY_H
7#define CAFFEINE_SAL_DEV_PROXIMITY_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_PROXIMITY CFN_SAL_TYPE('P', 'R', 'X')
20
21/* Types Enums ------------------------------------------------------*/
22
32
33/* Types Structs ----------------------------------------------------*/
34
46
47typedef struct cfn_sal_dev_proximity_s cfn_sal_dev_proximity_t;
49
51 uint32_t event,
52 uint32_t error,
53 void *user_arg);
54
59{
60 cfn_hal_api_base_t base;
61
62 /* Measurement Operations */
63 cfn_hal_error_code_t (*read_distance_mm)(cfn_sal_dev_proximity_t *driver, float *mm_out);
64 cfn_hal_error_code_t (*read_raw)(cfn_sal_dev_proximity_t *driver, uint32_t *raw_out);
65
66 /* Feature Data Retrieval */
67 cfn_hal_error_code_t (*get_status)(cfn_sal_dev_proximity_t *driver, uint32_t *status_flags);
68 cfn_hal_error_code_t (*get_id)(cfn_sal_dev_proximity_t *driver, uint32_t *id_out);
69
71};
72
74
80
81/* Functions inline ------------------------------------------------- */
82
84 uint32_t peripheral_id,
85 void *dependency,
87 const cfn_sal_phy_t *phy,
90 void *user_arg)
91{
92 CFN_HAL_POPULATE_DRIVER(
93 driver, CFN_SAL_DEV_TYPE_PROXIMITY, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
94}
95
98 const cfn_sal_phy_t *phy,
99 void *dependency,
101 void *user_arg);
103
104CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_init(cfn_sal_dev_proximity_t *driver)
105{
106 if (!driver)
107 {
108 return CFN_HAL_ERROR_BAD_PARAM;
109 }
110 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
111 return cfn_hal_base_init(&driver->base, CFN_SAL_DEV_TYPE_PROXIMITY);
112}
113
114CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_deinit(cfn_sal_dev_proximity_t *driver)
115{
116 if (!driver)
117 {
118 return CFN_HAL_ERROR_BAD_PARAM;
119 }
120 return cfn_hal_base_deinit(&driver->base, CFN_SAL_DEV_TYPE_PROXIMITY);
121}
122
123CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_config_set(cfn_sal_dev_proximity_t *driver,
124 const cfn_sal_dev_proximity_config_t *config)
125{
126 if (!driver)
127 {
128 return CFN_HAL_ERROR_BAD_PARAM;
129 }
130 driver->config = config;
131 return cfn_hal_base_config_set(&driver->base, CFN_SAL_DEV_TYPE_PROXIMITY, (const void *) config);
132}
133
134CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_config_get(cfn_sal_dev_proximity_t *driver,
136{
137 if (!driver || !config || !driver->config)
138 {
139 return CFN_HAL_ERROR_BAD_PARAM;
140 }
141 *config = *(driver->config);
142 return CFN_HAL_ERROR_OK;
143}
144
145CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_callback_register(cfn_sal_dev_proximity_t *driver,
147 void *user_arg)
148{
149 if (!driver)
150 {
151 return CFN_HAL_ERROR_BAD_PARAM;
152 }
153 driver->cb = callback;
154 driver->cb_user_arg = user_arg;
155 return cfn_hal_base_callback_register(
156 &driver->base, CFN_SAL_DEV_TYPE_PROXIMITY, (cfn_hal_callback_t) callback, user_arg);
157}
158
159CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_power_state_set(cfn_sal_dev_proximity_t *driver,
160 cfn_hal_power_state_t state)
161{
162 if (!driver)
163 {
164 return CFN_HAL_ERROR_BAD_PARAM;
165 }
166 return cfn_hal_power_state_set(&driver->base, CFN_SAL_DEV_TYPE_PROXIMITY, state);
167}
168
169CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_event_enable(cfn_sal_dev_proximity_t *driver,
170 uint32_t event_mask)
171{
172 if (!driver)
173 {
174 return CFN_HAL_ERROR_BAD_PARAM;
175 }
176 return cfn_hal_base_event_enable(&driver->base, CFN_SAL_DEV_TYPE_PROXIMITY, event_mask);
177}
178
179CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_event_disable(cfn_sal_dev_proximity_t *driver,
180 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_PROXIMITY, event_mask);
187}
188
189CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_event_get(cfn_sal_dev_proximity_t *driver,
190 uint32_t *event_mask)
191{
192 if (!driver)
193 {
194 return CFN_HAL_ERROR_BAD_PARAM;
195 }
196 return cfn_hal_base_event_get(&driver->base, CFN_SAL_DEV_TYPE_PROXIMITY, event_mask);
197}
198
199CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_error_enable(cfn_sal_dev_proximity_t *driver,
200 uint32_t error_mask)
201{
202 if (!driver)
203 {
204 return CFN_HAL_ERROR_BAD_PARAM;
205 }
206 return cfn_hal_base_error_enable(&driver->base, CFN_SAL_DEV_TYPE_PROXIMITY, error_mask);
207}
208
209CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_error_disable(cfn_sal_dev_proximity_t *driver,
210 uint32_t error_mask)
211{
212 if (!driver)
213 {
214 return CFN_HAL_ERROR_BAD_PARAM;
215 }
216 return cfn_hal_base_error_disable(&driver->base, CFN_SAL_DEV_TYPE_PROXIMITY, error_mask);
217}
218
219CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_error_get(cfn_sal_dev_proximity_t *driver,
220 uint32_t *error_mask)
221{
222 if (!driver)
223 {
224 return CFN_HAL_ERROR_BAD_PARAM;
225 }
226 return cfn_hal_base_error_get(&driver->base, CFN_SAL_DEV_TYPE_PROXIMITY, error_mask);
227}
228
229/* Service Specific Functions --------------------------------------- */
230
231CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_read_distance_mm(cfn_sal_dev_proximity_t *driver,
232 float *mm_out)
233{
234 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
235 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_PROXIMITY, read_distance_mm, driver, error, mm_out);
236 return error;
237}
238
239CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_read_raw(cfn_sal_dev_proximity_t *driver, uint32_t *raw_out)
240{
241 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
242 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_PROXIMITY, read_raw, driver, error, raw_out);
243 return error;
244}
245
246CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_get_status(cfn_sal_dev_proximity_t *driver,
247 uint32_t *status_flags)
248{
249 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
250 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_PROXIMITY, get_status, driver, error, status_flags);
251 return error;
252}
253
254CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_get_id(cfn_sal_dev_proximity_t *driver, uint32_t *id_out)
255{
256 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
257 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_PROXIMITY, get_id, driver, error, id_out);
258 return error;
259}
260
262{
263 if (driver && driver->base.type == CFN_SAL_DEV_TYPE_PROXIMITY && driver->api)
264 {
265 if (driver->api->handle_interrupt)
266 {
267 driver->api->handle_interrupt(driver);
268 }
269 }
270}
271
272#ifdef __cplusplus
273}
274#endif
275
276#endif /* CAFFEINE_SAL_DEV_PROXIMITY_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_proximity_power_state_set(cfn_sal_dev_proximity_t *driver, cfn_hal_power_state_t state)
Definition cfn_sal_dev_proximity.h:159
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_error_enable(cfn_sal_dev_proximity_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_proximity.h:199
CFN_HAL_INLINE void cfn_sal_dev_proximity_handle_interrupt(cfn_sal_dev_proximity_t *driver)
Definition cfn_sal_dev_proximity.h:261
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_init(cfn_sal_dev_proximity_t *driver)
Definition cfn_sal_dev_proximity.h:104
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_read_raw(cfn_sal_dev_proximity_t *driver, uint32_t *raw_out)
Definition cfn_sal_dev_proximity.h:239
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_error_disable(cfn_sal_dev_proximity_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_proximity.h:209
CFN_HAL_INLINE void cfn_sal_dev_proximity_populate(cfn_sal_dev_proximity_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_dev_proximity_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_dev_proximity_config_t *config, cfn_sal_dev_proximity_callback_t callback, void *user_arg)
Definition cfn_sal_dev_proximity.h:83
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_config_set(cfn_sal_dev_proximity_t *driver, const cfn_sal_dev_proximity_config_t *config)
Definition cfn_sal_dev_proximity.h:123
struct cfn_sal_dev_proximity_s cfn_sal_dev_proximity_t
Definition cfn_sal_dev_proximity.h:47
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_callback_register(cfn_sal_dev_proximity_t *driver, cfn_sal_dev_proximity_callback_t callback, void *user_arg)
Definition cfn_sal_dev_proximity.h:145
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_read_distance_mm(cfn_sal_dev_proximity_t *driver, float *mm_out)
Definition cfn_sal_dev_proximity.h:231
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_event_enable(cfn_sal_dev_proximity_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_proximity.h:169
void(* cfn_sal_dev_proximity_callback_t)(cfn_sal_dev_proximity_t *driver, uint32_t event, uint32_t error, void *user_arg)
Definition cfn_sal_dev_proximity.h:50
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_event_get(cfn_sal_dev_proximity_t *driver, uint32_t *event_mask)
Definition cfn_sal_dev_proximity.h:189
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_event_disable(cfn_sal_dev_proximity_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_proximity.h:179
cfn_sal_dev_proximity_event_t
Definition cfn_sal_dev_proximity.h:24
@ CFN_SAL_DEV_PROXIMITY_EVENT_NONE
Definition cfn_sal_dev_proximity.h:25
@ CFN_SAL_DEV_PROXIMITY_EVENT_AWAY
Definition cfn_sal_dev_proximity.h:29
@ CFN_SAL_DEV_PROXIMITY_EVENT_DATA_READY
Definition cfn_sal_dev_proximity.h:26
@ CFN_SAL_DEV_PROXIMITY_EVENT_THRESHOLD_LOW
Definition cfn_sal_dev_proximity.h:28
@ CFN_SAL_DEV_PROXIMITY_EVENT_THRESHOLD_HIGH
Definition cfn_sal_dev_proximity.h:27
@ CFN_SAL_DEV_PROXIMITY_EVENT_CLOSE
Definition cfn_sal_dev_proximity.h:30
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_get_status(cfn_sal_dev_proximity_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_proximity.h:246
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_deinit(cfn_sal_dev_proximity_t *driver)
Definition cfn_sal_dev_proximity.h:114
cfn_hal_error_code_t cfn_sal_dev_proximity_construct(cfn_sal_dev_proximity_t *driver, const cfn_sal_dev_proximity_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_dev_proximity_callback_t callback, void *user_arg)
cfn_hal_error_code_t cfn_sal_dev_proximity_destruct(cfn_sal_dev_proximity_t *driver)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_get_id(cfn_sal_dev_proximity_t *driver, uint32_t *id_out)
Definition cfn_sal_dev_proximity.h:254
CFN_HAL_VMT_CHECK(struct cfn_sal_dev_proximity_api_s)
#define CFN_SAL_DEV_TYPE_PROXIMITY
Definition cfn_sal_dev_proximity.h:19
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_config_get(cfn_sal_dev_proximity_t *driver, cfn_sal_dev_proximity_config_t *config)
Definition cfn_sal_dev_proximity.h:134
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_proximity_error_get(cfn_sal_dev_proximity_t *driver, uint32_t *error_mask)
Definition cfn_sal_dev_proximity.h:219
Proximity Sensor Virtual Method Table (VMT).
Definition cfn_sal_dev_proximity.h:59
cfn_hal_api_base_t base
Definition cfn_sal_dev_proximity.h:60
cfn_hal_error_code_t(* read_raw)(cfn_sal_dev_proximity_t *driver, uint32_t *raw_out)
Definition cfn_sal_dev_proximity.h:64
cfn_hal_error_code_t(* get_id)(cfn_sal_dev_proximity_t *driver, uint32_t *id_out)
Definition cfn_sal_dev_proximity.h:68
cfn_hal_error_code_t(* get_status)(cfn_sal_dev_proximity_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_proximity.h:67
cfn_hal_error_code_t(* read_distance_mm)(cfn_sal_dev_proximity_t *driver, float *mm_out)
Definition cfn_sal_dev_proximity.h:63
void(* handle_interrupt)(cfn_sal_dev_proximity_t *driver)
Definition cfn_sal_dev_proximity.h:70
Definition cfn_sal_dev_proximity.h:36
uint32_t led_duty_cycle
Definition cfn_sal_dev_proximity.h:39
uint32_t high_threshold
Definition cfn_sal_dev_proximity.h:41
void * custom
Definition cfn_sal_dev_proximity.h:44
uint32_t sampling_rate_hz
Definition cfn_sal_dev_proximity.h:37
uint32_t led_current_ma
Definition cfn_sal_dev_proximity.h:38
uint32_t integration_time_ms
Definition cfn_sal_dev_proximity.h:40
bool sunlight_cancellation_enable
Definition cfn_sal_dev_proximity.h:43
uint32_t low_threshold
Definition cfn_sal_dev_proximity.h:42
Generic physical mapping for services.
Definition cfn_sal_types.h:26