Modified for compatibility with Rev.E. hardware

Fork of AkmSensor by AKM Development Platform

Revision:
42:b48b3ab8690e
Parent:
41:a3ea80c594ec
Child:
43:45225713cd58
--- a/akmakd.cpp	Thu Aug 17 19:59:10 2017 +0000
+++ b/akmakd.cpp	Fri Nov 03 19:45:33 2017 +0000
@@ -1,6 +1,7 @@
 #include "akmakd.h"
 #include "ak8963.h"
 #include "ak099xx.h"
+#include "ak09940.h"
 #include "debug.h"
 
 /**
@@ -21,8 +22,10 @@
 
 AkmSensor::Status AkmAkd::checkSensor( const uint8_t primaryid, const uint8_t subid, AkmECompass::DeviceId* devid){
     AK099XX* ak099xx;
+    AK09940* ak09940;
     AK8963* ak8963;
-    
+    lenOptions = 0;
+
     switch(subid){
         case AkmAkd::SUB_ID_AK8963N:
         case AkmAkd::SUB_ID_AK8963C:
@@ -96,8 +99,8 @@
         case AkmAkd::SUB_ID_AK09940:
             *devid = AkmECompass::AK09940;
             AkmAkd::sensorName = "AK09940";
-            ak099xx = new AK099XX();
-            compass = ak099xx;
+            ak09940 = new AK09940();
+            compass = ak09940;
             lenOptions = 5;
             break;
         default:
@@ -113,11 +116,10 @@
 AkmSensor::Status AkmAkd::init(const uint8_t primaryid, const uint8_t subid){
     primaryId = primaryid;
     subId = subid;
-    
+        
     AkmECompass::DeviceId devid;
 
     mode.mode = AkmECompass::MODE_POWER_DOWN;
-    lenOptions = 0;
     
     if(primaryId == AKM_PRIMARY_ID_AKD_I2C){
 
@@ -136,8 +138,10 @@
 
         for(int i=0; i<sizeof(slaveAddr); i++)
         {
+            MSG("#look for e-compass.\r\n");
             compass->init(i2c, slaveAddr[i], devid);
             // Checks connectivity
+            MSG("#checkConnection.\r\n");
             if(compass->checkConnection() == AkmECompass::SUCCESS) {
                 MSG("#%s detected.\r\n", AkmAkd::sensorName);
                 return AkmSensor::SUCCESS;
@@ -161,6 +165,7 @@
             return AkmSensor::SUCCESS;
         }
     }
+    MSG("#ERROR: couldn't detected.\r\n");
     return AkmSensor::ERROR;
 }
 
@@ -226,9 +231,11 @@
     
     AkmECompass::Mode temp;
     temp.mode = AkmECompass::MODE_POWER_DOWN;
+    uint8_t options[lenOptions];
     for(int i=0; i<lenOptions; i++){
-        temp.options[i] = mode.options[i];
+        options[i] = mode.options[i];
     }
+    temp.options = options;
     if(compass->setOperationMode(temp) != AkmECompass::SUCCESS) {
         return AkmSensor::ERROR;
     }