BES2300 代码 灯 按键 笔记

因为公司一些合作原因,暂时没能拿到板子调试验证,所以只能看代码。而BES蓝牙SDK开发指南.pdf里面只有告诉我们配置,没告诉我们怎么跑的,所以继续看了下流程。

1、灯的API设置接口:
BES2300 代码 灯 按键 笔记_第1张图片
LED 的控制在 app_status_ind.c 文件中的函数 app_status_indication_set() 内设置,根据上
层传送事件,来调用相应的 LED 控制,使用时调用 app_status_indication_set() 函数,并选择
相应入口参数即可,LED 灯控制逻辑目前不支持优先级控制,打断之后无法恢复上一个 LED
灯控制逻辑,蓝牙状态指示灯默认支持两组 LED 灯控制。
a. 一般来说,cfg0 为蓝灯,cfg1 为红灯
b. level 表示当前 LED 电平状态,为 0 或 1
c. time 表示当前 LED 电平状态操持时间,以 ms 为单位
d. part 表示一次操作,一亮一闪为两次操作
e. parttotal 表示操作总次数
f. startlevel 表示初始电平
g. periodic 表示是否需要对以上操作进行周期性操作,若状态不变,则无限循环
h. app_pwl_setup 和 app_pwl_start 配套使用,把 LED 灯操作真正写进配置,并生效
在 tgt_hardware.c 中进行 LED 灯的配置,包括 GPIO 引脚号、IO 功能映射、IO 电压配
置、上下拉配置。

在这里插入图片描述
BES2300 代码 灯 按键 笔记_第2张图片
流程:
main()---->app_init()---->app_status_indication_init()---->app_pwl_open()
BES2300 代码 灯 按键 笔记_第3张图片
在app_pwl_open()里面,对灯的IO口进行初始化,并且调用在 tgt_hardware.c 中 LED 灯的IO配置&cfg_hw_pinmux_pwl,开启定时器。
定时器的配置:
在这里插入图片描述
通过app_pwl_setup()和app_pwl_start()传入配置和开启。
BES2300 代码 灯 按键 笔记_第4张图片
基本上app_status_indication_set()也只是调用这两个接口。

P.S.LED灯整个流程是在APP线程里面的,API的接口最好在APP线程里面调用,跨线程最好用message或者mail通讯触发。

2、按键配置
apps.cpp 文件内进行按键事件注册,支持组合按键设计,app_key_handle_cfg[]。
BES2300 代码 灯 按键 笔记_第5张图片

在 tgt_hardware.c 中进行按键配置,包括按键名、GPIO 引脚号、IO 功能映射、IO 电压
配置、上下拉配置。
BES2300 代码 灯 按键 笔记_第6张图片
在 tgt_hardware.h 中配置按键数量,开机键为固定按键,无需再另行配置。
BES2300 代码 灯 按键 笔记_第7张图片
key IO 驱动流程:
main()---->app_init()---->app_key_open()---->hal_key_open()---->hal_gpiokey_open()

BES2300 代码 灯 按键 笔记_第8张图片
在app_key_open()中,申请了一内存块,存放着key_list,后面按键对应事件为表扫描查询。并app_set_threadhandle(APP_MODUAL_KEY, app_key_handle_process);在APP线程loop里面添加了app_key_handle_process事件触发。然后,打开hal_gpiokey_open()驱动初始化,最后,开启硬件定时器,调用回调函数hal_key_debounce_handler()对IO口进行扫描,判断按键的行为,如按下,释放,长按,短按,双击。
BES2300 代码 灯 按键 笔记_第9张图片
在这里插入图片描述
BES2300 代码 灯 按键 笔记_第10张图片
BES2300 代码 灯 按键 笔记_第11张图片

在hal_gpiokey_open()中,把key_event_process()mail通讯事件发送的函数指针传给了key_detected_callback指针变量,后续封装为send_key_event接口出来供hal_key_debounce_handler()调用。
BES2300 代码 灯 按键 笔记_第12张图片
hal_gpiokey_open()中把key io的配置导入,并进行了初始化。
最终,hal_key_debounce_handler()触发的send_key_event函数,会把按键的事件通过mail,发送到app_key_handle_process(),触发到app_key_handle_cfg[]里面的功能函数。整一个驱动层到中间层的流程到处结束,以上流程在APP线程里面完成。
BES2300 代码 灯 按键 笔记_第13张图片

key IO 功能应用流程:(以app_bt_key,调用蓝牙功能为例,跨线程)
app_bt_key()---->bt_key_send()---->app_bt_start_custom_function_in_bt_thread()---->app_bt_mail_send()----> app_bt_mail_process() ---->bt_key_handle()

BES2300 代码 灯 按键 笔记_第14张图片
BES2300 代码 灯 按键 笔记_第15张图片
BES2300 代码 灯 按键 笔记_第16张图片
BES2300 代码 灯 按键 笔记_第17张图片
BES2300 代码 灯 按键 笔记_第18张图片

在app_bt_mail_send()中,发送按键跟要调度的事件,以及bt_update_key_event()以mail的通讯形式给到besbt线程。
BES2300 代码 灯 按键 笔记_第19张图片
besbt线程在 app_bt_mail_process()中接收到并触发调用bt_update_key_event()功能,给bt_key_handle()发送了bt_key.code和bt_key.event,并调用到相对的handle。
BES2300 代码 灯 按键 笔记_第20张图片
以上为按键中间层到应用层的流程。
P.S. 对于BesbtThread里面bt_key_handle()跟app_bt_mail_process()的运行流程,参照我之前的大架笔记。

在这里插入图片描述
BES2300 代码 灯 按键 笔记_第21张图片

你可能感兴趣的:(BES2300 代码 灯 按键 笔记)