Added mag calibration and interrupt-based data ready

Dependencies:   BLE_API mbed-src nRF51822

Revision:
4:8d11bfc7cac0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EM7180.h	Thu Sep 22 01:21:24 2016 +0000
@@ -0,0 +1,124 @@
+#ifndef EM7180_H
+#define EM7180_H
+ 
+//#include "mbed.h"
+
+// EM7180 SENtral register map
+// see http://www.emdeveloper.com/downloads/7180/EMSentral_EM7180_Register_Map_v1_3.pdf
+//
+#define EM7180_QX                 0x00  // this is a 32-bit normalized floating point number read from registers 0x00-03
+#define EM7180_QY                 0x04  // this is a 32-bit normalized floating point number read from registers 0x04-07
+#define EM7180_QZ                 0x08  // this is a 32-bit normalized floating point number read from registers 0x08-0B
+#define EM7180_QW                 0x0C  // this is a 32-bit normalized floating point number read from registers 0x0C-0F
+#define EM7180_QTIME              0x10  // this is a 16-bit unsigned integer read from registers 0x10-11
+#define EM7180_MX                 0x12  // int16_t from registers 0x12-13
+#define EM7180_MY                 0x14  // int16_t from registers 0x14-15
+#define EM7180_MZ                 0x16  // int16_t from registers 0x16-17
+#define EM7180_MTIME              0x18  // uint16_t from registers 0x18-19
+#define EM7180_AX                 0x1A  // int16_t from registers 0x1A-1B
+#define EM7180_AY                 0x1C  // int16_t from registers 0x1C-1D
+#define EM7180_AZ                 0x1E  // int16_t from registers 0x1E-1F
+#define EM7180_ATIME              0x20  // uint16_t from registers 0x20-21
+#define EM7180_GX                 0x22  // int16_t from registers 0x22-23
+#define EM7180_GY                 0x24  // int16_t from registers 0x24-25
+#define EM7180_GZ                 0x26  // int16_t from registers 0x26-27
+#define EM7180_GTIME              0x28  // uint16_t from registers 0x28-29
+#define EM7180_Baro               0x2A  // start of two-byte MS5637 pressure data, 16-bit signed interger
+#define EM7180_BaroTIME           0x2C  // start of two-byte MS5637 pressure timestamp, 16-bit unsigned
+#define EM7180_Temp               0x2E  // start of two-byte MS5637 temperature data, 16-bit signed interger
+#define EM7180_TempTIME           0x30  // start of two-byte MS5637 temperature timestamp, 16-bit unsigned
+#define EM7180_QRateDivisor       0x32  // uint8_t 
+#define EM7180_EnableEvents       0x33
+#define EM7180_HostControl        0x34
+#define EM7180_EventStatus        0x35
+#define EM7180_SensorStatus       0x36
+#define EM7180_SentralStatus      0x37
+#define EM7180_AlgorithmStatus    0x38
+#define EM7180_FeatureFlags       0x39
+#define EM7180_ParamAcknowledge   0x3A
+#define EM7180_SavedParamByte0    0x3B
+#define EM7180_SavedParamByte1    0x3C
+#define EM7180_SavedParamByte2    0x3D
+#define EM7180_SavedParamByte3    0x3E
+#define EM7180_ActualMagRate      0x45
+#define EM7180_ActualAccelRate    0x46
+#define EM7180_ActualGyroRate     0x47
+#define EM7180_ActualBaroRate     0x48
+#define EM7180_ActualTempRate     0x49
+#define EM7180_ErrorRegister      0x50
+#define EM7180_AlgorithmControl   0x54
+#define EM7180_MagRate            0x55
+#define EM7180_AccelRate          0x56
+#define EM7180_GyroRate           0x57
+#define EM7180_BaroRate           0x58
+#define EM7180_TempRate           0x59
+#define EM7180_LoadParamByte0     0x60
+#define EM7180_LoadParamByte1     0x61
+#define EM7180_LoadParamByte2     0x62
+#define EM7180_LoadParamByte3     0x63
+#define EM7180_ParamRequest       0x64
+#define EM7180_ROMVersion1        0x70
+#define EM7180_ROMVersion2        0x71
+#define EM7180_RAMVersion1        0x72
+#define EM7180_RAMVersion2        0x73
+#define EM7180_ProductID          0x90
+#define EM7180_RevisionID         0x91
+#define EM7180_RunStatus          0x92
+#define EM7180_UploadAddress      0x94 // uint16_t registers 0x94 (MSB)-5(LSB)
+#define EM7180_UploadData         0x96  
+#define EM7180_CRCHost            0x97  // uint32_t from registers 0x97-9A
+#define EM7180_ResetRequest       0x9B   
+#define EM7180_PassThruStatus     0x9E   
+#define EM7180_PassThruControl    0xA0
+#define EM7180_ACC_LPF_BW         0x5B  //Register GP36
+#define EM7180_GYRO_LPF_BW        0x5C  //Register GP37
+#define EM7180_BARO_LPF_BW        0x5D  //Register GP38
+
+#define EM7180_ADDRESS           0x28<<1   // Address of the EM7180 SENtral sensor hub
+
+
+class EM7180 {
+ 
+    protected:
+ 
+    public:
+  //===================================================================================================================
+//====== Set of useful function to access pressure and temperature data
+//===================================================================================================================
+
+    
+    void writeByte(uint8_t address, uint8_t subAddress, uint8_t data)
+{
+   char data_write[2];
+   data_write[0] = subAddress;
+   data_write[1] = data;
+   i2c.write(address, data_write, 2, 0);
+}
+
+    char readByte(uint8_t address, uint8_t subAddress)
+{
+    char data[1]; // `data` will store the register data     
+    char data_write[1];
+    data_write[0] = subAddress;
+    i2c.write(address, data_write, 1, 1); // no stop
+    i2c.read(address, data, 1, 0); 
+    return data[0]; 
+}
+
+    void readBytes(uint8_t address, uint8_t subAddress, uint8_t count, uint8_t * dest)
+{     
+    char data[24];
+    char data_write[1];
+    data_write[0] = subAddress;
+    i2c.write(address, data_write, 1, 1); // no stop
+    i2c.read(address, data, count, 0); 
+    for(int ii = 0; ii < count; ii++) {
+     dest[ii] = data[ii];
+    }
+} 
+ 
+
+
+ 
+  };
+#endif
\ No newline at end of file