Может ли устройство Bluetooth распознаваться по его уникальному адресу из приложения Windows C ++?

Я должен написать приложение, которое должно идентифицировать устройства «ESP32» & отправлять / получать данные из приложения Windows C ++.

Q1: я использую WSALookupServiceBegin() API, чтобы найти устройство BT, он не работал, как ожидалось. API возвращает 10108 до тех пор, пока я вручную не нажму «Добавить устройства» в окне Windows Bluetooth. Есть ли какой-либо другой API / сервис, который может обнаружить BT рядом с устройствами, или я использую WSALookupServiceBegin() API неправильно?
Является WSALookupServiceBegin() берет данные устройства из кеша Bluetooth? Я получил это сомнение, потому что API работает нормально только после ручного поиска в Windows.

Q2: возможно ли подключиться к любому устройству Bluetooth только с Mac ID устройства BT из Windows?

Пожалуйста, найдите код ниже.

WSAQUERYSET data;
HANDLE handle;
ZeroMemory(&data, sizeof(data));
data.dwSize = sizeof(data);
data.dwNameSpace = NS_BTH;
data.lpcsaBuffer = NULL;

WSALookupServiceBegin(&data, LUP_CONTAINERS, &handle);
while(WSALookupServiceNext(hLookup, LUP_RETURN_NAME | LUP_RETURN_ADDR,
&dwSize, pwsaResults)
{
service_classID = pwsaResults->lpServiceClassId;
_BTH_DEVICE_INFO *dev = (_BTH_DEVICE_INFO *)pwsaResults->lpBlob->pBlobData;

SOCKET          LocalSocket = INVALID_SOCKET;
SOCKADDR_BTH    SockAddrBthServer;

SockAddrBthServer.btAddr = dev->address;
SockAddrBthServer.addressFamily = AF_BTH;
SockAddrBthServer.serviceClassId = *service_classID;
SockAddrBthServer.port = 0;

// connect to socket
LocalSocket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
if (INVALID_SOCKET == LocalSocket) {
wprintf(L"socket() call failed. WSAGetLastError = [%d]\n", WSAGetLastError());
return -1;
}

if (SOCKET_ERROR == connect(LocalSocket,
(struct sockaddr *) &SockAddrBthServer,
sizeof(SOCKADDR_BTH))) {
wprintf(L"connect() call failed. WSAGetLastError=[%d]\n", WSAGetLastError());
return -1;
}

}

ВЫХОД :

вызов connect () не выполнен. WSAGetLastError = [10049]

0

Решение

WSALookupServiceBegin это правильный путь, но вы должны предоставить правильные флаги для него. Также вы можете использовать BluetoothFidnFirstDevice а также BluetoothFindNextDevice функции из Bluetooth API.

Однако оба метода всегда возвращают спаренные устройства, даже если они недоступны (вместе с только что найденными устройствами).

Из вашего описания, похоже, вы не указали правильные флаги для WSAxxx функция.

Если вы знаете MAC-адрес устройства, и он не был изменен, то вы можете подключиться к устройству по MAC-адресу без повторного обнаружения его каждый раз. В зависимости от требований к аутентификации вашего устройства вам даже не нужно выполнять сопряжение с устройством (конечно, если ваше устройство не требует аутентификации и / или шифрования).

1

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector