簡體   English   中英

使用WIDCOMM SDK在Windows 8上獲取藍牙RSSI值

[英]Get Bluetooth RSSI value on Windows 8 with WIDCOMM SDK

有人成功在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值? 如果是,請告訴我我應該怎么做才能獲得價值。

在此先感謝您。

我進行了一些研究,我認為不可能在Windows Vista和更高版本上獲得RSSI值。 我不能肯定,因為我找不到任何網站或文件這樣說。 但是這是我發現的:

根據本教程,僅WIDCOMM藍牙堆棧支持獲取RSSI值: http : //controllingtheinter.net/WidcommTutorial.php

但是,似乎Windows Vista和更高版本使用WIDCOMM驅動程序的6.x版本,並且這些版本不支持RSSI。 WIDCOMM SDK發行說明中指出:

GetConnectionStats(存在的所有類)在6.x版本中不支持RSSI數據字段

這是因為6.x WIDCOMM藍牙版本在Microsoft藍牙堆棧上運行。

可在以下位置找到WIDCOMM SDK發行說明: http : //www.broadcom.com/support/bluetooth/sdk.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM