【问题标题】:Bluetooth Signal Strength蓝牙信号强度
【发布时间】:2008-09-15 20:07:24
【问题描述】:

有人知道如何在 C# 中跟踪蓝牙连接的信号强度吗?

我正在考虑使用 WMI 查询,但无法追踪封装连接的 WMI 类。

这个想法是,当我将手机放在口袋里时,蓝牙信号会减弱,并且我的机器会锁定,而我不会受到干扰。

【问题讨论】:

    标签: c# wmi bluetooth


    【解决方案1】:

    在蓝牙设备中运行的链路管理器协议 (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 来获取您需要的信息。

    读取 RSSI 数据的伪代码示例

    // 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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2014-08-16
      • 1970-01-01
      • 2012-03-09
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      相关资源
      最近更新 更多