当前位置: 首页 > news >正文

CH579 CH573 CH582 CH592 蓝牙主机(Central)实例应用讲解(二)——Central消息事件机制初探

首先声明一点,本文中所提到的消息事件机制都是本团队在实际工作中总结出来的,错误可能不可避免,如有不对的地方欢迎指正。不过相信对很多刚刚接触蓝牙的朋友还是能提供一些帮助的。

一、CH582芯片架构与BLE Central特性

一)、硬件基础

基于RISC-V内核,内置BLE 5.3双模射频

独立消息队列控制器(Message RAM)实现低延迟事件分发

硬件级AES-128加密加速,保障GATT事件安全

二)、协议栈定制优化

采用沁恒自研BLE协议栈(CH58xBLE_Lib)

Central模式下支持8个并发连接(每个连接独立事件通道)

动态内存分配策略减少事件丢失率(实测<0.1%)

二、消息事件处理流程详解

一)、事件分类与优先级

| 事件类型            | 触发源               | 处理优先级 |
|----------------------|----------------------|-----------------|
| 射频中断事件    | RF硬件中断       | 最高(0)       |
| HCI命令响应     | 主机协议栈        | 高(1)           |
| GATT操作回调  | 从机特征值变更| 中(2)           |
| 定时器事件        | 系统看门狗       | 低(3)           |

二)、关键API与回调机制

事件处理:通过Central_ProcessEvent处理包括Timers,messages以及用户自定义事件。

事件回调:centralEventCB

消息分发:central_ProcessTMOSMsg

本文只对Central的相关消息事件进行分析,对定时器事件、HAL层事件不作解释。

三、初始化及扫描从设备

 HAL层及系统初始化完成后,会调用Central_Init(),这段代码首先就是注册事件处理函数,以及一些必要的初始化,最后启动START_DEVICE_EVT事件,也就是启动Central。完成这些操作后,会触发事件回调函数中的GAP_DEVICE_INIT_DONE_EVENT。

void Central_Init()
{centralTaskId = TMOS_ProcessEventRegister(Central_ProcessEvent);// Setup GAPGAP_SetParamValue(TGAP_DISC_SCAN, DEFAULT_SCAN_DURATION);GAP_SetParamValue(TGAP_CONN_EST_INT_MIN, DEFAULT_MIN_CONNECTION_INTERVAL);GAP_SetParamValue(TGAP_CONN_EST_INT_MAX, DEFAULT_MAX_CONNECTION_INTERVAL);GAP_SetParamValue(TGAP_CONN_EST_SUPERV_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT);// Setup the GAP Bond Manager{uint32_t passkey = DEFAULT_PASSCODE;uint8_t  pairMode = DEFAULT_PAIRING_MODE;uint8_t  mitm = DEFAULT_MITM_MODE;uint8_t  ioCap = DEFAULT_IO_CAPABILITIES;uint8_t  bonding = DEFAULT_BONDING_MODE;GAPBondMgr_SetParameter(GAPBOND_CENT_DEFAULT_PASSCODE, sizeof(uint32_t), &passkey);GAPBondMgr_SetParameter(GAPBOND_CENT_PAIRING_MODE, sizeof(uint8_t), &pairMode);GAPBondMgr_SetParameter(GAPBOND_CENT_MITM_PROTECTION, sizeof(uint8_t), &mitm);GAPBondMgr_SetParameter(GAPBOND_CENT_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);GAPBondMgr_SetParameter(GAPBOND_CENT_BONDING_ENABLED, sizeof(uint8_t), &bonding);}// Initialize GATT ClientGATT_InitClient();// Register to receive incoming ATT Indications/NotificationsGATT_RegisterForInd(centralTaskId);// Setup a delayed profile startuptmos_set_event(centralTaskId, START_DEVICE_EVT);
}
    if(events & START_DEVICE_EVT){// Start the DeviceGAPRole_CentralStartDevice(centralTaskId, &centralBondCB, &centralRoleCB);return (events ^ START_DEVICE_EVT);}

 

在事件回调centralEventCB中,触发GAP_DEVICE_INIT_DONE_EVENT后,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/250118.html

相关文章:

  • Python学习笔记面向对象编程
  • 钉钉机器人-自定义卡片推送快速入门
  • keil一键烧录boot和app程序
  • jojojojojo
  • Hexo-butterfly友情链接页面优化
  • MySQL-DQL数据查询语句深度解析与实战指南
  • 保护地线与串扰-信号完整性分析
  • day 51 python打卡
  • Redis事务与驱动的学习(一)
  • Unity Demo-3DRaceCar详解
  • MiniCPM4端侧AI模型
  • final在java中的作用
  • 清理 Docker 容器日志文件方法
  • 图的遍历模板
  • 嵌入式PADS中生产资料导出操作与实现
  • Python训练打卡Day50
  • C++包管理器vcpkg的使用
  • 【Erdas实验教程】021:遥感图像辐射增强( 查找表拉伸)
  • 设计模式-创建型模式(详解)
  • 车载功能框架 --- 整车安全策略
  • 贪心算法经典问题
  • 【LoRA】怎么指定LoRAConfig的target_modules
  • 自动化立体仓库堆垛机控制系统STEP7 FC1功能块 读取位置值SSI接口
  • k8s使用私有harbor镜像源
  • 2025年生命科学突破奖: GLP-1 激素机制及应用,多发性硬化症(MS)致病机制的新发现
  • 暑期车辆违停治理:视觉算法的实践路径
  • 本地 MySQL 环境连接问题排查与解决笔记
  • 一起来入门深度学习知识体系
  • 卷积神经网络的参数量及尺度变化计算
  • 【文献阅读】5%>100%: 打破视觉识别任务的完全微调的性能束缚