central接收到之前配对过的设备发送的ADV_DIRECT_IND(定向广播),为什么不会触发GAP_DIRECT_DEVICE_INFO_EVENT?

central接收到之前配对过的设备发送的ADV_DIRECT_IND(定向广播),为什么不会触发GAP_DIRECT_DEVICE_INFO_EVENT?
百度相关资料,有提到可能与Scanning Filter Policy有关,但CH582没有找到设置Scanning Filter Policy的API,但其它的厂家好象是可以设置的,比如TI,NRF。


我的目的是根据ADV_DIRECT_IND的MAC地址信息,快递重连上从设备,而且不需要再次获取从设备的服务等,却可以直接发送数据给从设备。

类似这种:

3.1 配置扫描参数

esp_ble_gap_set_scan_params() 使用 esp_ble_scan_params_t 结构体进行设置

static esp_ble_scan_params_t ble_scan_params = {
    .scan_type              = BLE_SCAN_TYPE_ACTIVE,  //扫描类型
    .own_addr_type          = BLE_ADDR_TYPE_PUBLIC,  //拥有者的蓝牙设备地址类型
    .scan_filter_policy     = BLE_SCAN_FILTER_ALLOW_ALL,//扫描过滤器设置
    .scan_interval          = 0x50,  //扫描间隔
    .scan_window            = 0x30,  //扫描窗口
    .scan_duplicate         = BLE_SCAN_DUPLICATE_DISABLE  //扫描重复类型};




您好,第一种情况需要快速回连,可以通过设置direct adv进行处理,也可以直接减小广播间隔到最小,同时将超时时间给到最小,回连的速度也会很快,对于用户的感知基本没有区别的。

通过绑定的方式,下一次连接可以不需要重新枚举的。


关键是我发现,咱们现在的程序在接收到ADV_DIRECT_IND后,不会触发GAP_DIRECT_DEVICE_INFO_EVENT,从而导致下面程序不能运行,所以发起重连总是出错。

    case GAP_DIRECT_DEVICE_INFO_EVENT:
        {
            // Display device addr
            PRINT("Recv direct adv \n");
            // Add device to list
            centralAddDeviceInfo(pEvent->deviceDirectInfo.addr, pEvent->deviceDirectInfo.addrType);
        }
        break;


目前正在检查,如解决第一时间在该贴回复。


只有登录才能回复,可以选择微信账号登录