阻止蓝牙驱动程序操作?
Prevent bluetooth driver actions?
我想使用 HCI 命令完全以编程方式控制我的蓝牙控制器。 (基本上模仿其他蓝牙控制器的行为,例如 android 设备)
但是,使用驱动程序运行,总是会自动发送不需要的命令。
是否有可能以某种方式阻止这种情况?
或者这是否只能通过基本上为蓝牙适配器编写我自己的驱动程序来实现?
我并没有真正尝试太多(除了 systemctl stop bluetooth
,这显然不起作用)因为我不知道从哪里开始。
也许我可以以某种方式阻止传出的蓝牙命令,并且只在我发送某些内容时才启用它?
谢谢
编辑:我当然可以发送我的 hci 消息,然后关闭 hci 设备 -> 这样只发送我的消息。但我仍然想接收传入的消息到控制器。我只是不想让宿主发送我没有指定的消息。
Edit2:根据有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;
}
然而,调用它总是导致"device or resource busy",但我在hci设备上什么都没有运行。有什么建议吗?
sudo hciconfig hci0 down
在创建用户频道之前需要套接字。除此之外,请参阅我的编辑。将其标记为完成。
我想使用 HCI 命令完全以编程方式控制我的蓝牙控制器。 (基本上模仿其他蓝牙控制器的行为,例如 android 设备)
但是,使用驱动程序运行,总是会自动发送不需要的命令。
是否有可能以某种方式阻止这种情况?
或者这是否只能通过基本上为蓝牙适配器编写我自己的驱动程序来实现?
我并没有真正尝试太多(除了 systemctl stop bluetooth
,这显然不起作用)因为我不知道从哪里开始。
也许我可以以某种方式阻止传出的蓝牙命令,并且只在我发送某些内容时才启用它?
谢谢
编辑:我当然可以发送我的 hci 消息,然后关闭 hci 设备 -> 这样只发送我的消息。但我仍然想接收传入的消息到控制器。我只是不想让宿主发送我没有指定的消息。
Edit2:根据
#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;
}
然而,调用它总是导致"device or resource busy",但我在hci设备上什么都没有运行。有什么建议吗?
sudo hciconfig hci0 down
在创建用户频道之前需要套接字。除此之外,请参阅我的编辑。将其标记为完成。