Я стараюсь, чтобы BlueZ работал на рабочем столе Ubuntu в течение большей части дня. Это просто не сработает. Я могу успешно подключить свои устройства к компьютеру через системный диалог, но сканирование BlueZ никогда не находит ничего. Есть ли альтернатива BlueZ? Есть ли способ манипулировать устройством Bluetooth без BlueZ, если устройство уже сопряжено?Альтернатива BlueZ?
Для хорошей меры, это код, я бег (http://people.csail.mit.edu/albert/bluez-intro/c404.html#simplescan.c):
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
int main(int argc, char **argv)
{
inquiry_info *ii = NULL;
int max_rsp, num_rsp;
int dev_id, sock, len, flags;
int i;
char addr[19] = { 0 };
char name[248] = { 0 };
dev_id = hci_get_route(NULL);
sock = hci_open_dev(dev_id);
if (dev_id < 0 || sock < 0) {
perror("opening socket");
exit(1);
}
len = 8;
max_rsp = 255;
flags = IREQ_CACHE_FLUSH;
ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));
num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags);
if(num_rsp < 0) perror("hci_inquiry");
for (i = 0; i < num_rsp; i++) {
ba2str(&(ii+i)->bdaddr, addr);
memset(name, 0, sizeof(name));
if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name),
name, 0) < 0)
strcpy(name, "[unknown]");
printf("%s %s\n", addr, name);
}
free(ii);
close(sock);
return 0;
}
Библиотека bluez в основном представляет собой тонкую обертку вокруг вызовов ioctl водителя. Вы можете просто вызвать вызовы ioctl напрямую. Я сделал это с помощью python. Если это ломается, то это либо ошибка драйвера, либо ограничение аппаратного обеспечения (некоторые устройства имеют ограниченную функциональность сканирования). – swstephe
У вас есть проверенные команды, такие как hcitool scan для поиска устройства – ashish