Biu~笔记:高通蓝牙ADK(1)-- UI 按键代码解析

       Biu~哈喽大家好,从这篇开始,Biu~笔记系列将带大家学习探讨新的ADK软件,版本是~我也不知道现在ADK怎么命名了,暂且叫ADK吧。同时大大通也新添了视频功能,小编也不定期的为大家带来视频讲解,在视频讲解中会讲的比较详细(忽略我蹩脚的说辞看字幕就好)

     下面我们圆规正转,看看我们今天要讲的内容-- --按键输入功能。在earbud_ui_config.c中可以看到earbud_ui_config_table数组,这个数组是配置按键事件的。

与以前的ADK的不同,这把按键事件(logical_input)、功能ID(ui_provider_id)、环境状态(ui_provider_context)和执行动作(ui_input)都放在一个表中(中文名是个人理解,不喜莫喷)。这个表会送到domains层注册,后面判断都是在domains层处理。这里想说说一个大致的处理过程,让大家有个初步认识,后面再深入探讨里面实现的原理。首先按键事件(logical_input)检测到一个按键已被触发识别,消息送到ui.c中处理,在这里他会遍历整个earbud_ui_config_table找到对应的按键事件(logical_input)。然后判断第二个条件——功能ID(ui_provider_id),这个相当于一个大类判断,如果机器在一开始没有注册就是直接放弃这类遍历。再到环境状态(ui_provider_context),这里相当于一个小类判断,判断当前是什么状态,最后把前面的判断都通过了之后,就把最后的参数按键事件(logical_input)给到执行机去执行对应的动作。

 

下面是分解动作:
1. 按键事件(logical_input):做过上一版的ADK(x)应该都了解这部分,这里的变量实际是在earbud层的1_button.buttonxml中定义的消息。类似还有多个按键的buttonxml文件,这里就不细说里面的差异了,大家一看就明白。

这个buttonxml文件主要理解他的构成,每个标签里的表示一个按键事件的识别单元,里面固定了该事件的触发条件,需要自定义的按键事件时也可以修改这些参数去满足需求

     ① 是被触发的消息,后续用到的消息
     ② 是被识别的按键,这个声明定义在pio.buttonxml里面。
      ③ 是按键识别类型,长按短按等,一共用6种类型
                   
      ④ 用于长按,当是HELD时,超过这个时间就发送;当是HELD_RELEASE时,超过这个时间就忽略这个消息。

 
2. 功能ID(ui_provider_id),这个参数是为了某个功能,通过这个ID在该功能里面(如A2dp,Hfp)获取状态机的状态,每个功能在初始化的时候都会用这个ID注册,并且会记录下回调函数,这个回调函数就是用来获取改功能状态机状态的。



3. 环境状态(ui_provider_context):在用功能ID(ui_provider_id)绑定的回调函数去获取到状态之后就和这个进行对比



4. 执行动作(ui_input):环境状态(ui_provider_context)满足条件后就会把这个执行动作放到处理机里做执行,这里面有个函数指针inject_ui_input_funcptr这个指针在初始化的时候先后被赋予了两个函数地址,一个是ui_SendUiInputToConsumerGroupTaskList,

但处理的不是在这个函数里面,这里只是把这个动作告诉已注册的handler,task list会去群发这个动作,但一般只有一个handler会做处理,简单的方法就是直接搜索这个动作(ui_input_t)在哪里处理就好了。还有另一个是在Ui_RegisterUiInputsInterceptor里注册的,



这里面做了替换,把之前的ui_SendUiInputToConsumerGroupTaskList换成peerUi_Interceptor_FuncPtr去处理,但里面把ui_SendUiInputToConsumerGroupTaskList保存了下来,在peerUi_Interceptor_FuncPtr函数中还可以看到,他最后还是调用了
ui_SendUiInputToConsumerGroupTaskList,

也就是说,在有动作(ui_input_t)要执行时,peerUi_Interceptor_FuncPtr会先去执行,再到ui_SendUiInputToConsumerGroupTaskList。这两个函数是不一样的,peerUi_Interceptor_FuncPtr这个函数是发到peer,让peer去执行,peer 收到后会用他的ui_SendUiInputToConsumerGroupTaskList去实现功能,ui_SendUiInputToConsumerGroupTaskList是本地执行。所以如果想一边操作两边同时响应可以在peerUi_Interceptor_FuncPtr中加入想要的功能。
      以上是本期博文的全部内容,如有疑问请在博文下方评论留言,或者有什么想了解的都可以留言,我会挑选一些做后面几期的博文,谢谢大家,我们下期再见。
                                                                                                

 

如果你嫌命长又不怕啰嗦,可以点击下方视频观看不正经的讲解↓↓↓

                    

如果有什么建议也可以评论留言,我斟酌过后会给你好看的。

你就等着瞧下一篇吧。





多看文档,多上官网

多看文档,多上官网

多看文档,多上官网

使用 Chrome最新版本觀看視頻可能發錯誤,請由此連結觀看
https://v.qq.com/x/page/d09425vpyja.html?pcsharecode=gR8RqfMJ&sf%EF%BC%89




 

相关视频

Biu~笔记:高通蓝牙ADK(1)-- UI 按键代码解析

全新ADK,全新架构,带来观众从上到下去了解新按键UI功能使用

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论

子非鱼

子非鱼

28 天前
两个按键同时按下怎么做呢?
星辰大海123

星辰大海123

2022年7月6日
视频讲解的挺好,生动有趣
发芽韭菜

发芽韭菜

2021年3月9日
哎,看了一遍,逻辑上完全不懂,涉及的东西太多了
Biu~

Biu~

2020年6月24日
长按开关机即将上线
chris

chris

2020年6月22日
Biu,把长按关机做下,参考下有没什么好招
林工

林工

2020年4月13日
很棒,谢谢分享
Candy

Candy

2020年4月6日
好棒!受益匪浅
Tom

Tom

2020年4月6日
其实初学者一开始最关心的是开发板开发环境资料下载官方网站等等。。。。。。
许许许

许许许

2020年4月3日
Biu~biu biu~很棒的讲解,视频我收了