zzz

Dependencies:   MotionSensor

Dependents:   Assignment2_ver3 Assignment2_ver5 Assignment2_ver6

Committer:
weebgrammers
Date:
Tue Nov 29 20:30:41 2016 +0000
Revision:
0:cf7bca71c4e3
ZZZZ

Who changed what in which revision?

UserRevisionLine numberNew contents of line
weebgrammers 0:cf7bca71c4e3 1 #include "FXOS8700Q.h"
weebgrammers 0:cf7bca71c4e3 2 #define UINT14_MAX 16383
weebgrammers 0:cf7bca71c4e3 3
weebgrammers 0:cf7bca71c4e3 4 uint8_t SensorBuffer[12];
weebgrammers 0:cf7bca71c4e3 5 int MagReadStatus;
weebgrammers 0:cf7bca71c4e3 6
weebgrammers 0:cf7bca71c4e3 7 FXOS8700Q_acc::FXOS8700Q_acc(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) {
weebgrammers 0:cf7bca71c4e3 8
weebgrammers 0:cf7bca71c4e3 9 // activate the peripheral
weebgrammers 0:cf7bca71c4e3 10 uint8_t data[2] = {FXOS8700Q_CTRL_REG1, 0x00};
weebgrammers 0:cf7bca71c4e3 11 m_i2c.frequency(400000);
weebgrammers 0:cf7bca71c4e3 12 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 13
weebgrammers 0:cf7bca71c4e3 14 data[0] = FXOS8700Q_M_CTRL_REG1;
weebgrammers 0:cf7bca71c4e3 15 data[1] = 0x1F;
weebgrammers 0:cf7bca71c4e3 16 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 17
weebgrammers 0:cf7bca71c4e3 18 data[0] = FXOS8700Q_M_CTRL_REG2;
weebgrammers 0:cf7bca71c4e3 19 data[1] = 0x20;
weebgrammers 0:cf7bca71c4e3 20 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 21
weebgrammers 0:cf7bca71c4e3 22 data[0] = FXOS8700Q_XYZ_DATA_CFG;
weebgrammers 0:cf7bca71c4e3 23 data[1] = 0x11;
weebgrammers 0:cf7bca71c4e3 24 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 25
weebgrammers 0:cf7bca71c4e3 26 data[0] = FXOS8700Q_CTRL_REG1;
weebgrammers 0:cf7bca71c4e3 27 data[1] = 0x54;
weebgrammers 0:cf7bca71c4e3 28 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 29
weebgrammers 0:cf7bca71c4e3 30 // Initialize XYZ Data Configuration
weebgrammers 0:cf7bca71c4e3 31 data[0] = FXOS8700Q_XYZ_DATA_CFG;
weebgrammers 0:cf7bca71c4e3 32 data[1] = 0x11; // high pass active, +/- 4g mode
weebgrammers 0:cf7bca71c4e3 33 writeRegs(data,2);
weebgrammers 0:cf7bca71c4e3 34
weebgrammers 0:cf7bca71c4e3 35 // Initialize Motion Detection Register (A_FFMT_CFG)
weebgrammers 0:cf7bca71c4e3 36 data[0] = FXOS8700Q_A_FFMT_CFG;
weebgrammers 0:cf7bca71c4e3 37 data[1] = 0xE0; // latch, motion, z thresh active
weebgrammers 0:cf7bca71c4e3 38 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 39
weebgrammers 0:cf7bca71c4e3 40 // Initialize Motion Threshold Register (A_FFMT_THS)
weebgrammers 0:cf7bca71c4e3 41 data[0] = FXOS8700Q_A_FFMT_THS;
weebgrammers 0:cf7bca71c4e3 42 data[1] = 0x10;
weebgrammers 0:cf7bca71c4e3 43 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 44
weebgrammers 0:cf7bca71c4e3 45 // Initialize Motion Count (A_FFMT_COUNT)
weebgrammers 0:cf7bca71c4e3 46 data[0] = FXOS8700Q_A_FFMT_COUNT;
weebgrammers 0:cf7bca71c4e3 47 data[1] = 0x0A; // 10 time steps x 5ms ODR = 50ms debounce period
weebgrammers 0:cf7bca71c4e3 48 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 49
weebgrammers 0:cf7bca71c4e3 50
weebgrammers 0:cf7bca71c4e3 51
weebgrammers 0:cf7bca71c4e3 52 // // Initialize CTRL REG 2
weebgrammers 0:cf7bca71c4e3 53 // data[0] = FXOS8700Q_CTRL_REG2;
weebgrammers 0:cf7bca71c4e3 54 // data[1] = 0x1D; // low power sleep, auto-sleep, low power/noise OSR
weebgrammers 0:cf7bca71c4e3 55 // writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 56
weebgrammers 0:cf7bca71c4e3 57 // Iniitialize CTRL REG 3
weebgrammers 0:cf7bca71c4e3 58 data[0] = FXOS8700Q_CTRL_REG3;
weebgrammers 0:cf7bca71c4e3 59 data[1] = 0x00; // default settings ==> interrupts are active low!
weebgrammers 0:cf7bca71c4e3 60 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 61
weebgrammers 0:cf7bca71c4e3 62 // Initialize CTRL REG 4
weebgrammers 0:cf7bca71c4e3 63 data[0] = FXOS8700Q_CTRL_REG4;
weebgrammers 0:cf7bca71c4e3 64 data[1] = 0x04; // freefall/motion interrupt enabled
weebgrammers 0:cf7bca71c4e3 65 // could change: 0x06 to enable ffmt and a_vecm
weebgrammers 0:cf7bca71c4e3 66 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 67 // Initialize CTRL REG 5
weebgrammers 0:cf7bca71c4e3 68 data[0] = FXOS8700Q_CTRL_REG5;
weebgrammers 0:cf7bca71c4e3 69 data[1] = 0x04; // ffmt on INT1 pin, a_vecm on INT2 pin
weebgrammers 0:cf7bca71c4e3 70 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 71
weebgrammers 0:cf7bca71c4e3 72 MagReadStatus = 0;
weebgrammers 0:cf7bca71c4e3 73 }
weebgrammers 0:cf7bca71c4e3 74
weebgrammers 0:cf7bca71c4e3 75 FXOS8700Q_acc::~FXOS8700Q_acc() { }
weebgrammers 0:cf7bca71c4e3 76
weebgrammers 0:cf7bca71c4e3 77 void FXOS8700Q_acc::enable(void) {
weebgrammers 0:cf7bca71c4e3 78 uint8_t data[2];
weebgrammers 0:cf7bca71c4e3 79 readRegs( FXOS8700Q_CTRL_REG1, &data[1], 1);
weebgrammers 0:cf7bca71c4e3 80 printf("Is this working %04x \r\n", &data[1]);
weebgrammers 0:cf7bca71c4e3 81 data[1] |= 0x01;
weebgrammers 0:cf7bca71c4e3 82 data[0] = FXOS8700Q_CTRL_REG1;
weebgrammers 0:cf7bca71c4e3 83 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 84 MagReadStatus = 0;
weebgrammers 0:cf7bca71c4e3 85 }
weebgrammers 0:cf7bca71c4e3 86
weebgrammers 0:cf7bca71c4e3 87 void FXOS8700Q_acc::disable(void) {
weebgrammers 0:cf7bca71c4e3 88 uint8_t data[2];
weebgrammers 0:cf7bca71c4e3 89 readRegs( FXOS8700Q_CTRL_REG1, &data[1], 1);
weebgrammers 0:cf7bca71c4e3 90 data[1] &= 0xFE;
weebgrammers 0:cf7bca71c4e3 91 data[0] = FXOS8700Q_CTRL_REG1;
weebgrammers 0:cf7bca71c4e3 92 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 93 MagReadStatus = 0;
weebgrammers 0:cf7bca71c4e3 94 }
weebgrammers 0:cf7bca71c4e3 95
weebgrammers 0:cf7bca71c4e3 96 uint32_t FXOS8700Q_acc::whoAmI() {
weebgrammers 0:cf7bca71c4e3 97 uint8_t who_am_i = 0;
weebgrammers 0:cf7bca71c4e3 98 readRegs(FXOS8700Q_WHOAMI, &who_am_i, 1);
weebgrammers 0:cf7bca71c4e3 99 return (uint32_t) who_am_i;
weebgrammers 0:cf7bca71c4e3 100 }
weebgrammers 0:cf7bca71c4e3 101
weebgrammers 0:cf7bca71c4e3 102 uint32_t FXOS8700Q_acc::dataReady(void) {
weebgrammers 0:cf7bca71c4e3 103 uint8_t stat = 0;
weebgrammers 0:cf7bca71c4e3 104 readRegs(FXOS8700Q_STATUS, &stat, 1);
weebgrammers 0:cf7bca71c4e3 105 return (uint32_t) stat;
weebgrammers 0:cf7bca71c4e3 106 }
weebgrammers 0:cf7bca71c4e3 107
weebgrammers 0:cf7bca71c4e3 108 uint32_t FXOS8700Q_acc::sampleRate(uint32_t f) {
weebgrammers 0:cf7bca71c4e3 109 return(50); // for now sample rate is fixed at 50Hz
weebgrammers 0:cf7bca71c4e3 110 }
weebgrammers 0:cf7bca71c4e3 111
weebgrammers 0:cf7bca71c4e3 112 void FXOS8700Q_acc::getX(float * x) {
weebgrammers 0:cf7bca71c4e3 113 *x = (float(getAccAxis(FXOS8700Q_OUT_X_MSB))/4096.0f);
weebgrammers 0:cf7bca71c4e3 114 }
weebgrammers 0:cf7bca71c4e3 115
weebgrammers 0:cf7bca71c4e3 116 void FXOS8700Q_acc::getY(float * y) {
weebgrammers 0:cf7bca71c4e3 117 *y = (float(getAccAxis(FXOS8700Q_OUT_Y_MSB))/4096.0f);
weebgrammers 0:cf7bca71c4e3 118 }
weebgrammers 0:cf7bca71c4e3 119
weebgrammers 0:cf7bca71c4e3 120 void FXOS8700Q_acc::getZ(float * z) {
weebgrammers 0:cf7bca71c4e3 121 *z = (float(getAccAxis(FXOS8700Q_OUT_Z_MSB))/4096.0f);
weebgrammers 0:cf7bca71c4e3 122 }
weebgrammers 0:cf7bca71c4e3 123
weebgrammers 0:cf7bca71c4e3 124 void FXOS8700Q_acc::getX(int16_t * d) {
weebgrammers 0:cf7bca71c4e3 125 *d = getAccAxis(FXOS8700Q_OUT_X_MSB);
weebgrammers 0:cf7bca71c4e3 126 }
weebgrammers 0:cf7bca71c4e3 127
weebgrammers 0:cf7bca71c4e3 128 void FXOS8700Q_acc::getY(int16_t * d) {
weebgrammers 0:cf7bca71c4e3 129 *d = getAccAxis(FXOS8700Q_OUT_Y_MSB);
weebgrammers 0:cf7bca71c4e3 130 }
weebgrammers 0:cf7bca71c4e3 131
weebgrammers 0:cf7bca71c4e3 132 void FXOS8700Q_acc::getZ(int16_t * d) {
weebgrammers 0:cf7bca71c4e3 133 *d = getAccAxis(FXOS8700Q_OUT_Z_MSB);
weebgrammers 0:cf7bca71c4e3 134 }
weebgrammers 0:cf7bca71c4e3 135
weebgrammers 0:cf7bca71c4e3 136
weebgrammers 0:cf7bca71c4e3 137 void FXOS8700Q_acc::getAxis(MotionSensorDataUnits &data) {
weebgrammers 0:cf7bca71c4e3 138 int16_t acc, t[3];
weebgrammers 0:cf7bca71c4e3 139
weebgrammers 0:cf7bca71c4e3 140 readRegs(FXOS8700Q_OUT_X_MSB, SensorBuffer, 12);
weebgrammers 0:cf7bca71c4e3 141
weebgrammers 0:cf7bca71c4e3 142 acc = (SensorBuffer[0] << 6) | (SensorBuffer[1] >> 2);
weebgrammers 0:cf7bca71c4e3 143 if (acc > UINT14_MAX/2)
weebgrammers 0:cf7bca71c4e3 144 acc -= UINT14_MAX;
weebgrammers 0:cf7bca71c4e3 145 t[0] = acc;
weebgrammers 0:cf7bca71c4e3 146 acc = (SensorBuffer[2] << 6) | (SensorBuffer[3] >> 2);
weebgrammers 0:cf7bca71c4e3 147 if (acc > UINT14_MAX/2)
weebgrammers 0:cf7bca71c4e3 148 acc -= UINT14_MAX;
weebgrammers 0:cf7bca71c4e3 149 t[1] = acc;
weebgrammers 0:cf7bca71c4e3 150 acc = (SensorBuffer[4] << 6) | (SensorBuffer[5] >> 2);
weebgrammers 0:cf7bca71c4e3 151 if (acc > UINT14_MAX/2)
weebgrammers 0:cf7bca71c4e3 152 acc -= UINT14_MAX;
weebgrammers 0:cf7bca71c4e3 153 t[2] = acc;
weebgrammers 0:cf7bca71c4e3 154 data.x = ((float) t[0]) / 4096.0f;
weebgrammers 0:cf7bca71c4e3 155 data.y = ((float) t[1]) / 4096.0f;
weebgrammers 0:cf7bca71c4e3 156 data.z = ((float) t[2]) / 4096.0f;
weebgrammers 0:cf7bca71c4e3 157 MagReadStatus = 1;
weebgrammers 0:cf7bca71c4e3 158 }
weebgrammers 0:cf7bca71c4e3 159
weebgrammers 0:cf7bca71c4e3 160
weebgrammers 0:cf7bca71c4e3 161 void FXOS8700Q_acc::getAxis(MotionSensorDataCounts &data) {
weebgrammers 0:cf7bca71c4e3 162 int16_t acc;
weebgrammers 0:cf7bca71c4e3 163 readRegs(FXOS8700Q_OUT_X_MSB, SensorBuffer, 12);
weebgrammers 0:cf7bca71c4e3 164
weebgrammers 0:cf7bca71c4e3 165 acc = (SensorBuffer[0] << 6) | (SensorBuffer[1] >> 2);
weebgrammers 0:cf7bca71c4e3 166 if (acc > UINT14_MAX/2)
weebgrammers 0:cf7bca71c4e3 167 acc -= UINT14_MAX;
weebgrammers 0:cf7bca71c4e3 168 data.x = acc;
weebgrammers 0:cf7bca71c4e3 169 acc = (SensorBuffer[2] << 6) | (SensorBuffer[3] >> 2);
weebgrammers 0:cf7bca71c4e3 170 if (acc > UINT14_MAX/2)
weebgrammers 0:cf7bca71c4e3 171 acc -= UINT14_MAX;
weebgrammers 0:cf7bca71c4e3 172 data.y = acc;
weebgrammers 0:cf7bca71c4e3 173 acc = (SensorBuffer[4] << 6) | (SensorBuffer[5] >> 2);
weebgrammers 0:cf7bca71c4e3 174 if (acc > UINT14_MAX/2)
weebgrammers 0:cf7bca71c4e3 175 acc -= UINT14_MAX;
weebgrammers 0:cf7bca71c4e3 176 data.z = acc;
weebgrammers 0:cf7bca71c4e3 177 MagReadStatus = 1;
weebgrammers 0:cf7bca71c4e3 178 }
weebgrammers 0:cf7bca71c4e3 179
weebgrammers 0:cf7bca71c4e3 180 void FXOS8700Q_acc::readRegs(int addr, uint8_t * data, int len) {
weebgrammers 0:cf7bca71c4e3 181 char t[1] = {addr};
weebgrammers 0:cf7bca71c4e3 182 m_i2c.write(m_addr, t, 1, true);
weebgrammers 0:cf7bca71c4e3 183 m_i2c.read(m_addr, (char *)data, len);
weebgrammers 0:cf7bca71c4e3 184 }
weebgrammers 0:cf7bca71c4e3 185
weebgrammers 0:cf7bca71c4e3 186 void FXOS8700Q_acc::writeRegs(uint8_t * data, int len) {
weebgrammers 0:cf7bca71c4e3 187 m_i2c.write(m_addr, (char *)data, len);
weebgrammers 0:cf7bca71c4e3 188 }
weebgrammers 0:cf7bca71c4e3 189
weebgrammers 0:cf7bca71c4e3 190
weebgrammers 0:cf7bca71c4e3 191 int16_t FXOS8700Q_acc::getAccAxis(uint8_t addr) {
weebgrammers 0:cf7bca71c4e3 192 int16_t acc;
weebgrammers 0:cf7bca71c4e3 193 uint8_t res[2];
weebgrammers 0:cf7bca71c4e3 194 readRegs(addr, res, 2);
weebgrammers 0:cf7bca71c4e3 195
weebgrammers 0:cf7bca71c4e3 196 acc = (res[0] << 6) | (res[1] >> 2);
weebgrammers 0:cf7bca71c4e3 197 if (acc > UINT14_MAX/2)
weebgrammers 0:cf7bca71c4e3 198 acc -= UINT14_MAX;
weebgrammers 0:cf7bca71c4e3 199
weebgrammers 0:cf7bca71c4e3 200 return acc;
weebgrammers 0:cf7bca71c4e3 201 }
weebgrammers 0:cf7bca71c4e3 202
weebgrammers 0:cf7bca71c4e3 203 uint8_t FXOS8700Q_acc::getStatus(void) {
weebgrammers 0:cf7bca71c4e3 204 uint8_t stat = 0;
weebgrammers 0:cf7bca71c4e3 205 readRegs( FXOS8700Q_A_FFMT_SRC, &stat, 1);
weebgrammers 0:cf7bca71c4e3 206 return stat;
weebgrammers 0:cf7bca71c4e3 207 }
weebgrammers 0:cf7bca71c4e3 208
weebgrammers 0:cf7bca71c4e3 209 uint8_t FXOS8700Q_acc::getIntSource(void) {
weebgrammers 0:cf7bca71c4e3 210 uint8_t intSrc = 0;
weebgrammers 0:cf7bca71c4e3 211 readRegs ( 0x0C, &intSrc, 1);
weebgrammers 0:cf7bca71c4e3 212 return intSrc;
weebgrammers 0:cf7bca71c4e3 213 }
weebgrammers 0:cf7bca71c4e3 214
weebgrammers 0:cf7bca71c4e3 215
weebgrammers 0:cf7bca71c4e3 216 FXOS8700Q_mag::FXOS8700Q_mag(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) {
weebgrammers 0:cf7bca71c4e3 217 // activate the peripheral
weebgrammers 0:cf7bca71c4e3 218 uint8_t data[2] = {FXOS8700Q_CTRL_REG1, 0x00};
weebgrammers 0:cf7bca71c4e3 219 m_i2c.frequency(400000);
weebgrammers 0:cf7bca71c4e3 220 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 221 data[0] = FXOS8700Q_M_CTRL_REG1;
weebgrammers 0:cf7bca71c4e3 222 data[1] = 0x1F;
weebgrammers 0:cf7bca71c4e3 223 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 224 data[0] = FXOS8700Q_M_CTRL_REG2;
weebgrammers 0:cf7bca71c4e3 225 data[1] = 0x20;
weebgrammers 0:cf7bca71c4e3 226 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 227 data[0] = FXOS8700Q_XYZ_DATA_CFG;
weebgrammers 0:cf7bca71c4e3 228 data[1] = 0x00;
weebgrammers 0:cf7bca71c4e3 229 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 230 data[0] = FXOS8700Q_CTRL_REG1;
weebgrammers 0:cf7bca71c4e3 231 data[1] = 0x18;//0x1D;
weebgrammers 0:cf7bca71c4e3 232 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 233 MagReadStatus = 0;
weebgrammers 0:cf7bca71c4e3 234 }
weebgrammers 0:cf7bca71c4e3 235
weebgrammers 0:cf7bca71c4e3 236 FXOS8700Q_mag::~FXOS8700Q_mag() { }
weebgrammers 0:cf7bca71c4e3 237
weebgrammers 0:cf7bca71c4e3 238 void FXOS8700Q_mag::enable(void) {
weebgrammers 0:cf7bca71c4e3 239 uint8_t data[2];
weebgrammers 0:cf7bca71c4e3 240 readRegs( FXOS8700Q_CTRL_REG1, &data[1], 1);
weebgrammers 0:cf7bca71c4e3 241 data[1] |= 0x01;
weebgrammers 0:cf7bca71c4e3 242 data[0] = FXOS8700Q_CTRL_REG1;
weebgrammers 0:cf7bca71c4e3 243 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 244 MagReadStatus = 0;
weebgrammers 0:cf7bca71c4e3 245 }
weebgrammers 0:cf7bca71c4e3 246
weebgrammers 0:cf7bca71c4e3 247 void FXOS8700Q_mag::disable(void) {
weebgrammers 0:cf7bca71c4e3 248 uint8_t data[2];
weebgrammers 0:cf7bca71c4e3 249 readRegs( FXOS8700Q_CTRL_REG1, &data[1], 1);
weebgrammers 0:cf7bca71c4e3 250 data[1] &= 0xFE;
weebgrammers 0:cf7bca71c4e3 251 data[0] = FXOS8700Q_CTRL_REG1;
weebgrammers 0:cf7bca71c4e3 252 writeRegs(data, 2);
weebgrammers 0:cf7bca71c4e3 253 MagReadStatus = 0;
weebgrammers 0:cf7bca71c4e3 254 }
weebgrammers 0:cf7bca71c4e3 255
weebgrammers 0:cf7bca71c4e3 256
weebgrammers 0:cf7bca71c4e3 257
weebgrammers 0:cf7bca71c4e3 258 uint32_t FXOS8700Q_mag::whoAmI() {
weebgrammers 0:cf7bca71c4e3 259 uint8_t who_am_i = 0;
weebgrammers 0:cf7bca71c4e3 260 readRegs(FXOS8700Q_WHOAMI, &who_am_i, 1);
weebgrammers 0:cf7bca71c4e3 261 return (uint32_t) who_am_i;
weebgrammers 0:cf7bca71c4e3 262 }
weebgrammers 0:cf7bca71c4e3 263
weebgrammers 0:cf7bca71c4e3 264 uint32_t FXOS8700Q_mag::dataReady(void) {
weebgrammers 0:cf7bca71c4e3 265 uint8_t stat = 0;
weebgrammers 0:cf7bca71c4e3 266 readRegs(FXOS8700Q_STATUS, &stat, 1);
weebgrammers 0:cf7bca71c4e3 267 return (uint32_t) stat;
weebgrammers 0:cf7bca71c4e3 268 }
weebgrammers 0:cf7bca71c4e3 269
weebgrammers 0:cf7bca71c4e3 270 uint32_t FXOS8700Q_mag::sampleRate(uint32_t f) {
weebgrammers 0:cf7bca71c4e3 271 return(50); // for now sample rate is fixed at 50Hz
weebgrammers 0:cf7bca71c4e3 272 }
weebgrammers 0:cf7bca71c4e3 273
weebgrammers 0:cf7bca71c4e3 274 void FXOS8700Q_mag::getX(float * x) {
weebgrammers 0:cf7bca71c4e3 275 *x = (float(getAccAxis(FXOS8700Q_M_OUT_X_MSB)) * 0.1f);
weebgrammers 0:cf7bca71c4e3 276 }
weebgrammers 0:cf7bca71c4e3 277
weebgrammers 0:cf7bca71c4e3 278 void FXOS8700Q_mag::getY(float * y) {
weebgrammers 0:cf7bca71c4e3 279 *y = (float(getAccAxis(FXOS8700Q_M_OUT_Y_MSB)) * 0.1f);
weebgrammers 0:cf7bca71c4e3 280 }
weebgrammers 0:cf7bca71c4e3 281
weebgrammers 0:cf7bca71c4e3 282 void FXOS8700Q_mag::getZ(float * z) {
weebgrammers 0:cf7bca71c4e3 283 *z = (float(getAccAxis(FXOS8700Q_M_OUT_Z_MSB)) * 0.1f);
weebgrammers 0:cf7bca71c4e3 284 }
weebgrammers 0:cf7bca71c4e3 285
weebgrammers 0:cf7bca71c4e3 286 void FXOS8700Q_mag::getX(int16_t * d) {
weebgrammers 0:cf7bca71c4e3 287 *d = getAccAxis(FXOS8700Q_M_OUT_X_MSB);
weebgrammers 0:cf7bca71c4e3 288 }
weebgrammers 0:cf7bca71c4e3 289
weebgrammers 0:cf7bca71c4e3 290 void FXOS8700Q_mag::getY(int16_t * d) {
weebgrammers 0:cf7bca71c4e3 291 *d = getAccAxis(FXOS8700Q_M_OUT_Y_MSB);
weebgrammers 0:cf7bca71c4e3 292 }
weebgrammers 0:cf7bca71c4e3 293
weebgrammers 0:cf7bca71c4e3 294 void FXOS8700Q_mag::getZ(int16_t * d) {
weebgrammers 0:cf7bca71c4e3 295 *d = getAccAxis(FXOS8700Q_M_OUT_Z_MSB);
weebgrammers 0:cf7bca71c4e3 296 }
weebgrammers 0:cf7bca71c4e3 297
weebgrammers 0:cf7bca71c4e3 298
weebgrammers 0:cf7bca71c4e3 299 void FXOS8700Q_mag::getAxis(MotionSensorDataUnits &data) {
weebgrammers 0:cf7bca71c4e3 300 int16_t t[3];
weebgrammers 0:cf7bca71c4e3 301 uint8_t res[6];
weebgrammers 0:cf7bca71c4e3 302
weebgrammers 0:cf7bca71c4e3 303 if(MagReadStatus) {
weebgrammers 0:cf7bca71c4e3 304 t[0] = (SensorBuffer[6] << 8) | SensorBuffer[7];
weebgrammers 0:cf7bca71c4e3 305 t[1] = (SensorBuffer[8] << 8) | SensorBuffer[9];
weebgrammers 0:cf7bca71c4e3 306 t[2] = (SensorBuffer[10] << 8) | SensorBuffer[11];
weebgrammers 0:cf7bca71c4e3 307 } else {
weebgrammers 0:cf7bca71c4e3 308 readRegs(FXOS8700Q_M_OUT_X_MSB, res, 6);
weebgrammers 0:cf7bca71c4e3 309 t[0] = (res[0] << 8) | res[1];
weebgrammers 0:cf7bca71c4e3 310 t[1] = (res[2] << 8) | res[3];
weebgrammers 0:cf7bca71c4e3 311 t[2] = (res[4] << 8) | res[5];
weebgrammers 0:cf7bca71c4e3 312 }
weebgrammers 0:cf7bca71c4e3 313 data.x = ((float) t[0]) * 0.1f;
weebgrammers 0:cf7bca71c4e3 314 data.y = ((float) t[1]) * 0.1f;
weebgrammers 0:cf7bca71c4e3 315 data.z = ((float) t[2]) * 0.1f;
weebgrammers 0:cf7bca71c4e3 316 }
weebgrammers 0:cf7bca71c4e3 317
weebgrammers 0:cf7bca71c4e3 318
weebgrammers 0:cf7bca71c4e3 319 void FXOS8700Q_mag::getAxis(MotionSensorDataCounts &data) {
weebgrammers 0:cf7bca71c4e3 320
weebgrammers 0:cf7bca71c4e3 321 uint8_t res[6];
weebgrammers 0:cf7bca71c4e3 322 readRegs(FXOS8700Q_M_OUT_X_MSB, res, 6);
weebgrammers 0:cf7bca71c4e3 323
weebgrammers 0:cf7bca71c4e3 324 data.x = (res[0] << 8) | res[1];
weebgrammers 0:cf7bca71c4e3 325 data.y = (res[2] << 8) | res[3];
weebgrammers 0:cf7bca71c4e3 326 data.z = (res[4] << 8) | res[5];
weebgrammers 0:cf7bca71c4e3 327 }
weebgrammers 0:cf7bca71c4e3 328
weebgrammers 0:cf7bca71c4e3 329 void FXOS8700Q_mag::readRegs(int addr, uint8_t * data, int len) {
weebgrammers 0:cf7bca71c4e3 330 char t[1] = {addr};
weebgrammers 0:cf7bca71c4e3 331 m_i2c.write(m_addr, t, 1, true);
weebgrammers 0:cf7bca71c4e3 332 m_i2c.read(m_addr, (char *)data, len);
weebgrammers 0:cf7bca71c4e3 333 }
weebgrammers 0:cf7bca71c4e3 334
weebgrammers 0:cf7bca71c4e3 335 void FXOS8700Q_mag::writeRegs(uint8_t * data, int len) {
weebgrammers 0:cf7bca71c4e3 336 m_i2c.write(m_addr, (char *)data, len);
weebgrammers 0:cf7bca71c4e3 337 }
weebgrammers 0:cf7bca71c4e3 338
weebgrammers 0:cf7bca71c4e3 339
weebgrammers 0:cf7bca71c4e3 340 int16_t FXOS8700Q_mag::getAccAxis(uint8_t addr) {
weebgrammers 0:cf7bca71c4e3 341 int16_t acc;
weebgrammers 0:cf7bca71c4e3 342 uint8_t res[2];
weebgrammers 0:cf7bca71c4e3 343 readRegs(addr, res, 2);
weebgrammers 0:cf7bca71c4e3 344
weebgrammers 0:cf7bca71c4e3 345 acc = (res[0] << 8) | res[1];
weebgrammers 0:cf7bca71c4e3 346
weebgrammers 0:cf7bca71c4e3 347 return acc;
weebgrammers 0:cf7bca71c4e3 348 }