caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_dev_ambient_light.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_DEV_AMBIENT_LIGHT_H
7#define CAFFEINE_SAL_DEV_AMBIENT_LIGHT_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_AMBIENT_LIGHT CFN_SAL_TYPE('L', 'U', 'X')
20
21/* Types Enums ------------------------------------------------------*/
22
30
31/* Types Structs ----------------------------------------------------*/
32
33typedef struct
34{
35 uint32_t gain;
38 uint32_t low_threshold;
41 void *custom;
43
44typedef struct cfn_sal_dev_ambient_light_s cfn_sal_dev_ambient_light_t;
46
48 uint32_t event,
49 uint32_t error,
50 void *user_arg);
51
56{
57 cfn_hal_api_base_t base;
58
59 /* Measurement Operations */
60 cfn_hal_error_code_t (*read_lux)(cfn_sal_dev_ambient_light_t *driver, float *lux_out);
61 cfn_hal_error_code_t (*read_raw)(cfn_sal_dev_ambient_light_t *driver, uint32_t *raw_out);
62 cfn_hal_error_code_t (*read_channels)(cfn_sal_dev_ambient_light_t *driver, uint16_t *ch1, uint16_t *ch2);
63
64 /* Feature Data Retrieval */
65 cfn_hal_error_code_t (*get_status)(cfn_sal_dev_ambient_light_t *driver, uint32_t *status_flags);
66 cfn_hal_error_code_t (*get_id)(cfn_sal_dev_ambient_light_t *driver, uint32_t *id_out);
67
69};
70
72
73CFN_SAL_CREATE_DRIVER_TYPE(sal_dev_ambient_light,
78
79/* Functions inline ------------------------------------------------- */
80
82 uint32_t peripheral_id,
83 void *dependency,
85 const cfn_sal_phy_t *phy,
88 void *user_arg)
89{
90 CFN_HAL_POPULATE_DRIVER(
91 driver, CFN_SAL_DEV_TYPE_AMBIENT_LIGHT, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
92}
93
96 const cfn_sal_phy_t *phy,
97 void *dependency,
99 void *user_arg);
101
102CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_init(cfn_sal_dev_ambient_light_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_AMBIENT_LIGHT);
110}
111
112CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_deinit(cfn_sal_dev_ambient_light_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_AMBIENT_LIGHT);
119}
120
121CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_config_set(
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_AMBIENT_LIGHT, (const void *) config);
130}
131
132CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_config_get(cfn_sal_dev_ambient_light_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_ambient_light_callback_register(
145{
146 if (!driver)
147 {
148 return CFN_HAL_ERROR_BAD_PARAM;
149 }
150 driver->cb = callback;
151 driver->cb_user_arg = user_arg;
152 return cfn_hal_base_callback_register(
153 &driver->base, CFN_SAL_DEV_TYPE_AMBIENT_LIGHT, (cfn_hal_callback_t) callback, user_arg);
154}
155
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_AMBIENT_LIGHT, state);
164}
165
166CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_event_enable(cfn_sal_dev_ambient_light_t *driver,
167 uint32_t event_mask)
168{
169 if (!driver)
170 {
171 return CFN_HAL_ERROR_BAD_PARAM;
172 }
173 return cfn_hal_base_event_enable(&driver->base, CFN_SAL_DEV_TYPE_AMBIENT_LIGHT, event_mask);
174}
175
177 uint32_t event_mask)
178{
179 if (!driver)
180 {
181 return CFN_HAL_ERROR_BAD_PARAM;
182 }
183 return cfn_hal_base_event_disable(&driver->base, CFN_SAL_DEV_TYPE_AMBIENT_LIGHT, event_mask);
184}
185
186CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_event_get(cfn_sal_dev_ambient_light_t *driver,
187 uint32_t *event_mask)
188{
189 if (!driver)
190 {
191 return CFN_HAL_ERROR_BAD_PARAM;
192 }
193 return cfn_hal_base_event_get(&driver->base, CFN_SAL_DEV_TYPE_AMBIENT_LIGHT, event_mask);
194}
195
196CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_error_enable(cfn_sal_dev_ambient_light_t *driver,
197 uint32_t error_mask)
198{
199 if (!driver)
200 {
201 return CFN_HAL_ERROR_BAD_PARAM;
202 }
203 return cfn_hal_base_error_enable(&driver->base, CFN_SAL_DEV_TYPE_AMBIENT_LIGHT, error_mask);
204}
205
207 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_AMBIENT_LIGHT, error_mask);
214}
215
216CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_error_get(cfn_sal_dev_ambient_light_t *driver,
217 uint32_t *error_mask)
218{
219 if (!driver)
220 {
221 return CFN_HAL_ERROR_BAD_PARAM;
222 }
223 return cfn_hal_base_error_get(&driver->base, CFN_SAL_DEV_TYPE_AMBIENT_LIGHT, error_mask);
224}
225
226/* Service Specific Functions --------------------------------------- */
227
228CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_read_lux(cfn_sal_dev_ambient_light_t *driver,
229 float *lux_out)
230{
231 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
232 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_AMBIENT_LIGHT, read_lux, driver, error, lux_out);
233 return error;
234}
235
236CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_read_raw(cfn_sal_dev_ambient_light_t *driver,
237 uint32_t *raw_out)
238{
239 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
240 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_AMBIENT_LIGHT, read_raw, driver, error, raw_out);
241 return error;
242}
243
245 uint16_t *ch1,
246 uint16_t *ch2)
247{
248 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
249 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_AMBIENT_LIGHT, read_channels, driver, error, ch1, ch2);
250 return error;
251}
252
253CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_get_status(cfn_sal_dev_ambient_light_t *driver,
254 uint32_t *status_flags)
255{
256 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
257 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_AMBIENT_LIGHT, get_status, driver, error, status_flags);
258 return error;
259}
260
261CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_get_id(cfn_sal_dev_ambient_light_t *driver,
262 uint32_t *id_out)
263{
264 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
265 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_AMBIENT_LIGHT, get_id, driver, error, id_out);
266 return error;
267}
268
270{
271 if (driver && driver->base.type == CFN_SAL_DEV_TYPE_AMBIENT_LIGHT && driver->api)
272 {
273 if (driver->api->handle_interrupt)
274 {
275 driver->api->handle_interrupt(driver);
276 }
277 }
278}
279
280#ifdef __cplusplus
281}
282#endif
283
284#endif /* CAFFEINE_SAL_DEV_AMBIENT_LIGHT_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_ambient_light_event_get(cfn_sal_dev_ambient_light_t *driver, uint32_t *event_mask)
Definition cfn_sal_dev_ambient_light.h:186
struct cfn_sal_dev_ambient_light_s cfn_sal_dev_ambient_light_t
Definition cfn_sal_dev_ambient_light.h:44
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_get_id(cfn_sal_dev_ambient_light_t *driver, uint32_t *id_out)
Definition cfn_sal_dev_ambient_light.h:261
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_read_lux(cfn_sal_dev_ambient_light_t *driver, float *lux_out)
Definition cfn_sal_dev_ambient_light.h:228
void(* cfn_sal_dev_ambient_light_callback_t)(cfn_sal_dev_ambient_light_t *driver, uint32_t event, uint32_t error, void *user_arg)
Definition cfn_sal_dev_ambient_light.h:47
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_power_state_set(cfn_sal_dev_ambient_light_t *driver, cfn_hal_power_state_t state)
Definition cfn_sal_dev_ambient_light.h:156
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_read_raw(cfn_sal_dev_ambient_light_t *driver, uint32_t *raw_out)
Definition cfn_sal_dev_ambient_light.h:236
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_init(cfn_sal_dev_ambient_light_t *driver)
Definition cfn_sal_dev_ambient_light.h:102
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_deinit(cfn_sal_dev_ambient_light_t *driver)
Definition cfn_sal_dev_ambient_light.h:112
cfn_hal_error_code_t cfn_sal_dev_ambient_light_destruct(cfn_sal_dev_ambient_light_t *driver)
CFN_HAL_INLINE void cfn_sal_dev_ambient_light_handle_interrupt(cfn_sal_dev_ambient_light_t *driver)
Definition cfn_sal_dev_ambient_light.h:269
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_get_status(cfn_sal_dev_ambient_light_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_ambient_light.h:253
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_error_get(cfn_sal_dev_ambient_light_t *driver, uint32_t *error_mask)
Definition cfn_sal_dev_ambient_light.h:216
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_config_get(cfn_sal_dev_ambient_light_t *driver, cfn_sal_dev_ambient_light_config_t *config)
Definition cfn_sal_dev_ambient_light.h:132
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_error_enable(cfn_sal_dev_ambient_light_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_ambient_light.h:196
#define CFN_SAL_DEV_TYPE_AMBIENT_LIGHT
Definition cfn_sal_dev_ambient_light.h:19
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_config_set(cfn_sal_dev_ambient_light_t *driver, const cfn_sal_dev_ambient_light_config_t *config)
Definition cfn_sal_dev_ambient_light.h:121
cfn_hal_error_code_t cfn_sal_dev_ambient_light_construct(cfn_sal_dev_ambient_light_t *driver, const cfn_sal_dev_ambient_light_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_dev_ambient_light_callback_t callback, void *user_arg)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_callback_register(cfn_sal_dev_ambient_light_t *driver, cfn_sal_dev_ambient_light_callback_t callback, void *user_arg)
Definition cfn_sal_dev_ambient_light.h:143
cfn_sal_dev_ambient_light_event_t
Definition cfn_sal_dev_ambient_light.h:24
@ CFN_SAL_DEV_AMBIENT_LIGHT_EVENT_THRESHOLD_LOW
Definition cfn_sal_dev_ambient_light.h:28
@ CFN_SAL_DEV_AMBIENT_LIGHT_EVENT_THRESHOLD_HIGH
Definition cfn_sal_dev_ambient_light.h:27
@ CFN_SAL_DEV_AMBIENT_LIGHT_EVENT_NONE
Definition cfn_sal_dev_ambient_light.h:25
@ CFN_SAL_DEV_AMBIENT_LIGHT_EVENT_DATA_READY
Definition cfn_sal_dev_ambient_light.h:26
CFN_HAL_INLINE void cfn_sal_dev_ambient_light_populate(cfn_sal_dev_ambient_light_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_dev_ambient_light_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_dev_ambient_light_config_t *config, cfn_sal_dev_ambient_light_callback_t callback, void *user_arg)
Definition cfn_sal_dev_ambient_light.h:81
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_read_channels(cfn_sal_dev_ambient_light_t *driver, uint16_t *ch1, uint16_t *ch2)
Definition cfn_sal_dev_ambient_light.h:244
CFN_HAL_VMT_CHECK(struct cfn_sal_dev_ambient_light_api_s)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_event_enable(cfn_sal_dev_ambient_light_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_ambient_light.h:166
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_error_disable(cfn_sal_dev_ambient_light_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_ambient_light.h:206
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_ambient_light_event_disable(cfn_sal_dev_ambient_light_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_ambient_light.h:176
Light Sensor Virtual Method Table (VMT).
Definition cfn_sal_dev_ambient_light.h:56
cfn_hal_error_code_t(* read_channels)(cfn_sal_dev_ambient_light_t *driver, uint16_t *ch1, uint16_t *ch2)
Definition cfn_sal_dev_ambient_light.h:62
cfn_hal_error_code_t(* get_status)(cfn_sal_dev_ambient_light_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_ambient_light.h:65
cfn_hal_error_code_t(* get_id)(cfn_sal_dev_ambient_light_t *driver, uint32_t *id_out)
Definition cfn_sal_dev_ambient_light.h:66
cfn_hal_error_code_t(* read_raw)(cfn_sal_dev_ambient_light_t *driver, uint32_t *raw_out)
Definition cfn_sal_dev_ambient_light.h:61
void(* handle_interrupt)(cfn_sal_dev_ambient_light_t *driver)
Definition cfn_sal_dev_ambient_light.h:68
cfn_hal_error_code_t(* read_lux)(cfn_sal_dev_ambient_light_t *driver, float *lux_out)
Definition cfn_sal_dev_ambient_light.h:60
cfn_hal_api_base_t base
Definition cfn_sal_dev_ambient_light.h:57
Definition cfn_sal_dev_ambient_light.h:34
uint32_t integration_time_ms
Definition cfn_sal_dev_ambient_light.h:36
uint32_t high_threshold
Definition cfn_sal_dev_ambient_light.h:37
uint32_t gain
Definition cfn_sal_dev_ambient_light.h:35
void * custom
Definition cfn_sal_dev_ambient_light.h:41
uint32_t sampling_rate_hz
Definition cfn_sal_dev_ambient_light.h:40
uint32_t low_threshold
Definition cfn_sal_dev_ambient_light.h:38
uint8_t persistence_hits
Definition cfn_sal_dev_ambient_light.h:39
Generic physical mapping for services.
Definition cfn_sal_types.h:26