C语言 如何找到#设备w. bluez



I tried.

int a = socket(AF_BLUETOOTH, SOCK_RAW | SOCK_CLOEXEC, BTPROTO_HCI);
if (a < 0)
{
return 1;
}
hci_dev_list_req* b;
b = (hci_dev_list_req*)malloc(sizeof (hci_dev_list_req) + HCI_MAX_DEV * sizeof(hci_dev_req));
memset(b, 0, sizeof(hci_dev_list_req) + HCI_MAX_DEV * sizeof(hci_dev_req));
b->dev_num = HCI_MAX_DEV;
int c = ioctl(a, HCIGETDEVLIST, (void*)b);
free(b);
close(a);
if(c < 0)
{
return 1;
}
printf("b->dev_num %hun", b->dev_num);

然而. .对我来说,b->dev_num 0会被打印出来。上面的代码基本上是从hci_for_each_dev(参见https://github.com/bluez/bluez/blob/master/lib/hci.c#L828)复制粘贴的。

令人困惑的是hci_get_route then(在这段代码运行之后)不返回-1,这在bluez源代码中是没有意义的,因为…

1。hci_get_route总是将hci_for_each_dev的结果赋给返回值
2.Hci_for_each_dev只在"dev_num"比;0

证明1.(源).

int hci_get_route(bdaddr_t *bdaddr)
{
int dev_id;
dev_id = hci_for_each_dev(HCI_UP, __other_bdaddr,
(long) (bdaddr ? bdaddr : BDADDR_ANY));
if (dev_id < 0)
dev_id = hci_for_each_dev(HCI_UP, __same_bdaddr,
(long) (bdaddr ? bdaddr : BDADDR_ANY));
return dev_id;
}

2.(源).

for (i = 0; i < dl->dev_num; i++, dr++) {
if (hci_test_bit(flag, &dr->dev_opt))
if (!func || func(sk, dr->dev_id, arg)) {
dev_id = dr->dev_id;
break;
}
}

似乎这就是答案。

如果你是根用户(或者从内核模式),你可以直接与设备对话。

来源

最新更新