gpt4 book ai didi

c - BlueZ 蓝牙 API 和距离校准精度

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:11 25 4
gpt4 key购买 nike

我正在使用 BlueZ C API 对我的蓝牙鼠标进行编程以读取距离。我已经设置了一个蓝牙加密狗。目前,我必须将鼠标移动到距离笔记本电脑(蓝牙加密狗)至少 5-10 英尺的地方才能读取 RSSI。低于这个距离,我得到的大部分读数为 0。

有什么方法可以使用这个API来获取更精确的RSSI值,以便我们可以跟踪这个范围内的距离吗?

int8_t Bluetooth::read_rssi(int to) {

int dd = hciSocket;
struct hci_conn_info_req *cr;
bdaddr_t bdaddr;
int8_t rssi;

str2ba(bt_addr, &bdaddr);

if (dd < 0) {
perror("HCI device open failed");
exit(1);
}

cr = (hci_conn_info_req *)(malloc(sizeof(*cr) + sizeof(struct hci_conn_info)));
if (!cr) {
perror("Can't allocate memory");
exit(1);
}

bacpy(&cr->bdaddr, &bdaddr);
cr->type = ACL_LINK;
if (ioctl(dd, HCIGETCONNINFO, (unsigned long) cr) < 0) {
perror("Get connection info failed");
exit(1);
}

if (hci_read_rssi(dd, htobs(cr->conn_info->handle), &rssi, 1000) < 0) {
perror("Read RSSI failed");
exit(1);
}

return rssi;
}

最佳答案

hci_read_rssi 可能不是您想要的。这不是实际的远程 RSSI。来自描述 HCI_Read_RSSI 命令的 BT 规范部分:

The RSSI parameter returns the difference between the measured Received Signal Strength Indication (RSSI) and the limits of the Golden Receive Power Range for a Connection Handle to another BR/EDR Controller. Any positive RSSI value returned by the Controller indicates how many dB the RSSI is above the upper limit, any negative value indicates how many dB the RSSI is below the lower limit. The value zero indicates that the RSSI is inside the Golden Receive Power Range.

我相信您想要的值是查询/扫描中包含的值。我知道有一种方法可以做到这一点,但不确定您是否可以接受或是否是最好的方法。

bluez dbus 设备 API 将 RSSI 作为属性之一。可以找到 api 文档 here .

更新:我自己还没有尝试过,但看起来 pybluez 支持获取查询 RSSI。参见 this pybluez example .

这是 bluez4 的一个简单示例:

https://bitbucket.org/kaylum/bluez-rssi-example/src

关于c - BlueZ 蓝牙 API 和距离校准精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30025139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com