|
|
|
@ -39,6 +39,9 @@ public:
|
|
|
|
|
typedef FunctionPointerWithContext<const GattServer *> GattServerShutdownCallback_t;
|
|
|
|
|
typedef CallChainOfFunctionPointersWithContext<const GattServer *> GattServerShutdownCallbackChain_t;
|
|
|
|
|
|
|
|
|
|
typedef FunctionPointerWithContext<const GattSysAttrMissingCallbackParams*> SysAttrMissingCallback_t;
|
|
|
|
|
typedef CallChainOfFunctionPointersWithContext<const GattSysAttrMissingCallbackParams*> SysAttrMissingCallbackChain_t;
|
|
|
|
|
|
|
|
|
|
typedef FunctionPointerWithContext<GattAttribute::Handle_t> EventCallback_t;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
@ -48,6 +51,7 @@ protected:
|
|
|
|
|
dataSentCallChain(),
|
|
|
|
|
dataWrittenCallChain(),
|
|
|
|
|
dataReadCallChain(),
|
|
|
|
|
sysAttrMissingCallChain(),
|
|
|
|
|
updatesEnabledCallback(NULL),
|
|
|
|
|
updatesDisabledCallback(NULL),
|
|
|
|
|
confirmationReceivedCallback(NULL) {
|
|
|
|
@ -316,6 +320,36 @@ public:
|
|
|
|
|
return dataWrittenCallChain;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Set up a callback for when asystem descriptor (CCCD) is missing.
|
|
|
|
|
* This may be raised in response to a BLE profile change om a bonded connection.
|
|
|
|
|
* This callback provides the opportunity for user applications to restore
|
|
|
|
|
* CCCD state at the appropriate time.
|
|
|
|
|
*
|
|
|
|
|
* @Note: It is possible to chain together multiple onSysAttrMissing callbacks
|
|
|
|
|
* (potentially from different modules of an application), although it is unlikely
|
|
|
|
|
* that this will be beneficial.
|
|
|
|
|
*
|
|
|
|
|
* @Note: It is also possible to set up a callback into a member function of
|
|
|
|
|
* some object.
|
|
|
|
|
*
|
|
|
|
|
* @Note It is possible to unregister a callback using onSysAttrMissing().detach(callback)
|
|
|
|
|
*/
|
|
|
|
|
void onSysAttrMissing(const SysAttrMissingCallback_t& callback) {sysAttrMissingCallChain.add(callback);}
|
|
|
|
|
template <typename T>
|
|
|
|
|
void onSysAttrMissing(T *objPtr, void (T::*memberPtr)(const GattSysAttrMissingCallbackParams* connectionHandle)) {
|
|
|
|
|
sysAttrMissingCallChain.add(objPtr, memberPtr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief provide access to the callchain of data written event callbacks
|
|
|
|
|
* It is possible to register callbacks using onDataWritten().add(callback);
|
|
|
|
|
* It is possible to unregister callbacks using onDataWritten().detach(callback)
|
|
|
|
|
* @return The data written event callbacks chain
|
|
|
|
|
*/
|
|
|
|
|
SysAttrMissingCallbackChain_t& onSysAttrMissing() {
|
|
|
|
|
return sysAttrMissingCallChain;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Setup a callback to be invoked on the peripheral when an attribute is
|
|
|
|
|
* being read by a remote client.
|
|
|
|
@ -417,6 +451,10 @@ public:
|
|
|
|
|
|
|
|
|
|
/* Entry points for the underlying stack to report events back to the user. */
|
|
|
|
|
protected:
|
|
|
|
|
void handleSysAttrMissingEvent(const GattSysAttrMissingCallbackParams *params) {
|
|
|
|
|
sysAttrMissingCallChain.call(params);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void handleDataWrittenEvent(const GattWriteCallbackParams *params) {
|
|
|
|
|
dataWrittenCallChain.call(params);
|
|
|
|
|
}
|
|
|
|
@ -476,6 +514,7 @@ public:
|
|
|
|
|
dataSentCallChain.clear();
|
|
|
|
|
dataWrittenCallChain.clear();
|
|
|
|
|
dataReadCallChain.clear();
|
|
|
|
|
sysAttrMissingCallChain.clear();
|
|
|
|
|
updatesEnabledCallback = NULL;
|
|
|
|
|
updatesDisabledCallback = NULL;
|
|
|
|
|
confirmationReceivedCallback = NULL;
|
|
|
|
@ -491,6 +530,7 @@ private:
|
|
|
|
|
DataSentCallbackChain_t dataSentCallChain;
|
|
|
|
|
DataWrittenCallbackChain_t dataWrittenCallChain;
|
|
|
|
|
DataReadCallbackChain_t dataReadCallChain;
|
|
|
|
|
SysAttrMissingCallbackChain_t sysAttrMissingCallChain;
|
|
|
|
|
GattServerShutdownCallbackChain_t shutdownCallChain;
|
|
|
|
|
EventCallback_t updatesEnabledCallback;
|
|
|
|
|
EventCallback_t updatesDisabledCallback;
|
|
|
|
|