2013-10-12 3 views
2

Я стараюсь, чтобы 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; 
} 
+1

Библиотека bluez в основном представляет собой тонкую обертку вокруг вызовов ioctl водителя. Вы можете просто вызвать вызовы ioctl напрямую. Я сделал это с помощью python. Если это ломается, то это либо ошибка драйвера, либо ограничение аппаратного обеспечения (некоторые устройства имеют ограниченную функциональность сканирования). – swstephe

+0

У вас есть проверенные команды, такие как hcitool scan для поиска устройства – ashish

ответ

0

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

0

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

Просто откройте src/btmhmt.c и выполните поиск по сканированию (или подключите или что угодно).

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

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

Смежные вопросы