First Commit as a new library

Dependents:   Host_Software_MAX32664GWEB_HR_wrist Host_Software_MAX32664GWEC_SpO2_HR Host_Software_MAX32664GWEB_HR_EXTENDED Host_Software_MAX32664GWEC_SpO2_HR-_EXTE ... more

Files at this revision

API Documentation at this revision

Comitter:
j3
Date:
Tue Dec 20 01:08:33 2016 +0000
Parent:
8:a89b529b1d96
Child:
10:9e219f2f1fb3
Commit message:
Added range support for accelerometer

Changed in this revision

bmi160.cpp Show annotated file Show diff for this revision Revisions of this file
bmi160.h Show annotated file Show diff for this revision Revisions of this file
bmi160_i2c.cpp Show annotated file Show diff for this revision Revisions of this file
bmi160_spi.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/bmi160.cpp	Tue Dec 20 00:10:04 2016 +0000
+++ b/bmi160.cpp	Tue Dec 20 01:08:33 2016 +0000
@@ -34,6 +34,9 @@
 #include "bmi160.h"
 
 
+const struct BMI160::AccConfig BMI160::DEFAULT_ACC_CONFIG = {SENS_2G, ACC_US_OFF, ACC_BWP_2, ACC_ODR_8};
+    
+
 //*****************************************************************************
 int32_t BMI160::setSensorPowerMode(Sensors sensor, PowerModes pwrMode)
 {
@@ -94,7 +97,7 @@
 
 
 //*****************************************************************************
-int32_t BMI160::getAccAxis(SensorAxis axis, AxisData &data)
+int32_t BMI160::getAccAxis(SensorAxis axis, AxisData &data, AccConfig accConfig)
 {
     uint8_t localData[2];
     int32_t rtnVal;
@@ -121,7 +124,25 @@
     if(rtnVal == RTN_NO_ERROR)
     {
         data.raw = ((localData[1] << 8) | localData[0]);
-        data.scaled = (data.raw/16384.0F); //only 2G range right now
+        switch(accConfig.range)
+        {
+            //magic numbers are typical values for LSB/g from EC table
+            case SENS_2G:
+                data.scaled = (data.raw/16384.0F);
+            break;
+            
+            case SENS_4G:
+                data.scaled = (data.raw/8192.0F);
+            break;
+            
+            case SENS_8G:
+                data.scaled = (data.raw/4096.0F);
+            break;
+            
+            case SENS_16G:
+                data.scaled = (data.raw/2048.0F);
+            break;
+        }
     }
     
     return rtnVal;
@@ -129,7 +150,7 @@
     
 
 //*****************************************************************************    
-int32_t BMI160::getAccXYZ(SensorData &data)
+int32_t BMI160::getAccXYZ(SensorData &data, AccConfig accConfig)
 {
     uint8_t localData[6];
     int32_t rtnVal = readBlock(DATA_14, DATA_19, localData);
@@ -140,10 +161,33 @@
         data.yAxis.raw = ((localData[3] << 8) | localData[2]);
         data.zAxis.raw = ((localData[5] << 8) | localData[4]);
         
-        //only 2G range right now
-        data.xAxis.scaled = (data.xAxis.raw/16384.0F);
-        data.yAxis.scaled = (data.yAxis.raw/16384.0F);
-        data.zAxis.scaled = (data.zAxis.raw/16384.0F);
+        switch(accConfig.range)
+        {
+            //magic numbers are typical values for LSB/g from EC table
+            case SENS_2G:
+                data.xAxis.scaled = (data.xAxis.raw/16384.0F);
+                data.yAxis.scaled = (data.yAxis.raw/16384.0F);
+                data.zAxis.scaled = (data.zAxis.raw/16384.0F);
+            break;
+            
+            case SENS_4G:
+                data.xAxis.scaled = (data.xAxis.raw/8192.0F);
+                data.yAxis.scaled = (data.yAxis.raw/8192.0F);
+                data.zAxis.scaled = (data.zAxis.raw/8192.0F);
+            break;
+            
+            case SENS_8G:
+                data.xAxis.scaled = (data.xAxis.raw/4096.0F);
+                data.yAxis.scaled = (data.yAxis.raw/4096.0F);
+                data.zAxis.scaled = (data.zAxis.raw/4096.0F);
+            break;
+            
+            case SENS_16G:
+                data.xAxis.scaled = (data.xAxis.raw/2048.0F);
+                data.yAxis.scaled = (data.yAxis.raw/2048.0F);
+                data.zAxis.scaled = (data.zAxis.raw/2048.0F);
+            break;
+        }
     }
     
     return rtnVal;
--- a/bmi160.h	Tue Dec 20 00:10:04 2016 +0000
+++ b/bmi160.h	Tue Dec 20 01:08:33 2016 +0000
@@ -279,6 +279,18 @@
         SENS_16G,     ///<Accelerometer range +-16G
     };
     
+    ///Structure for holding accelerometer configuration
+    struct AccConfig
+    {
+        AccRange range;
+        AccUnderSampling us;
+        AccBandWidthParam bwp;
+        AccOutPutDataRate odr;
+    };
+    
+    ///Accelerometer default configuration
+    static const AccConfig DEFAULT_ACC_CONFIG;
+    
     ///BMI160 Power Modes
     enum PowerModes
     {
@@ -419,36 +431,26 @@
     ///On Entry:
     ///@param[in] axis - Sensor axis
     ///@param[in] data - AxisData structure
+    ///@param[in] accConfig - Accelerometer configuration structure
     ///
     ///On Exit:
     ///@param[out] data - Structure holds raw and scaled axis data
     ///
     ///@returns 0 on success, non 0 on failure
-    int32_t getAccAxis(SensorAxis axis, AxisData &data);
+    int32_t getAccAxis(SensorAxis axis, AxisData &data, AccConfig accConfig);
     
     
     ///@brief Get accelerometer xyz axis as float.\n
     ///
     ///On Entry:
     ///@param[in] data - SensorData structure
+    ///@param[in] accConfig - Accelerometer configuration structure
     ///
     ///On Exit:
     ///@param[out] data - Structure holds raw and scaled data for all three axis
     ///
     ///@returns 0 on success, non 0 on failure
-    int32_t getAccXYZ(SensorData &data);
-
-    
-protected:
-
-    struct AccConfig
-    {
-        AccRange range;
-        AccUnderSampling us;
-        AccBandWidthParam bwp;
-        AccOutPutDataRate odr;
-    };
-    
+    int32_t getAccXYZ(SensorData &data, AccConfig accConfig);  
 };
 
 
--- a/bmi160_i2c.cpp	Tue Dec 20 00:10:04 2016 +0000
+++ b/bmi160_i2c.cpp	Tue Dec 20 01:08:33 2016 +0000
@@ -38,6 +38,7 @@
 BMI160_I2C::BMI160_I2C(I2C &i2cBus, uint8_t i2cAdrs)
 :m_i2cBus(i2cBus), m_Wadrs(i2cAdrs << 1), m_Radrs((i2cAdrs << 1) | 1)
 {
+    
 }
 
 
--- a/bmi160_spi.cpp	Tue Dec 20 00:10:04 2016 +0000
+++ b/bmi160_spi.cpp	Tue Dec 20 01:08:33 2016 +0000
@@ -38,6 +38,7 @@
 BMI160_SPI::BMI160_SPI(SPI &spiBus, DigitalOut &cs)
 :m_spiBus(spiBus), m_cs(cs)
 {
+    
 }