A nice BLE demo program which allows remote switch of an LED via GATT interface.

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_Button by Bluetooth Low Energy

Committer:
hux
Date:
Sat Oct 21 19:56:15 2017 +0000
Revision:
13:0563f1aa6a75
Parent:
12:0d0ca44397dd
Switch LED via BLE GATT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hux 12:0d0ca44397dd 1 // callback.cpp - deal with callbacks
hux 12:0d0ca44397dd 2
hux 12:0d0ca44397dd 3 #include "bricks/blob.h"
hux 12:0d0ca44397dd 4 #include "bricks/callback.h"
hux 12:0d0ca44397dd 5 #include "bricks/trace.h"
hux 12:0d0ca44397dd 6
hux 12:0d0ca44397dd 7 //==============================================================================
hux 12:0d0ca44397dd 8 // Setup Data Written Callback
hux 12:0d0ca44397dd 9 //==============================================================================
hux 12:0d0ca44397dd 10
hux 12:0d0ca44397dd 11 static void (*cbWritten)(O&o) = 0; // where we have to follow up
hux 12:0d0ca44397dd 12
hux 12:0d0ca44397dd 13 // default onDataWritten callback
hux 12:0d0ca44397dd 14
hux 12:0d0ca44397dd 15 static void dfWritten(const GattWriteCallbackParams *params)
hux 12:0d0ca44397dd 16 {
hux 12:0d0ca44397dd 17 O o; // setup a blob
hux 12:0d0ca44397dd 18 o.pWritten = params; // store to provide access
hux 12:0d0ca44397dd 19
hux 12:0d0ca44397dd 20 trace(o,2,"<data written>\n");
hux 12:0d0ca44397dd 21
hux 12:0d0ca44397dd 22 if (cbWritten)
hux 12:0d0ca44397dd 23 (*cbWritten)(o); // user callback follow-up
hux 12:0d0ca44397dd 24 }
hux 12:0d0ca44397dd 25
hux 12:0d0ca44397dd 26
hux 12:0d0ca44397dd 27 void onWritten(O&o, void (*fptr)(O&o)) // setup data written callback
hux 12:0d0ca44397dd 28 {
hux 12:0d0ca44397dd 29 cbWritten = fptr; // remember function to follow-up
hux 12:0d0ca44397dd 30 o.gattServer().onDataWritten(dfWritten);// actual calback setup in GATT
hux 12:0d0ca44397dd 31 }
hux 12:0d0ca44397dd 32
hux 12:0d0ca44397dd 33 //==============================================================================
hux 12:0d0ca44397dd 34 // Setup Connection Callback
hux 12:0d0ca44397dd 35 //==============================================================================
hux 12:0d0ca44397dd 36
hux 12:0d0ca44397dd 37 static void (*cbConnect)(Blob&) = 0;// where we have to follow up
hux 12:0d0ca44397dd 38
hux 12:0d0ca44397dd 39 // default connection callback
hux 12:0d0ca44397dd 40
hux 12:0d0ca44397dd 41 static void dfConnect(const Gap::ConnectionCallbackParams_t *params)
hux 12:0d0ca44397dd 42 {
hux 12:0d0ca44397dd 43 O o; // setup a blob object
hux 12:0d0ca44397dd 44 o.pConnect = params; // store to provide access
hux 12:0d0ca44397dd 45
hux 12:0d0ca44397dd 46 trace(o,2,"<connect>\n");
hux 12:0d0ca44397dd 47
hux 12:0d0ca44397dd 48 if (cbConnect)
hux 12:0d0ca44397dd 49 (*cbConnect)(o); // user callback follow-up
hux 12:0d0ca44397dd 50 }
hux 12:0d0ca44397dd 51
hux 12:0d0ca44397dd 52 void onConnect(O&o,void(*fptr)(O&)) // setup connection callback
hux 12:0d0ca44397dd 53 {
hux 12:0d0ca44397dd 54 cbConnect = fptr; // remember function to follow-up
hux 12:0d0ca44397dd 55 o.gap().onConnection(dfConnect); // actual callback setup in GAP
hux 12:0d0ca44397dd 56 }
hux 12:0d0ca44397dd 57
hux 12:0d0ca44397dd 58 //==============================================================================
hux 12:0d0ca44397dd 59 // Setup Disconnection Callback
hux 12:0d0ca44397dd 60 //==============================================================================
hux 12:0d0ca44397dd 61
hux 12:0d0ca44397dd 62 static void (*cbDisconnect)(O&o) = 0; // where we have to follow up
hux 12:0d0ca44397dd 63
hux 12:0d0ca44397dd 64 // default disconnection callback
hux 12:0d0ca44397dd 65
hux 12:0d0ca44397dd 66 static void dfDisconnect(const Gap::DisconnectionCallbackParams_t *params)
hux 12:0d0ca44397dd 67 {
hux 12:0d0ca44397dd 68 Blob o; // setup a blob
hux 12:0d0ca44397dd 69 o.pDisconnect = params; // store to provide access
hux 12:0d0ca44397dd 70
hux 12:0d0ca44397dd 71 trace(o,2,"<disconnected>\n");
hux 12:0d0ca44397dd 72
hux 12:0d0ca44397dd 73 if (cbDisconnect)
hux 12:0d0ca44397dd 74 (*cbDisconnect)(o); // user callback follow-up
hux 12:0d0ca44397dd 75 }
hux 12:0d0ca44397dd 76
hux 12:0d0ca44397dd 77 void onDisconnect(O&o,void(*fptr)(O&o)) // setup disconnection callback
hux 12:0d0ca44397dd 78 {
hux 12:0d0ca44397dd 79 cbDisconnect = fptr; // remember function to follow-up
hux 12:0d0ca44397dd 80
hux 12:0d0ca44397dd 81 o.gap().onDisconnection(dfDisconnect);// actualcallback setup in GAP
hux 12:0d0ca44397dd 82 }
hux 12:0d0ca44397dd 83