zach_thesholding

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_notifications_with_orig_mbed by Nicholas Kosarek

Revision:
9:0f6951db24f1
Parent:
8:a7ba7aaba460
Child:
10:7943b5c1117a
--- a/main.cpp	Tue Sep 29 09:58:02 2015 +0000
+++ b/main.cpp	Fri Oct 09 13:37:52 2015 +0000
@@ -25,16 +25,27 @@
 const static char     DEVICE_NAME[] = "Button";
 static const uint16_t uuid16_list[] = {ButtonService::BUTTON_SERVICE_UUID};
 
+enum {
+    RELEASED = 0,
+    PRESSED,
+    IDLE
+};
+static uint8_t buttonState = IDLE;
+
 ButtonService *buttonServicePtr;
 
 void buttonPressedCallback(void)
 {
-    buttonServicePtr->updateButtonState(true);
+    /* Note that the buttonPressedCallback() executes in interrupt context, so it is safer to access
+     * BLE device API from the main thread. */
+    buttonState = PRESSED;
 }
 
 void buttonReleasedCallback(void)
 {
-    buttonServicePtr->updateButtonState(false);
+    /* Note that the buttonReleasedCallback() executes in interrupt context, so it is safer to access
+     * BLE device API from the main thread. */
+    buttonState = RELEASED;
 }
 
 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
@@ -70,6 +81,11 @@
     ble.gap().startAdvertising();
 
     while (true) {
+        if (buttonState!=IDLE) {
+            buttonServicePtr->updateButtonState(buttonState);
+            buttonState = IDLE;
+        }
+
         ble.waitForEvent();
     }
 }