A template for applications where some small amount of data needs to be notified to a phone app over BLE. It is a good starting point for notifications.

Dependencies:   BLE_API mbed nRF51822

Demo for an Input Service

To help you create your own BLE services, we've created a series of service templates. The *input service template* demonstrates the use of a simple input (boolean values) from a read-only characteristic.

The template covers:

1. Setting up advertising and connection states.

2. Assigning UUIDs to the service and its characteristic.

3. Creating an input characteristic: read-only, boolean, with notifications. This characteristic is updated according to the button's state.

4. Constructing a service class and adding it to the BLE stack.

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();
     }
 }