Loading...
Searching...
No Matches
qmi8658.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2026 Technische Universität Hamburg
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
51
52#include "periph/i2c.h"
53#include <stdbool.h>
54
55#ifdef __cplusplus
56extern "C" {
57#endif
58
63#ifndef CONFIG_QMI8658_PARAM_I2C
64/* I2C slave address. Set to 0x6A if SDO/SA0 is pulled high */
65# define CONFIG_QMI8658_PARAM_I2C 0x6B
66#endif
68
77typedef enum {
78 QMI8658_DATA_RATE_8KHZ = 0x00,
79 QMI8658_DATA_RATE_4KHZ = 0x01,
80 QMI8658_DATA_RATE_2KHZ = 0x02,
81 QMI8658_DATA_RATE_1KHZ = 0x03,
82 QMI8658_DATA_RATE_500HZ = 0x04,
83 QMI8658_DATA_RATE_250HZ = 0x05,
84 QMI8658_DATA_RATE_125HZ = 0x06,
85 QMI8658_DATA_RATE_62_5HZ = 0x07,
86 QMI8658_DATA_RATE_31_25HZ = 0x08,
88
94typedef enum {
95 QMI8658_ACC_LOWPWR_DATA_RATE_128HZ = 0x0C,
96 QMI8658_ACC_LOWPWR_DATA_RATE_21HZ = 0x0D,
97 QMI8658_ACC_LOWPWR_DATA_RATE_11HZ = 0x0E,
98 QMI8658_ACC_LOWPWR_DATA_RATE_3HZ = 0x0F
100
104typedef enum {
105 QMI8658_ACC_FS_2G = 0x00,
106 QMI8658_ACC_FS_4G = 0x01,
107 QMI8658_ACC_FS_8G = 0x02,
108 QMI8658_ACC_FS_16G = 0x03
110
114typedef enum {
115 QMI8658_GYRO_FS_16DPS = 0x00,
116 QMI8658_GYRO_FS_32DPS = 0x01,
117 QMI8658_GYRO_FS_64DPS = 0x02,
118 QMI8658_GYRO_FS_128DPS = 0x03,
119 QMI8658_GYRO_FS_256DPS = 0x04,
120 QMI8658_GYRO_FS_512DPS = 0x05,
121 QMI8658_GYRO_FS_1024DPS = 0x06,
122 QMI8658_GYRO_FS_2048DPS = 0x07
124
138
149
158
162typedef enum {
163 QMI8658_DISABLE_ALL = 0,
164 QMI8658_ENABLE_ACC = 1,
165 QMI8658_ENABLE_GYRO = 2
167
180
189
193typedef struct {
194 int16_t x;
195 int16_t y;
196 int16_t z;
198
210
220int qmi8658_init(qmi8658_t *dev, const qmi8658_params_t *params);
221
234
251
261
272
283
293int qmi8658_read_temp(const qmi8658_t *dev, int16_t *data);
294
305
306#ifdef __cplusplus
307}
308#endif
309
uint_fast8_t i2c_t
Default i2c_t type definition.
Definition i2c.h:158
qmi8658_gyro_fs_t
Gyroscope full scale.
Definition qmi8658.h:114
qmi8658_axis_t
QMI8658 axis identifiers.
Definition qmi8658.h:153
int qmi8658_read_acc(const qmi8658_t *dev, qmi8658_3d_data_t *data)
Read accelerometer data in mg.
int qmi8658_read_temp(const qmi8658_t *dev, int16_t *data)
Read temperature data in degC x 100.
qmi8658_acc_fs_t
Accelerometer full scale.
Definition qmi8658.h:104
qmi8658_acc_lowpwr_odr_t
Accelerometer low power data rate settings.
Definition qmi8658.h:94
qmi8658_odr_t
Data rate settings.
Definition qmi8658.h:77
int qmi8658_enable_tap(const qmi8658_t *dev)
Enable the tap detection engine.
qmi8658_mode_t
QMI8658 operating modes.
Definition qmi8658.h:142
int qmi8658_set_mode(qmi8658_t *dev, qmi8658_mode_t mode)
Set the operating mode of the device.
int qmi8658_read_gyro(const qmi8658_t *dev, qmi8658_3d_data_t *data)
Read gyroscope data in dps.
qmi8658_enable_flag_t
Enable sensor flags.
Definition qmi8658.h:162
int qmi8658_init(qmi8658_t *dev, const qmi8658_params_t *params)
Initialize the given device.
int qmi8658_disable_tap(const qmi8658_t *dev)
Disable the tap detection engine.
int qmi8658_read_tap(const qmi8658_t *dev, qmi8658_tap_data_t *data)
Read tap detection data.
qmi8658_tap_prio_t
Tap axis priorities.
Definition qmi8658.h:130
@ QMI8658_X_AXIS
Sensor X axis.
Definition qmi8658.h:154
@ QMI8658_Y_AXIS
Sensor Y axis.
Definition qmi8658.h:155
@ QMI8658_Z_AXIS
Sensor Z axis.
Definition qmi8658.h:156
@ QMI8658_NORMAL_ACC_GYRO
IMU mode (Accelerometer + Gyroscope)
Definition qmi8658.h:146
@ QMI8658_LOWPWR_ACC
Low power mode (Accelerometer only)
Definition qmi8658.h:147
@ QMI8658_NORMAL_ACC
Accelerometer only mode (if ODR <= 1kHz, otherwise Gyro is also enabled)
Definition qmi8658.h:144
@ QMI8658_NORMAL_GYRO
Gyroscope only mode.
Definition qmi8658.h:145
@ QMI8658_POWER_DOWN
All functional blocks off, minimal power consumption.
Definition qmi8658.h:143
@ QMI8658_TAP_PRIO_YZX
Y > Z > >
Definition qmi8658.h:134
@ QMI8658_TAP_PRIO_XYZ
X > Y > Z.
Definition qmi8658.h:131
@ QMI8658_TAP_PRIO_YXZ
Y > X > Z.
Definition qmi8658.h:133
@ QMI8658_TAP_PRIO_XZY
X > Z > Y.
Definition qmi8658.h:132
@ QMI8658_TAP_PRIO_ZYX
Z > Y > X.
Definition qmi8658.h:136
@ QMI8658_TAP_PRIO_ZXY
Z > X > Y.
Definition qmi8658.h:135
Low-level I2C peripheral driver interface definition.
3D output data
Definition qmi8658.h:193
int16_t x
X axis.
Definition qmi8658.h:194
int16_t z
Z axis.
Definition qmi8658.h:196
int16_t y
Y axis.
Definition qmi8658.h:195
Device initialization parameters.
Definition qmi8658.h:171
uint8_t addr
i2c address
Definition qmi8658.h:173
qmi8658_acc_fs_t acc_fs
accelerometer full scale
Definition qmi8658.h:177
qmi8658_odr_t acc_odr
accelerometer output data rate
Definition qmi8658.h:174
qmi8658_acc_lowpwr_odr_t acc_lowpwr_odr
accelerometer low power output data rate
Definition qmi8658.h:175
qmi8658_gyro_fs_t gyro_fs
gyroscope full scale
Definition qmi8658.h:178
i2c_t i2c
i2c bus
Definition qmi8658.h:172
qmi8658_odr_t gyro_odr
gyroscope output data rate
Definition qmi8658.h:176
Device descriptor for the driver.
Definition qmi8658.h:184
qmi8658_enable_flag_t enable_flags
Currently enabled sensors.
Definition qmi8658.h:187
qmi8658_params_t params
Device initialization parameters.
Definition qmi8658.h:185
bool initialized
Device is initialized.
Definition qmi8658.h:186
Tap detection data.
Definition qmi8658.h:202
uint8_t num
Number of taps detected: 0 (no tap), 1 (single tap) or 2 (double tap)
Definition qmi8658.h:204
bool neg_polarity
Tap was detected in the negative direction of tap axis (otherwise positive direction)
Definition qmi8658.h:208
qmi8658_axis_t axis
Axis on which the tap was detected.
Definition qmi8658.h:206