[英]Bluetooth with C++ and winsock
我發現很難在C ++中獲得有關藍牙通信的信息。 具體來說,我想避免使用任何第三方庫,我只想連接到已與我的計算機配對的設備。
設備已輸入密碼,可在我的設備和打印機下的“顯示藍牙設備”中找到。 我正在使用Windows 7和visual studio 2013專業版進行C ++開發。
我有一些示例代碼(從這里http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedotherprotocol4k.html ),它顯示我的藍牙無線電信息,然后顯示設備信息,它似乎運作良好。 雖然它打印出已經與計算機配對的每個藍牙設備,但不是那些在范圍內的設備,但可能是我誤解了代碼的假設。
我一直在瀏覽藍牙參考頁面( http://msdn.microsoft.com/en-us/library/windows/desktop/aa362930%28v=vs.85%29.aspx )並且所有功能都只是為了設置藍牙無線電可用性和其他類似的事情; 根本沒有連接到找到的設備的跡象。
我必須遺漏一些東西,在谷歌搜索時使用錯誤的關鍵詞,因為我沒有發現任何關於連接藍牙設備的事情!
如果有人有任何建議,代碼或鏈接,那將是偉大的! 我可以使用串行功能(非常容易)連接到我的設備,但我必須手動輸入它注冊的COM端口,這不是非常用戶友好。 我想掃描並選擇,或輸入藍牙設備名稱,然后以這種方式連接。
干杯
編輯:
BitBanks的回答指出了我正確的方向。 在任何套接字請求之前,唯一缺少的是WSAStartup請求:
WORD wVersionRequested;
WSADATA wsaData;
int err;
/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
/* Tell the user that we could not find a usable */
/* Winsock DLL. */
printf("WSAStartup failed with error: %d\n", err);
return 1;
}
如果您有來自發現或配對設備列表的藍牙地址,您可以像這樣連接到它(需要添加錯誤檢查):
#include <winsock2.h>
#include <ws2bth.h>
SOCKADDR_BTH sockAddr;
SOCKET btSocket;
int error;
btSocket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
memset (&sockAddr, 0, sizeof(sockAddr));
sockAddr.addressFamily = AF_BTH;
sockAddr.serviceClassId = RFCOMM_PROTOCOL_UUID;
sockAddr.port = BT_PORT_ANY;
sockAddr.btAddr = <your bluetooth address>
error = connect(btSocket, (SOCKADDR*)&sockAddr, sizeof(sockAddr));
某些設備通告SerialPortServiceClass_UUID而不是RFCOMM_PROTOCOL_UUID。 您可能還需要多次重試連接。 某些執行不佳的藍牙設備( 咳嗽 PowerA Moga 咳嗽 )需要多次嘗試連接。
這可能不是官方的方法,但我從配對列表中得到我感興趣的設備的6字節BT地址,如下所示:
unsigned char *p;
ULONGLONG ullAddr;
p = (unsigned char *)pwsaResults->lpcsaBuffer->RemoteAddr.lpSockaddr; // point to addr
memcpy(&ullAddr, &p[2], 8); // copy Bluetooth address of device we found
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.