有人在Windows 8上成功获得蓝牙rssi值吗?
我使用WIDCOMM SDK和visual c ++来获取rssi值,但它总是返回0.我所做的如下: - 扫描周围的蓝牙设备列表。 - 对于每个设备,我运行StartDiscovery()以获取设备上的服务列表。 - 然后我打开一个RFComm通道到设备并通过GetConnectionStats函数获得RSSI值。
我已安装最新的WIDCOMM SDK和WIDCOMM软件更新。我的笔记本电脑运行的是Windows 8 64bit,并且有Broadcom蓝牙驱动程序,所以它应该使用WIDCOMM蓝牙堆栈。
这是我正在使用的代码:
void BtScanner::OnDiscoveryComplete (UINT16 nRecs, long lResultCode) {
CSdpDiscoveryRec sdpRecs[16];
CBdInfo curDev = mDevList[0];
ReadDiscoveryRecords(curDev.mBdAddr, 16, sdpRecs, NULL);
for(int i = 0; i < nRecs; ++i) {
GUID guid = sdpRecs[i].m_service_guid;
UINT8 channel;
if(sdpRecs[i].FindRFCommScn(&channel)) {
CString tmp;
tmp.Format(_T("RFCOMM Channel: %d \n"), channel);
TRACE(tmp);
if (channel == 1) {
CRfCommIf myRF;
if (!myRF.AssignScnValue(&guid, channel)) {
TRACE("Failed To Set ScnValue");
return;
}
UINT8 sec_level = BTM_SEC_NONE;//BTM_SEC_NONE;
if (!myRF.SetSecurityLevel((char *)sdpRecs[i].m_service_name, sec_level, false)) {
WBtRc err = GetExtendedError();
TRACE("Failed To Set Security Level\r\n");
return;
}
CRfCommPort ComPort;
CRfCommPort::PORT_RETURN_CODE openRes = ComPort.OpenClient(myRF.GetScn(), curDev.mBdAddr);
if (openRes != CRfCommPort::PORT_RETURN_CODE::SUCCESS) {
tmp.Format(_T("Failed To Connect RFCOMM: %d\n"), openRes);
TRACE(tmp);
return;
}
tBT_CONN_STATS stats;
while (true) {
ComPort.GetConnectionStats(&stats);
CString tmp;
tmp.Format(_T("RSSI: %d \n"), stats.Rssi);
TRACE(tmp);
BD_ADDR tmpBda;
bool connected = ComPort.IsConnected(&tmpBda);
tmp.Format(_T("Is connected: %d \n"), connected);
TRACE(tmp);
this_thread::sleep_for(chrono::milliseconds(1000));
}
}
}
}
}
我根据从设备收到的内容更改了频道,但结果相同。我的CBdInfo类只是一个存储蓝牙信息的结构,例如地址和名称。
这可以在Windows 8上获得RSSI值吗?如果是,请告诉我应该怎样做才能获得价值。
先谢谢你。
答案 0 :(得分:0)
我做了一些研究,我认为在Windows Vista及更新版本上获取RSSI值是不可能的。我无法确认,因为我无法找到任何网站或文件。但这是我发现的:
根据本教程,只有WIDCOMM蓝牙堆栈支持获取RSSI值: http://controllingtheinter.net/WidcommTutorial.php
然而,似乎windows vista和更新版本使用6.x版本的WIDCOMM驱动程序,这些版本并不支持RSSI。 WIDCOMM SDK发行说明中指出:
GetConnectionStats(所有存在的类)不支持6.x版本中的RSSI数据字段
这是因为6.x WIDCOMM蓝牙版本在微软蓝牙堆栈上运行。
可以在此处找到WIDCOMM SDK发行说明: http://www.broadcom.com/support/bluetooth/sdk.php