30 #include <mraa/i2c.hpp>
34 #define MAG3110_NAME "MAG3110"
35 #define MAG3110_I2C_ADDRESS 0x0E
36 #define MAG3110_DEVICE_ID 0xC4
37 #define MAG3110_DEVICE_ID_REG 0x07
40 #define MAG3110_DR_STATUS 0x00
41 #define MAG3110_OUT_X_MSB 0x01
42 #define MAG3110_OUT_X_LSB 0x02
43 #define MAG3110_OUT_Y_MSB 0x03
44 #define MAG3110_OUT_Y_LSB 0x04
45 #define MAG3110_OUT_Z_MSB 0x05
46 #define MAG3110_OUT_Z_LSB 0x06
47 #define MAG3110_SYSMOD 0x08
48 #define MAG3110_OFF_X_MSB 0x09
49 #define MAG3110_OFF_X_LSB 0x0A
50 #define MAG3110_OFF_Y_MSB 0x0B
51 #define MAG3110_OFF_Y_LSB 0x0C
52 #define MAG3110_OFF_Z_MSB 0x0D
53 #define MAG3110_OFF_Z_LSB 0x0E
54 #define MAG3110_DIE_TEMP 0x0F
55 #define MAG3110_CTRL_REG1 0x10
56 #define MAG3110_CTRL_REG2 0x11
59 #define MAG3110_DR_STATUS_ZYXOW (1 << 7)
60 #define MAG3110_DR_STATUS_ZOW (1 << 6)
61 #define MAG3110_DR_STATUS_YOW (1 << 5)
62 #define MAG3110_DR_STATUS_XOW (1 << 4)
63 #define MAG3110_DR_STATUS_ZYXDR (1 << 3)
64 #define MAG3110_DR_STATUS_ZDR (1 << 2)
65 #define MAG3110_DR_STATUS_YDR (1 << 1)
66 #define MAG3110_DR_STATUS_XDR (1 << 0)
69 #define MAG3110_SYSMOD_STANDBY 0
70 #define MAG3110_SYSMOD_ACTIVE_RAW 1
71 #define MAG3110_SYSMOD_ACTIVE 2
74 #define MAG3110_CTRL_REG1_DROS_SHIFT 3
75 #define MAG3110_CTRL_REG1_DROS_MASK 0xF8
76 #define MAG3110_CTRL_REG1_DROS(x) (((uint8_t)(((uint8_t)(x))<<\
77 MAG3110_CTRL_REG1_DROS_SHIFT))\
78 &MAG3110_CTRL_REG1_DROS_MASK)
79 #define MAG3110_CTRL_REG1_FR (1 << 2)
80 #define MAG3110_CTRL_REG1_TM (1 << 1)
81 #define MAG3110_CTRL_REG1_AC (1 << 0)
84 #define MAG3110_CTRL_REG2_AUTO_MRST_EN (1 << 7)
85 #define MAG3110_CTRL_REG2_RAW (1 << 5)
86 #define MAG3110_CTRL_REG2_MAG_RST (1 << 4)
89 #define MAG3110_DROS_8000_16 0
90 #define MAG3110_DROS_4000_32 1
91 #define MAG3110_DROS_2000_64 2
92 #define MAG3110_DROS_1000_128 3
93 #define MAG3110_DROS_4000_16 4
94 #define MAG3110_DROS_2000_32 5
95 #define MAG3110_DROS_1000_64 6
96 #define MAG3110_DROS_0500_128 7
97 #define MAG3110_DROS_2000_16 8
98 #define MAG3110_DROS_1000_32 9
99 #define MAG3110_DROS_0500_64 10
100 #define MAG3110_DROS_0250_128 11
101 #define MAG3110_DROS_1000_16 12
102 #define MAG3110_DROS_0500_32 13
103 #define MAG3110_DROS_0250_64 14
104 #define MAG3110_DROS_0125_128 15
105 #define MAG3110_DROS_0500_16 16
106 #define MAG3110_DROS_0250_32 17
107 #define MAG3110_DROS_0125_64 18
108 #define MAG3110_DROS_0063_128 19
109 #define MAG3110_DROS_0250_16 20
110 #define MAG3110_DROS_0125_32 21
111 #define MAG3110_DROS_0063_64 22
112 #define MAG3110_DROS_0031_128 23
113 #define MAG3110_DROS_0125_16 24
114 #define MAG3110_DROS_0063_32 25
115 #define MAG3110_DROS_0031_64 26
116 #define MAG3110_DROS_0016_128 27
117 #define MAG3110_DROS_0063_16 28
118 #define MAG3110_DROS_0031_32 29
119 #define MAG3110_DROS_0016_64 30
120 #define MAG3110_DROS_0008_128 31
121 #define MAG3110_DROS_DEFAULT MAG3110_DROS_0125_128
175 MAG3110 (
int bus, uint8_t dros=MAG3110_DROS_DEFAULT,
176 int devAddr=MAG3110_I2C_ADDRESS);
241 int16_t
getX(
int bSampleData = 0);
250 int16_t
getY(
int bSampleData = 0);
259 int16_t
getZ(
int bSampleData = 0);
291 mraa::I2c m_i2ControlCtx;
int getData(mag3110_data_t *data, int bSampleData=0)
Definition: mag3110.cpp:253
int checkID(void)
Definition: mag3110.cpp:87
int16_t getX(int bSampleData=0)
Definition: mag3110.cpp:202
int16_t getY(int bSampleData=0)
Definition: mag3110.cpp:215
int8_t getDieTemperature(void)
Definition: mag3110.cpp:247
MAG3110(int bus, uint8_t dros=MAG3110_DROS_DEFAULT, int devAddr=MAG3110_I2C_ADDRESS)
Definition: mag3110.cpp:39
Definition: mag3110.hpp:126
int setUserOffset(int16_t x, int16_t y, int16_t z)
Definition: mag3110.cpp:101
uint8_t getStatus(void)
Definition: mag3110.cpp:241
int16_t getZ(int bSampleData=0)
Definition: mag3110.cpp:228
API for the MAG3110 Three-Axis Digital Magnetometer.
Definition: mag3110.hpp:165
int setStandby(void)
Definition: mag3110.cpp:148
int setActive(void)
Definition: mag3110.cpp:129
int sampleData(void)
Definition: mag3110.cpp:177
int isReady(void)
Definition: mag3110.cpp:167