compiled unsuccessful but not sure if it works

Fork of LSM6DS3 by adam&chuang

Committer:
adam_z
Date:
Fri Feb 19 09:50:40 2016 +0000
Revision:
0:301b2cb34ead
Child:
1:cc2caaf5536c
compiled unsuccessful

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adam_z 0:301b2cb34ead 1 #ifndef __LSM6DS3IMU_H__
adam_z 0:301b2cb34ead 2 #define __LSM6DS3IMU_H__
adam_z 0:301b2cb34ead 3
adam_z 0:301b2cb34ead 4
adam_z 0:301b2cb34ead 5 #include "mbed.h"
adam_z 0:301b2cb34ead 6 #include "stdint.h"
adam_z 0:301b2cb34ead 7 #include "LSM6DS3_Types.h"
adam_z 0:301b2cb34ead 8 #include "LSM6DS3_Registers.h"
adam_z 0:301b2cb34ead 9
adam_z 0:301b2cb34ead 10 #include "math.h"
adam_z 0:301b2cb34ead 11
adam_z 0:301b2cb34ead 12 #define I2C_MODE 0
adam_z 0:301b2cb34ead 13 #define SPI_MODE 1
adam_z 0:301b2cb34ead 14
adam_z 0:301b2cb34ead 15 // Return values
adam_z 0:301b2cb34ead 16 typedef enum
adam_z 0:301b2cb34ead 17 {
adam_z 0:301b2cb34ead 18 IMU_SUCCESS,
adam_z 0:301b2cb34ead 19 IMU_HW_ERROR,
adam_z 0:301b2cb34ead 20 IMU_NOT_SUPPORTED,
adam_z 0:301b2cb34ead 21 IMU_GENERIC_ERROR,
adam_z 0:301b2cb34ead 22 IMU_OUT_OF_BOUNDS,
adam_z 0:301b2cb34ead 23 IMU_ALL_ONES_WARNING,
adam_z 0:301b2cb34ead 24 //...
adam_z 0:301b2cb34ead 25 } status_t;
adam_z 0:301b2cb34ead 26
adam_z 0:301b2cb34ead 27 //This is the core operational class of the driver.
adam_z 0:301b2cb34ead 28 // LSM6DS3Core contains only read and write operations towards the IMU.
adam_z 0:301b2cb34ead 29 // To use the higher level functions, use the class LSM6DS3 which inherits
adam_z 0:301b2cb34ead 30 // this class.
adam_z 0:301b2cb34ead 31 //========================self define=================
adam_z 0:301b2cb34ead 32
adam_z 0:301b2cb34ead 33 //====================================================
adam_z 0:301b2cb34ead 34
adam_z 0:301b2cb34ead 35 class LSM6DS3Core
adam_z 0:301b2cb34ead 36 {
adam_z 0:301b2cb34ead 37 public:
adam_z 0:301b2cb34ead 38 LSM6DS3Core( uint8_t );
adam_z 0:301b2cb34ead 39 LSM6DS3Core( uint8_t, uint8_t );
adam_z 0:301b2cb34ead 40 // ~LSM6DS3Core() = default;
adam_z 0:301b2cb34ead 41
adam_z 0:301b2cb34ead 42 status_t beginCore( void );
adam_z 0:301b2cb34ead 43
adam_z 0:301b2cb34ead 44 //The following utilities read and write to the IMU
adam_z 0:301b2cb34ead 45
adam_z 0:301b2cb34ead 46 //ReadRegisterRegion takes a uint8 array address as input and reads
adam_z 0:301b2cb34ead 47 // a chunk of memory into that array.
adam_z 0:301b2cb34ead 48 status_t readRegisterRegion(uint8_t*, uint8_t, uint8_t );
adam_z 0:301b2cb34ead 49
adam_z 0:301b2cb34ead 50 //readRegister reads one 8-bit register
adam_z 0:301b2cb34ead 51 status_t readRegister(uint8_t*, uint8_t);
adam_z 0:301b2cb34ead 52
adam_z 0:301b2cb34ead 53 //Reads two 8-bit regs, LSByte then MSByte order, and concatenates them.
adam_z 0:301b2cb34ead 54 // Acts as a 16-bit read operation
adam_z 0:301b2cb34ead 55 status_t readRegisterInt16(int16_t*, uint8_t offset );
adam_z 0:301b2cb34ead 56
adam_z 0:301b2cb34ead 57 //Writes an 8-bit byte;
adam_z 0:301b2cb34ead 58 status_t writeRegister(uint8_t, uint8_t);
adam_z 0:301b2cb34ead 59
adam_z 0:301b2cb34ead 60 //Change to embedded page
adam_z 0:301b2cb34ead 61 status_t embeddedPage( void );
adam_z 0:301b2cb34ead 62
adam_z 0:301b2cb34ead 63 //Change to base page
adam_z 0:301b2cb34ead 64 status_t basePage( void );
adam_z 0:301b2cb34ead 65
adam_z 0:301b2cb34ead 66 private:
adam_z 0:301b2cb34ead 67
adam_z 0:301b2cb34ead 68 //Communication stuff
adam_z 0:301b2cb34ead 69 uint8_t commInterface;
adam_z 0:301b2cb34ead 70 uint8_t I2CAddress;
adam_z 0:301b2cb34ead 71 uint8_t chipSelectPin;
adam_z 0:301b2cb34ead 72
adam_z 0:301b2cb34ead 73 };
adam_z 0:301b2cb34ead 74
adam_z 0:301b2cb34ead 75 //This struct holds the settings the driver uses to do calculations
adam_z 0:301b2cb34ead 76 struct SensorSettings {
adam_z 0:301b2cb34ead 77 public:
adam_z 0:301b2cb34ead 78 //Gyro settings
adam_z 0:301b2cb34ead 79 uint8_t gyroEnabled;
adam_z 0:301b2cb34ead 80 uint16_t gyroRange;
adam_z 0:301b2cb34ead 81 uint16_t gyroSampleRate;
adam_z 0:301b2cb34ead 82 uint16_t gyroBandWidth;
adam_z 0:301b2cb34ead 83
adam_z 0:301b2cb34ead 84 uint8_t gyroFifoEnabled;
adam_z 0:301b2cb34ead 85 uint8_t gyroFifoDecimation;
adam_z 0:301b2cb34ead 86
adam_z 0:301b2cb34ead 87 //Accelerometer settings
adam_z 0:301b2cb34ead 88 uint8_t accelEnabled;
adam_z 0:301b2cb34ead 89 uint8_t accelODROff;
adam_z 0:301b2cb34ead 90 uint16_t accelRange;
adam_z 0:301b2cb34ead 91 uint16_t accelSampleRate;
adam_z 0:301b2cb34ead 92 uint16_t accelBandWidth;
adam_z 0:301b2cb34ead 93
adam_z 0:301b2cb34ead 94 uint8_t accelFifoEnabled;
adam_z 0:301b2cb34ead 95 uint8_t accelFifoDecimation;
adam_z 0:301b2cb34ead 96
adam_z 0:301b2cb34ead 97 //Temperature settings
adam_z 0:301b2cb34ead 98 uint8_t tempEnabled;
adam_z 0:301b2cb34ead 99
adam_z 0:301b2cb34ead 100 //Non-basic mode settings
adam_z 0:301b2cb34ead 101 uint8_t commMode;
adam_z 0:301b2cb34ead 102
adam_z 0:301b2cb34ead 103 //FIFO control data
adam_z 0:301b2cb34ead 104 uint16_t fifoThreshold;
adam_z 0:301b2cb34ead 105 int16_t fifoSampleRate;
adam_z 0:301b2cb34ead 106 uint8_t fifoModeWord;
adam_z 0:301b2cb34ead 107
adam_z 0:301b2cb34ead 108 };
adam_z 0:301b2cb34ead 109
adam_z 0:301b2cb34ead 110
adam_z 0:301b2cb34ead 111 //This is the highest level class of the driver.
adam_z 0:301b2cb34ead 112 //
adam_z 0:301b2cb34ead 113 // class LSM6DS3 inherits the core and makes use of the beginCore()
adam_z 0:301b2cb34ead 114 //method through it's own begin() method. It also contains the
adam_z 0:301b2cb34ead 115 //settings struct to hold user settings.
adam_z 0:301b2cb34ead 116
adam_z 0:301b2cb34ead 117 class LSM6DS3 : public LSM6DS3Core
adam_z 0:301b2cb34ead 118 {
adam_z 0:301b2cb34ead 119 public:
adam_z 0:301b2cb34ead 120 //IMU settings
adam_z 0:301b2cb34ead 121 SensorSettings settings;
adam_z 0:301b2cb34ead 122
adam_z 0:301b2cb34ead 123 //Error checking
adam_z 0:301b2cb34ead 124 uint16_t allOnesCounter;
adam_z 0:301b2cb34ead 125 uint16_t nonSuccessCounter;
adam_z 0:301b2cb34ead 126
adam_z 0:301b2cb34ead 127 //Constructor generates default SensorSettings.
adam_z 0:301b2cb34ead 128 //(over-ride after construction if desired)
adam_z 0:301b2cb34ead 129 LSM6DS3( uint8_t busType = I2C_MODE, uint8_t inputArg = 0x6B );
adam_z 0:301b2cb34ead 130 // ~LSM6DS3() = default;
adam_z 0:301b2cb34ead 131
adam_z 0:301b2cb34ead 132 //Call to apply SensorSettings
adam_z 0:301b2cb34ead 133 status_t begin(void);
adam_z 0:301b2cb34ead 134
adam_z 0:301b2cb34ead 135 //Returns the raw bits from the sensor cast as 16-bit signed integers
adam_z 0:301b2cb34ead 136 int16_t readRawAccelX( void );
adam_z 0:301b2cb34ead 137 int16_t readRawAccelY( void );
adam_z 0:301b2cb34ead 138 int16_t readRawAccelZ( void );
adam_z 0:301b2cb34ead 139 int16_t readRawGyroX( void );
adam_z 0:301b2cb34ead 140 int16_t readRawGyroY( void );
adam_z 0:301b2cb34ead 141 int16_t readRawGyroZ( void );
adam_z 0:301b2cb34ead 142
adam_z 0:301b2cb34ead 143 int16_t accelOffset[3];
adam_z 0:301b2cb34ead 144 int16_t gyroOffset[3];
adam_z 0:301b2cb34ead 145 void setOffset(int16_t, int16_t, int16_t, int16_t, int16_t, int16_t);
adam_z 0:301b2cb34ead 146
adam_z 0:301b2cb34ead 147
adam_z 0:301b2cb34ead 148
adam_z 0:301b2cb34ead 149 //Returns the values as floats. Inside, this calls readRaw___();
adam_z 0:301b2cb34ead 150 float readFloatAccelX( void );
adam_z 0:301b2cb34ead 151 float readFloatAccelY( void );
adam_z 0:301b2cb34ead 152 float readFloatAccelZ( void );
adam_z 0:301b2cb34ead 153 float readFloatGyroX( void );
adam_z 0:301b2cb34ead 154 float readFloatGyroY( void );
adam_z 0:301b2cb34ead 155 float readFloatGyroZ( void );
adam_z 0:301b2cb34ead 156
adam_z 0:301b2cb34ead 157 //Temperature related methods
adam_z 0:301b2cb34ead 158 int16_t readRawTemp( void );
adam_z 0:301b2cb34ead 159 float readTempC( void );
adam_z 0:301b2cb34ead 160 float readTempF( void );
adam_z 0:301b2cb34ead 161
adam_z 0:301b2cb34ead 162 //FIFO stuff
adam_z 0:301b2cb34ead 163 void fifoBegin( void );
adam_z 0:301b2cb34ead 164 void fifoClear( void );
adam_z 0:301b2cb34ead 165 int16_t fifoRead( void );
adam_z 0:301b2cb34ead 166 uint16_t fifoGetStatus( void );
adam_z 0:301b2cb34ead 167 void fifoEnd( void );
adam_z 0:301b2cb34ead 168
adam_z 0:301b2cb34ead 169 float calcGyro( int32_t );
adam_z 0:301b2cb34ead 170 float calcAccel( int32_t );
adam_z 0:301b2cb34ead 171
adam_z 0:301b2cb34ead 172 private:
adam_z 0:301b2cb34ead 173
adam_z 0:301b2cb34ead 174 };
adam_z 0:301b2cb34ead 175
adam_z 0:301b2cb34ead 176 #endif