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)给到执行机去执行对应的动作。
下面是分解动作: 这个buttonxml文件主要理解他的构成,每个标签里的表示一个按键事件的识别单元,里面固定了该事件的触发条件,需要自定义的按键事件时也可以修改这些参数去满足需求 但处理的不是在这个函数里面,这里只是把这个动作告诉已注册的handler,task list会去群发这个动作,但一般只有一个handler会做处理,简单的方法就是直接搜索这个动作(ui_input_t)在哪里处理就好了。还有另一个是在Ui_RegisterUiInputsInterceptor里注册的, 这里面做了替换,把之前的ui_SendUiInputToConsumerGroupTaskList换成peerUi_Interceptor_FuncPtr去处理,但里面把ui_SendUiInputToConsumerGroupTaskList保存了下来,在peerUi_Interceptor_FuncPtr函数中还可以看到,他最后还是调用了 也就是说,在有动作(ui_input_t)要执行时,peerUi_Interceptor_FuncPtr会先去执行,再到ui_SendUiInputToConsumerGroupTaskList。这两个函数是不一样的,peerUi_Interceptor_FuncPtr这个函数是发到peer,让peer去执行,peer 收到后会用他的ui_SendUiInputToConsumerGroupTaskList去实现功能,ui_SendUiInputToConsumerGroupTaskList是本地执行。所以如果想一边操作两边同时响应可以在peerUi_Interceptor_FuncPtr中加入想要的功能。 来源:https://www.wpgdadatong.com/cn/blog/detail?BID=B1022 |
GMT+8, 2025-5-1 08:19 , Processed in 0.551890 second(s), 17 queries , Gzip On, MemCached On.
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.