누구나 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 값을 얻을 수 있습니까? 그렇다면 가치를 얻기 위해 내가해야 할 일을 말해주십시오.
고맙습니다.