Library to access multiple giro - with ability to setup them when starting
FXAS21002CQ.h@0:8aa01dbab64e, 2015-07-22 (annotated)
- 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?
User | Revision | Line number | New 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 |