Я пытался..
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 %hu\n", b->dev_num);
Однако.. здесь для меня будет напечатано b->dev_num 0
.
Приведенный выше код в значительной степени представляет собой скопированную вставку из hci_for_each_dev (см.
Что сбивает с толку, так это то, что hci_get_route после этого (после запуска этого кода) не возвращает -1, что не имеет смысла, если смотреть на источник bluez, потому что..
1. HCI_GET_ROUTE всегда назначает результат HCI_FOR_EACH_DEV для возвращаемого значения <773223108351> 2. <197323108353> HCI_IACH_IECH.
ДОКАЗАТЕЛЬСТВО 1. (<19732223108358>источник).. ДОКАЗАТЕЛЬСТВО 2. (<19732223108364>источник)..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;
}
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;
}
}