Modified for compatibility with Rev.E. hardware
Fork of AkmSensor by
Diff: akmsensormanager.cpp
- 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;