Pull request for i.a. sensor buffer template

Dependencies:   BLE_API MPU6050 mbed nRF51822

Revision:
2:bf1a19d489eb
Parent:
1:b529e733ab71
Child:
3:7875f062a4ea
--- a/main.cpp	Fri Sep 14 19:47:25 2018 +0000
+++ b/main.cpp	Fri Sep 14 20:06:28 2018 +0000
@@ -9,6 +9,8 @@
 #include "BLE.h"
 #include "DFUService.h"
 #include "UARTService.h"
+#include "BatteryService.h"
+#include "DeviceInformationService.h"
 
 
 #define LOG(...)    { pc.printf(__VA_ARGS__); }
@@ -30,6 +32,14 @@
 /* Starting sampling rate. */
 #define DEFAULT_MPU_HZ  (100)
 
+
+#define MANUFACTURER "ALTEN"
+#define MODELNUMBER "IoT BLE (PM)"
+#define SERIALNUMBER "serialnumber"
+#define HARDWAREREVISION "demo1"
+#define FIRMWAREREVISION "1.0"
+#define SOFTWAREREVISION "1.0"
+
 DigitalOut blue(LED_BLUE);
 DigitalOut green(LED_GREEN);
 DigitalOut red(LED_RED);
@@ -45,6 +55,10 @@
 BLEDevice  ble;
 UARTService *uartServicePtr;
 
+// variables to monitor the battery voltage
+float                   batteryVoltage = 100.0f;
+bool                    batteryVoltageChanged = false;
+
 volatile bool bleIsConnected = false;
 volatile uint8_t tick_event = 0;
 volatile uint8_t motion_event = 0;
@@ -81,6 +95,17 @@
     green = !green;
 }
 
+// timer callback function to measure the ADC battery level
+void batteryMonitorCallback(void)
+{
+    float sample;
+    
+    sample = battery.read();
+    /* cannot use (uart.)printf() in a ISR like this. */
+    batteryVoltage = sample;
+    batteryVoltageChanged = true;
+}
+
 void detect(void)
 {
     LOG("Button pressed\n");  
@@ -160,6 +185,9 @@
     
     Ticker ticker;
     ticker.attach(tick, 3);
+    
+    Ticker batteryMonitorTicker;
+    batteryMonitorTicker.attach(batteryMonitorCallback, 60.0f);
 
     button.fall(detect);
 
@@ -196,6 +224,8 @@
     UARTService uartService(ble);
     uartServicePtr = &uartService;
     //uartService.retargetStdout();
+    BatteryService battery(ble);
+    DeviceInformationService deviceInfo(ble, MANUFACTURER, MODELNUMBER, SERIALNUMBER, HARDWAREREVISION, FIRMWAREREVISION, SOFTWAREREVISION);
 
     ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
     ble.gap().startAdvertising();
@@ -261,6 +291,13 @@
             motion_event = 0;
         } else {
             ble.waitForEvent();
+        
+            // update battery level after the level is measured
+            if (batteryVoltageChanged == true) {
+                LOG("VBat: %4.3f, ADC: %4.3f, Vadc: %4.3f\n", batteryVoltage*2.0f, batteryVoltage, batteryVoltage*3.3f);
+                battery.updateBatteryLevel((uint8_t)(batteryVoltage*100.0f));    // input is 0-1.0 of 3.3V -> *100 = percentage of 3.3V
+                batteryVoltageChanged = false;
+            }
         }
     }
 }