1 /* 2 * Copyright (C) 2015-2021 Alibaba Group Holding Limited 3 */ 4 5 #ifndef __QMC6310_H 6 #define __QMC6310_H 7 #include "k_api.h" 8 #include <math.h> 9 #include <stdbool.h> 10 #include "aos/hal/i2c.h" 11 #include "hal_iomux_haas1000.h" 12 13 /* vendor chip id*/ 14 #define QMC6308_IIC_ADDR 0x2c 15 #define QMC6310U_IIC_ADDR 0x1c 16 #define QMC6310N_IIC_ADDR 0x3c 17 #define QMC6310_CHIP_ID_REG 0x00 18 19 /*data output register*/ 20 #define QMC6310_DATA_OUT_X_LSB_REG 0x01 21 #define QMC6310_DATA_OUT_X_MSB_REG 0x02 22 #define QMC6310_DATA_OUT_Y_LSB_REG 0x03 23 #define QMC6310_DATA_OUT_Y_MSB_REG 0x04 24 #define QMC6310_DATA_OUT_Z_LSB_REG 0x05 25 #define QMC6310_DATA_OUT_Z_MSB_REG 0x06 26 /*Status registers */ 27 #define QMC6310_STATUS_REG 0x09 28 /* configuration registers */ 29 #define QMC6310_CTL_REG_ONE 0x0A /* Contrl register one */ 30 #define QMC6310_CTL_REG_TWO 0x0B /* Contrl register two */ 31 32 /* Magnetic Sensor Operating Mode MODE[1:0]*/ 33 #define QMC6310_SUSPEND_MODE 0x00 34 #define QMC6310_NORMAL_MODE 0x01 35 #define QMC6310_SINGLE_MODE 0x02 36 #define QMC6310_H_PFM_MODE 0x03 37 38 /*data output rate OSR2[2:0]*/ 39 #define OUTPUT_DATA_RATE_800HZ 0x00 40 #define OUTPUT_DATA_RATE_400HZ 0x01 41 #define OUTPUT_DATA_RATE_200HZ 0x02 42 #define OUTPUT_DATA_RATE_100HZ 0x03 43 44 /*oversample Ratio OSR[1]*/ 45 #define OVERSAMPLE_RATE_256 0x01 46 #define OVERSAMPLE_RATE_128 0x00 47 48 #define SET_RESET_ON 0x00 49 #define SET_ONLY_ON 0x01 50 #define SET_RESET_OFF 0x02 51 52 #define QMC6310_DEFAULT_DELAY 200 53 54 enum { 55 AXIS_X = 0, 56 AXIS_Y = 1, 57 AXIS_Z = 2, 58 59 AXIS_TOTAL 60 }; 61 62 typedef struct { 63 signed char sign[3]; 64 unsigned char map[3]; 65 } QMC6310_map; 66 67 extern int qmc6310_init(void); 68 extern uint8_t qmc6310_read_mag_xyz(float *data); 69 extern int qmc6310_write_reg(uint8_t addr, uint8_t data); 70 extern int qmc6310_read_block(uint8_t addr, uint8_t *data, uint8_t len); 71 extern int qmc6310_readHeading(); 72 extern void qmc6310_deinit(void); 73 #endif 74 75