我有一个 BLE SoC (QN9021)
通过 UART 接口(interface)连接到 linux 系统(运行 openwrt
的 beagle bone)。我希望 linux 能够识别与系统连接的 BLE,并且 gatttool、hcitool
等命令应该适用于我的 BLE。
此外,我正在使用 Bluez
,我希望 BlueZ 库能够找到并直接与我的 BLE
通信。
看起来 bluez
中的源文件使用 socket()
函数调用来与蓝牙适配器通信。我已经发布了包含套接字调用的 hcitool.c
源文件部分:
/* Open HCI device.
* Returns device descriptor (dd). */
int hci_open_dev(int dev_id)
{
struct sockaddr_hci a;
int dd, err;
/* Check for valid device id */
if (dev_id < 0) {
errno = ENODEV;
return -1;
}
/* Create HCI socket */
dd = socket(AF_BLUETOOTH, SOCK_RAW | SOCK_CLOEXEC, BTPROTO_HCI);
if (dd < 0)
return dd;
/* Bind socket to the HCI device */
memset(&a, 0, sizeof(a));
a.hci_family = AF_BLUETOOTH;
a.hci_dev = dev_id;
if (bind(dd, (struct sockaddr *) &a, sizeof(a)) < 0)
goto failed;
return dd;
failed:
err = errno;
close(dd);
errno = err;
return -1;
}
如前所述,我通过 UART 连接 BLE SoC。我怎样才能让我的 BLE 被识别为蓝牙和像 socket() 这样的函数调用应该打开我的 BLE 的描述符?
最佳答案
你运行的时候有什么表现吗?
dmesg | grep blue
或
lsmod | grep blue
您需要确保您有此模块的 linux 驱动程序,它在您的内核中可用(NXP 和 TI 不一定喜欢一起玩)并且它可能内置在您的设备树中。
如果使用具有驱动程序支持的 TI BLE 模块,您可能会更幸运。
关于Linux 识别我的 BLE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41479580/