caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_dev_humidity.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_DEV_HUMIDITY_H
7#define CAFFEINE_SAL_DEV_HUMIDITY_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_HUMIDITY CFN_SAL_TYPE('H', 'U', 'M')
20
21/* Types Enums ------------------------------------------------------*/
22
28
34
44
45/* Types Structs ----------------------------------------------------*/
46
56
57typedef struct cfn_sal_dev_humidity_s cfn_sal_dev_humidity_t;
59
61 uint32_t event,
62 uint32_t error,
63 void *user_arg);
64
69{
70 cfn_hal_api_base_t base;
71
72 /* Measurement Operations */
73 cfn_hal_error_code_t (*read_relative_humidity)(cfn_sal_dev_humidity_t *driver, float *hum_out);
74 cfn_hal_error_code_t (*read_raw)(cfn_sal_dev_humidity_t *driver, int32_t *raw_out);
75
76 /* Configuration */
77 cfn_hal_error_code_t (*start_conversion)(cfn_sal_dev_humidity_t *driver);
78 cfn_hal_error_code_t (*get_status)(cfn_sal_dev_humidity_t *driver, uint32_t *status_flags);
79
80 /* Environmental & Device Features */
81 cfn_hal_error_code_t (*enable_heater)(cfn_sal_dev_humidity_t *driver, uint32_t power_mw, uint32_t duration_ms);
82 cfn_hal_error_code_t (*soft_reset)(cfn_sal_dev_humidity_t *driver);
83 cfn_hal_error_code_t (*get_id)(cfn_sal_dev_humidity_t *driver, uint32_t *id_out);
84
86};
87
89
95
96/* Functions inline ------------------------------------------------- */
97
99 uint32_t peripheral_id,
100 void *dependency,
102 const cfn_sal_phy_t *phy,
103 const cfn_sal_dev_humidity_config_t *config,
105 void *user_arg)
106{
107 CFN_HAL_POPULATE_DRIVER(
108 driver, CFN_SAL_DEV_TYPE_HUMIDITY, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
109}
110
112 const cfn_sal_dev_humidity_config_t *config,
113 const cfn_sal_phy_t *phy,
114 void *dependency,
116 void *user_arg);
118
119CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_init(cfn_sal_dev_humidity_t *driver)
120{
121 if (!driver)
122 {
123 return CFN_HAL_ERROR_BAD_PARAM;
124 }
125 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
126 return cfn_hal_base_init(&driver->base, CFN_SAL_DEV_TYPE_HUMIDITY);
127}
128
129CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_deinit(cfn_sal_dev_humidity_t *driver)
130{
131 if (!driver)
132 {
133 return CFN_HAL_ERROR_BAD_PARAM;
134 }
135 return cfn_hal_base_deinit(&driver->base, CFN_SAL_DEV_TYPE_HUMIDITY);
136}
137
138CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_config_set(cfn_sal_dev_humidity_t *driver,
139 const cfn_sal_dev_humidity_config_t *config)
140{
141 if (!driver)
142 {
143 return CFN_HAL_ERROR_BAD_PARAM;
144 }
145 driver->config = config;
146 return cfn_hal_base_config_set(&driver->base, CFN_SAL_DEV_TYPE_HUMIDITY, (const void *) config);
147}
148
149CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_config_get(cfn_sal_dev_humidity_t *driver,
151{
152 if (!driver || !config || !driver->config)
153 {
154 return CFN_HAL_ERROR_BAD_PARAM;
155 }
156 *config = *(driver->config);
157 return CFN_HAL_ERROR_OK;
158}
159
160CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_callback_register(cfn_sal_dev_humidity_t *driver,
162 void *user_arg)
163{
164 if (!driver)
165 {
166 return CFN_HAL_ERROR_BAD_PARAM;
167 }
168 driver->cb = callback;
169 driver->cb_user_arg = user_arg;
170 return cfn_hal_base_callback_register(
171 &driver->base, CFN_SAL_DEV_TYPE_HUMIDITY, (cfn_hal_callback_t) callback, user_arg);
172}
173
174CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_power_state_set(cfn_sal_dev_humidity_t *driver,
175 cfn_hal_power_state_t state)
176{
177 if (!driver)
178 {
179 return CFN_HAL_ERROR_BAD_PARAM;
180 }
181 return cfn_hal_power_state_set(&driver->base, CFN_SAL_DEV_TYPE_HUMIDITY, state);
182}
183
184CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_event_enable(cfn_sal_dev_humidity_t *driver,
185 uint32_t event_mask)
186{
187 if (!driver)
188 {
189 return CFN_HAL_ERROR_BAD_PARAM;
190 }
191 return cfn_hal_base_event_enable(&driver->base, CFN_SAL_DEV_TYPE_HUMIDITY, event_mask);
192}
193
194CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_event_disable(cfn_sal_dev_humidity_t *driver,
195 uint32_t event_mask)
196{
197 if (!driver)
198 {
199 return CFN_HAL_ERROR_BAD_PARAM;
200 }
201 return cfn_hal_base_event_disable(&driver->base, CFN_SAL_DEV_TYPE_HUMIDITY, event_mask);
202}
203
204CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_event_get(cfn_sal_dev_humidity_t *driver, uint32_t *event_mask)
205{
206 if (!driver)
207 {
208 return CFN_HAL_ERROR_BAD_PARAM;
209 }
210 return cfn_hal_base_event_get(&driver->base, CFN_SAL_DEV_TYPE_HUMIDITY, event_mask);
211}
212
213CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_error_enable(cfn_sal_dev_humidity_t *driver,
214 uint32_t error_mask)
215{
216 if (!driver)
217 {
218 return CFN_HAL_ERROR_BAD_PARAM;
219 }
220 return cfn_hal_base_error_enable(&driver->base, CFN_SAL_DEV_TYPE_HUMIDITY, error_mask);
221}
222
223CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_error_disable(cfn_sal_dev_humidity_t *driver,
224 uint32_t error_mask)
225{
226 if (!driver)
227 {
228 return CFN_HAL_ERROR_BAD_PARAM;
229 }
230 return cfn_hal_base_error_disable(&driver->base, CFN_SAL_DEV_TYPE_HUMIDITY, error_mask);
231}
232
233CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_error_get(cfn_sal_dev_humidity_t *driver, uint32_t *error_mask)
234{
235 if (!driver)
236 {
237 return CFN_HAL_ERROR_BAD_PARAM;
238 }
239 return cfn_hal_base_error_get(&driver->base, CFN_SAL_DEV_TYPE_HUMIDITY, error_mask);
240}
241
242/* Service Specific Functions --------------------------------------- */
243
244CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_read_rh(cfn_sal_dev_humidity_t *driver, float *hum_out)
245{
246 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
247 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_HUMIDITY, read_relative_humidity, driver, error, hum_out);
248 return error;
249}
250
251CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_read_raw(cfn_sal_dev_humidity_t *driver, int32_t *raw_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_HUMIDITY, read_raw, driver, error, raw_out);
255 return error;
256}
257
258CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_start_conversion(cfn_sal_dev_humidity_t *driver)
259{
260 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
261 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_DEV_TYPE_HUMIDITY, start_conversion, driver, error);
262 return error;
263}
264
265CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_get_status(cfn_sal_dev_humidity_t *driver,
266 uint32_t *status_flags)
267{
268 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
269 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_HUMIDITY, get_status, driver, error, status_flags);
270 return error;
271}
272
273CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_enable_heater(cfn_sal_dev_humidity_t *driver,
274 uint32_t power_mw,
275 uint32_t duration_ms)
276{
277 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
278 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_HUMIDITY, enable_heater, driver, error, power_mw, duration_ms);
279 return error;
280}
281
282CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_soft_reset(cfn_sal_dev_humidity_t *driver)
283{
284 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
285 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_DEV_TYPE_HUMIDITY, soft_reset, driver, error);
286 return error;
287}
288
289CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_get_id(cfn_sal_dev_humidity_t *driver, uint32_t *id_out)
290{
291 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
292 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_HUMIDITY, get_id, driver, error, id_out);
293 return error;
294}
295
297{
298 if (driver && driver->base.type == CFN_SAL_DEV_TYPE_HUMIDITY && driver->api)
299 {
300 if (driver->api->handle_interrupt)
301 {
302 driver->api->handle_interrupt(driver);
303 }
304 }
305}
306
307#ifdef __cplusplus
308}
309#endif
310
311#endif /* CAFFEINE_SAL_DEV_HUMIDITY_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_humidity_event_enable(cfn_sal_dev_humidity_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_humidity.h:184
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_event_disable(cfn_sal_dev_humidity_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_humidity.h:194
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_get_status(cfn_sal_dev_humidity_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_humidity.h:265
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_error_enable(cfn_sal_dev_humidity_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_humidity.h:213
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_deinit(cfn_sal_dev_humidity_t *driver)
Definition cfn_sal_dev_humidity.h:129
cfn_hal_error_code_t cfn_sal_dev_humidity_construct(cfn_sal_dev_humidity_t *driver, const cfn_sal_dev_humidity_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_dev_humidity_callback_t callback, void *user_arg)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_get_id(cfn_sal_dev_humidity_t *driver, uint32_t *id_out)
Definition cfn_sal_dev_humidity.h:289
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_event_get(cfn_sal_dev_humidity_t *driver, uint32_t *event_mask)
Definition cfn_sal_dev_humidity.h:204
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_callback_register(cfn_sal_dev_humidity_t *driver, cfn_sal_dev_humidity_callback_t callback, void *user_arg)
Definition cfn_sal_dev_humidity.h:160
cfn_sal_dev_humidity_mode_t
Definition cfn_sal_dev_humidity.h:24
@ CFN_SAL_DEV_HUMIDITY_MODE_CONTINUOUS
Definition cfn_sal_dev_humidity.h:25
@ CFN_SAL_DEV_HUMIDITY_MODE_ONE_SHOT
Definition cfn_sal_dev_humidity.h:26
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_error_get(cfn_sal_dev_humidity_t *driver, uint32_t *error_mask)
Definition cfn_sal_dev_humidity.h:233
CFN_HAL_INLINE void cfn_sal_dev_humidity_populate(cfn_sal_dev_humidity_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_dev_humidity_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_dev_humidity_config_t *config, cfn_sal_dev_humidity_callback_t callback, void *user_arg)
Definition cfn_sal_dev_humidity.h:98
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_enable_heater(cfn_sal_dev_humidity_t *driver, uint32_t power_mw, uint32_t duration_ms)
Definition cfn_sal_dev_humidity.h:273
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_config_set(cfn_sal_dev_humidity_t *driver, const cfn_sal_dev_humidity_config_t *config)
Definition cfn_sal_dev_humidity.h:138
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_start_conversion(cfn_sal_dev_humidity_t *driver)
Definition cfn_sal_dev_humidity.h:258
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_soft_reset(cfn_sal_dev_humidity_t *driver)
Definition cfn_sal_dev_humidity.h:282
struct cfn_sal_dev_humidity_s cfn_sal_dev_humidity_t
Definition cfn_sal_dev_humidity.h:57
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_error_disable(cfn_sal_dev_humidity_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_humidity.h:223
CFN_HAL_VMT_CHECK(struct cfn_sal_dev_humidity_api_s)
CFN_HAL_INLINE void cfn_sal_dev_humidity_handle_interrupt(cfn_sal_dev_humidity_t *driver)
Definition cfn_sal_dev_humidity.h:296
cfn_sal_dev_humidity_event_t
Definition cfn_sal_dev_humidity.h:30
@ CFN_SAL_DEV_HUMIDITY_EVENT_DATA_READY
Definition cfn_sal_dev_humidity.h:32
@ CFN_SAL_DEV_HUMIDITY_EVENT_NONE
Definition cfn_sal_dev_humidity.h:31
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_power_state_set(cfn_sal_dev_humidity_t *driver, cfn_hal_power_state_t state)
Definition cfn_sal_dev_humidity.h:174
cfn_sal_dev_humidity_oversampling_t
Definition cfn_sal_dev_humidity.h:36
@ CFN_SAL_DEV_HUMIDITY_OVERSAMPLING_2X
Definition cfn_sal_dev_humidity.h:39
@ CFN_SAL_DEV_HUMIDITY_OVERSAMPLING_16X
Definition cfn_sal_dev_humidity.h:42
@ CFN_SAL_DEV_HUMIDITY_OVERSAMPLING_4X
Definition cfn_sal_dev_humidity.h:40
@ CFN_SAL_DEV_HUMIDITY_OVERSAMPLING_1X
Definition cfn_sal_dev_humidity.h:38
@ CFN_SAL_DEV_HUMIDITY_OVERSAMPLING_8X
Definition cfn_sal_dev_humidity.h:41
@ CFN_SAL_DEV_HUMIDITY_OVERSAMPLING_NONE
Definition cfn_sal_dev_humidity.h:37
cfn_hal_error_code_t cfn_sal_dev_humidity_destruct(cfn_sal_dev_humidity_t *driver)
#define CFN_SAL_DEV_TYPE_HUMIDITY
Definition cfn_sal_dev_humidity.h:19
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_read_rh(cfn_sal_dev_humidity_t *driver, float *hum_out)
Definition cfn_sal_dev_humidity.h:244
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_init(cfn_sal_dev_humidity_t *driver)
Definition cfn_sal_dev_humidity.h:119
void(* cfn_sal_dev_humidity_callback_t)(cfn_sal_dev_humidity_t *driver, uint32_t event, uint32_t error, void *user_arg)
Definition cfn_sal_dev_humidity.h:60
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_config_get(cfn_sal_dev_humidity_t *driver, cfn_sal_dev_humidity_config_t *config)
Definition cfn_sal_dev_humidity.h:149
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_humidity_read_raw(cfn_sal_dev_humidity_t *driver, int32_t *raw_out)
Definition cfn_sal_dev_humidity.h:251
Humidity Sensor Virtual Method Table (VMT).
Definition cfn_sal_dev_humidity.h:69
cfn_hal_error_code_t(* enable_heater)(cfn_sal_dev_humidity_t *driver, uint32_t power_mw, uint32_t duration_ms)
Definition cfn_sal_dev_humidity.h:81
cfn_hal_error_code_t(* read_relative_humidity)(cfn_sal_dev_humidity_t *driver, float *hum_out)
Definition cfn_sal_dev_humidity.h:73
void(* handle_interrupt)(cfn_sal_dev_humidity_t *driver)
Definition cfn_sal_dev_humidity.h:85
cfn_hal_error_code_t(* get_id)(cfn_sal_dev_humidity_t *driver, uint32_t *id_out)
Definition cfn_sal_dev_humidity.h:83
cfn_hal_error_code_t(* soft_reset)(cfn_sal_dev_humidity_t *driver)
Definition cfn_sal_dev_humidity.h:82
cfn_hal_error_code_t(* get_status)(cfn_sal_dev_humidity_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_humidity.h:78
cfn_hal_error_code_t(* read_raw)(cfn_sal_dev_humidity_t *driver, int32_t *raw_out)
Definition cfn_sal_dev_humidity.h:74
cfn_hal_api_base_t base
Definition cfn_sal_dev_humidity.h:70
cfn_hal_error_code_t(* start_conversion)(cfn_sal_dev_humidity_t *driver)
Definition cfn_sal_dev_humidity.h:77
Definition cfn_sal_dev_humidity.h:48
cfn_sal_dev_humidity_mode_t mode
Definition cfn_sal_dev_humidity.h:49
int32_t high_threshold
Definition cfn_sal_dev_humidity.h:52
void * custom
Definition cfn_sal_dev_humidity.h:54
cfn_sal_dev_humidity_oversampling_t oversampling
Definition cfn_sal_dev_humidity.h:50
uint32_t sampling_rate_hz
Definition cfn_sal_dev_humidity.h:51
int32_t low_threshold
Definition cfn_sal_dev_humidity.h:53
Generic physical mapping for services.
Definition cfn_sal_types.h:26