Windows端用于开发低功耗蓝牙项目的DLL(一)

  • 前言
  • 1 WCH_BLE_DLL概述
  • 2 开发流程和库函数详解
  • 2.1 开发前准备
  • 2.2 库函数介绍
  • 2.2.1 建立后台应用通讯连接
  • 2.2.2 断开后台应用通讯连接
  • 2.2.3 扫描附近所有BLE设备
  • 2.2.4 停止扫描BLE设备
  • 2.2.5 传递BLE设备信息
  • 2.2.6 连接BLE设备
  • 2.2.7 断开BLE设备
  • 2.2.8 获取BLE设备的服务列表
  • 2.2.9 获取指定服务的特征列表
  • 2.2.10 枚举指定特征所支持的功能
  • 2.2.11 读取特征值
  • 2.2.12 写入特征值
  • 2.2.13 开启Notify
  • 2.2.13 关闭Notify
  • 2.3 回调函数详解
  • 2.3.1 Notify_AppService
  • 2.3.2 Notify_DeviceWatcher
  • 2.3.3 Notify_ErrorStatus
  • 2.3.4 Notify_ReadBytes
  • 2.4 接口调用顺序介绍



各位读者好,新版本的系统平台低功耗蓝牙开发接口库已发布,提供BLE设备的枚举、扫描、连接和检测,蓝牙服务和特征的枚举、读写、订阅,控制器版本查询等API函数。支持Windows、Android等系统。链接:http://www.wch.cn/downloads/WCHBleLib_MultiOS_ZIP.html

前言

在Win10平台上开发BLE,微软提供了UWP的例程。考虑到为了方便在其他桌面应用程序中也可以开发BLE,因此我们封装了一个包含BLE操作的Win32开发库,配合安装的UWP后台应用,可实现在其他桌面应用程序,如MFC,Qt中进行BLE开发。

1 WCH_BLE_DLL概述

WCH_BLE_DLL是一款用于在Win10系统下进行BLE开发的开发库,可实现BLE设备扫描,连接,特征值的读写等功能。调用该库前,需要安装配套的WCH_DLL_BackgroundTask后台应用。
WCH_B LE_DLL开发库和例程下载

2 开发流程和库函数详解

2.1 开发前准备

打开安装包中的WCH_DLL_BackgroundTask文件夹,双击其中的Run.bat脚本,待安装完成后,即可通过调用WCH_BLE_DLL.dll进行BLE相关开发。

2.2 库函数介绍

2.2.1 建立后台应用通讯连接
void WINAPI WCHBLEConnectToService(Notify_AppService fun, Notify_ErrorStatus errorFun, Notify_ReadBytes readFun);

该函数通过异步方式实现桌面应用程序与后台任务之间的连接,连接结果通过Notify_AppService和Notify_ErrorStatus两回调函数返回。

2.2.2 断开后台应用通讯连接
void WINAPI WCHBLECloseConnection();

该函数作用,断开后台通讯。

2.2.3 扫描附近所有BLE设备
void WINAPI WCHBLEStartScanBLEDevices(Notify_DeviceWatcher fun);

该函数调用后,会扫描附近所有BLE设备并通过Notify_DeviceWatcher返回扫描到的设备名称和mac地址。

2.2.4 停止扫描BLE设备
void WINAPI WCHBLEStopScanBLEDevices(Notify_DeviceWatcher fun);

该函数作用是停止扫描附近所有BLE设备并释放资源。

2.2.5 传递BLE设备信息
void WINAPI WCHBLESendBLEDeviceID(PCHAR deviceID, Notify_AppService fun, Notify_ErrorStatus errorFun);

该函数将扫描到的指定BLE设备信息通过参数deviceID传递给后台。

2.2.6 连接BLE设备
void WINAPI WCHBLECreateConnection(Notify_AppService fun, Notify_ErrorStatus errorFun);

连接指定mac地址的BLE设备,通过回调函数查看连接结果以及可能出现的异常信息。

2.2.7 断开BLE设备
void WINAPI WCHBLEReleaseResource(Notify_AppService fun, Notify_ErrorStatus errorFun);

断开已连接的BLE设备,并释放资源。

2.2.8 获取BLE设备的服务列表
void WINAPI WCHBLEGetServicesEnum(Notify_AppService fun, Notify_ErrorStatus errorFun)

获取BLE设备的所有服务,通过回调函数返回服务的字符串信息。

2.2.9 获取指定服务的特征列表
void WINAPI WCHBLEGetCharacteristicEnum(INT nService, Notify_AppService fun, Notify_ErrorStatus errorFun);

nService参数为选定服务的索引值,调用该函数后,可通过回调函数返回该服务的特征字符串信息。

2.2.10 枚举指定特征所支持的功能
void WINAPI WCHBLEGetCharacteristicAction(INT nCharacteristic, Notify_AppService fun, Notify_ErrorStatus errorFun);

nCharacteristic参数为选定特征的索引值,调用该函数后,可通过回调函数返回该特征支持的功能,表示功能的为一个int型变量,范围0-7,具体定义见下表:

返回值\功能



订阅

0

×

×

×

1


×

×

2

×


×

3



×

4

×

×


5


×


6

×



7




2.2.11 读取特征值
void WINAPI WCHBLEGetReadBuffer(Notify_ReadBytes fun, Notify_ErrorStatus errorFun);

特征支持读取功能时,可调用该函数,异步读取特征值,结果通过回调函数参数返回读取的16进制和字节长度。

2.2.12 写入特征值
void WINAPI WCHBLEWriteBuffer(PCHAR bufferStr, Notify_AppService fun, Notify_ErrorStatus errorFun);

特征支持写入功能时,可调用该函数,异步写入特征值,bufferStr参数为待写入的十六进制字符串。

2.2.13 开启Notify
void WINAPI WCHBLEStartMonitoring(Notify_AppService fun, Notify_ErrorStatus errorFun);

开启Notify通知,当特征值每次改变时可收到通知,通过回调函数可读取特征值。

2.2.13 关闭Notify
void WINAPI WCHBLEStopMonitoring(Notify_AppService fun, Notify_ErrorStatus errorFun);

关闭Notify通知。

2.3 回调函数详解

2.3.1 Notify_AppService
//
// 摘要:
//     回调,通知应用上层BLE操作已成功和相关信息
//
// 参数:
//   uAction_Service:
//     BLE操作的序号:
//	   0:建立通讯	
//	   1:建立蓝牙设备连接
//	   2:获取服务
//	   3:获取特征
//	   4:查看特征支持的操作
//	   5:无
//	   6:写操作
//	   7:打开订阅
//	   8:关闭订阅
//	   9:释放资源
//	   10:传输设备ID值
//	   11:无
//	   12:关闭后台通讯
//   tmpStr:
//     具体操作完成时的返回值
//   iExtraInfo:
//     1.指定特征值所具有的操作序号(Read, Write, Subscribe):0-7。仅用在枚举特征值功能时
//
// 返回结果:
//     无。
typedef void (CALLBACK* Notify_AppService)(ULONG uAction_Service, PCHAR tmpStr, INT iExtraInfo);
2.3.2 Notify_DeviceWatcher
//
// 摘要:
//     回调,通知应用上层DeviceWatcher的操作结果
//
// 参数:
//   deviceName:
//     枚举到的设备名称。
//   deviceID:
//     枚举到的设备ID。
//
// 返回结果:
//     无。
typedef void (CALLBACK* Notify_DeviceWatcher)(PCHAR deviceName, PCHAR deviceID);
2.3.3 Notify_ErrorStatus
//
// 摘要:
//     回调,通知应用上层AppService出现异常的值
//     包括了:BLE操作的异常;桌面应用和后台任务通讯间的异常
//
// 参数:
//   errorString:
//     异常的属性。
//
// 返回结果:
//     无。
typedef void (CALLBACK* Notify_ErrorStatus)(PCHAR errorString);
2.3.4 Notify_ReadBytes
//
// 摘要:
//     回调,返回读取的字节
//
// 参数:
//   readBytes:
//     读取的字节。
//   iLength:
//     字节数。
//
// 返回结果:
//     无。
typedef void (CALLBACK* Notify_ReadBytes)(PUCHAR readBytes, INT iLength);

2.4 接口调用顺序介绍

1.服务通讯 WCHBLEConnectToService
2.扫描设备 WCHBLEStartScanBLEDevices
3.结束扫描 WCHBLEStopScanBLEDevices
4.选择BLE设备 WCHBLESendBLEDeviceID
5.连接BLE设备 WCHBLECreateConnection
6.获取服务列表 WCHBLEGetServicesEnum
7.获取特征列表 WCHBLEGetCharacteristicEnum
8.获取特征支持的功能列表 WCHBLEGetCharacteristicAction
9.读取特征值 WCHBLEGetReadBuffer
10.写入特征值 WCHBLEWriteBuffer
11.开启ValueChanged事件订阅 WCHBLEStartMonitoring
12.关闭ValueChanged事件订阅 WCHBLEStopMonitoring
13.断开BLE设备连接 WCHBLEReleaseResource
14.断开服务连接 WCHBLECloseConnection