Library to access multiple giro - with ability to setup them when starting

Committer:
Pythia
Date:
Wed Jul 22 13:23:44 2015 +0000
Revision:
0:8aa01dbab64e
Child:
1:816ba6bfbb20
Initial version (STUB!)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Pythia 0:8aa01dbab64e 1 /* FXAS21002CQ sensor driver
Pythia 0:8aa01dbab64e 2 * Copyright (c) 2015 WD
Pythia 0:8aa01dbab64e 3 *
Pythia 0:8aa01dbab64e 4 * Unless required by applicable law or agreed to in writing, software
Pythia 0:8aa01dbab64e 5 * distributed under the License is distributed on an "AS IS" BASIS,
Pythia 0:8aa01dbab64e 6 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Pythia 0:8aa01dbab64e 7 * See the License for the specific language governing permissions and
Pythia 0:8aa01dbab64e 8 * limitations under the License.
Pythia 0:8aa01dbab64e 9 */
Pythia 0:8aa01dbab64e 10
Pythia 0:8aa01dbab64e 11 #ifndef FXAS21002CQ_H
Pythia 0:8aa01dbab64e 12 #define FXAS21002CQ_H
Pythia 0:8aa01dbab64e 13
Pythia 0:8aa01dbab64e 14 #include "mbed.h"
Pythia 0:8aa01dbab64e 15 #include "MotionSensor.h"
Pythia 0:8aa01dbab64e 16
Pythia 0:8aa01dbab64e 17 // FXAS21002CQ I2C address
Pythia 0:8aa01dbab64e 18 #define FXAS21002CQ_SLAVE_ADDR0 (0x20<<1) // with pins SA0=0,
Pythia 0:8aa01dbab64e 19 #define FXAS21002CQ_SLAVE_ADDR1 (0x21<<1) // with pins SA0=1,
Pythia 0:8aa01dbab64e 20 // FXAS21002CQ internal register addresses
Pythia 0:8aa01dbab64e 21 #define FXAS21002CQ_STATUS 0x00
Pythia 0:8aa01dbab64e 22 #define FXAS21002CQ_OUT_X_MSB 0x01
Pythia 0:8aa01dbab64e 23 #define FXAS21002CQ_OUT_X_LSB 0x02
Pythia 0:8aa01dbab64e 24 #define FXAS21002CQ_OUT_Y_MSB 0x03
Pythia 0:8aa01dbab64e 25 #define FXAS21002CQ_OUT_Y_LSB 0x04
Pythia 0:8aa01dbab64e 26 #define FXAS21002CQ_OUT_Z_MSB 0x05
Pythia 0:8aa01dbab64e 27 #define FXAS21002CQ_OUT_Z_LSB 0x06
Pythia 0:8aa01dbab64e 28 #define FXAS21002CQ_DR_STATUS 0x07
Pythia 0:8aa01dbab64e 29 #define FXAS21002CQ_F_STATUS 0x08
Pythia 0:8aa01dbab64e 30 #define FXAS21002CQ_F_SETUP 0x09
Pythia 0:8aa01dbab64e 31 #define FXAS21002CQ_F_EVENT 0x0A
Pythia 0:8aa01dbab64e 32 #define FXAS21002CQ_INT_SRC_FLAG 0x0B
Pythia 0:8aa01dbab64e 33 #define FXAS21002CQ_WHO_AM_I 0x0C
Pythia 0:8aa01dbab64e 34 #define FXAS21002CQ_CTRL_REG0 0x0D
Pythia 0:8aa01dbab64e 35 #define FXAS21002CQ_RT_CFG 0x0E
Pythia 0:8aa01dbab64e 36 #define FXAS21002CQ_RT_SRC 0x0F
Pythia 0:8aa01dbab64e 37 #define FXAS21002CQ_RT_THS 0x10
Pythia 0:8aa01dbab64e 38 #define FXAS21002CQ_RT_COUNT 0x11
Pythia 0:8aa01dbab64e 39 #define FXAS21002CQ_TEMP 0x12
Pythia 0:8aa01dbab64e 40 #define FXAS21002CQ_CTRL_REG1 0x13
Pythia 0:8aa01dbab64e 41 #define FXAS21002CQ_CTRL_REG2 0x14
Pythia 0:8aa01dbab64e 42 #define FXAS21002CQ_CTRL_REG3 0x15
Pythia 0:8aa01dbab64e 43
Pythia 0:8aa01dbab64e 44 struct FXAS21002CQ_Config_struct
Pythia 0:8aa01dbab64e 45 {
Pythia 0:8aa01dbab64e 46 struct FXAS21002CQ_F_SETUP_struct
Pythia 0:8aa01dbab64e 47 {
Pythia 0:8aa01dbab64e 48 enum {DISABLED=0, CIRCULAR=1, STOP=2} F_MODE;
Pythia 0:8aa01dbab64e 49 uint8_t F_WMRK;
Pythia 0:8aa01dbab64e 50 } F_SETUP;
Pythia 0:8aa01dbab64e 51 struct FXAS21002CQ_CTRL_REG0_struct
Pythia 0:8aa01dbab64e 52 {
Pythia 0:8aa01dbab64e 53 enum {HIGH_BW=0, MEDIUM_BW=1, LOW_BW=2} BW;
Pythia 0:8aa01dbab64e 54 enum {SPI4=0, SPI3=1} SPIW;
Pythia 0:8aa01dbab64e 55 enum {HIGH_HP=0, MEDIUM_HIGH_HP=1, MEDIUM_LOW_HP=2, LOW_HP=3} SEL;
Pythia 0:8aa01dbab64e 56 enum {DISABLED_HP=0, ENABLED_HP=1} HPF_EN;
Pythia 0:8aa01dbab64e 57 enum {RANGE_2000=0, RANGE_1000=1, RANGE_500=2, RANGE_250=3} FS;
Pythia 0:8aa01dbab64e 58 } CTRL_REG0;
Pythia 0:8aa01dbab64e 59
Pythia 0:8aa01dbab64e 60 };
Pythia 0:8aa01dbab64e 61
Pythia 0:8aa01dbab64e 62 /** FXAS21002CQ giro example
Pythia 0:8aa01dbab64e 63 @code
Pythia 0:8aa01dbab64e 64 #include "mbed.h"
Pythia 0:8aa01dbab64e 65 #include "FXOS8700Q.h"
Pythia 0:8aa01dbab64e 66 I2C i2c(PTE25, PTE24);
Pythia 0:8aa01dbab64e 67 FXAS21002CQ_Giro giro(i2c, FXOS8700CQ_SLAVE_ADDR1); // Configured for the STTBC-AGM01
Pythia 0:8aa01dbab64e 68 int main(void)
Pythia 0:8aa01dbab64e 69 {
Pythia 0:8aa01dbab64e 70 motion_data_units_t acc_data, mag_data;
Pythia 0:8aa01dbab64e 71 motion_data_counts_t acc_raw, mag_raw;
Pythia 0:8aa01dbab64e 72 float faX, faY, faZ, fmX, fmY, fmZ, tmp_float;
Pythia 0:8aa01dbab64e 73 int16_t raX, raY, raZ, rmX, rmY, rmZ, tmp_int;
Pythia 0:8aa01dbab64e 74 giro.enable();
Pythia 0:8aa01dbab64e 75 mag.enable();
Pythia 0:8aa01dbab64e 76 while (true) {
Pythia 0:8aa01dbab64e 77 // counts based results
Pythia 0:8aa01dbab64e 78 acc.getAxis(acc_raw);
Pythia 0:8aa01dbab64e 79 mag.getAxis(mag_raw);
Pythia 0:8aa01dbab64e 80 acc.getX(raX);
Pythia 0:8aa01dbab64e 81 acc.getY(raY);
Pythia 0:8aa01dbab64e 82 acc.getZ(raZ);
Pythia 0:8aa01dbab64e 83 mag.getX(rmX);
Pythia 0:8aa01dbab64e 84 mag.getY(rmY);
Pythia 0:8aa01dbab64e 85 mag.getZ(rmZ);
Pythia 0:8aa01dbab64e 86 // unit based results
Pythia 0:8aa01dbab64e 87 acc.getAxis(acc_data);
Pythia 0:8aa01dbab64e 88 mag.getAxis(mag_data);
Pythia 0:8aa01dbab64e 89 acc.getX(faX);
Pythia 0:8aa01dbab64e 90 acc.getY(faY);
Pythia 0:8aa01dbab64e 91 acc.getZ(faZ);
Pythia 0:8aa01dbab64e 92 mag.getX(fmX);
Pythia 0:8aa01dbab64e 93 mag.getY(fmY);
Pythia 0:8aa01dbab64e 94 mag.getZ(fmZ);
Pythia 0:8aa01dbab64e 95 wait(0.1f);
Pythia 0:8aa01dbab64e 96 }
Pythia 0:8aa01dbab64e 97 }
Pythia 0:8aa01dbab64e 98 @endcode
Pythia 0:8aa01dbab64e 99 */
Pythia 0:8aa01dbab64e 100
Pythia 0:8aa01dbab64e 101 /** FXOS8700Q driver class
Pythia 0:8aa01dbab64e 102 */
Pythia 0:8aa01dbab64e 103 class FXAS21002CQ : public MotionSensor
Pythia 0:8aa01dbab64e 104 {
Pythia 0:8aa01dbab64e 105 public:
Pythia 0:8aa01dbab64e 106
Pythia 0:8aa01dbab64e 107 /** Read a device register
Pythia 0:8aa01dbab64e 108 @param addr The address to read from
Pythia 0:8aa01dbab64e 109 @param data The data to read from it
Pythia 0:8aa01dbab64e 110 @param len The amount of data to read from it
Pythia 0:8aa01dbab64e 111 @return 0 if successful, negative number otherwise
Pythia 0:8aa01dbab64e 112 */
Pythia 0:8aa01dbab64e 113 void readRegs(uint8_t addr, uint8_t *data, uint32_t len) ;
Pythia 0:8aa01dbab64e 114
Pythia 0:8aa01dbab64e 115 /** Read the ID from a whoAmI register
Pythia 0:8aa01dbab64e 116 @return The device whoAmI register contents
Pythia 0:8aa01dbab64e 117 */
Pythia 0:8aa01dbab64e 118 uint8_t whoAmI(void) ;
Pythia 0:8aa01dbab64e 119
Pythia 0:8aa01dbab64e 120 virtual void enable(void) const;
Pythia 0:8aa01dbab64e 121 virtual void disable(void) const;
Pythia 0:8aa01dbab64e 122 virtual uint32_t sampleRate(uint32_t frequency) const;
Pythia 0:8aa01dbab64e 123 virtual uint32_t dataReady(void) const;
Pythia 0:8aa01dbab64e 124
Pythia 0:8aa01dbab64e 125 virtual int16_t getX(int16_t &x) const;
Pythia 0:8aa01dbab64e 126 virtual int16_t getY(int16_t &y) const;
Pythia 0:8aa01dbab64e 127 virtual int16_t getZ(int16_t &z) const;
Pythia 0:8aa01dbab64e 128 virtual float getX(float &x) const;
Pythia 0:8aa01dbab64e 129 virtual float getY(float &y) const;
Pythia 0:8aa01dbab64e 130 virtual float getZ(float &z) const;
Pythia 0:8aa01dbab64e 131 virtual void getAxis(motion_data_counts_t &xyz) const;
Pythia 0:8aa01dbab64e 132 virtual void getAxis(motion_data_units_t &xyz) const;
Pythia 0:8aa01dbab64e 133
Pythia 0:8aa01dbab64e 134 int8_t getTemperature(void);
Pythia 0:8aa01dbab64e 135
Pythia 0:8aa01dbab64e 136 /** FXAS21002CQ constructor
Pythia 0:8aa01dbab64e 137 @param i2c a configured i2c object
Pythia 0:8aa01dbab64e 138 @param addr addr of the I2C peripheral as wired
Pythia 0:8aa01dbab64e 139 */
Pythia 0:8aa01dbab64e 140 FXAS21002CQ(I2C &i2c, uint8_t addr);
Pythia 0:8aa01dbab64e 141
Pythia 0:8aa01dbab64e 142 /** FXAS21002CQ deconstructor
Pythia 0:8aa01dbab64e 143 */
Pythia 0:8aa01dbab64e 144 ~FXAS21002CQ();
Pythia 0:8aa01dbab64e 145
Pythia 0:8aa01dbab64e 146 protected:
Pythia 0:8aa01dbab64e 147 I2C *_i2c;
Pythia 0:8aa01dbab64e 148 uint8_t _addr;
Pythia 0:8aa01dbab64e 149
Pythia 0:8aa01dbab64e 150 void writeRegs(uint8_t *data, uint32_t len) const;
Pythia 0:8aa01dbab64e 151 int16_t getSensorAxis(uint8_t addr) const;
Pythia 0:8aa01dbab64e 152 };
Pythia 0:8aa01dbab64e 153
Pythia 0:8aa01dbab64e 154 #endif