caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_dev_magnetometer.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_DEV_MAGNETOMETER_H
7#define CAFFEINE_SAL_DEV_MAGNETOMETER_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_MAGNETOMETER CFN_SAL_TYPE('M', 'A', 'G')
20
21/* Types Enums ------------------------------------------------------*/
22
32
39
45
46/* Types Structs ----------------------------------------------------*/
47
48typedef struct
49{
50 int32_t x_ugauss;
51 int32_t y_ugauss;
52 int32_t z_ugauss;
54
55typedef struct
56{
58 void *custom;
60
61typedef struct cfn_sal_dev_magnetometer_s cfn_sal_dev_magnetometer_t;
63
65 uint32_t event,
66 uint32_t error,
67 void *user_arg);
68
73{
74 cfn_hal_api_base_t base;
75
76 /* Measurement Operations */
77 cfn_hal_error_code_t (*read_xyz_ugauss)(cfn_sal_dev_magnetometer_t *driver,
79 cfn_hal_error_code_t (*read_xyz_raw)(cfn_sal_dev_magnetometer_t *driver, int16_t *x, int16_t *y, int16_t *z);
80
81 /* Configuration */
83 cfn_hal_error_code_t (*get_range)(cfn_sal_dev_magnetometer_t *driver, cfn_sal_dev_magnetometer_range_t *range_out);
85 cfn_hal_error_code_t (*set_datarate)(cfn_sal_dev_magnetometer_t *driver, uint32_t hz);
86 cfn_hal_error_code_t (*soft_reset)(cfn_sal_dev_magnetometer_t *driver);
87 cfn_hal_error_code_t (*get_status)(cfn_sal_dev_magnetometer_t *driver, uint32_t *status_flags);
88};
89
91
92CFN_SAL_CREATE_DRIVER_TYPE(sal_dev_magnetometer,
97
98/* Functions inline ------------------------------------------------- */
99
101 uint32_t peripheral_id,
102 void *dependency,
104 const cfn_sal_phy_t *phy,
107 void *user_arg)
108{
109 CFN_HAL_POPULATE_DRIVER(
110 driver, CFN_SAL_DEV_TYPE_MAGNETOMETER, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
111}
112
115 const cfn_sal_phy_t *phy,
116 void *dependency,
118 void *user_arg);
120
121CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_magnetometer_init(cfn_sal_dev_magnetometer_t *driver)
122{
123 if (!driver)
124 {
125 return CFN_HAL_ERROR_BAD_PARAM;
126 }
127 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
128 return cfn_hal_base_init(&driver->base, CFN_SAL_DEV_TYPE_MAGNETOMETER);
129}
130
131CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_magnetometer_deinit(cfn_sal_dev_magnetometer_t *driver)
132{
133 if (!driver)
134 {
135 return CFN_HAL_ERROR_BAD_PARAM;
136 }
137 return cfn_hal_base_deinit(&driver->base, CFN_SAL_DEV_TYPE_MAGNETOMETER);
138}
139
142{
143 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
144 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_MAGNETOMETER, read_xyz_ugauss, driver, error, data_out);
145 return error;
146}
147
148CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_magnetometer_set_range(cfn_sal_dev_magnetometer_t *driver,
150{
151 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
152 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_MAGNETOMETER, set_range, driver, error, range);
153 return error;
154}
155
156CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_magnetometer_set_mode(cfn_sal_dev_magnetometer_t *driver,
158{
159 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
160 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_DEV_TYPE_MAGNETOMETER, set_mode, driver, error, mode);
161 return error;
162}
163
164#ifdef __cplusplus
165}
166#endif
167
168#endif /* CAFFEINE_SAL_DEV_MAGNETOMETER_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_VMT_CHECK(struct cfn_sal_dev_magnetometer_api_s)
cfn_sal_dev_magnetometer_mode_t
Definition cfn_sal_dev_magnetometer.h:34
@ CFN_SAL_DEV_MAGNETOMETER_MODE_ONE_SHOT
Definition cfn_sal_dev_magnetometer.h:37
@ CFN_SAL_DEV_MAGNETOMETER_MODE_CONTINUOUS
Definition cfn_sal_dev_magnetometer.h:36
@ CFN_SAL_DEV_MAGNETOMETER_MODE_POWER_DOWN
Definition cfn_sal_dev_magnetometer.h:35
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_magnetometer_read_xyz_ugauss(cfn_sal_dev_magnetometer_t *driver, cfn_sal_dev_magnetometer_data_t *data_out)
Definition cfn_sal_dev_magnetometer.h:140
cfn_sal_dev_magnetometer_event_t
Definition cfn_sal_dev_magnetometer.h:41
@ CFN_SAL_DEV_MAGNETOMETER_EVENT_NONE
Definition cfn_sal_dev_magnetometer.h:42
@ CFN_SAL_DEV_MAGNETOMETER_EVENT_DATA_READY
Definition cfn_sal_dev_magnetometer.h:43
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_magnetometer_deinit(cfn_sal_dev_magnetometer_t *driver)
Definition cfn_sal_dev_magnetometer.h:131
void(* cfn_sal_dev_magnetometer_callback_t)(cfn_sal_dev_magnetometer_t *driver, uint32_t event, uint32_t error, void *user_arg)
Definition cfn_sal_dev_magnetometer.h:64
cfn_sal_dev_magnetometer_range_t
Definition cfn_sal_dev_magnetometer.h:24
@ CFN_SAL_DEV_MAGNETOMETER_RANGE_12G
Definition cfn_sal_dev_magnetometer.h:27
@ CFN_SAL_DEV_MAGNETOMETER_RANGE_MAX
Definition cfn_sal_dev_magnetometer.h:30
@ CFN_SAL_DEV_MAGNETOMETER_RANGE_16G
Definition cfn_sal_dev_magnetometer.h:28
@ CFN_SAL_DEV_MAGNETOMETER_RANGE_8G
Definition cfn_sal_dev_magnetometer.h:26
@ CFN_SAL_DEV_MAGNETOMETER_RANGE_4G
Definition cfn_sal_dev_magnetometer.h:25
#define CFN_SAL_DEV_TYPE_MAGNETOMETER
Definition cfn_sal_dev_magnetometer.h:19
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_magnetometer_set_mode(cfn_sal_dev_magnetometer_t *driver, cfn_sal_dev_magnetometer_mode_t mode)
Definition cfn_sal_dev_magnetometer.h:156
cfn_hal_error_code_t cfn_sal_dev_magnetometer_construct(cfn_sal_dev_magnetometer_t *driver, const cfn_sal_dev_magnetometer_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_dev_magnetometer_callback_t callback, void *user_arg)
struct cfn_sal_dev_magnetometer_s cfn_sal_dev_magnetometer_t
Definition cfn_sal_dev_magnetometer.h:61
CFN_HAL_INLINE void cfn_sal_dev_magnetometer_populate(cfn_sal_dev_magnetometer_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_dev_magnetometer_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_dev_magnetometer_config_t *config, cfn_sal_dev_magnetometer_callback_t callback, void *user_arg)
Definition cfn_sal_dev_magnetometer.h:100
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_magnetometer_set_range(cfn_sal_dev_magnetometer_t *driver, cfn_sal_dev_magnetometer_range_t range)
Definition cfn_sal_dev_magnetometer.h:148
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_dev_magnetometer_init(cfn_sal_dev_magnetometer_t *driver)
Definition cfn_sal_dev_magnetometer.h:121
cfn_hal_error_code_t cfn_sal_dev_magnetometer_destruct(cfn_sal_dev_magnetometer_t *driver)
Magnetometer Sensor Virtual Method Table (VMT).
Definition cfn_sal_dev_magnetometer.h:73
cfn_hal_error_code_t(* get_range)(cfn_sal_dev_magnetometer_t *driver, cfn_sal_dev_magnetometer_range_t *range_out)
Definition cfn_sal_dev_magnetometer.h:83
cfn_hal_error_code_t(* soft_reset)(cfn_sal_dev_magnetometer_t *driver)
Definition cfn_sal_dev_magnetometer.h:86
cfn_hal_error_code_t(* set_datarate)(cfn_sal_dev_magnetometer_t *driver, uint32_t hz)
Definition cfn_sal_dev_magnetometer.h:85
cfn_hal_api_base_t base
Definition cfn_sal_dev_magnetometer.h:74
cfn_hal_error_code_t(* set_mode)(cfn_sal_dev_magnetometer_t *driver, cfn_sal_dev_magnetometer_mode_t mode)
Definition cfn_sal_dev_magnetometer.h:84
cfn_hal_error_code_t(* read_xyz_raw)(cfn_sal_dev_magnetometer_t *driver, int16_t *x, int16_t *y, int16_t *z)
Definition cfn_sal_dev_magnetometer.h:79
cfn_hal_error_code_t(* read_xyz_ugauss)(cfn_sal_dev_magnetometer_t *driver, cfn_sal_dev_magnetometer_data_t *data_out)
Definition cfn_sal_dev_magnetometer.h:77
cfn_hal_error_code_t(* set_range)(cfn_sal_dev_magnetometer_t *driver, cfn_sal_dev_magnetometer_range_t range)
Definition cfn_sal_dev_magnetometer.h:82
cfn_hal_error_code_t(* get_status)(cfn_sal_dev_magnetometer_t *driver, uint32_t *status_flags)
Definition cfn_sal_dev_magnetometer.h:87
Definition cfn_sal_dev_magnetometer.h:56
uint32_t sampling_rate_hz
Definition cfn_sal_dev_magnetometer.h:57
void * custom
Definition cfn_sal_dev_magnetometer.h:58
Definition cfn_sal_dev_magnetometer.h:49
int32_t y_ugauss
Definition cfn_sal_dev_magnetometer.h:51
int32_t x_ugauss
Definition cfn_sal_dev_magnetometer.h:50
int32_t z_ugauss
Definition cfn_sal_dev_magnetometer.h:52
Generic physical mapping for services.
Definition cfn_sal_types.h:26