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.
Dependents: LinkNode_SimpleChatwithSerial
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 */
