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.

Files at this revision

API Documentation at this revision

Comitter:
rgrover1
Date:
Fri Oct 09 13:37:52 2015 +0000
Parent:
8:a7ba7aaba460
Child:
10:7943b5c1117a
Commit message:
pulling in an improvement suggested by Andrea Palmieri

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- 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();
     }
 }
--- a/mbed.bld	Tue Sep 29 09:58:02 2015 +0000
+++ b/mbed.bld	Fri Oct 09 13:37:52 2015 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/4f6c30876dfa
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/34e6b704fe68
\ No newline at end of file