文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

鸿蒙实现S1,S2,User三个物理按键的独立事件-下(DTButton-V0.0.3)

2024-12-03 16:38

关注

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/

 在上一篇帖子《实现S1,S2,User三个物理按键的独立事件-上(解决思路分析)》中,通过读取 HI_ADC_CHANNEL_2 上的 ADC 值成功区分了 S1, S2, User 这 3 个物理按键。


上图中的打印输出是分别按下 User, S1, S2 的效果,这看起来完全符合了我们区分按键的需求,但是。。。

但是什么呢?有什么问题吗?

我想说的是,但是问题非常明显:这三个键中的任意一个被按下都会多次触发按键事件(上图的实验通过打印输出响应按键事件)。因此,仅仅区分 S1, S2, User 还不够,还不能满足实际开发的需要。所以,必须进一步的完善,使得每次按下按键只触发一次事件。

看到这里,相信大家想到了之前开源的按键通用框架 DTButton !在 V0.0.2 版中已经可以区分并触发各种 GPIO 按键事件,却唯独区分不了 S1, S2, User。然而,现在已经有了 S1, S2, User 的区分方案,那么将这个方案集成到 DTButton 框架不就完美了吗??!!

Ok!说干就干!

接下来要做的工作就是:

  1. 将 GetSSU() 集成到框架,使得框架支持 S1, S2, User 的三种事件(Pressed, LongPressed, Released)
  2. 不改变框架的对外接口(不改变框架调用方式,不增加新接口函数)
  3. 不影响框架 V0.0.2 版本的原有功能

要做好上述 3 个工作,就需要再回顾一下 DTButton 框架的核心设计:

 

 GPIO 按键在中断服务程序中标记事件的发生,之后在事件处理线程中通过标记调用事件回调函数(仅一次)!

注意:触发事件后需要立即清除事件标记,防止多次调用回调函数。

所以,最简单的集成方式就是:当 S1, S2, User 中有键按下时进行事件标记,之后再通过事件标记调用相应回调函数(返回后清除事件标记)。

流程如下:


接下来要考虑的问题是:如何构造 S1, S2, User 的按下事件和释放事件?

要解决这个问题,可以参考一般 GPIO 按键的事件触发方式:上升沿触发和下降沿触发。然而,相信你也意识到了,S1, S2, User 是通过检测 ADC 值来判断区分的,无法像 GPIO 按键那样直接准确的捕获上升沿和下降沿。怎么办呢???直接不行,可以间接:通过模拟上升沿和下降沿构造释放事件和按下事件。

具体方法如下:


在代码层面可以用变量 preKey 记录上一次通过 GetSSU() 获得的按键状态,并与当前调用 GetSSU() 获得的按键状态进行比较,比较结果即可判断是否构造按键事件。

 有了以上分析就可以动手写出下面的代码了!


 之后,整个框架以统一的方式处理按键事件,不管是 S1, S2, User 还是 GPIO 按键,但凡触发了事件都会在 EventHandler() 得到处理。


到此,按键通用框架 V0.0.3 版的设计就完成了!具体代码实现已开源(文末附件下载),开箱即用。

使用示例如下:


一样的接口,一样的方式,一样的体验,多出来的仅是对 S1, S2, User 三个物理按键的区分支持。

Enjoy It!

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/

 

来源:鸿蒙社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