返回> 网站首页 

[原创]BlueSoleil SDK API - 蓝牙扫描已打开的串口服务

yoours2011-09-17 09:17:42 阅读 1350

简介一边听听音乐,一边写写文章。

        基于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条评论