一種嵌入式linux設備的按鍵控制方法及裝置與流程
2023-05-11 04:52:47 1

本發明涉及嵌入式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設備多按鍵和多種響應情況的問題,提供了一套簡單易用,代碼可讀性好,並且基於此方法實現的按鍵功能可使得用戶有更好的體驗,從而使得本發明具有以下優點:
第一,通過本發明實現的按鍵功能,代碼可讀性好,利於擴展和維護;
第二,通過本發明可以很好的處理多個按鍵和多種觸發類型的按鍵互動設計,給產品帶來更簡潔的體驗;
第三,短按按下用於停止上一個按鍵響應的動作,鬆開時響應當前按鍵的事件,長按時觸發一些人機互動動作。通過這種方式可以提高按鍵的響應效率;
第四,行為選項標記和線程結合起來可以很好的解決快速多次按鍵時按鍵如何響應的問題。
以上所述僅為本發明的較佳實施例而已,並不用以限制本發明,凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明的保護範圍之內。