Получите значение Bluetooth RSSI в Windows 8 с помощью WIDCOMM SDK

Кому-нибудь удалось получить значение Bluetooth RSSI на Windows 8?

Я использую WIDCOMM SDK и Visual C ++, чтобы получить значение RSSI, но он всегда возвращает 0. Что я сделал, это следующим образом:
— Сканирование для списка устройств Bluetooth вокруг.
— Для каждого устройства я запускаю StartDiscovery (), чтобы получить список служб на устройстве.
— Затем я открываю канал RFComm для устройства и получаю значение RSSI через функцию GetConnectionStats.

Я установил последнюю версию WIDCOMM SDK и обновление программного обеспечения WIDCOMM. Мой ноутбук работает под управлением Windows 8 64bit и имеет драйвер Bluetooth Broadcom, поэтому он должен использовать стек Bluetooth 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 — это просто структура для хранения информации Bluetooth, такой как адрес и имя.

Можно ли получить значение RSSI на Windows 8? Если да, пожалуйста, скажите мне, что я должен сделать, чтобы получить значение.

Заранее благодарю.

0

Решение

Я провел некоторое исследование и думаю, что невозможно получить значение RSSI для Windows Vista и новее. Я не могу подтвердить это, потому что я не смог найти ни веб-сайт, ни документы, подтверждающие это. Но вот что я нашел:

Основываясь на этом руководстве, только стек Bluetooth WIDCOMM поддерживает получение значения RSSI:
http://controllingtheinter.net/WidcommTutorial.php

Однако, похоже, что Windows Vista и новее используют версии 6.x драйвера WIDCOMM, и эти версии не поддерживают RSSI. В примечании к выпуску WIDCOMM SDK указано, что:

GetConnectionStats (все классы, где присутствуют) не поддерживают поле данных RSSI в версиях 6.x

Это связано с тем, что версия Bluetooth WIDCOMM 6.x работает в стеке Microsoft Bluetooth.

Заметка о выпуске WIDCOMM SDK находится здесь:
http://www.broadcom.com/support/bluetooth/sdk.php

0

Другие решения


По вопросам рекламы [email protected]