caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_dev_temperature.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_DEV_TEMPERATURE_H
7#define CAFFEINE_SAL_DEV_TEMPERATURE_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_TEMPERATURE CFN_SAL_TYPE('T', 'M', 'P')
20
21/* Types Enums ------------------------------------------------------*/
22
28
36
46
47/* Types Structs ----------------------------------------------------*/
48
59
60typedef struct cfn_sal_dev_temperature_s cfn_sal_dev_temperature_t;
62
64 uint32_t event,
65 uint32_t error,
66 void *user_arg);
67
72{
73 cfn_hal_api_base_t base;
74
75 /* Measurement Operations */
76 cfn_hal_error_code_t (*read_celsius)(cfn_sal_dev_temperature_t *driver, float *temp_out);
77 cfn_hal_error_code_t (*read_fahrenheit)(cfn_sal_dev_temperature_t *driver, float *temp_out);
78 cfn_hal_error_code_t (*read_raw)(cfn_sal_dev_temperature_t *driver, int32_t *raw_out);
79
80 /* Configuration */
81 cfn_hal_error_code_t (*start_conversion)(cfn_sal_dev_temperature_t *driver);
82 cfn_hal_error_code_t (*get_status)(cfn_sal_dev_temperature_t *driver, uint32_t *status_flags);
83
84 /* Environmental & Device Features */
85 cfn_hal_error_code_t (*enable_heater)(cfn_sal_dev_temperature_t *driver, uint32_t power_mw, uint32_t duration_ms);
86 cfn_hal_error_code_t (*soft_reset)(cfn_sal_dev_temperature_t *driver);
87 cfn_hal_error_code_t (*get_id)(cfn_sal_dev_temperature_t *driver, uint32_t *id_out);
88
90};
91
93
94CFN_SAL_CREATE_DRIVER_TYPE(sal_dev_temperature,
99
100/* Functions inline ------------------------------------------------- */
101
103 uint32_t peripheral_id,
104 void *dependency,
106 const cfn_sal_phy_t *phy,
109 void *user_arg)
110{
111 CFN_HAL_POPULATE_DRIVER(
112 driver, CFN_SAL_DEV_TYPE_TEMPERATURE, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
113}
114
117 const cfn_sal_phy_t *phy,
118 void *dependency,
120 void *user_arg);
122
123CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_init(cfn_sal_dev_temperature_t *driver)
124{
125 if (!driver)
126 {
127 return CFN_HAL_ERROR_BAD_PARAM;
128 }
129 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
130 return cfn_hal_base_init(&driver->base, CFN_SAL_DEV_TYPE_TEMPERATURE);
131}
132
133CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_deinit(cfn_sal_dev_temperature_t *driver)
134{
135 if (!driver)
136 {
137 return CFN_HAL_ERROR_BAD_PARAM;
138 }
139 return cfn_hal_base_deinit(&driver->base, CFN_SAL_DEV_TYPE_TEMPERATURE);
140}
141
142CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_config_set(cfn_sal_dev_temperature_t *driver,
144{
145 if (!driver)
146 {
147 return CFN_HAL_ERROR_BAD_PARAM;
148 }
149 driver->config = config;
150 return cfn_hal_base_config_set(&driver->base, CFN_SAL_DEV_TYPE_TEMPERATURE, (const void *) config);
151}
152
153CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_config_get(cfn_sal_dev_temperature_t *driver,
155{
156 if (!driver || !config || !driver->config)
157 {
158 return CFN_HAL_ERROR_BAD_PARAM;
159 }
160 *config = *(driver->config);
161 return CFN_HAL_ERROR_OK;
162}
163
164CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_callback_register(
165 cfn_sal_dev_temperature_t *driver, cfn_sal_dev_temperature_callback_t callback, void *user_arg)
166{
167 if (!driver)
168 {
169 return CFN_HAL_ERROR_BAD_PARAM;
170 }
171 driver->cb = callback;
172 driver->cb_user_arg = user_arg;
173 return cfn_hal_base_callback_register(
174 &driver->base, CFN_SAL_DEV_TYPE_TEMPERATURE, (cfn_hal_callback_t) callback, user_arg);
175}
176
177CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_power_state_set(cfn_sal_dev_temperature_t *driver,
178 cfn_hal_power_state_t state)
179{
180 if (!driver)
181 {
182 return CFN_HAL_ERROR_BAD_PARAM;
183 }
184 return cfn_hal_power_state_set(&driver->base, CFN_SAL_DEV_TYPE_TEMPERATURE, state);
185}
186
187CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_event_enable(cfn_sal_dev_temperature_t *driver,
188 uint32_t event_mask)
189{
190 if (!driver)
191 {
192 return CFN_HAL_ERROR_BAD_PARAM;
193 }
194 return cfn_hal_base_event_enable(&driver->base, CFN_SAL_DEV_TYPE_TEMPERATURE, event_mask);
195}
196
197CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_event_disable(cfn_sal_dev_temperature_t *driver,
198 uint32_t event_mask)
199{
200 if (!driver)
201 {
202 return CFN_HAL_ERROR_BAD_PARAM;
203 }
204 return cfn_hal_base_event_disable(&driver->base, CFN_SAL_DEV_TYPE_TEMPERATURE, event_mask);
205}
206
207CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_event_get(cfn_sal_dev_temperature_t *driver,
208 uint32_t *event_mask)
209{
210 if (!driver)
211 {
212 return CFN_HAL_ERROR_BAD_PARAM;
213 }
214 return cfn_hal_base_event_get(&driver->base, CFN_SAL_DEV_TYPE_TEMPERATURE, event_mask);
215}
216
217CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_error_enable(cfn_sal_dev_temperature_t *driver,
218 uint32_t error_mask)
219{
220 if (!driver)
221 {
222 return CFN_HAL_ERROR_BAD_PARAM;
223 }
224 return cfn_hal_base_error_enable(&driver->base, CFN_SAL_DEV_TYPE_TEMPERATURE, error_mask);
225}
226
227CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_error_disable(cfn_sal_dev_temperature_t *driver,
228 uint32_t error_mask)
229{
230 if (!driver)
231 {
232 return CFN_HAL_ERROR_BAD_PARAM;
233 }
234 return cfn_hal_base_error_disable(&driver->base, CFN_SAL_DEV_TYPE_TEMPERATURE, error_mask);
235}
236
237CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_error_get(cfn_sal_dev_temperature_t *driver,
238 uint32_t *error_mask)
239{
240 if (!driver)
241 {
242 return CFN_HAL_ERROR_BAD_PARAM;
243 }
244 return cfn_hal_base_error_get(&driver->base, CFN_SAL_DEV_TYPE_TEMPERATURE, error_mask);
245}
246
247/* Service Specific Functions --------------------------------------- */
248
249CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_read_celsius(cfn_sal_dev_temperature_t *driver,
250 float *temp_out)
251{
252 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
253 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_TEMPERATURE, read_celsius, driver, error, temp_out);
254 return error;
255}
256
257CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_read_fahrenheit(cfn_sal_dev_temperature_t *driver,
258 float *temp_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_TEMPERATURE, read_fahrenheit, driver, error, temp_out);
262 return error;
263}
264
265CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_read_raw(cfn_sal_dev_temperature_t *driver,
266 int32_t *raw_out)
267{
268 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
269 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_TEMPERATURE, read_raw, driver, error, raw_out);
270 return error;
271}
272
273CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_start_conversion(cfn_sal_dev_temperature_t *driver)
274{
275 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
276 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_DEV_TYPE_TEMPERATURE, start_conversion, driver, error);
277 return error;
278}
279
280CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_get_status(cfn_sal_dev_temperature_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_TEMPERATURE, get_status, driver, error, status_flags);
285 return error;
286}
287
288CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_enable_heater(cfn_sal_dev_temperature_t *driver,
289 uint32_t power_mw,
290 uint32_t duration_ms)
291{
292 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
293 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_TEMPERATURE, enable_heater, driver, error, power_mw, duration_ms);
294 return error;
295}
296
297CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_soft_reset(cfn_sal_dev_temperature_t *driver)
298{
299 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
300 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_DEV_TYPE_TEMPERATURE, soft_reset, driver, error);
301 return error;
302}
303
304CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_get_id(cfn_sal_dev_temperature_t *driver, uint32_t *id_out)
305{
306 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
307 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_TEMPERATURE, get_id, driver, error, id_out);
308 return error;
309}
310
312{
313 if (driver && driver->base.type == CFN_SAL_DEV_TYPE_TEMPERATURE && driver->api)
314 {
315 if (driver->api->handle_interrupt)
316 {
317 driver->api->handle_interrupt(driver);
318 }
319 }
320}
321
322#ifdef __cplusplus
323}
324#endif
325
326#endif /* CAFFEINE_SAL_DEV_TEMPERATURE_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_sal_dev_temperature_event_t
Definition cfn_sal_dev_temperature.h:30
@ CFN_SAL_DEV_TEMPERATURE_EVENT_THRESHOLD_LOW
Definition cfn_sal_dev_temperature.h:34
@ CFN_SAL_DEV_TEMPERATURE_EVENT_DATA_READY
Definition cfn_sal_dev_temperature.h:32
@ CFN_SAL_DEV_TEMPERATURE_EVENT_THRESHOLD_HIGH
Definition cfn_sal_dev_temperature.h:33
@ CFN_SAL_DEV_TEMPERATURE_EVENT_NONE
Definition cfn_sal_dev_temperature.h:31
CFN_HAL_INLINE void cfn_sal_dev_temperature_populate(cfn_sal_dev_temperature_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_dev_temperature_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_dev_temperature_config_t *config, cfn_sal_dev_temperature_callback_t callback, void *user_arg)
Definition cfn_sal_dev_temperature.h:102
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_soft_reset(cfn_sal_dev_temperature_t *driver)
Definition cfn_sal_dev_temperature.h:297
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_error_enable(cfn_sal_dev_temperature_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_temperature.h:217
struct cfn_sal_dev_temperature_s cfn_sal_dev_temperature_t
Definition cfn_sal_dev_temperature.h:60
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_callback_register(cfn_sal_dev_temperature_t *driver, cfn_sal_dev_temperature_callback_t callback, void *user_arg)
Definition cfn_sal_dev_temperature.h:164
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_error_disable(cfn_sal_dev_temperature_t *driver, uint32_t error_mask)
Definition cfn_sal_dev_temperature.h:227
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_get_id(cfn_sal_dev_temperature_t *driver, uint32_t *id_out)
Definition cfn_sal_dev_temperature.h:304
#define CFN_SAL_DEV_TYPE_TEMPERATURE
Definition cfn_sal_dev_temperature.h:19
CFN_HAL_VMT_CHECK(struct cfn_sal_dev_temperature_api_s)
cfn_hal_error_code_t cfn_sal_dev_temperature_destruct(cfn_sal_dev_temperature_t *driver)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_read_celsius(cfn_sal_dev_temperature_t *driver, float *temp_out)
Definition cfn_sal_dev_temperature.h:249
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_read_raw(cfn_sal_dev_temperature_t *driver, int32_t *raw_out)
Definition cfn_sal_dev_temperature.h:265
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_power_state_set(cfn_sal_dev_temperature_t *driver, cfn_hal_power_state_t state)
Definition cfn_sal_dev_temperature.h:177
void(* cfn_sal_dev_temperature_callback_t)(cfn_sal_dev_temperature_t *driver, uint32_t event, uint32_t error, void *user_arg)
Definition cfn_sal_dev_temperature.h:63
cfn_sal_dev_temperature_mode_t
Definition cfn_sal_dev_temperature.h:24
@ CFN_SAL_DEV_TEMPERATURE_MODE_CONTINUOUS
Definition cfn_sal_dev_temperature.h:25
@ CFN_SAL_DEV_TEMPERATURE_MODE_ONE_SHOT
Definition cfn_sal_dev_temperature.h:26
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_start_conversion(cfn_sal_dev_temperature_t *driver)
Definition cfn_sal_dev_temperature.h:273
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_event_disable(cfn_sal_dev_temperature_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_temperature.h:197
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_init(cfn_sal_dev_temperature_t *driver)
Definition cfn_sal_dev_temperature.h:123
cfn_sal_dev_temperature_oversampling_t
Definition cfn_sal_dev_temperature.h:38
@ CFN_SAL_DEV_TEMPERATURE_OVERSAMPLING_NONE
Definition cfn_sal_dev_temperature.h:39
@ CFN_SAL_DEV_TEMPERATURE_OVERSAMPLING_1X
Definition cfn_sal_dev_temperature.h:40
@ CFN_SAL_DEV_TEMPERATURE_OVERSAMPLING_4X
Definition cfn_sal_dev_temperature.h:42
@ CFN_SAL_DEV_TEMPERATURE_OVERSAMPLING_16X
Definition cfn_sal_dev_temperature.h:44
@ CFN_SAL_DEV_TEMPERATURE_OVERSAMPLING_2X
Definition cfn_sal_dev_temperature.h:41
@ CFN_SAL_DEV_TEMPERATURE_OVERSAMPLING_8X
Definition cfn_sal_dev_temperature.h:43
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_get_status(cfn_sal_dev_temperature_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_temperature.h:280
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_error_get(cfn_sal_dev_temperature_t *driver, uint32_t *error_mask)
Definition cfn_sal_dev_temperature.h:237
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_deinit(cfn_sal_dev_temperature_t *driver)
Definition cfn_sal_dev_temperature.h:133
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_config_get(cfn_sal_dev_temperature_t *driver, cfn_sal_dev_temperature_config_t *config)
Definition cfn_sal_dev_temperature.h:153
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_enable_heater(cfn_sal_dev_temperature_t *driver, uint32_t power_mw, uint32_t duration_ms)
Definition cfn_sal_dev_temperature.h:288
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_event_enable(cfn_sal_dev_temperature_t *driver, uint32_t event_mask)
Definition cfn_sal_dev_temperature.h:187
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_config_set(cfn_sal_dev_temperature_t *driver, const cfn_sal_dev_temperature_config_t *config)
Definition cfn_sal_dev_temperature.h:142
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_event_get(cfn_sal_dev_temperature_t *driver, uint32_t *event_mask)
Definition cfn_sal_dev_temperature.h:207
cfn_hal_error_code_t cfn_sal_dev_temperature_construct(cfn_sal_dev_temperature_t *driver, const cfn_sal_dev_temperature_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_dev_temperature_callback_t callback, void *user_arg)
CFN_HAL_INLINE void cfn_sal_dev_temperature_handle_interrupt(cfn_sal_dev_temperature_t *driver)
Definition cfn_sal_dev_temperature.h:311
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_temperature_read_fahrenheit(cfn_sal_dev_temperature_t *driver, float *temp_out)
Definition cfn_sal_dev_temperature.h:257
Temperature Sensor Virtual Method Table (VMT).
Definition cfn_sal_dev_temperature.h:72
cfn_hal_api_base_t base
Definition cfn_sal_dev_temperature.h:73
cfn_hal_error_code_t(* start_conversion)(cfn_sal_dev_temperature_t *driver)
Definition cfn_sal_dev_temperature.h:81
cfn_hal_error_code_t(* soft_reset)(cfn_sal_dev_temperature_t *driver)
Definition cfn_sal_dev_temperature.h:86
cfn_hal_error_code_t(* enable_heater)(cfn_sal_dev_temperature_t *driver, uint32_t power_mw, uint32_t duration_ms)
Definition cfn_sal_dev_temperature.h:85
cfn_hal_error_code_t(* read_celsius)(cfn_sal_dev_temperature_t *driver, float *temp_out)
Definition cfn_sal_dev_temperature.h:76
cfn_hal_error_code_t(* get_status)(cfn_sal_dev_temperature_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_temperature.h:82
cfn_hal_error_code_t(* get_id)(cfn_sal_dev_temperature_t *driver, uint32_t *id_out)
Definition cfn_sal_dev_temperature.h:87
void(* handle_interrupt)(cfn_sal_dev_temperature_t *driver)
Definition cfn_sal_dev_temperature.h:89
cfn_hal_error_code_t(* read_raw)(cfn_sal_dev_temperature_t *driver, int32_t *raw_out)
Definition cfn_sal_dev_temperature.h:78
cfn_hal_error_code_t(* read_fahrenheit)(cfn_sal_dev_temperature_t *driver, float *temp_out)
Definition cfn_sal_dev_temperature.h:77
Definition cfn_sal_dev_temperature.h:50
uint32_t sampling_rate_hz
Definition cfn_sal_dev_temperature.h:53
cfn_sal_dev_temperature_oversampling_t oversampling
Definition cfn_sal_dev_temperature.h:52
uint8_t resolution_bits
Definition cfn_sal_dev_temperature.h:54
cfn_sal_dev_temperature_mode_t mode
Definition cfn_sal_dev_temperature.h:51
void * custom
Definition cfn_sal_dev_temperature.h:57
int32_t high_threshold
Definition cfn_sal_dev_temperature.h:55
int32_t low_threshold
Definition cfn_sal_dev_temperature.h:56
Generic physical mapping for services.
Definition cfn_sal_types.h:26