You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:42:36