有没有人知道如何在C#中追踪蓝牙连接的信号强度?
我在考虑使用WMI查询,但无法跟踪封装连接的WMI类。
我的想法是,当我将手机放入口袋时,蓝牙信号会减弱,我的机器会锁定,我不会上瘾。
答案 0 :(得分:5)
蓝牙设备中运行的链路管理器协议(LMP)负责链路设置和配置。这完全由两个交换协议数据单元(PDU)的设备完成.RSSI的硬件和软件功能在LMP级别提供,允许您管理RSSI数据。它允许您读取RSSI电平并控制TX RF输出功率(LMP电源命令)LMP以进行控制并获取状态信息。
因此,在使用MS蓝牙堆栈时,LMP中定义了您实际需要的内容。 MS蓝牙堆栈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
古德勒克男子!