Code supports writing to the SD card as well as working with the Volckens group smartphone apps for the mbed HRM1017

Dependencies:   ADS1115 BLE_API BME280 Calibration CronoDot EEPROM LSM303 MCP40D17 NCP5623BMUTBG SDFileSystem SI1145 STC3100 mbed nRF51822

Fork of UPAS_BLE_and_USB by Volckens Group Sensors

Revision:
104:c57913399e79
Parent:
102:d25eab697fe0
Child:
105:f3be9e0314f7
--- a/main.cpp	Fri Jan 15 01:07:14 2016 +0000
+++ b/main.cpp	Fri Jan 22 00:58:59 2016 +0000
@@ -13,7 +13,6 @@
 #include "Calibration.h"
 #include "UPAS_Service.h"
 
-
 #define SERIAL_BAUD_RATE    9600
 #define SCL         20
 #define SDA         22
@@ -155,7 +154,10 @@
         //E2PROM.read(0x00010,flowRateTestBytes,4);
         //E2PROM.byteToFloat(flowRateTestBytes, &volFlowTester);
         
+    }else if(Handler->charHandle == upasServicePtr->serialNumCharacteristic.getValueAttribute().getHandle()){
+        E2PROM.write(0x00034,writeData,2);    
     }
+
 }
 
 void check_stop()   // this checks if it's time to stop and shutdown
@@ -270,15 +272,50 @@
     //**************//BLE initialization//**************//
     RTC.get_time();
     uint8_t rtcPassValues[6] = {RTC.seconds, RTC.minutes,RTC.hour,RTC.date,RTC.month,RTC.year};
-    uint8_t sampleTimePassValues[12] = {0,};
-    uint8_t subjectLabelOriginal[8] = {0,};
-    uint8_t dataLogOriginal[1] = {0,};
-    uint8_t flowRateOriginal[4] = {0,};
-    //uint8_t presetRunModeCheck[1] = {0,}; Commented and currently unused to prevent mem issues
+    
+    uint8_t sampleTimePassValues[12] = {0x00,0x00,0x0A,0x01,0x01,0x10,0x00,0x00,0x0A,0x01,0x01,0x10}; //Start 1/1/16 12:00:00 End 1/1/16 12:00:00
+    uint8_t subjectLabelOriginal[8] = {0x52,0x45,0x53,0x45,0x54,0x5F,0x5F,0x5f}; // RESET___
+    uint8_t dataLogOriginal[1] = {0x0A,}; //10 seconds
+    uint8_t flowRateOriginal[4] = {0x00,0x00,0x80,0x3F}; //1.0 LPM
+    
+    uint8_t serialNumberAndType[6] = {0x50,0x53};
+   
+    //Code/conditional set up to prevent bad values in the EEPROM.  Does not set serial number currently
+    uint8_t eepromFlag[1] = {0,}; 
+    E2PROM.read(0x00071,eepromFlag,1); 
+    if(eepromFlag[0]!= 0x0A){  
+        E2PROM.write(0x00015, sampleTimePassValues, 12);
+        E2PROM.write(0x00001, subjectLabelOriginal,8);
+        E2PROM.write(0x00014,dataLogOriginal,1);
+        E2PROM.write(0x00010,flowRateOriginal,4);
+        
+        eepromFlag[0] = 0x0A;
+        E2PROM.write(0x00071,eepromFlag,1);
+    }
+    
+    
+    //Retrieve current eeprom values
     E2PROM.read(0x00015, sampleTimePassValues, 12);
     E2PROM.read(0x00001, subjectLabelOriginal,8);
     E2PROM.read(0x00014,dataLogOriginal,1);
     E2PROM.read(0x00010,flowRateOriginal,4);
+    
+    
+    //Following 12 lines of code parses the serial number from a byte id to a readable set of characters for the app user to see
+    E2PROM.read(0x00034,serialNumberAndType+2,2);
+    int tempSerialNum = serialNumberAndType[2]+serialNumberAndType[3];
+    int serialNumDigits[4];
+    serialNumDigits[0] = tempSerialNum / 1000 % 10;
+    serialNumDigits[1] = tempSerialNum / 100 % 10;
+    serialNumDigits[2] = tempSerialNum / 10 % 10;
+    serialNumDigits[3] = tempSerialNum  % 10;
+    
+    serialNumberAndType[2] = serialNumDigits[0]+48;
+    serialNumberAndType[3] = serialNumDigits[1]+48;
+    serialNumberAndType[4] = serialNumDigits[2]+48;
+    serialNumberAndType[5] = serialNumDigits[3]+48;
+    
+    
     //E2PROM.read(0x00033,presetRunModeCheck,1); //commented out mem issue
     ble.init();
     ble.onDisconnection(disconnectionCallback);
@@ -295,7 +332,7 @@
         
     ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
     ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
-    ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)subjectLabelOriginal, sizeof(subjectLabelOriginal));
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)serialNumberAndType, sizeof(serialNumberAndType));
     ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
     ble.setAdvertisingInterval(160); /* 160ms. */
     ble.startAdvertising();