rit*_*888 4 c++ serial-port bluetooth visual-studio wsastartup
我发现用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;
}
Run Code Online (Sandbox Code Playgroud)
如果您有来自发现或配对设备列表的蓝牙地址,您可以像这样连接到它(需要添加错误检查):
#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));
Run Code Online (Sandbox Code Playgroud)
某些设备通告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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13401 次 |
| 最近记录: |