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.
Revision 964:9d12fedb6d69, committed 2015-11-26
- Comitter:
- rgrover1
- Date:
- Thu Nov 26 12:52:34 2015 +0000
- Parent:
- 963:d111d9454aa9
- Child:
- 965:212c16f6247f
- Commit message:
- Synchronized with git rev 381345fe
Author: Vincent Coubard
Allow user of GattClient to call write on a discovered characteristic with
the continuation function
Changed in this revision
--- a/ble/DiscoveredCharacteristic.h Thu Nov 26 12:52:34 2015 +0000
+++ b/ble/DiscoveredCharacteristic.h Thu Nov 26 12:52:34 2015 +0000
@@ -137,6 +137,11 @@
*/
ble_error_t write(uint16_t length, const uint8_t *value) const;
+ /**
+ * Same as above but register the callback wich will be called once the data has been written
+ */
+ ble_error_t write(uint16_t length, const uint8_t *value, const GattClient::WriteCallback_t& onRead) const;
+
void setupLongUUID(UUID::LongUUIDBytes_t longUUID) {
uuid.setupLong(longUUID);
}
--- a/source/DiscoveredCharacteristic.cpp Thu Nov 26 12:52:34 2015 +0000
+++ b/source/DiscoveredCharacteristic.cpp Thu Nov 26 12:52:34 2015 +0000
@@ -31,7 +31,6 @@
return gattc->read(connHandle, valueHandle, offset);
}
-
struct OneShotReadCallback {
static void launch(GattClient* client, Gap::Handle_t connHandle,
GattAttribute::Handle_t handle,const GattClient::ReadCallback_t& cb) {
@@ -45,7 +44,7 @@
GattAttribute::Handle_t handle, const GattClient::ReadCallback_t& cb) :
_client(client),
_connHandle(connHandle),
- _handle(handle),
+ _handle(handle),
_callback(cb) { }
void attach() {
@@ -54,7 +53,7 @@
void call(const GattReadCallbackParams* params) {
// verifiy that it is the right characteristic on the right connection
- if(params->connHandle == _connHandle && params->handle == _handle) {
+ if (params->connHandle == _connHandle && params->handle == _handle) {
_callback(params);
_client->onDataRead().detach(makeFunctionPointer(this, &OneShotReadCallback::call));
delete this;
@@ -69,7 +68,7 @@
ble_error_t DiscoveredCharacteristic::read(uint16_t offset, const GattClient::ReadCallback_t& onRead) const {
ble_error_t error = read(offset);
- if(error) {
+ if (error) {
return error;
}
@@ -78,9 +77,6 @@
return error;
}
-
-
-
ble_error_t
DiscoveredCharacteristic::write(uint16_t length, const uint8_t *value) const
{
@@ -109,6 +105,52 @@
return gattc->write(GattClient::GATT_OP_WRITE_CMD, connHandle, valueHandle, length, value);
}
+struct OneShotWriteCallback {
+ static void launch(GattClient* client, Gap::Handle_t connHandle,
+ GattAttribute::Handle_t handle,const GattClient::WriteCallback_t& cb) {
+ OneShotWriteCallback* oneShot = new OneShotWriteCallback(client, connHandle, handle, cb);
+ oneShot->attach();
+ // delete will be made when this callback is called
+ }
+
+private:
+ OneShotWriteCallback(GattClient* client, Gap::Handle_t connHandle,
+ GattAttribute::Handle_t handle, const GattClient::WriteCallback_t& cb) :
+ _client(client),
+ _connHandle(connHandle),
+ _handle(handle),
+ _callback(cb) { }
+
+ void attach() {
+ _client->onDataWritten(makeFunctionPointer(this, &OneShotWriteCallback::call));
+ }
+
+ void call(const GattWriteCallbackParams* params) {
+ // verifiy that it is the right characteristic on the right connection
+ if (params->connHandle == _connHandle && params->handle == _handle) {
+ _callback(params);
+ _client->onDataWritten().detach(makeFunctionPointer(this, &OneShotWriteCallback::call));
+ delete this;
+ }
+ }
+
+ GattClient* _client;
+ Gap::Handle_t _connHandle;
+ GattAttribute::Handle_t _handle;
+ GattClient::WriteCallback_t _callback;
+};
+
+ble_error_t DiscoveredCharacteristic::write(uint16_t length, const uint8_t *value, const GattClient::WriteCallback_t& onRead) const {
+ ble_error_t error = write(length, value);
+ if (error) {
+ return error;
+ }
+
+ OneShotWriteCallback::launch(gattc, connHandle, valueHandle, onRead);
+
+ return error;
+}
+
ble_error_t
DiscoveredCharacteristic::discoverDescriptors(DescriptorCallback_t callback, const UUID &matchingUUID) const
{