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.
Dependencies: nrf51-sdk
Dependents: microbit-dal microbit-ble-open microbit-dal-eddystone microbit-dal-ble-accelerometer-example ... more
Revision 548:920e941cbe1e, committed 2016-01-11
- Comitter:
- vcoubard
- Date:
- Mon Jan 11 10:19:06 2016 +0000
- Parent:
- 547:8550af084edc
- Child:
- 549:3f782c64d014
- Commit message:
- Synchronized with git rev b795c291
Author: Vincent Coubard
Terminate pending discoveries when a connection end.
Add accessor for ServiceDiscovery and CharacteristicDescriptorDiscover in
GattClient.
Remove friend relationship with bleGattcEventHandler
Changed in this revision
--- a/source/btle/btle.cpp Mon Jan 11 10:19:05 2016 +0000
+++ b/source/btle/btle.cpp Mon Jan 11 10:19:06 2016 +0000
@@ -40,6 +40,10 @@
#include "ble_hci.h"
#include "btle_discovery.h"
+#include "nRF5xGattClient.h"
+#include "nRF5xServiceDiscovery.h"
+#include "nRF5xCharacteristicDescriptorDiscoverer.h"
+
extern "C" void assert_nrf_callback(uint16_t line_num, const uint8_t *p_file_name);
void app_error_handler(uint32_t error_code, uint32_t line_num, const uint8_t *p_file_name);
@@ -182,8 +186,13 @@
reason = static_cast<Gap::DisconnectionReason_t>(p_ble_evt->evt.gap_evt.params.disconnected.reason);
break;
}
+
+ // Close all pending discoveries for this connection
+ nRF5xGattClient& gattClient = nRF5xGattClient::getInstance();
+ gattClient.characteristicDescriptorDiscoverer().terminate(handle, BLE_ERROR_INVALID_STATE);
+ gattClient.discovery().terminate(handle);
+
nRF5xGap::getInstance().processDisconnectionEvent(handle, reason);
- // TODO: close pending discoveries
break;
}
--- a/source/btle/btle_discovery.cpp Mon Jan 11 10:19:05 2016 +0000
+++ b/source/btle/btle_discovery.cpp Mon Jan 11 10:19:06 2016 +0000
@@ -21,9 +21,9 @@
#if !defined(TARGET_MCU_NRF51_16K_S110) && !defined(TARGET_MCU_NRF51_32K_S110)
void bleGattcEventHandler(const ble_evt_t *p_ble_evt)
{
- nRF5xServiceDiscovery &sdSingleton = nRF5xGattClient::getInstance().discovery;
+ nRF5xServiceDiscovery &sdSingleton = nRF5xGattClient::getInstance().discovery();
nRF5xCharacteristicDescriptorDiscoverer &characteristicDescriptorDiscoverer =
- nRF5xGattClient::getInstance().characteristicDescriptorDiscoverer;
+ nRF5xGattClient::getInstance().characteristicDescriptorDiscoverer();
switch (p_ble_evt->header.evt_id) {
case BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP:
--- a/source/nRF5xGattClient.cpp Mon Jan 11 10:19:05 2016 +0000
+++ b/source/nRF5xGattClient.cpp Mon Jan 11 10:19:06 2016 +0000
@@ -33,7 +33,7 @@
const UUID &matchingServiceUUIDIn,
const UUID &matchingCharacteristicUUIDIn)
{
- return discovery.launch(connectionHandle, sc, cc, matchingServiceUUIDIn, matchingCharacteristicUUIDIn);
+ return _discovery.launch(connectionHandle, sc, cc, matchingServiceUUIDIn, matchingCharacteristicUUIDIn);
}
ble_error_t nRF5xGattClient::discoverCharacteristicDescriptors(
@@ -41,7 +41,7 @@
const CharacteristicDescriptorDiscovery::DiscoveryCallback_t& discoveryCallback,
const CharacteristicDescriptorDiscovery::TerminationCallback_t& terminationCallback)
{
- return characteristicDescriptorDiscoverer.launch(
+ return _characteristicDescriptorDiscoverer.launch(
characteristic,
discoveryCallback,
terminationCallback
@@ -49,11 +49,11 @@
}
bool nRF5xGattClient::isCharacteristicDescriptorsDiscoveryActive(const DiscoveredCharacteristic& characteristic) const {
- return characteristicDescriptorDiscoverer.isActive(characteristic);
+ return _characteristicDescriptorDiscoverer.isActive(characteristic);
}
void nRF5xGattClient::terminateCharacteristicDescriptorsDiscovery(const DiscoveredCharacteristic& characteristic) {
- return characteristicDescriptorDiscoverer.requestTerminate(characteristic);
+ return _characteristicDescriptorDiscoverer.requestTerminate(characteristic);
}
#endif
\ No newline at end of file
--- a/source/nRF5xGattClient.h Mon Jan 11 10:19:05 2016 +0000
+++ b/source/nRF5xGattClient.h Mon Jan 11 10:19:06 2016 +0000
@@ -88,14 +88,14 @@
const UUID &matchingCharacteristicUUIDIn = UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN));
virtual void onServiceDiscoveryTermination(ServiceDiscovery::TerminationCallback_t callback) {
- discovery.onTermination(callback);
+ _discovery.onTermination(callback);
}
/**
* Is service-discovery currently active?
*/
virtual bool isServiceDiscoveryActive(void) const {
- return discovery.isActive();
+ return _discovery.isActive();
}
/**
@@ -103,7 +103,7 @@
* invocation of the TerminationCallback if service-discovery is active.
*/
virtual void terminateServiceDiscovery(void) {
- discovery.terminate();
+ _discovery.terminate();
}
/**
@@ -171,19 +171,25 @@
}
public:
- nRF5xGattClient() : discovery(this) {
+ nRF5xGattClient() : _discovery(this) {
/* empty */
}
- friend void bleGattcEventHandler(const ble_evt_t *p_ble_evt);
+ nRF5xServiceDiscovery& discovery() {
+ return _discovery;
+ }
+
+ nRF5xCharacteristicDescriptorDiscoverer& characteristicDescriptorDiscoverer() {
+ return _characteristicDescriptorDiscoverer;
+ }
private:
nRF5xGattClient(const nRF5xGattClient &);
const nRF5xGattClient& operator=(const nRF5xGattClient &);
private:
- nRF5xServiceDiscovery discovery;
- nRF5xCharacteristicDescriptorDiscoverer characteristicDescriptorDiscoverer;
+ nRF5xServiceDiscovery _discovery;
+ nRF5xCharacteristicDescriptorDiscoverer _characteristicDescriptorDiscoverer;
#endif // if !S110
};
--- a/source/nRF5xServiceDiscovery.h Mon Jan 11 10:19:05 2016 +0000
+++ b/source/nRF5xServiceDiscovery.h Mon Jan 11 10:19:06 2016 +0000
@@ -94,6 +94,12 @@
terminateServiceDiscovery();
}
+ void terminate(Gap::Handle_t connectionHandle) {
+ if(connHandle == connectionHandle) {
+ terminate();
+ }
+ }
+
virtual void onTermination(ServiceDiscovery::TerminationCallback_t callback) {
onTerminationCallback = callback;
}