返回> 网站首页
[原创]BlueSoleil SDK API - 蓝牙扫描已打开的串口服务
yoours2011-09-17 09:17:42
简介一边听听音乐,一边写写文章。
基于BlueSoleil SDK API的蓝牙开发,需要先安装BlueSoleil软件。然后使用其提供的SDK进行PC机的蓝牙开发,SDK包含以下几个文件:
Btsdk_API.h
Btsdk_Macro.h
Btsdk_Stru.h
Btsdk_ui.h
BsSDK.lib
根据sdk提供的例子,可以实现蓝牙设备搜索,配对,已经相应的服务连接。代码详见官方提供的例子。
在建立了串口服务连接后,程序重新打开后如何识别已打开的串口服务?
例子中关闭串口代码如下
if (s_currSPPConnHdl)
{
BTUINT8 comNum = 0;
comNum = Btsdk_GetClientPort(s_currSPPConnHdl);
Btsdk_Disconnect(s_currSPPConnHdl);
s_currSPPConnHdl = BTSDK_INVALID_HANDLE;
Btsdk_DeinitCommObj(comNum);
Btsdk_PlugOutVComm(s_ComSerialNum, COMM_SET_RECORD);
}
s_currSPPConnHdl为串口服务句柄,在重新打开程序后,该句柄为NULL。这时就要使用服务句柄枚举,并连接才可以继续使用。程序如下:
// 枚举所有已连接的服务,然后断开串口服务
BTINT32 ulRet = BTSDK_FALSE;
BtSdkConnectionPropertyStru pproperty;
BTUINT8 comNum = 0;
BTUINT32 comIndex = 0;
// 首先开始枚举连接
BTSDKHANDLE hEnumConn = Btsdk_StartEnumConnection();
if (hEnumConn != BTSDK_INVALID_HANDLE)
{
// 枚举所有已连接的串口服务
while (Btsdk_EnumConnection(hEnumConn, &pproperty) != BTSDK_INVALID_HANDLE)
{
// 找到服务,用蓝牙串口服务连接*** 重要的是第三个参数为0,可以连接现有的服务,不会重新创建。
ulRet = Btsdk_ConnectEx(pproperty.device_handle, BTSDK_CLS_SERIAL_PORT, 0, &s_currSPPConnHdl);
if (ulRet == BTSDK_ER_CONNECTION_EXIST)
{
// 找到已连接的串口服务
// 返回串口服务已打开的串口号
comNum = Btsdk_GetClientPort(s_currSPPConnHdl);
// 关闭服务
Btsdk_Disconnect(s_currSPPConnHdl);
s_currSPPConnHdl = BTSDK_INVALID_HANDLE;
// 关闭创建的虚拟串口
Btsdk_DeinitCommObj(comNum);
// 根据串口号获得该串口号索引
comIndex = Btsdk_CommNumToSerialNum(comNum);
// 根据串口索引,删除生成的虚拟串口
Btsdk_PlugOutVComm(comIndex, COMM_SET_RECORD);
}
}
// 结束枚举
Btsdk_EndEnumConnection(hEnumConn);
}
在不知道如何处理时,多参考 bluesoleil_SDK_userguide.pdf 文档。文档中的API函数还是挺多的
文章评论
1350人参与,0条评论