【发布时间】:2008-09-15 20:07:24
【问题描述】:
有人知道如何在 C# 中跟踪蓝牙连接的信号强度吗?
我正在考虑使用 WMI 查询,但无法追踪封装连接的 WMI 类。
这个想法是,当我将手机放在口袋里时,蓝牙信号会减弱,并且我的机器会锁定,而我不会受到干扰。
【问题讨论】:
有人知道如何在 C# 中跟踪蓝牙连接的信号强度吗?
我正在考虑使用 WMI 查询,但无法追踪封装连接的 WMI 类。
这个想法是,当我将手机放在口袋里时,蓝牙信号会减弱,并且我的机器会锁定,而我不会受到干扰。
【问题讨论】:
在蓝牙设备中运行的链路管理器协议 (LMP) 负责链路设置和配置。这一切都是由两个交换协议数据单元 (PDU) 的设备完成的。RSSI 的硬件和软件功能在 LMP 级别提供,允许您管理 RSSI 数据。它允许您读取 RSSI 级别并控制 TX RF 输出功率(LMP 功率命令)LMP 进行控制并获取状态信息。
因此,当您使用 MS 蓝牙堆栈时,您真正要查找的是在 LMP 中定义的。 MS Bluetooth Stack HCI 接口已经支持以下功能,即
HCI_READHCIPARAMETERS
HCI_START硬件
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
祝你好运!
【讨论】: