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

各位读者好,新版本的系统平台低功耗蓝牙开发接口库已发布,提供BLE设备的枚举、扫描、连接和检测,蓝牙服务和特征的枚举、读写、订阅,控制器版本查询等API函数。支持Windows、Android等系统。链接WCHBleLib_MultiOS.ZIP - 南京沁恒微电子股份有限公司

前言

在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 x x x
1 x x
2 x x
3 x
4 x x
5 x
6 x
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

posted @ 2022-07-25 10:33  WCH_SoftGroup  阅读(1534)  评论(0编辑  收藏  举报