ESP32-S3基于Nimble BLE:如何获取Indication被Central确认的回调?
ESP32-S3 Nimble库BLE大数据传输:获取Indication确认回调的方法
我在ESP32-S3上使用仅支持BLE的Nimble库尝试进行大数据传输(尽管BLE并非为此场景设计,但实际可运行)。当前遇到的问题是无法确定发送下一块数据的时机:连续发送两个indication时,Nimble会抛出“out of resources”错误,调整mbuf及内存相关配置后该问题仍存在。我目前采用循环重试(含短延迟)的方法实现功能,但该方案不够优雅。
我了解存在BLE_GAP_EVENT_NOTIFY_TX回调用于通知/指示发送事件,但它无法满足需求——通过堆栈追踪及Nimble源码可知,该回调在ble_gatts_indicate_custom函数内部被调用,无法反映indication是否已发送或被确认。
开启调试日志后,Nimble会在indication被确认时输出相关信息,说明Nimble可识别该状态。因此我想咨询:是否存在方法让Nimble在indication被Central确认时向我的代码发送通知或回调?
调试日志示例:
I (16913) NimBLE: GATT procedure initiated: indicate; I (16913) NimBLE: att_handle=16
我希望在此节点获得代码通知/回调。
我的特征定义如下:
static const struct ble_gatt_svc_def gatt_definitions[] = { { .type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = BLE_UUID16_DECLARE(SERVICE_HANDLE), .characteristics = (struct ble_gatt_chr_def[]) { { .uuid = BLE_UUID16_DECLARE(CHARACTERISTICS_HANDLE), .access_cb = gatt_event, .val_handle = &attribute_handle, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_NOTIFY, }, { 0, } }, }, { 0, }, };
我已在此处添加通知回调函数gatt_event,它会在发送indication等场景被调用,但无法获取indication被Central确认的通知。
内容的提问来源于stack exchange,提问作者user3656743
相关产品推荐
相关产品推荐

