Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of BLE_API by
Diff: ble/Gap.h
- Revision:
- 829:9072de50087b
- Parent:
- 816:2b4f0ef8c06e
- Child:
- 859:2a1cb15098ba
--- a/ble/Gap.h Tue Sep 29 09:54:18 2015 +0100 +++ b/ble/Gap.h Tue Sep 29 09:54:18 2015 +0100 @@ -21,11 +21,9 @@ #include "GapAdvertisingParams.h" #include "GapScanningParams.h" #include "GapEvents.h" -#include "CallChain.h" +#include "CallChainOfFunctionPointersWithContext.h" #include "FunctionPointerWithContext.h" -using namespace mbed; - /* Forward declarations for classes which will only be used for pointers or references in the following. */ class GapAdvertisingParams; class GapScanningParams; @@ -126,6 +124,17 @@ } }; + struct DisconnectionCallbackParams_t { + Handle_t handle; + DisconnectionReason_t reason; + + DisconnectionCallbackParams_t(Handle_t handleIn, + DisconnectionReason_t reasonIn) : + handle(handleIn), + reason(reasonIn) + {} + }; + static const uint16_t UNIT_1_25_MS = 1250; /**< Number of microseconds in 1.25 milliseconds. */ static uint16_t MSEC_TO_GAP_DURATION_UNITS(uint32_t durationInMillis) { return (durationInMillis * 1000) / UNIT_1_25_MS; @@ -134,7 +143,7 @@ typedef void (*TimeoutEventCallback_t)(TimeoutSource_t source); typedef void (*ConnectionEventCallback_t)(const ConnectionCallbackParams_t *params); - typedef void (*DisconnectionEventCallback_t)(Handle_t, DisconnectionReason_t); + typedef void (*DisconnectionEventCallback_t)(const DisconnectionCallbackParams_t *params); typedef FunctionPointerWithContext<bool> RadioNotificationEventCallback_t; /* @@ -214,7 +223,7 @@ * @param scanParams * Paramters to be used while scanning for the peer. * @return BLE_ERROR_NONE if connection establishment procedure is started - * successfully. The connectionCallback (if set) will be invoked upon + * successfully. The connectionCallChain (if set) will be invoked upon * a connection event. */ virtual ble_error_t connect(const Address_t peerAddr, @@ -891,36 +900,20 @@ void onTimeout(TimeoutEventCallback_t callback) {timeoutCallback = callback;} /** - * Setup a callback for connection events. Refer to ConnectionEventCallback_t. + * Append to a chain of callbacks to be invoked upon GAP connection. */ - void onConnection(ConnectionEventCallback_t callback) {connectionCallback = callback;} + void onConnection(ConnectionEventCallback_t callback) {connectionCallChain.add(callback);} - /** - * Set the application callback for disconnection events. - * @param callback - * Pointer to the unique callback. - */ - void onDisconnection(DisconnectionEventCallback_t callback) {disconnectionCallback = callback;} + template<typename T> + void onConnection(T *tptr, void (T::*mptr)(const ConnectionCallbackParams_t*)) {connectionCallChain.add(tptr, mptr);} /** - * Append to a chain of callbacks to be invoked upon connection; these - * callbacks receive no context and are therefore different from the - * connectionCallback callback. - * @param callback - * function pointer to be invoked upon connection; receives no context. + * Append to a chain of callbacks to be invoked upon GAP disconnection. */ - template<typename T> - void addToConnectionCallChain(T *tptr, void (T::*mptr)(void)) {connectionCallChain.add(tptr, mptr);} + void onDisconnection(DisconnectionEventCallback_t callback) {disconnectionCallChain.add(callback);} - /** - * Append to a chain of callbacks to be invoked upon disconnection; these - * callbacks receive no context and are therefore different from the - * disconnectionCallback callback. - * @param callback - * function pointer to be invoked upon disconnection; receives no context. - */ template<typename T> - void addToDisconnectionCallChain(T *tptr, void (T::*mptr)(void)) {disconnectionCallChain.add(tptr, mptr);} + void onDisconnection(T *tptr, void (T::*mptr)(const DisconnectionCallbackParams_t*)) {disconnectionCallChain.add(tptr, mptr);} /** * Set the application callback for radio-notification events. @@ -968,8 +961,6 @@ state(), scanningActive(false), timeoutCallback(NULL), - connectionCallback(NULL), - disconnectionCallback(NULL), radioNotificationCallback(), onAdvertisementReport(), connectionCallChain(), @@ -988,19 +979,14 @@ const Address_t ownAddr, const ConnectionParams_t *connectionParams) { state.connected = 1; - if (connectionCallback) { - ConnectionCallbackParams_t callbackParams(handle, role, peerAddrType, peerAddr, ownAddrType, ownAddr, connectionParams); - connectionCallback(&callbackParams); - } - connectionCallChain.call(); + ConnectionCallbackParams_t callbackParams(handle, role, peerAddrType, peerAddr, ownAddrType, ownAddr, connectionParams); + connectionCallChain.call(&callbackParams); } void processDisconnectionEvent(Handle_t handle, DisconnectionReason_t reason) { state.connected = 0; - if (disconnectionCallback) { - disconnectionCallback(handle, reason); - } - disconnectionCallChain.call(); + DisconnectionCallbackParams_t callbackParams(handle, reason); + disconnectionCallChain.call(&callbackParams); } void processAdvertisementReport(const Address_t peerAddr, @@ -1036,12 +1022,10 @@ protected: TimeoutEventCallback_t timeoutCallback; - ConnectionEventCallback_t connectionCallback; - DisconnectionEventCallback_t disconnectionCallback; RadioNotificationEventCallback_t radioNotificationCallback; AdvertisementReportCallback_t onAdvertisementReport; - CallChain connectionCallChain; - CallChain disconnectionCallChain; + CallChainOfFunctionPointersWithContext<const ConnectionCallbackParams_t*> connectionCallChain; + CallChainOfFunctionPointersWithContext<const DisconnectionCallbackParams_t*> disconnectionCallChain; private: /* disallow copy and assignment */