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 X_NUCLEO_IDB0XA1 by
Diff: source/BlueNRGGattServer.cpp
- Branch:
- bde03b1e2c8e385819a23a5b6b31c97b4811d0a3
- Revision:
- 267:cd7870e466b3
- Parent:
- 263:8516afb5e29c
- Child:
- 269:cd037b36a62b
--- a/source/BlueNRGGattServer.cpp Thu Sep 15 10:51:29 2016 +0100
+++ b/source/BlueNRGGattServer.cpp Thu Sep 15 10:51:30 2016 +0100
@@ -176,7 +176,7 @@
(GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE|
GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE))) {
PRINTF("Setting up Gatt GATT_NOTIFY_ATTRIBUTE_WRITE Mask\n\r");
- Gatt_Evt_Mask = Gatt_Evt_Mask | GATT_NOTIFY_ATTRIBUTE_WRITE /* | GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP */;
+ Gatt_Evt_Mask = Gatt_Evt_Mask | GATT_NOTIFY_ATTRIBUTE_WRITE | GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP;
}
if((p_char->getProperties() &
(GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ|
@@ -567,6 +567,42 @@
return BLE_ERROR_NONE;
}
+// ask if the write request should be accepted of rejected
+// return 0 in case of success or an ATT error response in
+// case of faillure
+uint8_t BlueNRGGattServer::Write_Request_CB(
+ uint16_t connection_handle, uint16_t attr_handle, uint8_t data_length,
+ const uint8_t* data) {
+
+ GattCharacteristic* characteristic = getCharacteristicFromHandle(attr_handle);
+ if(!characteristic) {
+ return AUTH_CALLBACK_REPLY_ATTERR_INVALID_HANDLE & 0xFF;
+ }
+
+ // check if the data length is in range
+ if (characteristic->getValueAttribute().getMaxLength() < data_length) {
+ return AUTH_CALLBACK_REPLY_ATTERR_INVALID_ATT_VAL_LENGTH & 0xFF;
+ }
+
+ // if the length of the characteristic value is fixed
+ // then the data in input should be of that length
+ if (characteristic->getValueAttribute().hasVariableLength() == false &&
+ characteristic->getValueAttribute().getMaxLength() != data_length) {
+ return AUTH_CALLBACK_REPLY_ATTERR_INVALID_ATT_VAL_LENGTH & 0xFF;
+ }
+
+ GattWriteAuthCallbackParams params = {
+ connection_handle,
+ attr_handle,
+ /* offset */ 0,
+ data_length,
+ data,
+ /* authorizationReply */ AUTH_CALLBACK_REPLY_ATTERR_WRITE_NOT_PERMITTED
+ };
+
+ return characteristic->authorizeWrite(¶ms) & 0xFF;
+}
+
/**************************************************************************/
/*!
@brief Returns the GattCharacteristic according to the handle provided
