Альтернатива BlueZ?

Я пытался заставить BlueZ работать на моем рабочем столе Ubuntu большую часть дня. Это просто не сработает. Я могу успешно подключить свои устройства к компьютеру через системный диалог, но сканирование BlueZ ничего не находит. Есть ли альтернатива BlueZ? Есть ли способ манипулировать устройством bluetooth без 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;
 }

person dejay    schedule 12.10.2013    source источник
comment
Библиотека bluez в основном представляет собой тонкую оболочку для вызовов ioctl драйвера. Вы можете просто делать вызовы ioctl напрямую. Я сделал это с помощью Python. Если это сломается, то это либо ошибка драйвера, либо ограничение оборудования (некоторые устройства имеют ограниченную функциональность сканирования).   -  person swstephe    schedule 14.10.2013
comment
Вы пробовали такие команды, как сканирование hcitool для поиска устройства?   -  person ashish    schedule 16.10.2013


Ответы (2)


Я использую тот же код. Я вошел в настройки своего телефона и переключил настройку, которая позволяет моему телефону быть видимым для других устройств. Затем снова запустите программу, и она появится в списке. Надеюсь, это поможет хотя бы проверить, работает ли код.

person Chuck Claunch    schedule 19.02.2015

попробуйте использовать внутреннюю библиотеку bluetooth. используется btmgmt. Он более структурирован, чем инструменты hcixxx, напрямую использующие ioctls hci_xx.

Просто откройте src / btmhmt.c и найдите scan (или подключитесь, или как хотите).

Хотя в обоих случаях проблема с лицензированием будет существовать.

Надеюсь это поможет.

person fadedreamz    schedule 27.07.2015