Modified for compatibility with Rev.E. hardware

Fork of AkmSensor by AKM Development Platform

Revision:
49:c8f8946129b6
Parent:
48:427bdb7bf31b
--- a/akmsensormanager.cpp	Tue Dec 19 12:18:13 2017 -0800
+++ b/akmsensormanager.cpp	Tue May 01 21:31:15 2018 +0000
@@ -222,7 +222,9 @@
 //    }
 }
 
-void AkmSensorManager::dummyCallbackForCommandReceived(){}
+void AkmSensorManager::commandReceivedCallback(){
+	VERBOSE("#commandReceivedCallback: Command Received\r\n");	
+}
 
 
 // For commands received via BLE
@@ -238,11 +240,11 @@
         eventCommandReceived = true;            // Set flag
             VERBOSE("#Parsed message. %s\r\n", buf);
     }
-    t.attach(callback(this, &AkmSensorManager::dummyCallbackForCommandReceived),0); // wake-up from ble.waitForEvent
+    t.attach(callback(this, &AkmSensorManager::commandReceivedCallback),0); // wake-up from ble.waitForEvent
     return status;
 }
 
-
+/*
 int16_t AkmSensorManager::getAdcData(MCP342X *mcp3428, MCP342X::AdcChannel ch, MCP342X::SampleSetting s) {
     const int WAIT_ADC_MS = 1;
 
@@ -260,37 +262,39 @@
     
     return data.value;
 }
-
+*/
 
 uint8_t AkmSensorManager::getId(PinName pin, uint8_t bits)
 {
-    MSG("#GetID\r\n");
-    
-    I2C i2c(I2C_SDA, I2C_SCL);      // establish I2C to read ID
-    
-    // ADC
-    MCP342X mcp342x(&i2c, MCP342X::SLAVE_ADDRESS_6EH);  // ADC to convert voltage
-    mcp342x.setConversionMode(MCP342X::ONE_SHOT);       // Set to single sample
-    MCP342X::AdcChannel ch;
+    VERBOSE("#AkmSensorManager: GetID\r\n");
     
-    if (pin == ANALOG_SENSOR_ID) {                      // Primary ID
-        ch = MCP342X::ADC_CH1;
-    } else { // pin == ANALOG_SENSOR_ID_SUB         
-        ch = MCP342X::ADC_CH2;                          // Secondary ID
-    }
-    
-    int16_t val = getAdcData(&mcp342x, ch, MCP342X::SAMPLE_240HZ_12BIT);
-    MSG("#12bit ADC Val = %d.\r\n", val);
+    AnalogIn ain(pin);
+	double value = 0;
+	uint8_t ID = 0;
+	
+	value = ain.read();
+	
+	MSG("#ADC ID Raw Value: %.5f\r\n", value);
+
+	// Scale reading
+	// Range of reading is 0.0 to 1.0
+	value = 2.0 * (3.0 * value);
+//	value = (1/0.5555556) * (3.0 * value);		// multiply by 1/(voltage divider) and 3.0V
+
+	MSG("#ADC ID Reading: %.4f\r\n", value);
     
-    // Voltage boundaries for ID voltage divider system
-    const int16_t VAL_MAX = 3000-2048;   // Corresponds to 3V
-    const int16_t VAL_MIN = -2048;       // Corresponds to 0V
-    
-    // Convert voltage to ID value
-    uint8_t value = (uint8_t)((val - VAL_MIN)/(double)(VAL_MAX - VAL_MIN) * (1 << bits) + 0.5);
-    MSG("#ID = %d.\r\n", value);
-
-    return value;
+    if(bits == 4){
+	    // Convert reading into a 4-bit ID (i.e. 0-15)
+   		ID = (uint8_t)((value/3.0)*16 + 0.5);
+    	MSG("#4-bit ID = %d.\r\n", ID);
+	}
+	else if(bits == 5){
+		// Convert reading into a 5-bit ID (i.e. 0-15)
+   		ID = (uint8_t)((value/3.0)*32 + 0.5);
+    	MSG("#5-bit ID = %d.\r\n", ID);
+	}
+	
+    return ID;
 }
 
 
@@ -580,7 +584,7 @@
     return SUCCESS;   
 }
 
-char* AkmSensorManager::my_strcat(char* str1, char* str2)
+char* AkmSensorManager::stringConcat(char* str1, char* str2)
 {
     int num1;
     char* str;
@@ -594,8 +598,8 @@
 char* AkmSensorManager::getSensorName(){
     char* name = "";
 //    for(int i=0; i<sensorNum; i++){
-        name = my_strcat(name, (char *)sensor[0]->getSensorName());
-//        if( sensorNum > (i+1) )name = my_strcat(name, "+");
+        name = stringConcat(name, (char *)sensor[0]->getSensorName());
+//        if( sensorNum > (i+1) )name = stringConcat(name, "+");
 //    }
     MSG("#Sensor Name='%s'.\r\n",name);
     return name;