有没有人知道如何在c_中更好地跟踪蓝牙连接的信号强度?
我正在考虑使用一个wmi查询,但无法跟踪封装连接的wmi类。
我的想法是,当我把手机放在口袋里的时候,蓝牙信号会减弱,我的手机会锁上,我不会被激怒。

最佳答案

在蓝牙设备中运行的链路管理器协议(LMP)负责链路的设置和配置。这都是由两个交换协议数据单元(pdu)的设备完成的,rssi的硬件和软件功能在lmp级别提供,允许您管理rssi数据。它允许您读取rssi电平并控制tx rf输出功率(lmp功率命令)lmp进行控制,并获取at状态信息。
因此,当使用MS蓝牙协议栈时,您实际上要寻找的是在LMP中定义的。
MS Bluetooth Stack HCI接口已经支持以下功能,即
HCIAI读数参数
HCI_StartHardware公司
HCI_StopHardware公司
hci_setcallback
HCI_打开连接
HCI_读包
HCI_writepacket公司
HCI U闭合连接
我想微软本可以实现一个名为hci_read_rssi的函数,但他们没有。
要获取rssi数据,您必须使用lmp获取所需的信息。
读取rssi数据的psuedocode示例

// 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
祝你好运!

08-06 05:02