Проблема с получением списка устройств HCI из драйвера в Android - PullRequest
2 голосов
/ 14 сентября 2011

Мне нужно работать с устройством HCI Android, поэтому я пытаюсь реализовать простой код для получения номера устройства Bluetooth:

...
struct hci_dev_req *dr;

int sk = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
if (sk < 0)
{
    res = "invalid socket";
    goto end;
}

struct hci_dev_list_req *dl = malloc(HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl));
if (!dl)
{
    res = "not enough memory";
    goto end;
}

memset(dl, 0, HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl));

dl->dev_num = HCI_MAX_DEV;
dr = dl->dev_req;

if (ioctl(sk, HCIGETDEVLIST, (void *) dl) < 0)
{
    res = "unable to get device list";
    goto end;
}

if(dl->dev_num == 0)
{
    res = "device list is empty";
    goto end;
}
...

Так что каждый раз, когда я получаю сообщение «список устройств пуст». Почему это может быть? Только разрешения, имеющиеся у меня в программе, проявляют их: BLUETOOTH и BLUETOOTH_ADMIN. И я запускаю приложение как простой пользователь, а не как root.

Tnx.

1 Ответ

2 голосов
/ 22 сентября 2011

Хорошо, я нахожу причину: устройство не отвечает простому пользователю (и не имеет значения, какие разрешения вы запрашивали в манифесте программы).Вы можете напрямую общаться с устройством, только если вы являетесь пользователем root (или из режима ядра).Это означает, что вы не можете использовать устройства напрямую из общих приложений.Очень грустно: (

...