A blue button is always a nice toy ...

Dependencies:   BLE_API X_NUCLEO_IDB0XA1 mbed

Fork of BLE_HeartRate_IDB0XA1 by ST

Committer:
hux
Date:
Sat Jan 14 08:43:14 2017 +0000
Revision:
27:32267cee7cb8
Setup a GATT Detector Service. There is some bug in the GATT setup, resulting in different behavior between Nordic nRF51822-DK and NUCLEO-L476RG, but with the workaround it works also for the NUCLEO board. (using Bricks V1A)

Who changed what in which revision?

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