2014-07-13 6 views
0

누구나 Windows 8에서 Bluetooth rssi 값을 가져 오는 데 성공 했습니까?WIDCOMM SDK를 사용하여 Windows 8에서 Bluetooth RSSI 값 가져 오기

나는 WIDCOMM SDK와 Visual C++를 사용하여 rssi 값을 얻지 만, 항상 0을 반환합니다. 내가 한 것은 다음과 같습니다 : - 주변의 블루투스 장치 목록을 검색하십시오. - 각 장치에 대해 StartDiscovery()를 실행하여 장치의 서비스 목록을 가져옵니다. - 그런 다음 장치에 RFComm 채널을 열고 GetConnectionStats 함수를 통해 RSSI 값을 가져옵니다.

최신 WIDCOMM SDK와 WIDCOMM 소프트웨어 업데이트를 설치했습니다. 내 랩톱에서 Windows 8 64 비트를 실행 중이며 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

나는 약간 연구를했으며 나는 윈도우 비스타와 그 이상에서 RSSI 값을 얻을 수 없다고 생각한다. 내가 말하는 어떤 웹 사이트 나 문서도 찾을 수 없기 때문에 나는 그것을 확신 할 수 없다. 그러나 여기 내가 찾은 것입니다 :이 튜토리얼을 바탕으로

는 만 WIDCOMM 블루투스 스택이 점점 RSSI 값 지원 : 그러나 http://controllingtheinter.net/WidcommTutorial.php

을, 그것은 보인다 윈도우 비스타 및 새로운 사용 WIDCOMM 드라이버의 6.x의 버전과 이 버전은 RSSI를 지원하지 않습니다. 그것은 WIDCOMM SDK 릴리스에 명시되어 있습니다 :

GetConnectionStats하여 6.x 버전의 RSSI 데이터 필드를 지원하지 않습니다 (존재하는 모든 클래스)

그것은 때문에 6.x의 WIDCOMM 블루투스 버전은 Microsoft Bluetooth 스택에서 실행됩니다.

WIDCOMM SDK 출시 노트는 여기에서 확인할 수 있습니다. http://www.broadcom.com/support/bluetooth/sdk.php