本发明涉及嵌入式linux设备技术领域,尤其涉及一种嵌入式linux设备的按键控制方法及装置。
背景技术:
linux内核有完善的input框架,可以基于usb-hid和adc采样实现按键功能,pc用的usb键盘一般是采用usb-hid实现,智能硬件上的按键一般采用adc实现。
linux内核会为用户空间提供按键事件的读取接口,对用户空间来说就是系统调用,应用程序通过系统调用可以获取到按键的键码和键值。
现有的一种技术就是通过系统调用获取到键码和键值后直接对按键进行解析然后做按键的响应动作。
但现有的这种技术存在很多缺点:首先,很难适应多按键,每个按键都有可能有多种响应动作的情况,对于很多智能硬件设备来说,交互简单易用是设计考量的重要因素。按键过多会增加使用的复杂性,按键过少很难把功能覆盖全,因此,按键的短按按下,短按松开,长按,长按松开都会被利用于响应按键交互的动作,现有的这种技术并不能解决很好的解决复杂的按键交互情况,而且代码的可读性差,按键扩展性差,需要增加、减少按键或者按键功能调整时需要花费很多时间,可维护性差;其次,不能很好地和linux线程配合起来使用,这样,当有些按键响应比较费时,就将会影响到下一个按键的及时响应。
如何针对嵌入式linux设备多按键和多种响应情况的问题,提供一套简单易用,代码可读性好,并且基于此方法实现的按键功能可使得用户有更好的体验是目前亟待解决的技术问题。
技术实现要素:
本发明的目的在于克服上述现有技术的不足,提供一种嵌入式linux设备的按键控制方法及装置,旨在解决现有技术针对嵌入式linux设备多按键和多种响应情况的问题,无法提供一套简单易用,代码可读性好,并且无法实现按键功能可使得用户有更好体验的技术问题。
本发明是这样实现的,一种嵌入式linux设备的按键控制方法,包括以下步骤:
判断是否有按键事件发生;
若有,则根据所述按键事件调用所述按键事件的键码和键值;
根据所述按键事件的键码和键值标记所述按键事件的行为选项;
根据所述按键事件的行为选项创建和启动按键线程;
将所述按键事件的行为选项传入所述按键线程内;
在所述按键线程内处理所述按键事件的行为。
进一步地,所述判断是否有按键事件发生的步骤之前还包括:
预先定义嵌入式linux设备的键码、键值及按键事件触发的行为选项;其中,所述键码包括收藏键、语音键、英语键、下一曲键、上一曲键、暂停播放键、微信键、童言童语键、故事键、儿歌键及国学键;所述键值包括短按按下、长按及松开;所述行为选项为所述键码和所述键值组合后的结果。
进一步地,所述短按按下用于停止上一个按键响应的动作,所述长按用于触发人机交互动作,所述松开用于响应当前按键的事件。
进一步地,所述根据所述按键事件的键码和键值标记所述按键事件的行为选项的步骤包括:
根据所述按键事件的键码和键值标记所述按键短按按下的行为选项;
或者,根据所述按键事件的键码和键值标记所述按键长按的行为选项;
或者,根据所述按键事件的键码和键值标记所述按键松开的行为选项。
进一步地,所述根据所述按键事件的行为选项创建和启动按键线程的步骤包括:
根据所述按键短按按下的行为选项创建和启动按键短按按下线程;
或者,根据所述按键长按的行为选项建和启动按键长按线程;
或者,根据所述松开的行为选项建和启动按键松开线程。
进一步地,所述将所述按键事件的行为选项传入所述按键线程内的步骤包括:
将所述按键短按按下的行为选项传入所述按键短按按下线程内;
或者,将所述按键长按的行为选项传入所述按键长按线程内;
或者,将所述按键松开的行为选项传入所述按键松开线程内。
进一步地,所述在所述按键线程内处理所述按键事件的行为的步骤包括:
在所述按键短按按下线程内处理所述按键短按按下的行为;
或者,在所述按键长按线程内处理所述按键长按的行为;
或者,在所述按键松开线程内处理所述按键松开的行为。
进一步地,所述判断是否有按键事件发生的步骤还包括:
若判断未有按键事件发生,则继续判断是否有按键事件发生的步骤。
相应地,本发明还提供了一种嵌入式linux设备的按键控制装置,包括:
预先定义模块,用于预先定义嵌入式linux设备的键码、键值及按键事件触发的行为选项;其中,所述键码包括收藏键、语音键、英语键、下一曲键、上一曲键、暂停播放键、微信键、童言童语键、故事键、儿歌键及国学键;所述键值包括短按按下、长按及松开;所述行为选项为所述键码和所述键值组合后的结果;
判断模块,用于判断是否有按键事件发生;
调用模块,用于在所述判断模块判断有按键事件发生时,则根据所述按键事件调用所述按键事件的键码和键值;
标记模块,用于根据所述按键事件的键码和键值标记所述按键事件的行为选项;
创建和启动模块,用于根据所述按键事件的行为选项创建和启动按键线程;
传入模块,用于将所述按键事件的行为选项传入所述按键线程内;
处理模块,用于在所述按键线程内处理所述按键事件的行为。
进一步地,所述标记模块包括:
第一标记单元,用于根据所述按键事件的键码和键值标记所述按键短按按下的行为选项;
第二标记单元,用于根据所述按键事件的键码和键值标记所述按键长按的行为选项;
第三标记单元,用于根据所述按键事件的键码和键值标记所述按键松开的行为选项;
所述创建和启动模块包括:
第一创建和启动单元,用于根据所述按键短按按下的行为选项创建和启动按键短按按下线程;
第二创建和启动单元,用于根据所述按键长按的行为选项建和启动按键长按线程;
第三创建和启动单元,用于根据所述松开的行为选项建和启动按键松开线程;
所述传入模块包括:
第一传入单元,用于将所述按键短按按下的行为选项传入所述按键短按按下线程内;
第二传入单元,用于将所述按键长按的行为选项传入所述按键长按线程内;
第三传入单元,用于将所述按键松开的行为选项传入所述按键松开线程内;
所述处理模块包括:
第一处理单元,用于在所述按键短按按下线程内处理所述按键短按按下的行为;
第二处理单元,用于在所述按键长按线程内处理所述按键长按的行为;
第三处理单元,用于在所述按键松开线程内处理所述按键松开的行为。
本发明的有益效果:本发明提供的嵌入式linux设备的按键控制方法,当判断有按键事件发生时,则根据按键事件调用按键事件的键码和键值;根据按键事件的键码和键值标记按键事件的行为选项;根据按键事件的行为选项创建和启动按键线程;将按键事件的行为选项传入按键线程内;在按键线程内处理按键事件的行为。本发明针对嵌入式linux设备多按键和多种响应情况的问题,提供了一套简单易用,代码可读性好,并且基于此方法实现的按键功能可使得用户有更好的体验,从而使得本发明具有以下优点:
第一,通过本发明实现的按键功能,代码可读性好,利于扩展和维护;
第二,通过本发明可以很好的处理多个按键和多种触发类型的按键交互设计,给产品带来更简洁的体验;
第三,短按按下用于停止上一个按键响应的动作,松开时响应当前按键的事件,长按时触发一些人机交互动作。通过这种方式可以提高按键的响应效率;
第四,行为选项标记和线程结合起来可以很好的解决快速多次按键时按键如何响应的问题。
附图说明
图1是本发明第一实施例提供的嵌入式linux设备的按键控制方法的流程示意图。
图2是本发明第二实施例提供的嵌入式linux设备的按键控制装置的结构示意图。
图3是图2提供的嵌入式linux设备的按键控制装置其标记模块的结构示意图。
图4是图2提供的嵌入式linux设备的按键控制装置其创建和启动模块的结构示意图。
图5是图2提供的嵌入式linux设备的按键控制装置其传入模块的结构示意图。
图6是图2提供的嵌入式linux设备的按键控制装置其处理模块的结构示意图。
具体实施方式
为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参阅图1,图1是本发明第一实施例提供的嵌入式linux设备的按键控制方法的流程示意图。如图1所示,该嵌入式linux设备的按键控制方法可以包括以下步骤。
s100、判断是否有按键事件发生;
作为一种可选的实施方式,所述判断是否有按键事件发生的步骤之前还包括:
预先定义嵌入式linux设备的键码、键值及按键事件触发的行为选项;其中,所述键码包括收藏键、语音键、英语键、下一曲键、上一曲键、暂停播放键、微信键、童言童语键、故事键、儿歌键及国学键;所述键值包括短按按下、长按及松开;所述行为选项为所述键码和所述键值组合后的结果。
需要说明的是,本发明实施例中,所述短按按下用于停止上一个按键响应的动作,所述长按用于触发人机交互动作,所述松开用于响应当前按键的事件,例如,长按触发语音交互开始,松开时语音交互结束。
需要说明的是,本发明实施例中,由于所述行为选项为所述键码和所述键值组合后的结果,这样,所述行为选项的个数为所述键码的个数和所述键值个数的乘积,例如,所述键码包括收藏键、语音键、英语键、下一曲键、上一曲键、暂停播放键、微信键、童言童语键、故事键、儿歌键及国学键共11个,所述键值包括短按按下、长按及松开共3,则所述行为选项的个数为33个。
需要说明的是,本发明实施例中是通过宏变量定义键码的,具体如下:
#definekey_love60
#definekey_voice63
#definekey_english103
#definekey_next114
#definekey_prev115
#definekey_playpause102
#definekey_wechat62
#definekey_guychat61
#definekey_story28
#definekey_song59
#definekey_sinology129
作为一种可选的实施方式,所述判断是否有按键事件发生的步骤还包括:
若判断未有按键事件发生,则继续判断是否有按键事件发生的步骤。
s101、若有,则根据所述按键事件调用所述按键事件的键码和键值;
s102、根据所述按键事件的键码和键值标记所述按键事件的行为选项;
作为一种可选的实施方式,所述根据所述按键事件的键码和键值标记所述按键事件的行为选项的步骤包括:
根据所述按键事件的键码和键值标记所述按键短按按下的行为选项;
或者,根据所述按键事件的键码和键值标记所述按键长按的行为选项;
或者,根据所述按键事件的键码和键值标记所述按键松开的行为选项。
s103、根据所述按键事件的行为选项创建和启动按键线程;
需要说明的是,本发明实施例中,通过linux的线程函数pthread_create(pthread_create是类unix操作系统(unix、linux、macosx等)的创建线程的函数,创建由按键轮询扫描线程去创建,创建的同时启动线程。
作为一种可选的实施方式,所述根据所述按键事件的行为选项创建和启动按键线程的步骤包括:
根据所述按键短按按下的行为选项创建和启动按键短按按下线程;
或者,根据所述按键长按的行为选项建和启动按键长按线程;
或者,根据所述松开的行为选项建和启动按键松开线程。
s104、将所述按键事件的行为选项传入所述按键线程内;
需要说明的是,本发明实施例中,pthread_create创建线程的时候,把行为选项,键码和键值打包成结构体参数,传给pthread_create函数。主要目的是在线程里对这些行为选项进行解析,因为一个线程里面不能直接获得其他线程的局部变量,需通过传递线程参数的形式。通过线程来处理这些行为选项可以提高按键响应速度和连续多次按键时按键如何过滤和响应的问题。
作为一种可选的实施方式,所述将所述按键事件的行为选项传入所述按键线程内的步骤包括:
将所述按键短按按下的行为选项传入所述按键短按按下线程内;
或者,将所述按键长按的行为选项传入所述按键长按线程内;
或者,将所述按键松开的行为选项传入所述按键松开线程内。
s105、在所述按键线程内处理所述按键事件的行为。
需要说明的是,本发明实施例中,先通过文件锁(文件锁是一种文件读写机制,在任何特定的时间只允许一个进程访问一个文件。通过这种锁来保证同一时刻只能有一个按键在响应)判断此按键是否还在响应(可能存在之前按下过还没响应完,如果非常快连续按下的话),如果是则放弃本次响应,如果不是则通过枚举的方式,逐个判断是哪个行为选项,对不同的行为选项进行做不同的函数调用。
作为一种可选的实施方式,所述在所述按键线程内处理所述按键事件的行为的步骤包括:
在所述按键短按按下线程内处理所述按键短按按下的行为;
或者,在所述按键长按线程内处理所述按键长按的行为;
或者,在所述按键松开线程内处理所述按键松开的行为。
本发明提供的嵌入式linux设备的按键控制方法,当判断有按键事件发生时,则根据按键事件调用按键事件的键码和键值;根据按键事件的键码和键值标记按键事件的行为选项;根据按键事件的行为选项创建和启动按键线程;将按键事件的行为选项传入按键线程内;在按键线程内处理按键事件的行为。本发明针对嵌入式linux设备多按键和多种响应情况的问题,提供了一套简单易用,代码可读性好,并且基于此方法实现的按键功能可使得用户有更好的体验,从而使得本发明具有以下优点:
第一,通过本发明实现的按键功能,代码可读性好,利于扩展和维护;
第二,通过本发明可以很好的处理多个按键和多种触发类型的按键交互设计,给产品带来更简洁的体验;
第三,短按按下用于停止上一个按键响应的动作,松开时响应当前按键的事件,长按时触发一些人机交互动作。通过这种方式可以提高按键的响应效率;
第四,行为选项标记和线程结合起来可以很好的解决快速多次按键时按键如何响应的问题。
请参阅图2,图2是本发明第二实施例提供的嵌入式linux设备的按键控制装置的结构示意图。如图2所示,该嵌入式linux设备的按键控制装置包括:
预先定义模块1,用于预先定义嵌入式linux设备的键码、键值及按键事件触发的行为选项;其中,所述键码包括收藏键、语音键、英语键、下一曲键、上一曲键、暂停播放键、微信键、童言童语键、故事键、儿歌键及国学键;所述键值包括短按按下、长按及松开;所述行为选项为所述键码和所述键值组合后的结果;
判断模块2,用于判断是否有按键事件发生;
调用模块3,用于在所述判断模块2判断有按键事件发生时,则根据所述按键事件调用所述按键事件的键码和键值;
标记模块4,用于根据所述按键事件的键码和键值标记所述按键事件的行为选项;
创建和启动模块5,用于根据所述按键事件的行为选项创建和启动按键线程;
传入模块6,用于将所述按键事件的行为选项传入所述按键线程内;
处理模块7,用于在所述按键线程内处理所述按键事件的行为。
进一步地,如图3所示,所述标记模块4包括:
第一标记单元41,用于根据所述按键事件的键码和键值标记所述按键短按按下的行为选项;
第二标记单元42,用于根据所述按键事件的键码和键值标记所述按键长按的行为选项;
第三标记单元43,用于根据所述按键事件的键码和键值标记所述按键松开的行为选项;
进一步地,如图4所示,所述创建和启动模块5包括:
第一创建和启动单元51,用于根据所述按键短按按下的行为选项创建和启动按键短按按下线程;
第二创建和启动单元52,用于根据所述按键长按的行为选项建和启动按键长按线程;
第三创建和启动单元53,用于根据所述松开的行为选项建和启动按键松开线程;
进一步地,如图5所示,所述传入模块6包括:
第一传入单元61,用于将所述按键短按按下的行为选项传入所述按键短按按下线程内;
第二传入单元62,用于将所述按键长按的行为选项传入所述按键长按线程内;
第三传入单元63,用于将所述按键松开的行为选项传入所述按键松开线程内;
进一步地,如图6所示,所述处理模块7包括:
第一处理单元71,用于在所述按键短按按下线程内处理所述按键短按按下的行为;
第二处理单元72,用于在所述按键长按线程内处理所述按键长按的行为;
第三处理单元73,用于在所述按键松开线程内处理所述按键松开的行为。
本发明提供的嵌入式linux设备的按键控制装置,当判断模块2判断有按键事件发生时,则调用模块3根据按键事件调用按键事件的键码和键值;标记模块4根据按键事件的键码和键值标记按键事件的行为选项;创建和启动模块5根据按键事件的行为选项创建和启动按键线程;传入模块6将按键事件的行为选项传入按键线程内;处理模块7在按键线程内处理按键事件的行为。本发明针对嵌入式linux设备多按键和多种响应情况的问题,提供了一套简单易用,代码可读性好,并且基于此方法实现的按键功能可使得用户有更好的体验,从而使得本发明具有以下优点:
第一,通过本发明实现的按键功能,代码可读性好,利于扩展和维护;
第二,通过本发明可以很好的处理多个按键和多种触发类型的按键交互设计,给产品带来更简洁的体验;
第三,短按按下用于停止上一个按键响应的动作,松开时响应当前按键的事件,长按时触发一些人机交互动作。通过这种方式可以提高按键的响应效率;
第四,行为选项标记和线程结合起来可以很好的解决快速多次按键时按键如何响应的问题。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。