因为公司一些合作原因,暂时没能拿到板子调试验证,所以只能看代码。而BES蓝牙SDK开发指南.pdf里面只有告诉我们配置,没告诉我们怎么跑的,所以继续看了下流程。 1、灯的API设置接口: P.S.LED灯整个流程是在APP线程里面的,API的接口最好在APP线程里面调用,跨线程最好用message或者mail通讯触发。 2、按键配置 在 tgt_hardware.c 中进行按键配置,包括按键名、GPIO 引脚号、IO 功能映射、IO 电压 在hal_gpiokey_open()中,把key_event_process()mail通讯事件发送的函数指针传给了key_detected_callback指针变量,后续封装为send_key_event接口出来供hal_key_debounce_handler()调用。 key IO 功能应用流程:(以app_bt_key,调用蓝牙功能为例,跨线程) 在app_bt_mail_send()中,发送按键跟要调度的事件,以及bt_update_key_event()以mail的通讯形式给到besbt线程。
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 电压配
置、上下拉配置。
流程:
main()—->app_init()—->app_status_indication_init()—->app_pwl_open()
在app_pwl_open()里面,对灯的IO口进行初始化,并且调用在 tgt_hardware.c 中 LED 灯的IO配置&cfg_hw_pinmux_pwl,开启定时器。
定时器的配置:
通过app_pwl_setup()和app_pwl_start()传入配置和开启。
基本上app_status_indication_set()也只是调用这两个接口。
apps.cpp 文件内进行按键事件注册,支持组合按键设计,app_key_handle_cfg[]。
配置、上下拉配置。
在 tgt_hardware.h 中配置按键数量,开机键为固定按键,无需再另行配置。
key IO 驱动流程:
main()—->app_init()—->app_key_open()—->hal_key_open()—->hal_gpiokey_open()
在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口进行扫描,判断按键的行为,如按下,释放,长按,短按,双击。
hal_gpiokey_open()中把key io的配置导入,并进行了初始化。
最终,hal_key_debounce_handler()触发的send_key_event函数,会把按键的事件通过mail,发送到app_key_handle_process(),触发到app_key_handle_cfg[]里面的功能函数。整一个驱动层到中间层的流程到处结束,以上流程在APP线程里面完成。
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()
besbt线程在 app_bt_mail_process()中接收到并触发调用bt_update_key_event()功能,给bt_key_handle()发送了bt_key.code和bt_key.event,并调用到相对的handle。
以上为按键中间层到应用层的流程。
P.S. 对于BesbtThread里面bt_key_handle()跟app_bt_mail_process()的运行流程,参照我之前的大架笔记。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算