qmc5883l.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2019 Freie Universität Berlin
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
9 #pragma once
10 
57 #ifdef __cplusplus
58 extern "C"
59 {
60 #endif
61 
62 #include <stdint.h>
63 
64 #include "periph/gpio.h"
65 #include "periph/i2c.h"
66 
70 #define QMC5883L_ADDR (0x0d)
71 
75 enum {
81 };
82 
92 typedef enum {
93  QMC5883L_ODR_10HZ = (0u << 2),
94  QMC5883L_ODR_50HZ = (1u << 2),
95  QMC5883L_ODR_100HZ = (2u << 2),
96  QMC5883L_ODR_200HZ = (3u << 2),
98 
109 typedef enum {
110  QMC5883L_RNG_2G = (0u << 4),
111  QMC5883L_RNG_8G = (1u << 4),
113 
123 typedef enum {
124  QMC5883L_OSR_512 = (0u << 6),
125  QMC5883L_OSR_256 = (1u << 6),
126  QMC5883L_OSR_128 = (2u << 6),
127  QMC5883L_OSR_64 = (3u << 6),
129 
133 typedef struct {
135  gpio_t pin_drdy;
140 
144 typedef struct {
146  gpio_t pin_drdy;
147  uint8_t cfg;
148 } qmc5883l_t;
149 
163 int qmc5883l_init(qmc5883l_t *dev, const qmc5883l_params_t *params);
164 
177 
195 int qmc5883l_read(const qmc5883l_t *dev, int16_t *data_out);
196 
217 int qmc5883l_read_raw(const qmc5883l_t *dev, int16_t *data_out);
218 
229 int qmc5883l_poweron(const qmc5883l_t *dev);
230 
242 
243 #if defined(MODULE_QMC5883L_INT) || defined(DOXYGEN)
272 int qmc5883l_init_int(const qmc5883l_t *dev, gpio_cb_t cb, void *arg);
273 
287 
299 #endif /* defined(MODULE_QMC5883L_INT) || defined(DOXYGEN) */
300 
301 #ifdef __cplusplus
302 }
303 #endif
304 
Low-level GPIO peripheral driver interface definitions.
void(* gpio_cb_t)(void *arg)
Signature of event callback functions triggered from interrupts.
Definition: gpio.h:146
uint_fast8_t i2c_t
Default i2c_t type definition.
Definition: i2c.h:144
int qmc5883l_read_raw(const qmc5883l_t *dev, int16_t *data_out)
Read RAW data from the device.
int qmc5883l_read(const qmc5883l_t *dev, int16_t *data_out)
Read sampled data from the device [converted to milli-Gauss].
int qmc5883l_irq_disable(const qmc5883l_t *dev)
Disable the data ready (DRDY) interrupt.
qmc5883l_rng_t
Output value range.
Definition: qmc5883l.h:109
qmc5883l_osr_t
Over sample rate (bandwidth of internal digital filter)
Definition: qmc5883l.h:123
qmc5883l_odr_t
Output data rate.
Definition: qmc5883l.h:92
int qmc5883l_poweron(const qmc5883l_t *dev)
Power on the sensor (put it into continuous sampling mode)
int qmc5883l_irq_enable(const qmc5883l_t *dev)
Enable the data ready (DRDY) interrupt.
int qmc5883l_poweroff(const qmc5883l_t *dev)
Power off the sensor (put it into standby mode)
int qmc5883l_init_int(const qmc5883l_t *dev, gpio_cb_t cb, void *arg)
Initialize data ready (DRDY) interrupt notifications.
int qmc5883l_init(qmc5883l_t *dev, const qmc5883l_params_t *params)
Initialize the given QMC5883L magnetic sensor.
int qmc5883l_data_ready(const qmc5883l_t *dev)
Check if new data is available.
@ QMC5883L_BUSERR
i2c bus error
Definition: qmc5883l.h:79
@ QMC5883L_OK
success
Definition: qmc5883l.h:76
@ QMC5883L_OVERFLOW
at least one axis overflowed its range
Definition: qmc5883l.h:78
@ QMC5883L_NOCFG
configuration error
Definition: qmc5883l.h:80
@ QMC5883L_NODATA
no data are available
Definition: qmc5883l.h:77
@ QMC5883L_RNG_2G
2 Gauss data output range
Definition: qmc5883l.h:110
@ QMC5883L_RNG_8G
8 Gauss data output range
Definition: qmc5883l.h:111
@ QMC5883L_OSR_256
256 samples per reading
Definition: qmc5883l.h:125
@ QMC5883L_OSR_64
64 samples per reading
Definition: qmc5883l.h:127
@ QMC5883L_OSR_512
512 samples per reading
Definition: qmc5883l.h:124
@ QMC5883L_OSR_128
128 samples per reading
Definition: qmc5883l.h:126
@ QMC5883L_ODR_50HZ
50Hz data output rate
Definition: qmc5883l.h:94
@ QMC5883L_ODR_100HZ
100Hz data output rate
Definition: qmc5883l.h:95
@ QMC5883L_ODR_10HZ
10Hz data output rate
Definition: qmc5883l.h:93
@ QMC5883L_ODR_200HZ
200Hz data output rate
Definition: qmc5883l.h:96
Low-level I2C peripheral driver interface definition.
QMC5883L initialization parameters.
Definition: qmc5883l.h:133
qmc5883l_rng_t rng
output data range
Definition: qmc5883l.h:137
qmc5883l_odr_t odr
output data rate
Definition: qmc5883l.h:136
i2c_t i2c
I2C bus the sensor is connected to.
Definition: qmc5883l.h:134
qmc5883l_osr_t osr
oversampling rate
Definition: qmc5883l.h:138
gpio_t pin_drdy
DRDY ISR pin, set to GPIO_UNDEF if unused.
Definition: qmc5883l.h:135
QMC5883L device descriptor.
Definition: qmc5883l.h:144
gpio_t pin_drdy
DRDY interrupt pin.
Definition: qmc5883l.h:146
uint8_t cfg
actual applied device configuration
Definition: qmc5883l.h:147
i2c_t i2c
I2C bus the sensor is connected to.
Definition: qmc5883l.h:145