Modified for compatibility with Rev.E. hardware

Fork of AkmSensor by AKM Development Platform

Revision:
1:b46b8653331f
Parent:
0:7a00359e701e
Child:
2:11fe67783c4c
--- a/akmsensormanager.cpp	Thu Apr 28 21:12:04 2016 +0000
+++ b/akmsensormanager.cpp	Thu May 05 00:19:39 2016 +0000
@@ -3,6 +3,7 @@
 #include "akmanglesensor.h"
 #include "akmhallswitch.h"
 #include "akmlinearsensor.h"
+#include "akmirsensor.h"
 #include "akmakd.h"
 #include "debug.h"
 #include "Message.h"
@@ -26,8 +27,8 @@
                                     "Current Sensor",
                                     "MISC(Analog)",
                                     "Linear Sensor",
+                                    "IR Sensor",
                                     "TBD3",
-                                    "TBD4",
                                     "Angle Sensor(SPI)",        // Temporary
                                     "AKD Daughter Cards(I2C)",
                                      };
@@ -67,7 +68,6 @@
     // primary id check
     id = AkmSensorManager::getId(ANALOG_SENSOR_ID,4);
     
-    // secondary id check
     switch(id){
         case AkmSensor::AKM_PRIMARY_ID_AKD_I2C:
             subId = AkmSensorManager::getId(ANALOG_SENSOR_ID_SUB,5);    // 5bit sub id
@@ -102,6 +102,13 @@
             sensor = linearsensor;
             break;
         
+        case AkmSensor::AKM_PRIMARY_ID_IR_SENSOR:
+            subId = AkmSensorManager::getId(ANALOG_SENSOR_ID_SUB,4);    // 4bit sub id
+            AkmIrSensor* irsensor;
+            irsensor = new AkmIrSensor();
+            sensor = irsensor;
+            break;
+        
         default:
             subId = AkmSensorManager::getId(ANALOG_SENSOR_ID_SUB,4);    // 4bit sub id
             MSG("#Can't find ID=%d SubID=%d %s\r\n", id, subId, AKM_PRIMARY_ID_STR[id]);    
@@ -109,7 +116,7 @@
     }
     
     if(sensor->init(id, subId) != AkmSensor::SUCCESS){
-        MSG("#Can't find ID=%d SubID=%d %s\r\n", id, subId, AKM_PRIMARY_ID_STR[id]);    
+        MSG("#sensor->init failed. ID=%d SubID=%d %s\r\n", id, subId, AKM_PRIMARY_ID_STR[id]);    
         return NULL;    // couldn't find
     }
 
@@ -134,11 +141,10 @@
 
 uint8_t AkmSensorManager::getId(PinName pin, uint8_t bits)
 {
-    wait(0.05);
     AnalogIn id(pin);
+    MSG("#Voltage=%5.2f[V]\n",id*3.0);
     double s = id + 1.0/(double)(pow(2.0,bits+1));
     uint8_t value = (uint8_t)(s*pow(2.0,bits));
-    wait(0.05);
     return value;
 }
 
@@ -219,71 +225,26 @@
             break;
 
         case Message::CMD_ANGLE_ZERO_RESET:
+        case Message::CMD_IR_GET_THRESHOLD:
+        case Message::CMD_IR_SET_THRESHOLD:
+        case Message::CMD_IR_GET_HYSTERESIS:
+        case Message::CMD_IR_SET_HYSTERESIS:
+        case Message::CMD_IR_GET_INTERRUPT:
+        case Message::CMD_IR_SET_INTERRUPT:
+        case Message::CMD_IR_GET_OPERATION_MODE:
+        case Message::CMD_IR_SET_OPERATION_MODE:
+        case Message::CMD_IR_GET_THRESHOLD_EEPROM:
+        case Message::CMD_IR_SET_THRESHOLD_EEPROM:
+        case Message::CMD_IR_GET_HYSTERESIS_EEPROM:
+        case Message::CMD_IR_SET_HYSTERESIS_EEPROM:
+        case Message::CMD_IR_GET_INTERRUPT_EEPROM:
+        case Message::CMD_IR_SET_INTERRUPT_EEPROM:
+        case Message::CMD_IR_GET_OPERATION_MODE_EEPROM:
+        case Message::CMD_IR_SET_OPERATION_MODE_EEPROM:
             sensor->requestCommand(&msg,&resMsg);
             throwMessage(&resMsg);
             break;
-/*        
-        case Message::CMD_IR_GET_THRESHOLD:
-            AK9750::Threshold th;
-            if (Hardware::getInstance()->ak9750.getThreshold(&th) != AK9750::SUCCESS) {
-                MSG("Failed to get threshold of AK9750.\n");
-                return;
-            }
-            resMsg.setArgument(0, (char)(th.eth13h >> 8));
-            resMsg.setArgument(1, (char)(th.eth13h & 0x00FF));
-            resMsg.setArgument(2, (char)(th.eth13l >> 8));
-            resMsg.setArgument(3, (char)(th.eth13l & 0x00FF));
-            resMsg.setArgument(4, (char)(th.eth24h >> 8));
-            resMsg.setArgument(5, (char)(th.eth24h & 0x00FF));
-            resMsg.setArgument(6, (char)(th.eth24l >> 8));
-            resMsg.setArgument(7, (char)(th.eth24l & 0x00FF));
-            break;
-        
-        case Message::CMD_IR_SET_THRESHOLD:
-            if (msg->getArgNum() < 8) {
-                MSG("Too few arguments.\n");
-                resMsg.setArgument(0, 0x01); // error
-            } else {
-                ak9750Threshold.eth13h = CONV16I(msg->getArgument(0), msg->getArgument(1));
-                ak9750Threshold.eth13l = CONV16I(msg->getArgument(2), msg->getArgument(3));
-                ak9750Threshold.eth24h = CONV16I(msg->getArgument(4), msg->getArgument(5));
-                ak9750Threshold.eth24l = CONV16I(msg->getArgument(6), msg->getArgument(7));
-                if (Hardware::getInstance()->ak9750.setThreshold(&ak9750Threshold) != AK9750::SUCCESS) {
-                    resMsg.setArgument(0, 0x01); // error
-                } else {
-                    resMsg.setArgument(0, 0x00); // success
-                    isIrThresholdSet = true;
-                }
-            }
-            break;
-        
-        case Message::CMD_IR_GET_HYSTERESIS:
-            AK9750::Hysteresis hys;
-            if (Hardware::getInstance()->ak9750.getHysteresis(&hys) != AK9750::SUCCESS) {
-                MSG("Failed to get hysteresis setting from AK9750.\n");
-                return;
-            }
-            resMsg.setArgument(0, hys.ehys13);
-            resMsg.setArgument(1, hys.ehys24);
-            break;
-        
-        case Message::CMD_IR_SET_HYSTERESIS:
-            if (msg->getArgNum() < 2) { // sanity check
-                MSG("Too few argument.\n");
-                resMsg.setArgument(0, 0x01); // error
-            } else {
-                AK9750::Hysteresis hys;
-                hys.ehys13 = msg->getArgument(0);
-                hys.ehys24 = msg->getArgument(1);
-                if (Hardware::getInstance()->ak9750.setHysteresis(&hys) != AK9750::SUCCESS) {
-                    MSG("Failed to set hysteresis to AK9750.\n");
-                    resMsg.setArgument(0, 0x01); // error
-                } else {
-                    resMsg.setArgument(0, 0x00); // success
-                }
-            }
-            break;
-*/
+            
         default:
             MSG("#Can't find command:%s\n", (char)cmd);
             break;