簡體   English   中英

藍牙與C ++和winsock

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM