NimBLE: Added support for writing data more than BLE_ATT_ATTR_MAX_LEN

This commit is contained in:
2023-03-30 11:23:59 +05:30
parent 9fd023d47f
commit 0fc6282a3f
8 changed files with 36 additions and 1 deletions
+7
View File
@@ -769,10 +769,17 @@ ble_att_clt_tx_prep_write(uint16_t conn_handle, uint16_t handle,
goto err;
}
#if MYNEWT_VAL(BLE_GATT_BLOB_TRANSFER)
if (OS_MBUF_PKTLEN(txom) > BLE_ATT_ATTR_MAX_LEN) {
rc = BLE_HS_EINVAL;
goto err;
}
#else
if (offset + OS_MBUF_PKTLEN(txom) > BLE_ATT_ATTR_MAX_LEN) {
rc = BLE_HS_EINVAL;
goto err;
}
#endif
if (OS_MBUF_PKTLEN(txom) >
ble_att_mtu(conn_handle) - BLE_ATT_PREP_WRITE_CMD_BASE_SZ) {
+4 -1
View File
@@ -2130,7 +2130,9 @@ ble_att_svr_prep_validate(struct ble_att_prep_entry_list *prep_list,
{
struct ble_att_prep_entry *entry;
struct ble_att_prep_entry *prev;
#if !MYNEWT_VAL(BLE_GATT_BLOB_TRANSFER)
int cur_len;
#endif
prev = NULL;
SLIST_FOREACH(entry, prep_list, bape_next) {
@@ -2150,12 +2152,13 @@ ble_att_svr_prep_validate(struct ble_att_prep_entry_list *prep_list,
}
}
#if !MYNEWT_VAL(BLE_GATT_BLOB_TRANSFER)
cur_len = entry->bape_offset + OS_MBUF_PKTLEN(entry->bape_value);
if (cur_len > BLE_ATT_ATTR_MAX_LEN) {
*err_handle = entry->bape_handle;
return BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN;
}
#endif
prev = entry;
}
+5
View File
@@ -100,6 +100,11 @@ syscfg.defs:
Enables support for NimBLE specific vendor HCI commands
value: 0
BLE_GATT_BLOB_TRANSFER:
description: >
This enables write blob feature
value: 1
# Allow periodic sync transfer only if 5.1 or higher
syscfg.restrictions:
- "'BLE_PERIODIC_ADV_SYNC_TRANSFER == 0' || 'BLE_VERSION >= 51'"
@@ -571,6 +571,10 @@
#define MYNEWT_VAL_BLE_GATT_WRITE_RELIABLE (MYNEWT_VAL_BLE_ROLE_CENTRAL)
#endif
#ifndef MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER
#define MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER (0)
#endif
#ifndef MYNEWT_VAL_BLE_HOST
#define MYNEWT_VAL_BLE_HOST (1)
#endif
@@ -572,6 +572,10 @@
#define MYNEWT_VAL_BLE_GATT_WRITE_RELIABLE (MYNEWT_VAL_BLE_ROLE_CENTRAL)
#endif
#ifndef MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER
#define MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER (0)
#endif
#ifndef MYNEWT_VAL_BLE_HOST
#define MYNEWT_VAL_BLE_HOST (1)
#endif
@@ -619,6 +619,10 @@
#define MYNEWT_VAL_BLE_GATT_WRITE_RELIABLE (MYNEWT_VAL_BLE_ROLE_CENTRAL)
#endif
#ifndef MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER
#define MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER (0)
#endif
#ifndef MYNEWT_VAL_BLE_HOST
#define MYNEWT_VAL_BLE_HOST (1)
#endif
+4
View File
@@ -738,6 +738,10 @@
#define MYNEWT_VAL_BLE_GATT_WRITE_RELIABLE (MYNEWT_VAL_BLE_ROLE_CENTRAL)
#endif
#ifndef MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER
#define MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER (0)
#endif
#ifndef MYNEWT_VAL_BLE_HOST
#define MYNEWT_VAL_BLE_HOST (1)
#endif
+4
View File
@@ -1277,6 +1277,10 @@
#define MYNEWT_VAL_BLE_GATT_WRITE_RELIABLE (MYNEWT_VAL_BLE_ROLE_CENTRAL)
#endif
#ifndef MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER
#define MYNEWT_VAL_BLE_GATT_BLOB_TRANSFER (0)
#endif
#ifndef MYNEWT_VAL_BLE_HOST
#define MYNEWT_VAL_BLE_HOST (1)
#endif