windows蓝牙编程——2 和可直连的蓝牙建立串口服务,并获取对应的蓝牙虚拟串口

写在前面

由于个人是个C++和windows API方面的小白,蓝牙配对这部分涉及到回调方面,实在使不上劲,快要放弃之际,开发小伙伴告诉我公司蓝牙都是直连模式,可以跳过配对这部分。无奈这下,只能先跳过配对这部分(后面再琢磨)。
申请到蓝牙虚拟串口后,后面的通信就把蓝牙当串口用了。算是完成了领导交代的任务…

1 用到的函数

1.1 BluetoothSetServiceState

DWORD BluetoothSetServiceState(
  HANDLE                      hRadio,
  const BLUETOOTH_DEVICE_INFO *pbtdi,
  const GUID                  *pGuidService,
  DWORD                       dwServiceFlags
);

2 实现

// 申请串口服务
		const BLUETOOTH_DEVICE_INFO *bdi = NULL;
		bdi = &remote_bluetooth[i];
		const GUID *guid = NULL;
		guid = &SerialPortServiceClass_UUID;
		BluetoothSetServiceState(hRadio, bdi, guid, BLUETOOTH_SERVICE_ENABLE);

一个问题

蓝牙虚拟串口是建立了,但是怎么能够知道哪个串口是蓝牙的?我这里用的比较笨的办法:
1.申请蓝牙虚拟串口前扫描一次windows的所有串口,并保存串口名字
2.申请蓝牙虚拟串口后再扫描一次windows的所有串口,与之前扫描结果对比,多出来的就是这个蓝牙串口
要是那个小伙伴有其他方法,麻烦指教一下,请评论或私信,谢谢

3 扫描windows蓝牙并返回串口列表

// 获取windows所有串口列表
int scanComServer(string comlist[]) {
	HKEY hKey;
	LPCTSTR data_Set = _T("HARDWARE\\DEVICEMAP\\SERIALCOMM\\");
	LONG ret0 = RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKey);
	if (ret0 != ERROR_SUCCESS)
	{
		wcout << (L"错误:无法打开有关的hKEY");
		return -1;
	}

	DWORD dwIndex = 0;
	int count = 0;
	while (1)
	{
		LONG Status;
		CHAR Name[256] = { 0 };
		UCHAR szPortName[80] = { 0 };
		DWORD dwName;
		DWORD dwSizeofPortName;
		DWORD Type;
		dwName = sizeof(Name);
		dwSizeofPortName = sizeof(szPortName);
		Status = RegEnumValue(hKey, dwIndex++, (LPWSTR)Name, &dwName, NULL, &Type,
			szPortName, &dwSizeofPortName);

		if ((Status == ERROR_SUCCESS) || (Status == ERROR_MORE_DATA))
		{
			CString str;
			str.Format(L"%s", szPortName);
			comlist[count] = CT2A(str.GetBuffer());
			count++;
			//TRACE("\n-------%s", str);COM_SERIAL_PORT_LIST.AddString(str);    
			/*cout << comlist[count];*/
		}
		else
		{
			break;
		}
	}
	RegCloseKey(hKey);
	return 0;
};
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值