Bluetooth 执行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集之前: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重置
*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);