46#define EX_ADXL355_VERSION "1.1.0"
51#define EX_ADXL355_MAJOR 1
56#define EX_ADXL355_MINOR 1
61#define EX_ADXL355_PATCH 0
72#define ADXL355_ACC_NUMBER_OF_AXES 3U
74#define ADXL355_ACC_2G 2.048f
75#define ADXL355_ACC_4G 4.096f
76#define ADXL355_ACC_8G 8.0192f
78#define ADXL355_ACC_SENS_2G 0.003906f
79#define ADXL355_ACC_SENS_4G 0.007813f
80#define ADXL355_ACC_SENS_8G 0.015625f
82#define ADXL355_ACC_BIAS 0.0f
89#define ADXL355_DI_MASK 0xFF
90#define ADXL355_DI(n) (1 << n)
91#define ADXL355_AD_MASK 0xFE
92#define ADXL355_RW (1 << 0)
93#define ADXL355_AD(n) (1 << (n + 1))
100#define ADXL355_AD_DEVID_AD 0x00
101#define ADXL355_AD_DEVID_MST 0x01
102#define ADXL355_AD_PARTID 0x02
103#define ADXL355_AD_REVID 0x03
104#define ADXL355_AD_STATUS 0x04
105#define ADXL355_AD_FIFO_ENTRIES 0x05
106#define ADXL355_AD_TEMP2 0x06
107#define ADXL355_AD_TEMP1 0x07
108#define ADXL355_AD_XDATA3 0x08
109#define ADXL355_AD_XDATA2 0x09
110#define ADXL355_AD_XDATA1 0x0A
111#define ADXL355_AD_YDATA3 0x0B
112#define ADXL355_AD_YDATA2 0x0C
113#define ADXL355_AD_YDATA1 0x0D
114#define ADXL355_AD_ZDATA3 0x0E
115#define ADXL355_AD_ZDATA2 0x0F
116#define ADXL355_AD_ZDATA1 0x10
117#define ADXL355_AD_FIFO_DATA 0x11
118#define ADXL355_AD_OFFSET_X_H 0x1E
119#define ADXL355_AD_OFFSET_X_L 0x1F
120#define ADXL355_AD_OFFSET_Y_H 0x20
121#define ADXL355_AD_OFFSET_Y_L 0x21
122#define ADXL355_AD_OFFSET_Z_H 0x22
123#define ADXL355_AD_OFFSET_Z_L 0x23
124#define ADXL355_AD_ACT_EN 0x24
125#define ADXL355_AD_ACT_THRES_L 0x25
126#define ADXL355_AD_ACT_THRES_H 0x26
127#define ADXL355_AD_ACT_COUNTER 0x27
128#define ADXL355_AD_FILTER 0x28
129#define ADXL355_AD_FIFO_SAMPLES 0x29
130#define ADXL355_AD_INT_MAP 0x2A
131#define ADXL355_AD_SYNC 0x2B
132#define ADXL355_AD_RANGE 0x2C
133#define ADXL355_AD_POWER_CTL 0x2D
134#define ADXL355_AD_SELF_TEST 0x2E
135#define ADXL355_AD_RESET 0x2F
142#define ADXL355_DEVID_MST 0x1D
149#define ADXL355_FILTER_MASK 0x7F
150#define ADXL355_FILTER_ORD_LPF_0 (1 << 0)
151#define ADXL355_FILTER_ORD_LPF_1 (1 << 1)
152#define ADXL355_FILTER_ORD_LPF_2 (1 << 2)
153#define ADXL355_FILTER_ORD_LPF_3 (1 << 3)
154#define ADXL355_FILTER_HPF_CORNER_0 (1 << 4)
155#define ADXL355_FILTER_HPF_CORNER_1 (1 << 5)
156#define ADXL355_FILTER_HPF_CORNER_2 (1 << 6)
163#define ADXL355_FIFO_SAMPLES_MASK 0x7F
164#define ADXL355_FIFO_SAMPLES_BIT_0 (1 << 0)
165#define ADXL355_FIFO_SAMPLES_BIT_1 (1 << 1)
166#define ADXL355_FIFO_SAMPLES_BIT_2 (1 << 2)
167#define ADXL355_FIFO_SAMPLES_BIT_3 (1 << 3)
168#define ADXL355_FIFO_SAMPLES_BIT_4 (1 << 4)
169#define ADXL355_FIFO_SAMPLES_BIT_5 (1 << 5)
170#define ADXL355_FIFO_SAMPLES_BIT_6 (1 << 6)
177#define ADXL355_INT_MAP_MASK 0xFF
178#define ADXL355_INT_MAP_RDY_EN1 (1 << 0)
179#define ADXL355_INT_MAP_FULL_EN1 (1 << 1)
180#define ADXL355_INT_MAP_OVR_EN1 (1 << 2)
181#define ADXL355_INT_MAP_ACT_EN1 (1 << 3)
182#define ADXL355_INT_MAP_RDY_EN2 (1 << 4)
183#define ADXL355_INT_MAP_FULL_EN2 (1 << 5)
184#define ADXL355_INT_MAP_OVR_EN2 (1 << 6)
185#define ADXL355_INT_MAP_ACT_EN2 (1 << 7)
192#define ADXL355_SYNC_MASK 0x07
193#define ADXL355_SYNC_EXT_SYNC_0 (1 << 0)
194#define ADXL355_SYNC_EXT_SYNC_1 (1 << 1)
195#define ADXL355_SYNC_EXT_CLK (1 << 2)
202#define ADXL355_RANGE_MASK 0xC3
203#define ADXL355_RANGE_RANGE_MASK 0x03
204#define ADXL355_RANGE_RANGE_1 (1 << 1)
205#define ADXL355_RANGE_RANGE_0 (1 << 0)
206#define ADXL355_RANGE_RANGE_1 (1 << 1)
207#define ADXL355_RANGE_INT_POL (1 << 6)
208#define ADXL355_RANGE_I2C_HS (1 << 7)
215#define ADXL355_POWER_CTL_MASK 0x07
216#define ADXL355_POWER_CTL_STANDBY (1 << 0)
217#define ADXL355_POWER_CTL_TEMP_OFF (1 << 1)
218#define ADXL355_POWER_CTL_DRDY_OFF (1 << 2)
225#define ADXL355_SELF_TEST_MASK 0x03
226#define ADXL355_SELF_TEST_ST1 (1 << 0)
227#define ADXL355_SELF_TEST_ST2 (1 << 1)
243#if !defined(ADXL355_USE_SPI) || defined(__DOXYGEN__)
244#define ADXL355_USE_SPI TRUE
253#if !defined(ADXL355_SHARED_SPI) || defined(__DOXYGEN__)
254#define ADXL355_SHARED_SPI FALSE
262#if !defined(ADXL355_USE_I2C) || defined(__DOXYGEN__)
263#define ADXL355_USE_I2C FALSE
272#if !defined(ADXL355_SHARED_I2C) || defined(__DOXYGEN__)
273#define ADXL355_SHARED_I2C FALSE
281#if !defined(ADXL355_USE_ADVANCED) || defined(__DOXYGEN__)
282#define ADXL355_USE_ADVANCED FALSE
288#if !defined(ADXL355_COMM_BUFF_SIZE) || defined(__DOXYGEN__)
289#define ADXL355_COMM_BUFF_SIZE 32
297#if !(ADXL355_USE_SPI ^ ADXL355_USE_I2C)
298#error "ADXL355_USE_SPI and ADXL355_USE_I2C cannot be both true or both false"
301#if ADXL355_USE_SPI && !HAL_USE_SPI
302#error "ADXL355_USE_SPI requires HAL_USE_SPI"
305#if ADXL355_SHARED_SPI && !SPI_USE_MUTUAL_EXCLUSION
306#error "ADXL355_SHARED_SPI requires SPI_USE_MUTUAL_EXCLUSION"
309#if ADXL355_USE_I2C && !HAL_USE_I2C
310#error "ADXL355_USE_I2C requires HAL_USE_I2C"
313#if ADXL355_SHARED_I2C && !I2C_USE_MUTUAL_EXCLUSION
314#error "ADXL355_SHARED_I2C requires I2C_USE_MUTUAL_EXCLUSION"
321#error "ADXL355 over I2C still not supported"
390#if (ADXL355_USE_SPI) || defined(__DOXYGEN__)
400#if (ADXL355_USE_I2C) || defined(__DOXYGEN__)
426#if ADXL355_USE_ADVANCED || defined(__DOXYGEN__)
437#define _adxl355_methods_alone \
439 msg_t (*acc_set_full_scale)(ADXL355Driver *devp, adxl355_acc_fs_t fs);
445#define _adxl355_methods \
446 _base_object_methods \
447 _adxl355_methods_alone
461#define _adxl355_data \
464 adxl355_state_t state; \
466 const ADXL355Config *config; \
470 float accsensitivity[ADXL355_ACC_NUMBER_OF_AXES]; \
472 float accbias[ADXL355_ACC_NUMBER_OF_AXES]; \
474 float accfullscale; \
505#define adxl355AccelerometerGetAxesNumber(devp) \
506 accelerometerGetAxesNumber(&((devp)->acc_if))
526#define adxl355AccelerometerReadRaw(devp, axes) \
527 accelerometerReadRaw(&((devp)->acc_if), axes)
548#define adxl355AccelerometerReadCooked(devp, axes) \
549 accelerometerReadCooked(&((devp)->acc_if), axes)
565#define adxl355AccelerometerSetBias(devp, bp) \
566 accelerometerSetBias(&((devp)->acc_if), bp)
580#define adxl355AccelerometerResetBias(devp) \
581 accelerometerResetBias(&((devp)->acc_if))
597#define adxl355AccelerometerSetSensitivity(devp, sp) \
598 accelerometerSetSensitivity(&((devp)->acc_if), sp)
612#define adxl355AccelerometerResetSensitivity(devp) \
613 accelerometerResetSensitivity(&((devp)->acc_if))
630#define adxl355AccelerometerSetFullScale(devp, fs) \
631 (devp)->vmt->acc_set_full_scale(devp, fs)
640#if (ADXL355_USE_SPI) || defined(__DOXYGEN__)
Generic accelerometer interface header.
void adxl355SPIWriteRegister(ADXL355Driver *devp, uint8_t reg, size_t n, uint8_t *b)
Writes a value into a generic register using SPI.
adxl355_acc_fs_t
ADXL355 full scale.
adxl355_acc_hp_t
ADXL355 HP filter.
#define _adxl355_data
ADXL355Driver specific data.
adxl355_acc_odr_t
ADXL355 output data rate.
void adxl355Start(ADXL355Driver *devp, const ADXL355Config *config)
Configures and activates ADXL355 Complex Driver peripheral.
adxl355_state_t
Driver state machine possible states.
void adxl355SPIReadRegister(ADXL355Driver *devp, uint8_t reg, size_t n, uint8_t *b)
Reads a generic register value using SPI.
void adxl355ObjectInit(ADXL355Driver *devp, uint8_t *txbp, uint8_t *rxbp)
Initializes an instance.
void adxl355Stop(ADXL355Driver *devp)
Deactivates the ADXL355 Complex Driver peripheral.
#define _adxl355_methods
ADXL355 specific methods with inherited ones.
@ ADXL355_ACC_HP_DISABLED
@ ADXL355_ACC_ODR_15P625HZ
@ ADXL355_ACC_ODR_7P913HZ
@ ADXL355_ACC_ODR_3P906HZ
@ ADXL355_ACC_ODR_31P25HZ
ADXL355 configuration structure.
SPIDriver * spip
SPI driver associated to this ADXL355.
const SPIConfig * spicfg
SPI configuration associated to this ADXL355.
I2CDriver * i2cp
I2C driver associated to this ADXL355.
adxl355_acc_hp_t acchighpass
ADXL355 HP filter bandwidth.
adxl355_acc_odr_t accodr
ADXL355 output data rate selection.
adxl355_acc_fs_t accfullscale
ADXL355 accelerometer subsystem initial full scale.
float * accbias
ADXL355 accelerometer subsystem initial bias.
float * accsensitivity
ADXL355 accelerometer subsystem initial sensitivity.
const I2CConfig * i2ccfg
I2C configuration associated to this ADXL355.
ADXL355 3-axis accelerometer class.
BaseAccelerometer acc_if
Base accelerometer interface.
const struct ADXL355VMT * vmt
Virtual Methods Table.
ADXL355 virtual methods table.
Base accelerometer class.