caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_dev_pressure.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_DEV_PRESSURE_H
7#define CAFFEINE_SAL_DEV_PRESSURE_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_PRESSURE CFN_SAL_TYPE('B', 'A', 'R')
20
21/* Types Enums ------------------------------------------------------*/
22
28
34
44
53
54/* Types Structs ----------------------------------------------------*/
55
64
65typedef struct cfn_sal_dev_pressure_s cfn_sal_dev_pressure_t;
67
69 uint32_t event,
70 uint32_t error,
71 void *user_arg);
72
77{
78 cfn_hal_api_base_t base;
79
80 /* Measurement Operations */
81 cfn_hal_error_code_t (*read_hpa)(cfn_sal_dev_pressure_t *driver, float *hpa_out);
82 cfn_hal_error_code_t (*read_raw)(cfn_sal_dev_pressure_t *driver, int32_t *raw_out);
83
84 /* Info */
85 cfn_hal_error_code_t (*get_altitude_m)(cfn_sal_dev_pressure_t *driver, float sea_level_hpa, float *alt_out);
86
87 /* Configuration */
88 cfn_hal_error_code_t (*start_conversion)(cfn_sal_dev_pressure_t *driver);
89 cfn_hal_error_code_t (*get_status)(cfn_sal_dev_pressure_t *driver, uint32_t *status_flags);
90
91 cfn_hal_error_code_t (*get_id)(cfn_sal_dev_pressure_t *driver, uint32_t *id_out);
93};
94
96
102
103/* Functions inline ------------------------------------------------- */
104
106 uint32_t peripheral_id,
107 void *dependency,
109 const cfn_sal_phy_t *phy,
110 const cfn_sal_dev_pressure_config_t *config,
112 void *user_arg)
113{
114 CFN_HAL_POPULATE_DRIVER(
115 driver, CFN_SAL_DEV_TYPE_PRESSURE, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
116}
117
119 const cfn_sal_dev_pressure_config_t *config,
120 const cfn_sal_phy_t *phy,
121 void *dependency,
123 void *user_arg);
125
126CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_init(cfn_sal_dev_pressure_t *driver)
127{
128 if (!driver)
129 {
130 return CFN_HAL_ERROR_BAD_PARAM;
131 }
132 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
133 return cfn_hal_base_init(&driver->base, CFN_SAL_DEV_TYPE_PRESSURE);
134}
135
136CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_deinit(cfn_sal_dev_pressure_t *driver)
137{
138 if (!driver)
139 {
140 return CFN_HAL_ERROR_BAD_PARAM;
141 }
142 return cfn_hal_base_deinit(&driver->base, CFN_SAL_DEV_TYPE_PRESSURE);
143}
144
145CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_config_set(cfn_sal_dev_pressure_t *driver,
146 const cfn_sal_dev_pressure_config_t *config)
147{
148 if (!driver)
149 {
150 return CFN_HAL_ERROR_BAD_PARAM;
151 }
152 driver->config = config;
153 return cfn_hal_base_config_set(&driver->base, CFN_SAL_DEV_TYPE_PRESSURE, (const void *) config);
154}
155
156CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_config_get(cfn_sal_dev_pressure_t *driver,
158{
159 if (!driver || !config || !driver->config)
160 {
161 return CFN_HAL_ERROR_BAD_PARAM;
162 }
163 *config = *(driver->config);
164 return CFN_HAL_ERROR_OK;
165}
166
167CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_callback_register(cfn_sal_dev_pressure_t *driver,
169 void *user_arg)
170{
171 if (!driver)
172 {
173 return CFN_HAL_ERROR_BAD_PARAM;
174 }
175 driver->cb = callback;
176 driver->cb_user_arg = user_arg;
177 return cfn_hal_base_callback_register(
178 &driver->base, CFN_SAL_DEV_TYPE_PRESSURE, (cfn_hal_callback_t) callback, user_arg);
179}
180
181CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_power_state_set(cfn_sal_dev_pressure_t *driver,
182 cfn_hal_power_state_t state)
183{
184 if (!driver)
185 {
186 return CFN_HAL_ERROR_BAD_PARAM;
187 }
188 return cfn_hal_power_state_set(&driver->base, CFN_SAL_DEV_TYPE_PRESSURE, state);
189}
190
191CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_event_enable(cfn_sal_dev_pressure_t *driver,
192 uint32_t event_mask)
193{
194 if (!driver)
195 {
196 return CFN_HAL_ERROR_BAD_PARAM;
197 }
198 return cfn_hal_base_event_enable(&driver->base, CFN_SAL_DEV_TYPE_PRESSURE, event_mask);
199}
200
201CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_event_disable(cfn_sal_dev_pressure_t *driver,
202 uint32_t event_mask)
203{
204 if (!driver)
205 {
206 return CFN_HAL_ERROR_BAD_PARAM;
207 }
208 return cfn_hal_base_event_disable(&driver->base, CFN_SAL_DEV_TYPE_PRESSURE, event_mask);
209}
210
211CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_event_get(cfn_sal_dev_pressure_t *driver, uint32_t *event_mask)
212{
213 if (!driver)
214 {
215 return CFN_HAL_ERROR_BAD_PARAM;
216 }
217 return cfn_hal_base_event_get(&driver->base, CFN_SAL_DEV_TYPE_PRESSURE, event_mask);
218}
219
220CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_error_enable(cfn_sal_dev_pressure_t *driver,
221 uint32_t error_mask)
222{
223 if (!driver)
224 {
225 return CFN_HAL_ERROR_BAD_PARAM;
226 }
227 return cfn_hal_base_error_enable(&driver->base, CFN_SAL_DEV_TYPE_PRESSURE, error_mask);
228}
229
230CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_error_disable(cfn_sal_dev_pressure_t *driver,
231 uint32_t error_mask)
232{
233 if (!driver)
234 {
235 return CFN_HAL_ERROR_BAD_PARAM;
236 }
237 return cfn_hal_base_error_disable(&driver->base, CFN_SAL_DEV_TYPE_PRESSURE, error_mask);
238}
239
240CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_error_get(cfn_sal_dev_pressure_t *driver, uint32_t *error_mask)
241{
242 if (!driver)
243 {
244 return CFN_HAL_ERROR_BAD_PARAM;
245 }
246 return cfn_hal_base_error_get(&driver->base, CFN_SAL_DEV_TYPE_PRESSURE, error_mask);
247}
248
249/* Service Specific Functions --------------------------------------- */
250
251CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_read_hpa(cfn_sal_dev_pressure_t *driver, float *hpa_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_PRESSURE, read_hpa, driver, error, hpa_out);
255 return error;
256}
257
258CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_read_raw(cfn_sal_dev_pressure_t *driver, int32_t *raw_out)
259{
260 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
261 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_PRESSURE, read_raw, driver, error, raw_out);
262 return error;
263}
264
265CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_get_altitude(cfn_sal_dev_pressure_t *driver,
266 float sea_level_hpa,
267 float *alt_out)
268{
269 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
270 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_PRESSURE, get_altitude_m, driver, error, sea_level_hpa, alt_out);
271 return error;
272}
273
274CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_start_conversion(cfn_sal_dev_pressure_t *driver)
275{
276 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
277 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_DEV_TYPE_PRESSURE, start_conversion, driver, error);
278 return error;
279}
280CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_get_status(cfn_sal_dev_pressure_t *driver,
281 uint32_t *status_flags)
282{
283 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
284 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_PRESSURE, get_status, driver, error, status_flags);
285 return error;
286}
287
288CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_get_id(cfn_sal_dev_pressure_t *driver, uint32_t *id_out)
289{
290 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
291 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_PRESSURE, get_id, driver, error, id_out);
292 return error;
293}
294
296{
297 if (driver && driver->base.type == CFN_SAL_DEV_TYPE_PRESSURE && driver->api)
298 {
299 if (driver->api->handle_interrupt)
300 {
301 driver->api->handle_interrupt(driver);
302 }
303 }
304}
305
306#ifdef __cplusplus
307}
308#endif
309
310#endif /* CAFFEINE_SAL_DEV_PRESSURE_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_pressure_get_id(cfn_sal_dev_pressure_t *driver, uint32_t *id_out)
Definition cfn_sal_dev_pressure.h:288
#define CFN_SAL_DEV_TYPE_PRESSURE
Definition cfn_sal_dev_pressure.h:19
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_deinit(cfn_sal_dev_pressure_t *driver)
Definition cfn_sal_dev_pressure.h:136
cfn_sal_dev_pressure_filter_t
Definition cfn_sal_dev_pressure.h:46
@ CFN_SAL_DEV_PRESSURE_FILTER_COEFF_16
Definition cfn_sal_dev_pressure.h:51
@ CFN_SAL_DEV_PRESSURE_FILTER_NONE
Definition cfn_sal_dev_pressure.h:47
@ CFN_SAL_DEV_PRESSURE_FILTER_COEFF_8
Definition cfn_sal_dev_pressure.h:50
@ CFN_SAL_DEV_PRESSURE_FILTER_COEFF_2
Definition cfn_sal_dev_pressure.h:48
@ CFN_SAL_DEV_PRESSURE_FILTER_COEFF_4
Definition cfn_sal_dev_pressure.h:49
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_event_get(cfn_sal_dev_pressure_t *driver, uint32_t *event_mask)
Definition cfn_sal_dev_pressure.h:211
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_get_status(cfn_sal_dev_pressure_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_pressure.h:280
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_config_set(cfn_sal_dev_pressure_t *driver, const cfn_sal_dev_pressure_config_t *config)
Definition cfn_sal_dev_pressure.h:145
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_event_enable(cfn_sal_dev_pressure_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_pressure.h:191
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_error_disable(cfn_sal_dev_pressure_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_pressure.h:230
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_error_enable(cfn_sal_dev_pressure_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_pressure.h:220
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_event_disable(cfn_sal_dev_pressure_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_pressure.h:201
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_start_conversion(cfn_sal_dev_pressure_t *driver)
Definition cfn_sal_dev_pressure.h:274
cfn_sal_dev_pressure_event_t
Definition cfn_sal_dev_pressure.h:30
@ CFN_SAL_DEV_PRESSURE_EVENT_DATA_READY
Definition cfn_sal_dev_pressure.h:32
@ CFN_SAL_DEV_PRESSURE_EVENT_NONE
Definition cfn_sal_dev_pressure.h:31
void(* cfn_sal_dev_pressure_callback_t)(cfn_sal_dev_pressure_t *driver, uint32_t event, uint32_t error, void *user_arg)
Definition cfn_sal_dev_pressure.h:68
CFN_HAL_INLINE void cfn_sal_dev_pressure_populate(cfn_sal_dev_pressure_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_dev_pressure_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_dev_pressure_config_t *config, cfn_sal_dev_pressure_callback_t callback, void *user_arg)
Definition cfn_sal_dev_pressure.h:105
cfn_hal_error_code_t cfn_sal_dev_pressure_construct(cfn_sal_dev_pressure_t *driver, const cfn_sal_dev_pressure_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_dev_pressure_callback_t callback, void *user_arg)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_callback_register(cfn_sal_dev_pressure_t *driver, cfn_sal_dev_pressure_callback_t callback, void *user_arg)
Definition cfn_sal_dev_pressure.h:167
CFN_HAL_INLINE void cfn_sal_dev_pressure_handle_interrupt(cfn_sal_dev_pressure_t *driver)
Definition cfn_sal_dev_pressure.h:295
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_read_hpa(cfn_sal_dev_pressure_t *driver, float *hpa_out)
Definition cfn_sal_dev_pressure.h:251
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_read_raw(cfn_sal_dev_pressure_t *driver, int32_t *raw_out)
Definition cfn_sal_dev_pressure.h:258
CFN_HAL_VMT_CHECK(struct cfn_sal_dev_pressure_api_s)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_config_get(cfn_sal_dev_pressure_t *driver, cfn_sal_dev_pressure_config_t *config)
Definition cfn_sal_dev_pressure.h:156
cfn_hal_error_code_t cfn_sal_dev_pressure_destruct(cfn_sal_dev_pressure_t *driver)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_init(cfn_sal_dev_pressure_t *driver)
Definition cfn_sal_dev_pressure.h:126
struct cfn_sal_dev_pressure_s cfn_sal_dev_pressure_t
Definition cfn_sal_dev_pressure.h:65
cfn_sal_dev_pressure_oversampling_t
Definition cfn_sal_dev_pressure.h:36
@ CFN_SAL_DEV_PRESSURE_OVERSAMPLING_2X
Definition cfn_sal_dev_pressure.h:39
@ CFN_SAL_DEV_PRESSURE_OVERSAMPLING_NONE
Definition cfn_sal_dev_pressure.h:37
@ CFN_SAL_DEV_PRESSURE_OVERSAMPLING_1X
Definition cfn_sal_dev_pressure.h:38
@ CFN_SAL_DEV_PRESSURE_OVERSAMPLING_4X
Definition cfn_sal_dev_pressure.h:40
@ CFN_SAL_DEV_PRESSURE_OVERSAMPLING_8X
Definition cfn_sal_dev_pressure.h:41
@ CFN_SAL_DEV_PRESSURE_OVERSAMPLING_16X
Definition cfn_sal_dev_pressure.h:42
cfn_sal_dev_pressure_mode_t
Definition cfn_sal_dev_pressure.h:24
@ CFN_SAL_DEV_PRESSURE_MODE_CONTINUOUS
Definition cfn_sal_dev_pressure.h:25
@ CFN_SAL_DEV_PRESSURE_MODE_ONE_SHOT
Definition cfn_sal_dev_pressure.h:26
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_error_get(cfn_sal_dev_pressure_t *driver, uint32_t *error_mask)
Definition cfn_sal_dev_pressure.h:240
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_get_altitude(cfn_sal_dev_pressure_t *driver, float sea_level_hpa, float *alt_out)
Definition cfn_sal_dev_pressure.h:265
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_pressure_power_state_set(cfn_sal_dev_pressure_t *driver, cfn_hal_power_state_t state)
Definition cfn_sal_dev_pressure.h:181
Pressure Sensor Virtual Method Table (VMT).
Definition cfn_sal_dev_pressure.h:77
cfn_hal_error_code_t(* get_altitude_m)(cfn_sal_dev_pressure_t *driver, float sea_level_hpa, float *alt_out)
Definition cfn_sal_dev_pressure.h:85
cfn_hal_error_code_t(* get_status)(cfn_sal_dev_pressure_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_pressure.h:89
cfn_hal_error_code_t(* get_id)(cfn_sal_dev_pressure_t *driver, uint32_t *id_out)
Definition cfn_sal_dev_pressure.h:91
cfn_hal_api_base_t base
Definition cfn_sal_dev_pressure.h:78
cfn_hal_error_code_t(* read_raw)(cfn_sal_dev_pressure_t *driver, int32_t *raw_out)
Definition cfn_sal_dev_pressure.h:82
cfn_hal_error_code_t(* read_hpa)(cfn_sal_dev_pressure_t *driver, float *hpa_out)
Definition cfn_sal_dev_pressure.h:81
void(* handle_interrupt)(cfn_sal_dev_pressure_t *driver)
Definition cfn_sal_dev_pressure.h:92
cfn_hal_error_code_t(* start_conversion)(cfn_sal_dev_pressure_t *driver)
Definition cfn_sal_dev_pressure.h:88
Definition cfn_sal_dev_pressure.h:57
void * custom
Definition cfn_sal_dev_pressure.h:62
cfn_sal_dev_pressure_mode_t mode
Definition cfn_sal_dev_pressure.h:58
cfn_sal_dev_pressure_oversampling_t oversampling
Definition cfn_sal_dev_pressure.h:59
uint32_t sampling_rate_hz
Definition cfn_sal_dev_pressure.h:61
cfn_sal_dev_pressure_filter_t filter
Definition cfn_sal_dev_pressure.h:60
Generic physical mapping for services.
Definition cfn_sal_types.h:26