有谁知道如何在 C# 中最好地跟踪蓝牙连接的信号强度?
我正在考虑使用 WMI 查询,但无法追踪封装连接的 WMI 类。
这个想法是,当我将手机放在口袋里时,蓝牙信号会减弱,我的机器会锁定,而我不会受到干扰。
蓝牙设备中运行的链路管理器协议 (LMP) 负责链路设置和配置。这一切都是由两个设备交换协议数据单元 (PDU) 完成的。RSSI 的硬件和软件功能在 LMP 级别提供,允许您管理 RSSI 数据。它允许您读取 RSSI 级别并控制 TX RF 输出功率(LMP 功率命令)LMP 进行控制并获取状态信息。
因此,在使用 MS 蓝牙堆栈时,您实际要查找的内容在 LMP 中定义。MS Bluetooth Stack HCI 接口已经支持以下功能,即
HCI_READHCIPARAMETERS
HCI_STARTHARDWARE
HCI_STOPHARDWARE
HCI_SETCALLBACK
HCI_OPENCONNECTION
HCI_READPACKET
HCI_WRITEPACKET
HCI_CLOSECONNECTION
我想微软本可以实现一个名为 HCI_Read_RSSI 的函数,但他们没有。
要获取 RSSI 数据,您必须使用 LMP 来获取您需要的信息。
// Read HCI Parameters
#include <windows.h>
#include <windev.h>
#include <bt_buffer.h>
#include <bt_hcip.h>
#include <bt_os.h>
#include <bt_debug.h>
#include <svsutil.hxx>
#include <bt_tdbg.h>
unsigned short hci_subversion, lmp_subversion, manufacturer;
unsigned char hci_version, lmp_version, lmp_features[8];
if (BthReadLocalVersion (&hci_version, &hci_subversion, &lmp_version, &lmp_subversion, &manufacturer, lmp_features) != ERROR_SUCCESS) {
SetUnloadedState ();
return 0;
}
WCHAR szLine[MAX_PATH]
unsigned char *pf = lmp_features;
if ((*pf) & 0x02) {
wsprintf (szLine, L" RSSI");
}
这仅适用于 Microsoft 蓝牙堆栈。这也是 C++ 代码。我从页面底部的专家交流帖子(我知道)中得到了这个。 http://www.experts-exchange.com/Programming/Wireless_Programming/Bluetooth/Q_21267430.html
没有特定的功能可以为您完成。
还有这个库可以帮助你,我没有完整地查看文档,但我听说过它的好消息。 http://inthehand.com/content/32feet.aspx
祝你好运!