Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bluetooth 执行hciconfig hci0重置时出现无效参数问题_Bluetooth_Bluetooth Lowenergy_Bluez - Fatal编程技术网

Bluetooth 执行hciconfig hci0重置时出现无效参数问题

Bluetooth 执行hciconfig hci0重置时出现无效参数问题,bluetooth,bluetooth-lowenergy,bluez,Bluetooth,Bluetooth Lowenergy,Bluez,我在5.0以上内核中观察到的这个问题。 以及启用了扩展广告功能的控制器。 我目前已经用bluez-5.50进行了测试 这个问题与“MGMT_ADV_FLAG_secu MASK”有关,我可以从代码中得到这个标志。但我不明白何时以及如何修改这个标志 配置:内核5.4.24(任何5.0+内核都会出现问题),Bluez5.50 我正在执行以下步骤: 1.hciat连接启用BLE扩展ADV的控制器。 2.hciconfig hci0复位 扩展扫描rsp命令出现以下错误(在hciconfig hci0重置

我在5.0以上内核中观察到的这个问题。 以及启用了扩展广告功能的控制器。 我目前已经用bluez-5.50进行了测试

这个问题与“MGMT_ADV_FLAG_secu MASK”有关,我可以从代码中得到这个标志。但我不明白何时以及如何修改这个标志

配置:内核5.4.24(任何5.0+内核都会出现问题),Bluez5.50 我正在执行以下步骤: 1.hciat连接启用BLE扩展ADV的控制器。 2.hciconfig hci0复位

扩展扫描rsp命令出现以下错误(在hciconfig hci0重置序列期间):

这是因为我在core_v5.2中写了以下内容: “如果广告集不可扫描,并且主机使用此命令而不是放弃现有数据,则控制器应返回错误代码Invalid HCI command Parameters(0x12))。如果播发集使用可扫描的传统播发PDU,且操作不是0x03或扫描响应数据长度参数超过31个八位字节,则控制器应返回错误代码无效HCI命令参数(0x12).如果操作不是0x03且扫描响应数据长度为零,控制器应返回错误代码无效HCI命令参数(0x12)”

因此,在我的扩展HCI命令扩展广告集命令中,就在扩展扫描rsp集之前:

*LE Set Extended Advertising Parameters (0x08|0x0036) plen 25 

        Handle: 0x00
        Properties: 0x0010
          Use legacy advertising PDUs: ADV_NONCONN_IND
由于内核代码中签入了MGMT_ADV_FLAG_SEC_掩码,所以设置了此传统广告。 我想知道需要控制器LE功能中的哪个参数或其他任何东西才能将其设置正确


在我的蓝牙控制器中,不支持multi-ADV,支持extended ADV。

遇到问题,是内核5.4.24的extended ADV。在内核版本5.7.7中。 我在文件hci_request.c、函数get_adv_instance_scan_rsp_len中发现了这种差异,目前(内核5.4.24)的代码是:

static u8 get_adv_instance_scan_rsp_len(struct hci_dev *hdev, u8 instance)
{
        struct adv_info *adv_instance;

        /* Ignore instance 0 */
        if (instance == 0x00)
                return 0;
在5.7.7中,更改为:

static u8 get_adv_instance_scan_rsp_len(struct hci_dev *hdev, u8 instance)
{
        struct adv_info *adv_instance;

        /* Instance 0x00 always set local name */
        if (instance == 0x00)
                return 1;
这应该改变的是,它应该满足下面的条件,而目前没有。因此,基本上应该设置扫描rsp数据cmd不会失败的可扫描标志:

 } else if (get_adv_instance_scan_rsp_len(hdev, instance)) {
                if (secondary_adv)
                        cp.evt_properties = cpu_to_le16(LE_EXT_ADV_SCAN_IND);
                else
                        cp.evt_properties = cpu_to_le16(LE_LEGACY_ADV_SCAN_IND);
 } else if (get_adv_instance_scan_rsp_len(hdev, instance)) {
                if (secondary_adv)
                        cp.evt_properties = cpu_to_le16(LE_EXT_ADV_SCAN_IND);
                else
                        cp.evt_properties = cpu_to_le16(LE_LEGACY_ADV_SCAN_IND);