This is a basic program that provides the necessary BLE service to allow communications with the UPAS

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

Fork of BLE_Button by Bluetooth Low Energy

Files at this revision

API Documentation at this revision

Comitter:
jelord
Date:
Fri Oct 23 02:44:23 2015 +0000
Parent:
10:66549fa08986
Child:
12:27273e6a50b3
Commit message:
App can now set real-time, sample start and end time with this custom menu.

Changed in this revision

CronoDot.lib Show annotated file Show diff for this revision Revisions of this file
EEPROM.lib Show annotated file Show diff for this revision Revisions of this file
NCP5623BMUTBG.lib Show annotated file Show diff for this revision Revisions of this file
UPAS_Service.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CronoDot.lib	Fri Oct 23 02:44:23 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/teams/Vockens-Group-Sensors/code/CronoDot/#7914632eeeb4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EEPROM.lib	Fri Oct 23 02:44:23 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/teams/Vockens-Group-Sensors/code/EEPROM/#7e4aa327d038
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/NCP5623BMUTBG.lib	Fri Oct 23 02:44:23 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/teams/Vockens-Group-Sensors/code/NCP5623BMUTBG/#c77e17c3a863
--- a/UPAS_Service.h	Tue Oct 20 20:38:04 2015 +0000
+++ b/UPAS_Service.h	Fri Oct 23 02:44:23 2015 +0000
@@ -14,8 +14,8 @@
 
 
     UPAS_Service(BLE &_ble, bool placeholder, uint8_t *tempArray) :
