Предотвратить действия драйвера Bluetooth? - PullRequest
0 голосов
/ 29 октября 2018

Я хочу полностью контролировать мой контроллер Bluetooth с помощью команд HCI. (В основном имитируют поведение других контроллеров Bluetooth, например устройств Android) Однако при работающем драйвере всегда будут отправляться нежелательные команды автоматически. Можно ли как-то это предотвратить? Или это возможно только путем написания собственного драйвера для адаптера Bluetooth? Я не особо старался (кроме systemctl stop bluetooth, что, очевидно, не работает), потому что я не знаю, с чего начать. Может быть, я могу каким-то образом заблокировать исходящие команды bluetooth, и только кратко включить, когда я что-то отправляю? Благодаря.

Редактировать: Конечно, я могу отправить свое сообщение hci, затем выключить устройство hci -> таким образом отправляется только мое сообщение. Но я все еще хочу получать входящее сообщение на контроллер. Я просто не хочу, чтобы хост отправлял сообщение, которое я не указал.

Edit2: в соответствии с Прямое управление устройством HCI (обходные драйверы Bluetooth) в Linux существует HCI_USER_CHANNEl, что в принципе и является тем, что я хочу. Я взял код оттуда, чтобы написать функцию:

#include <errno.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BTPROTO_HCI   1

struct sockaddr_hci {
sa_family_t     hci_family;
unsigned short  hci_dev;
unsigned short  hci_channel;
};

extern "C" int usocket(){

    int sock = socket(AF_BLUETOOTH, SOCK_RAW ,  BTPROTO_HCI);
    struct sockaddr_hci a;

    memset(&a, 0, sizeof(a));
    a.hci_family = AF_BLUETOOTH;
    a.hci_dev = 0; //0 for hci0
    a.hci_channel = 1; //1 for HCI_CHANNEL_USER

    int ret = bind(sock, (struct sockaddr *) &a, sizeof(a));
    if(ret==-1){
       perror("Error binding socket. Errno: ");
       return -1;
    }
    return sock;
  }

Однако вызов этого всегда приводит к «устройству или ресурсу занято», но у меня на устройстве hci ничего не работает. Любой совет?

1 Ответ

0 голосов
/ 29 октября 2018

sudo hciconfig hci0 down перед созданием сокета канала пользователя. Кроме этого, смотрите мои правки. Маркировка как выполненная.

...