caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_dev_color.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_DEV_COLOR_H
7#define CAFFEINE_SAL_DEV_COLOR_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_COLOR CFN_SAL_TYPE('C', 'L', 'R')
20
21/* Types Enums ------------------------------------------------------*/
22
30
31/* Types Structs ----------------------------------------------------*/
32
42
43typedef struct cfn_sal_dev_color_s cfn_sal_dev_color_t;
45
47 uint32_t event,
48 uint32_t error,
49 void *user_arg);
50
55{
56 cfn_hal_api_base_t base;
57
58 /* Measurement Operations */
59 cfn_hal_error_code_t (*read_xyz)(cfn_sal_dev_color_t *driver, float *x, float *y, float *z);
60 cfn_hal_error_code_t (*read_cct)(cfn_sal_dev_color_t *driver, float *cct_k);
61 cfn_hal_error_code_t (*read_raw_channels)(
62 cfn_sal_dev_color_t *driver, uint32_t *ch0, uint32_t *ch1, uint32_t *ch2, uint32_t *ch3);
63
64 /* Data Retrieval */
65 cfn_hal_error_code_t (*get_status)(cfn_sal_dev_color_t *driver, uint32_t *status_flags);
66 cfn_hal_error_code_t (*get_id)(cfn_sal_dev_color_t *driver, uint32_t *id_out);
67
69};
70
72
75
76/* Functions inline ------------------------------------------------- */
77
79 uint32_t peripheral_id,
80 void *dependency,
81 const cfn_sal_dev_color_api_t *api,
82 const cfn_sal_phy_t *phy,
83 const cfn_sal_dev_color_config_t *config,
85 void *user_arg)
86{
87 CFN_HAL_POPULATE_DRIVER(
88 driver, CFN_SAL_DEV_TYPE_COLOR, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
89}
90
92 const cfn_sal_dev_color_config_t *config,
93 const cfn_sal_phy_t *phy,
94 void *dependency,
96 void *user_arg);
97cfn_hal_error_code_t cfn_sal_dev_color_destruct(cfn_sal_dev_color_t *driver);
98
99CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_init(cfn_sal_dev_color_t *driver)
100{
101 if (!driver)
102 {
103 return CFN_HAL_ERROR_BAD_PARAM;
104 }
105 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
106 return cfn_hal_base_init(&driver->base, CFN_SAL_DEV_TYPE_COLOR);
107}
108
109CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_deinit(cfn_sal_dev_color_t *driver)
110{
111 if (!driver)
112 {
113 return CFN_HAL_ERROR_BAD_PARAM;
114 }
115 return cfn_hal_base_deinit(&driver->base, CFN_SAL_DEV_TYPE_COLOR);
116}
117
118CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_config_set(cfn_sal_dev_color_t *driver,
119 const cfn_sal_dev_color_config_t *config)
120{
121 if (!driver)
122 {
123 return CFN_HAL_ERROR_BAD_PARAM;
124 }
125 driver->config = config;
126 return cfn_hal_base_config_set(&driver->base, CFN_SAL_DEV_TYPE_COLOR, (const void *) config);
127}
128
129CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_config_get(cfn_sal_dev_color_t *driver,
131{
132 if (!driver || !config || !driver->config)
133 {
134 return CFN_HAL_ERROR_BAD_PARAM;
135 }
136 *config = *(driver->config);
137 return CFN_HAL_ERROR_OK;
138}
139
140CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_callback_register(cfn_sal_dev_color_t *driver,
142 void *user_arg)
143{
144 if (!driver)
145 {
146 return CFN_HAL_ERROR_BAD_PARAM;
147 }
148 driver->cb = callback;
149 driver->cb_user_arg = user_arg;
150 return cfn_hal_base_callback_register(
151 &driver->base, CFN_SAL_DEV_TYPE_COLOR, (cfn_hal_callback_t) callback, user_arg);
152}
153
154CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_power_state_set(cfn_sal_dev_color_t *driver,
155 cfn_hal_power_state_t state)
156{
157 if (!driver)
158 {
159 return CFN_HAL_ERROR_BAD_PARAM;
160 }
161 return cfn_hal_power_state_set(&driver->base, CFN_SAL_DEV_TYPE_COLOR, state);
162}
163
164CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_event_enable(cfn_sal_dev_color_t *driver, uint32_t event_mask)
165{
166 if (!driver)
167 {
168 return CFN_HAL_ERROR_BAD_PARAM;
169 }
170 return cfn_hal_base_event_enable(&driver->base, CFN_SAL_DEV_TYPE_COLOR, event_mask);
171}
172
173CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_event_disable(cfn_sal_dev_color_t *driver, uint32_t event_mask)
174{
175 if (!driver)
176 {
177 return CFN_HAL_ERROR_BAD_PARAM;
178 }
179 return cfn_hal_base_event_disable(&driver->base, CFN_SAL_DEV_TYPE_COLOR, event_mask);
180}
181
182CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_event_get(cfn_sal_dev_color_t *driver, uint32_t *event_mask)
183{
184 if (!driver)
185 {
186 return CFN_HAL_ERROR_BAD_PARAM;
187 }
188 return cfn_hal_base_event_get(&driver->base, CFN_SAL_DEV_TYPE_COLOR, event_mask);
189}
190
191CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_error_enable(cfn_sal_dev_color_t *driver, uint32_t error_mask)
192{
193 if (!driver)
194 {
195 return CFN_HAL_ERROR_BAD_PARAM;
196 }
197 return cfn_hal_base_error_enable(&driver->base, CFN_SAL_DEV_TYPE_COLOR, error_mask);
198}
199
200CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_error_disable(cfn_sal_dev_color_t *driver, uint32_t error_mask)
201{
202 if (!driver)
203 {
204 return CFN_HAL_ERROR_BAD_PARAM;
205 }
206 return cfn_hal_base_error_disable(&driver->base, CFN_SAL_DEV_TYPE_COLOR, error_mask);
207}
208
209CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_error_get(cfn_sal_dev_color_t *driver, uint32_t *error_mask)
210{
211 if (!driver)
212 {
213 return CFN_HAL_ERROR_BAD_PARAM;
214 }
215 return cfn_hal_base_error_get(&driver->base, CFN_SAL_DEV_TYPE_COLOR, error_mask);
216}
217
218/* Service Specific Functions --------------------------------------- */
219
220CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_read_xyz(cfn_sal_dev_color_t *driver,
221 float *x,
222 float *y,
223 float *z)
224{
225 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
226 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_COLOR, read_xyz, driver, error, x, y, z);
227 return error;
228}
229
230CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_read_cct(cfn_sal_dev_color_t *driver, float *cct_k)
231{
232 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
233 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_COLOR, read_cct, driver, error, cct_k);
234 return error;
235}
236
237CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_read_raw_channels(
238 cfn_sal_dev_color_t *driver, uint32_t *ch0, uint32_t *ch1, uint32_t *ch2, uint32_t *ch3)
239{
240 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
241 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_COLOR, read_raw_channels, driver, error, ch0, ch1, ch2, ch3);
242 return error;
243}
244
245CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_get_status(cfn_sal_dev_color_t *driver, uint32_t *status_flags)
246{
247 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
248 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_COLOR, get_status, driver, error, status_flags);
249 return error;
250}
251
252CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_get_id(cfn_sal_dev_color_t *driver, uint32_t *id_out)
253{
254 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
255 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_COLOR, get_id, driver, error, id_out);
256 return error;
257}
258
260{
261 if (driver && driver->base.type == CFN_SAL_DEV_TYPE_COLOR && driver->api)
262 {
263 if (driver->api->handle_interrupt)
264 {
265 driver->api->handle_interrupt(driver);
266 }
267 }
268}
269
270#ifdef __cplusplus
271}
272#endif
273
274#endif /* CAFFEINE_SAL_DEV_COLOR_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_color_read_cct(cfn_sal_dev_color_t *driver, float *cct_k)
Definition cfn_sal_dev_color.h:230
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_get_status(cfn_sal_dev_color_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_color.h:245
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_config_set(cfn_sal_dev_color_t *driver, const cfn_sal_dev_color_config_t *config)
Definition cfn_sal_dev_color.h:118
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_init(cfn_sal_dev_color_t *driver)
Definition cfn_sal_dev_color.h:99
#define CFN_SAL_DEV_TYPE_COLOR
Definition cfn_sal_dev_color.h:19
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_power_state_set(cfn_sal_dev_color_t *driver, cfn_hal_power_state_t state)
Definition cfn_sal_dev_color.h:154
cfn_hal_error_code_t cfn_sal_dev_color_construct(cfn_sal_dev_color_t *driver, const cfn_sal_dev_color_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_dev_color_callback_t callback, void *user_arg)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_deinit(cfn_sal_dev_color_t *driver)
Definition cfn_sal_dev_color.h:109
cfn_sal_dev_color_event_t
Definition cfn_sal_dev_color.h:24
@ CFN_SAL_DEV_COLOR_EVENT_NONE
Definition cfn_sal_dev_color.h:25
@ CFN_SAL_DEV_COLOR_EVENT_THRESHOLD_HIGH
Definition cfn_sal_dev_color.h:27
@ CFN_SAL_DEV_COLOR_EVENT_THRESHOLD_LOW
Definition cfn_sal_dev_color.h:28
@ CFN_SAL_DEV_COLOR_EVENT_DATA_READY
Definition cfn_sal_dev_color.h:26
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_config_get(cfn_sal_dev_color_t *driver, cfn_sal_dev_color_config_t *config)
Definition cfn_sal_dev_color.h:129
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_error_enable(cfn_sal_dev_color_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_color.h:191
cfn_hal_error_code_t cfn_sal_dev_color_destruct(cfn_sal_dev_color_t *driver)
struct cfn_sal_dev_color_s cfn_sal_dev_color_t
Definition cfn_sal_dev_color.h:43
void(* cfn_sal_dev_color_callback_t)(cfn_sal_dev_color_t *driver, uint32_t event, uint32_t error, void *user_arg)
Definition cfn_sal_dev_color.h:46
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_read_xyz(cfn_sal_dev_color_t *driver, float *x, float *y, float *z)
Definition cfn_sal_dev_color.h:220
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_error_get(cfn_sal_dev_color_t *driver, uint32_t *error_mask)
Definition cfn_sal_dev_color.h:209
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_read_raw_channels(cfn_sal_dev_color_t *driver, uint32_t *ch0, uint32_t *ch1, uint32_t *ch2, uint32_t *ch3)
Definition cfn_sal_dev_color.h:237
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_event_disable(cfn_sal_dev_color_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_color.h:173
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_error_disable(cfn_sal_dev_color_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_color.h:200
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_event_enable(cfn_sal_dev_color_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_color.h:164
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_get_id(cfn_sal_dev_color_t *driver, uint32_t *id_out)
Definition cfn_sal_dev_color.h:252
CFN_HAL_INLINE void cfn_sal_dev_color_handle_interrupt(cfn_sal_dev_color_t *driver)
Definition cfn_sal_dev_color.h:259
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_callback_register(cfn_sal_dev_color_t *driver, cfn_sal_dev_color_callback_t callback, void *user_arg)
Definition cfn_sal_dev_color.h:140
CFN_HAL_VMT_CHECK(struct cfn_sal_dev_color_api_s)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_color_event_get(cfn_sal_dev_color_t *driver, uint32_t *event_mask)
Definition cfn_sal_dev_color.h:182
CFN_HAL_INLINE void cfn_sal_dev_color_populate(cfn_sal_dev_color_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_dev_color_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_dev_color_config_t *config, cfn_sal_dev_color_callback_t callback, void *user_arg)
Definition cfn_sal_dev_color.h:78
Color Sensor Virtual Method Table (VMT).
Definition cfn_sal_dev_color.h:55
cfn_hal_api_base_t base
Definition cfn_sal_dev_color.h:56
cfn_hal_error_code_t(* read_raw_channels)(cfn_sal_dev_color_t *driver, uint32_t *ch0, uint32_t *ch1, uint32_t *ch2, uint32_t *ch3)
Definition cfn_sal_dev_color.h:61
cfn_hal_error_code_t(* read_cct)(cfn_sal_dev_color_t *driver, float *cct_k)
Definition cfn_sal_dev_color.h:60
cfn_hal_error_code_t(* get_id)(cfn_sal_dev_color_t *driver, uint32_t *id_out)
Definition cfn_sal_dev_color.h:66
cfn_hal_error_code_t(* read_xyz)(cfn_sal_dev_color_t *driver, float *x, float *y, float *z)
Definition cfn_sal_dev_color.h:59
void(* handle_interrupt)(cfn_sal_dev_color_t *driver)
Definition cfn_sal_dev_color.h:68
cfn_hal_error_code_t(* get_status)(cfn_sal_dev_color_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_color.h:65
Definition cfn_sal_dev_color.h:34
uint32_t high_threshold
Definition cfn_sal_dev_color.h:37
bool auto_range_enable
Definition cfn_sal_dev_color.h:36
uint32_t integration_time_ms
Definition cfn_sal_dev_color.h:35
void * custom
Definition cfn_sal_dev_color.h:40
uint32_t low_threshold
Definition cfn_sal_dev_color.h:38
uint32_t sampling_rate_hz
Definition cfn_sal_dev_color.h:39
Generic physical mapping for services.
Definition cfn_sal_types.h:26