An in-development library to provide effective access to all features of the FXOS8700CQ on the FRDM-K64F mbed-enabled development board. As of 28 May 2014 1325EDT, the code should be generally usable and modifiable.

Dependents:   fxos8700cq_example frdm_fxos8700_logger AVC_test1 frdm_accel ... more

A basic implementation of accessing the FXOS8700CQ. This should be useable, but as the Apache License says, don't expect it to be good at doing anything, even what it's supposed to do.

Revision:
3:2ce85aa45d7d
Parent:
2:4c2f8a3549a9
diff -r 4c2f8a3549a9 -r 2ce85aa45d7d FXOS8700CQ.cpp
--- a/FXOS8700CQ.cpp	Wed May 28 17:08:33 2014 +0000
+++ b/FXOS8700CQ.cpp	Wed May 28 18:38:09 2014 +0000
@@ -8,18 +8,16 @@
 {
     // Initialization of the FXOS8700CQ
     dev_i2c.frequency(I2C_400K); // Use maximum I2C frequency
-    uint8_t data[6] = {0, 0, 0, 0, 0, 0}; // target device write address, single byte to write at address
+    uint8_t data[6] = {0, 0, 0, 0, 0, 0}; // to write over I2C: device register, up to 5 bytes data
 
     // TODO: verify WHOAMI?
 
-    // TODO: un-magic-number register configuration
-
     // Place peripheral in standby for configuration, resetting CTRL_REG1
     data[0] = FXOS8700CQ_CTRL_REG1;
     data[1] = 0x00; // this will unset CTRL_REG1:active
     write_regs(data, 2);
 
-    // Now that the device is in standby, configure registers
+    // Now that the device is in standby, configure registers at will
 
     // Setup for write-though for CTRL_REG series
     // Keep data[0] as FXOS8700CQ_CTRL_REG1
@@ -33,15 +31,15 @@
         FXOS8700CQ_CTRL_REG2_MODS2(1); // 0b01 gives low noise, low power oversampling mode
 
     // No configuration changes from default 0x00 in CTRL_REG3
-    // Interrupts will be active low
+    // Interrupts will be active low, their outputs in push-pull mode
     data[3] = 0x00;
 
     // FXOS8700CQ_CTRL_REG4;
     data[4] =
-        FXOS8700CQ_CTRL_REG4_INT_EN_DRDY;
+        FXOS8700CQ_CTRL_REG4_INT_EN_DRDY; // Enable the Data-Ready interrupt
 
     // No configuration changes from default 0x00 in CTRL_REG5
-    // Data ready interrupt will appear on INT2
+    // Data-Ready interrupt will appear on INT2
     data[5] = 0x00;
 
     // Write to the 5 CTRL_REG registers
@@ -153,6 +151,7 @@
     read_regs(FXOS8700CQ_XYZ_DATA_CFG, &data, 1);
     data &= FXOS8700CQ_XYZ_DATA_CFG_FS2(3); // mask with 0b11
 
+    // Choose output value based on masked data
     switch(data) {
         case FXOS8700CQ_XYZ_DATA_CFG_FS2(0):
             return 2;
@@ -167,6 +166,8 @@
 
 // Private methods
 
+// Excepting the call to dev_i2c.frequency() in the constructor,
+// the use of the mbed I2C class is restricted to these methods
 void FXOS8700CQ::read_regs(int reg_addr, uint8_t* data, int len)
 {
     char t[1] = {reg_addr};