-        ble(_ble), readChar(READ_STATE_CHARACTERISTIC_UUID, tempArray,17,57,GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
-        writeChar(WRITE_STATE_CHARACTERISTIC_UUID, tempArray,17,57,GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY)
+        ble(_ble), readChar(READ_STATE_CHARACTERISTIC_UUID, tempArray,18,20,GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
+        writeChar(WRITE_STATE_CHARACTERISTIC_UUID, tempArray,18,20,GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY)
     {
         
         GattCharacteristic *charTable[] = {&writeChar, &readChar}; //Set up characteristics to be broadcasted with the UPAS service
--- a/main.cpp	Tue Oct 20 20:38:04 2015 +0000
+++ b/main.cpp	Fri Oct 23 02:44:23 2015 +0000
@@ -3,9 +3,49 @@
 #include "mbed.h"
 #include "BLE.h"
 #include "UPAS_Service.h"
+#include "EEPROM.h"
+#include "CronoDot.h"
+#include "NCP5623BMUTBG.h"
 
 BLE         ble;
-DigitalOut  led1(LED1); //Use of leds is important for debugging
+//DigitalOut  led1(LED1); //Use of leds is important for debugging
+DigitalOut          blower(p29, 0);
+DigitalOut          pbKill(p18, 1);
+DigitalOut          GPS_EN(p4,0); 
+EEPROM              E2PROM(p22, p20);
+CronoDot            RTC(p22, p20);  
+NCP5623BMUTBG       RGB_LED(p22, p20);          
+/*EEPROM ADDRESSING:
+    0:Status bit-Unused
+    1-15:Device Name
+    16-19:Flow Rate
+    20: Data Log Interval
+    21-26: Start Time: ssmmHHddMMyy
+    27-32: Stop Time: ssmmHHddMMyy
+    33: Duty Up
+    34: Duty Down
+    35-38: Home Latitude
+    39-42: Home Longitude
+    43-46: Work Latitude
+    47-50: Work Longitude
+    51: Runready: Currently useless, should be 0
+    52-53: Device Calibration
+    54: Consider RunReady
+    55-56: Menu Options
+    57+ Nothing*/
+//    .write(uint32_t addr, uint8_t dt[], uint16_t length);
+//        addr -- is where the data in dt[] will be stored, max of 0x3FFFF, 0x00000 to 0x1FFFF on EEPROM 1 and 0x20000 to 0x3FFFF on EEPROM 2 
+//        dt[] -- is unit8_t array that contains the data to be stored. This can only be uint8_t types, single bytes
+//        length -- is the number of bytes to save t the EEPROM, starting at dt[0]
+//        
+//        returns:
+//            Ture(1) -- when if has finished saving the data 
+//            False(0) -- when length is to long to fit on the remainder of the page, when this happens it does not save any data in order to avoid over writing past data
+//
+//    .read(uint32_t addr, uint8_t *rt_data, uint16_t length);
+//        addr -- where the data is requested from, max of 0x3FFFF, 0x00000 to 0x1FFFF on EEPROM 1 and 0x20000 to 0x3FFFF on EEPROM 2 
+//        rt_data -- a local variable where the data from the EEPROM should be stored, again in uint8_t types
+//        length -- how much to read from the EERPOM, this may be limited to <256 bytes?
 
 const static char     DEVICE_NAME[] = "UPAS"; //Will hold the actual name of the whichever UPAS is being connected to
 static const uint16_t uuid16_list[] = {UPAS_Service::UPAS_SERVICE_UUID}; //Currently a custom 16-bit representation of 128-bit UUID
@@ -19,37 +59,46 @@
 
 void periodicCallback(void)
 {
-    led1 = !led1; /* Do blinky on LED1 to indicate system aliveness. */
+ //   led1 = !led1; /* Do blinky on LED1 to indicate system aliveness. */
 }
-
+void readCharCallin(const GattReadCallbackParams *eventDataP)
+{
+     RTC.get_time();
+}
 void writeCharCallback(const GattWriteCallbackParams *params)
 {
-    led1 = !led1; /* Do blinky on LED1 to indicate system aliveness. */
+ //   led1 = !led1; /* Do blinky on LED1 to indicate system aliveness. */
     
     // check to see what characteristic was written, by handle
     if(params->handle == upasServicePtr->writeChar.getValueHandle()) {
         // toggle LED if only 1 byte is written
         if(params->len == 1) {
-            led1 = params->data[0];
+            //led1 = params->data[0];
         }
         // update the readChar with the value of writeChar
         ble.updateCharacteristicValue(upasServicePtr->readChar.getValueHandle(),params->data,params->len);
+        uint8_t *writeData =  const_cast<uint8_t*>(params->data);
+      
+        E2PROM.write(0x00015, writeData+6, 12);
+        RTC.set_time(writeData[0],writeData[1],writeData[2],writeData[3],writeData[3],writeData[4],writeData[5]);
     }
 }
 
 int main(void)
 {
-    led1 = 1;
+   // led1 = 1;
     Ticker ticker;
     ticker.attach(periodicCallback, 1);
-    
-    uint8_t  readValues[57] = {0x31,0x30,0x2F,0x31,0x38,0x2F,0x31,0x35,0x20,0x31,0x32,0x3A,0x30,0x30,0x3A,0x30,0x30}; //dummy array for testing
+    RGB_LED.set_led(1,1,1);
+    RTC.get_time();
+    uint8_t newReadValues[20] = {RTC.seconds, RTC.minutes,RTC.hour,RTC.date,RTC.month,RTC.year};
+    E2PROM.read(0x00015, newReadValues+6, 12);
 
     ble.init();
     ble.gap().onDisconnection(disconnectionCallback);
     ble.gattServer().onDataWritten(writeCharCallback); //add writeCharCallback (custom function) to whenever data is being written to device
-  
-    UPAS_Service upasService(ble, false,readValues); //Create a GattService that is defined in UPAS_Service.h
+    ble.gattServer().onDataRead(readCharCallin);
+    UPAS_Service upasService(ble, false,newReadValues); //Create a GattService that is defined in UPAS_Service.h
     upasServicePtr = &upasService; //Create a pointer to the service (Allows advertisement without specifically adding the service
 
     /* setup advertising