Я пытаюсь перевести устройства Bluetooth на Windows, и у меня возникли проблемы.
Сначала код:
WSAQUERYSET wsaq;
HANDLE hLookup;
LPWSAQUERYSET pwsaResults;
DWORD dwSize;
BOOL bHaveName;
BT_ADDR btAddr;
DWORD dwNameSpace;
pwsaResults = (LPWSAQUERYSET)butuh.buf;
dwSize = sizeof(butuh.buf);
ZeroMemory(&wsaq, sizeof(wsaq));
wsaq.dwSize = sizeof(wsaq);
wsaq.dwNameSpace = NS_BTH;
wsaq.lpcsaBuffer = NULL;
if (WSALookupServiceBegin(&wsaq, LUP_CONTAINERS | LUP_FLUSHCACHE, &hLookup) == SOCKET_ERROR)
{
printf("WSALookupServiceBegin() failed %d (Maybe no BT Device?) \r\n", WSAGetLastError());
return FALSE;
}
ZeroMemory(pwsaResults, sizeof(WSAQUERYSET));
pwsaResults->dwSize = sizeof(WSAQUERYSET);
pwsaResults->dwNameSpace = NS_BTH;
pwsaResults->lpBlob = NULL;
while (WSALookupServiceNext(hLookup, LUP_RETURN_NAME | LUP_RETURN_ADDR, &dwSize, pwsaResults) == 0)
{
// to get the remote address, the btAddr field should be properly cast
btAddr = ((SOCKADDR_BTH *)pwsaResults->lpcsaBuffer->RemoteAddr.lpSockaddr)->btAddr;
// Verify the returned name
bHaveName = (pwsaResults->lpszServiceInstanceName) && *(pwsaResults->lpszServiceInstanceName);
// Some more info
dwNameSpace = pwsaResults->dwNameSpace;
wprintf(L"Device Name: %s \n", pwsaResults->lpszServiceInstanceName);
wprintf(L"Device Address: 0X%012X \n", btAddr);
wprintf(L"NAP Address: 0X%04X \n", GET_NAP(btAddr));
wprintf(L"SAP Address: 0X%08X \n", GET_SAP(btAddr));
wprintf(L"Name Space: 0X%0X \n \n \n", dwNameSpace);
memcpy(&list+devices, &btAddr, sizeof(btAddr));
devices++;
}
if (WSALookupServiceEnd(hLookup) != 0)
printf("FindingBtDevices(): WSALookupServiceEnd(hLookup) failed with error code %ld\n", WSAGetLastError());
Я могу обнаружить свой телефон или другой компьютер без каких-либо проблем, но я пытаюсь работать с блютуз-девкитом Atmel и не могу его найти.
Atmel SAMB11
Если я использую графический интерфейс Windows для поиска устройства Bluetooth, то нет проблем с поиском devkit.
Есть идеи, в чем проблема и как ее исправить?
Задача ещё не решена.
Других решений пока нет …