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
Diff: main.cpp
- 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();