找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

earbud项目实现按键多击的方法

2020-6-13 16:10| 发布者: 大大通| 查看: 5543| 评论: 1|来自: 大大通

摘要: Biu~小伙伴们大家好,又到了不知什么时候会更新但一更新又带来一大堆看似能懂但不知道你懂不懂的东西的《Biu~笔记》, 续上回分解,有小伙伴在评论留言想知道怎么获取开发资料。对于初学者来说,我能理解你的感受。 ...

        Biu~小伙伴们大家好,又到了不知什么时候会更新但一更新又带来一大堆看似能懂但不知道你懂不懂的东西的《Biu~笔记》, 续上回分解,有小伙伴在评论留言想知道怎么获取开发资料。

对于初学者来说,我能理解你的感受。但也想在这说清楚一下,高通开发资料不是开放的,需要交一定的费用才能得到开发者权限,这个开发过高通平台的人应该都清楚,账号有权限和没有权限能看到的东西差别相当大。所以这部分教程也不能在公众平台放出 ,望见谅,但如果有交入场费的我们的客户,可以直接找到我们,我们一对一,手把手的教学,包你满意

        下面我们圆规正转,看看我们今天要讲的内容-- --自定义多击按键输入功能。像上期说的,新版本ADK这个框架都修改了,那么按键这个功能也逃不过魔爪,在使用上和改动上都难以下手,这个多击功能,也是最近有好多客户问我该怎么做。最简单的方法就是数single click,但小编这次带来的不是这个,而是在底层加入多击的处理。最后实现的效果是让开发者,像以前一样在xml里面定义按键事件,在earbud_ui_config.c中加入按键事件处理即可。并且这个多久次数可以自定义,从1~n都可以定义,满足各ui需求 。下面我们说说实现的细节。

在这个功能里小编修改了五个文件,三个lib里的源代码:input_event_manager.c,input_event_manager.h,input_event_manager_private.h;两个脚本文件,在\earbud\adk\tools\buttonparsexml里:ButtonParseXML.py,ButtonParseXml.xsd。而他们的关系就如下图所示

为了更容易去配置多击按键,这里就需要修改编译脚本和xml模板,使自定义的设置数据合理化。ButtonParseXml.xsd是buttonxml的模板定义,在这里需要进入一个新的buttonEvent -- REPEAT_CLICK,用来区分按键事件触发类型

再加多一个标签 -- repeat_click,表示需要多少次点击才能触发事件

ButtonParseXML.py是将xml的数据输出成.c和.h文件的脚本,里面加上repeat_click标签的识别

在输出数组内容是加入repeat_click标签的内容输出


修改x_button.buttonxml,加入想要的多击事件

最后编译会生成一个x_button.c的文件,里面有个数组default_message_group,就包含了xml里面的设置数据,这个数组也是后面程序识别要用到的

而在这里REPEAT_CLICK是不被系统认可的,因为这只是脚本按配置来输出,还没有经过声明的。所以在input_event_manager.h里面对这个按键事件动作声明一下,并且这个数组的类型比原来的类型多了一个重复次数的参数,这也要在这个数组类型的声明里加进去

做完以上的操作之后再编译就不会提示错误了,剩下的就是要做这部分的处理。

        inputEventsChanged这个函数是处理按键变化的函数,首先他会遍历default_message_group这个数组,也就是前面说的buttonxml生成的数组,去对比哪一个事件的触发引脚和这次改变的引脚一样,如果找到了一样的,就会按照他的按键事件触发类型去触发相应的操作。在这里原本是没有REPEAT_CLICK按键事件触发类型,所以要加上这部分处理(WARNING:多击事件是仿写双击事件,多击过程也是超过双击的次数,代码没有对源代码删除,所以使用了多击之后,如果还保留双击就变成,每次多击都触发一次双击事件,不要再使用双击触发类型,用多击触发类型替代

在这处理函数里面用记录按键变化次数的方式,记录按下次数,并设置检查超时为500ms


但因为会遍历这个配置表,有多个多击事件时,会在一次按键变化后多次进入REPEAT_CLICK的处理,导致计数不准确,所这里要加入个变量去记录是否已经计数

如果超时没有识别到按键再次按下,就会根据default_message_group每个事件的多击数和已检测的多击数对比,如果一致就执行对应的按键事件

同时在input_event_manager_private.h里加入所需要的变量和消息申明即可

short_press:已短按的IO

long_press;  已长按的IO

repeated_times;   已记录的多击次数

has_counted;   已被计数

完成以上操作,底层处理的代码就加完了,下面举个食用栗子

在buttonmxl加入要定义的按键消息

在earbud_ui_config.c中加入消息的处理




完成!!!


来源:https://www.wpgdadatong.com/cn/blog/detail?BID=B1457
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

2

路过

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (2 人)

相关阅读

发表评论

最新评论

引用 灵境 2020-6-16 12:03
是按照这个方法怎么还是不行呢,还需要注意什么地方吗

查看全部评论(1)

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2024-4-18 13:03 , Processed in 0.088946 second(s), 17 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部