【WCH蓝牙系列芯片】-基于CH592开发板——HID_Keyboard中添加读、写、通知的服务属性
-------------------------------------------------------------------------------------------------------------------------------------
在这里讲解一下,在HID程序中如何添加的流程。
第一、先移植user_gap_service.c和user_gap_service.h文件
第二、在hidkbd.c文件中,先添加头文件#include "user_gap_service.h"
然后添加声明函数
ble_instrument_appChangeCB————————APP 状态变化回调函数
ble_instrument_appChar4Notify————————蓝牙特征值 4(Characteristic 4)向 APP 发送通知(Notify)的函数
peripheralConnItem_t peripheralConnList——————————定义一个BLE 从设备连接信息结构体变量,用于存储与 APP 的连接状态数据。
uint8_t peripheralMTU = ATT_MTU_SIZE——————————定义并初始化当前蓝牙连接的 MTU(最大传输单元)值,
performPeriodicTask——————————声明一个周期性任务执行函数,用于定时处理设备与 APP 的交互逻辑
然后再添加蓝牙 GATT服务中 “回调函数结构体” ,用于将 “特征值变化事件” 与具体的处理函数绑定一起
第三、在HidEmu_Init初始化函数中,添加自定义UUID的服务
然后在通过定义特征值数组、调用ble_instrument_app_SetParameter
,为服务下的 4 个特征值设置初始值 ——APP 首次连接时读取特征值,拿到的就是这些初始数据。
将应用程序的回调函数注册到 ble_instrument_app_SimpleProfileCBs
第四、在成功建立连接之后,
添加peripheralConnList.connHandle = event->connectionHandle;
:将连接句柄保存到自定义的 “从设备连接信息结构体” 中,这样就可以通过让HID设备能通过peripheralConnList
快速获取当前连接句柄,这样比如发送通知前,检查是否存在有效连接。
添加peripheralMTU = ATT_MTU_SIZE,进行初始化MTU值,然后再启动一个TMOS任务,操作一个1秒的定时发送数据任务
第五、添加performPeriodicTask 函数,用于操作CHA4的notify数据的发送。然后再注册一个TMOS事件任务中,去定时执行这个performPeriodicTask 函数。
第六、添加蓝牙设备于APP(主机)之间实现双向通信的函数
-
ble_instrument_appChar4Notify
:负责蓝牙设备(从机)主动向 APP(主机) 发送数据(通过 BLE 的 Notify 机制); -
ble_instrument_appChangeCB
:负责APP(主机) 修改蓝牙设备(从机)特征值后,设备的响应处理(回调函数)。
这样就完成整个移植的过程。通过BLE调试助手进行连接设备,进行观察调试。
在连接上HID Keybroad的设备之后,会多出来一个128bit的UUID服务,里面有读属性,写属性和通知属性(notify)
然后,打开接收通知数据的按键,这样主机就能接收到,从机设备中定时发送的notify的数据,
然后通过BLE调试软件,通过Write写数据给设备从机,并通过打印来观察发送的数据