Мне нужно написать приложение, которое должно идентифицировать устройства «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]