• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種基于Android內(nèi)核的物理按鍵設(shè)計(jì)*

      2018-12-24 07:36:44任志敏
      山西電子技術(shù) 2018年6期
      關(guān)鍵詞:功能鍵鍵值數(shù)組

      任志敏

      (常州紡織服裝職業(yè)技術(shù)學(xué)院機(jī)電學(xué)院,江蘇 常州 213164)

      0 引言

      隨著Android系統(tǒng)的不斷發(fā)展,越來(lái)越多的嵌入式系統(tǒng)引入Android平臺(tái)作為系統(tǒng)平臺(tái)。Android平臺(tái)的一大優(yōu)勢(shì)是使用觸摸屏操作APP應(yīng)用程序,在大多數(shù)應(yīng)用場(chǎng)合利用這一優(yōu)勢(shì)效率很高,用戶體驗(yàn)良好,但是在有些場(chǎng)合就適應(yīng)得不是很友好,比如在汽車(chē)維修領(lǐng)域使用的發(fā)動(dòng)機(jī)檢測(cè)系統(tǒng),操作人員一般都攜帶手套檢查相關(guān)汽車(chē)部件,若要再用到觸摸屏,操作起來(lái)就不方便,頻繁脫戴手套又耗時(shí)又不安全,因此還是需要借助傳統(tǒng)的物理按鍵實(shí)現(xiàn)相關(guān)操作。典型的汽車(chē)發(fā)動(dòng)機(jī)檢測(cè)內(nèi)窺鏡如圖1所示。

      圖1 汽車(chē)發(fā)動(dòng)機(jī)檢測(cè)內(nèi)窺鏡實(shí)物圖

      從圖1可以看出,手柄上有6個(gè)物理按鍵,除了一個(gè)電源按鍵以外,還有5個(gè)功能按鍵,其功能一般是“菜單”,“向上選擇”,“向下選擇”,“確定”,“返回”。通過(guò)這5個(gè)按鍵實(shí)現(xiàn)如圖2所示的APP窗口操作。

      圖2 內(nèi)窺鏡APP窗口

      按下“菜單”按鍵,彈出如圖2所示的窗口,通過(guò)“向上選擇”和“向下選擇”兩個(gè)按鍵選擇按鈕,用“確定”按鍵進(jìn)入對(duì)應(yīng)的功能模塊。即原來(lái)使用觸摸屏實(shí)現(xiàn)菜單操作都有5個(gè)物理按鍵完成。

      1 硬件電路

      Android系統(tǒng)本身支持的物理按鍵包括系統(tǒng)功能鍵和“querty”鍵盤(pán),系統(tǒng)功能鍵包括“Home”,“volume up”,“volume down”,“menu”等,“querty”鍵盤(pán)就是日常我們所見(jiàn)的普通鍵盤(pán)上的各種按鍵。在安裝了Android2.2以前的版本的硬件系統(tǒng)上,系統(tǒng)功能鍵和“querty”鍵均是真實(shí)存在的物理按鍵,而Android2.2以后的硬件系統(tǒng),一般保留的物理按鍵只有系統(tǒng)功能鍵,“querty”鍵盤(pán)采用軟鍵盤(pán)的形式。本文設(shè)計(jì)的內(nèi)窺鏡采用Android6.0系統(tǒng),公版的硬件系統(tǒng)電路只引出支持功能鍵的物理按鍵[2],其電路圖如圖3所示。

      從圖3中可以看出,AVCC為模數(shù)轉(zhuǎn)換的參考電壓,LRADC0為模數(shù)轉(zhuǎn)換引腳,R1~R8為分壓電阻,S1~S7一端連接對(duì)應(yīng)的分壓電阻,另一端連接電源地,按下S1~S7中任何一個(gè)鍵,通過(guò)讀取LRADC0引腳的模數(shù)轉(zhuǎn)換值就可以感知到底按下了哪個(gè)按鍵,這樣做的好處是節(jié)省了IO引腳資源,只需要連一個(gè)模數(shù)轉(zhuǎn)換引腳就可以確定7個(gè)按鍵。在設(shè)計(jì)過(guò)程中,若不需要用到這7個(gè)鍵,按鍵可以刪除,但電阻不可刪除??紤]到工業(yè)內(nèi)窺鏡錄制播放視頻時(shí)仍舊需要用到麥克風(fēng),因此保留音量鍵VOL+和VOL-,MENU鍵用于“菜單”鍵,SEARCH鍵用于“向上選擇”鍵,HOME鍵用于“向下選擇”鍵,ESC鍵用于“確定”鍵,ENTER鍵用于“返回”鍵。

      圖3 Android6.0公版按鍵硬件電路

      2 詳細(xì)設(shè)計(jì)

      為了響應(yīng)內(nèi)窺鏡上增加的“菜單”等5個(gè)物理按鍵,需要了解和修改Android6.0的內(nèi)核文件,第一個(gè)文件為模數(shù)轉(zhuǎn)換映射文件,位于/linux-3.4/drivers/input/keyboard目錄下的sunxi-keyboard.c文件,該文件中定義了一個(gè)數(shù)組,該數(shù)組為static unsigned char keypad_mapindex[64]={0,0,0,0,0,0,0,/*key1*/1,1,1,1,1,1,/*key2*/2,2,2,2,2,2, /*key3*/3,3,3,3,3,/*key4*/4,4,4,4,4,/*key5*/5,5,5,5,5,/*key6*/6,6,6,6,6,6,6,6,6,/*key7*/7,7,7,7,7,7,7,7,7,7,7,7,7/* key 8*/}。

      從該數(shù)組可以看出,該數(shù)組正好對(duì)應(yīng)圖3所示的物理按鍵原理圖,把電壓一共分成64份,每一份對(duì)應(yīng)一個(gè)電壓值,大約為0.2V,比如key1鍵對(duì)應(yīng)圖3中的VOL+模數(shù)采集點(diǎn),雖然該點(diǎn)的電壓為0.19V,但是每次按下VOL+鍵模數(shù)轉(zhuǎn)換的值不一定完全一樣,因此keypad_mapindex數(shù)組中設(shè)定7個(gè)值來(lái)相應(yīng)按下VOL+鍵。在sunxi-keyboard.c文件中,通過(guò)代碼

      scancode = keypad_mapindex[key_val&0x3f];

      input_report_key(sunxikbd_dev, sunxi_scankeycodes[scancode], 0);

      上報(bào)具體的按鍵值。

      第二個(gè)與物理按鍵相關(guān)的同樣位于/linux-3.4/drivers/input/keyboard目錄下的sun8i-keyboard.h文件。該文件首先定義了數(shù)組sunxi_scankeycodes[KEY_MAX_CNT],用于內(nèi)核上報(bào)給系統(tǒng)的值[1]。為了避免與系統(tǒng)自帶的值相沖突,本文設(shè)計(jì)了如圖4所示的上報(bào)值數(shù)組。

      圖4 課題設(shè)計(jì)上報(bào)值

      sunxi_scankeycodes上報(bào)數(shù)組只是做了一個(gè)定義,具體的上報(bào)值,比如KEY_VOLUMEUP值是多少呢?

      第三個(gè)文件是位于/linux-3.4/include/linux目錄下的input.h文件,該文件下定義了KEY_VOLUMEUP的值,系統(tǒng)具體上報(bào)的默認(rèn)鍵值定義最大為248,因此本文自定義的5個(gè)上報(bào)鍵值從249開(kāi)始,這5個(gè)上報(bào)鍵值分別是:菜單鍵KEY_MYMENU具體鍵值為249;向上選擇鍵KEY_MYUP具體鍵值為250;向下選擇鍵KEY_MYDOWN具體鍵值為251;確定鍵KEY_MYENTER具體鍵值為252;返回鍵KEY_MYBACK具體鍵值為253。

      總結(jié)一下按鍵上報(bào)的過(guò)程,1)Android底層的linux系統(tǒng)內(nèi)核通過(guò)掃描,將物理按鍵按下的電壓轉(zhuǎn)換為數(shù)字電壓并且映射到數(shù)組下標(biāo)。2)通過(guò)keypad_mapindex[64],sunxi_scankeycodes[KEY_MAX_CNT]兩個(gè)數(shù)組關(guān)系轉(zhuǎn)化將按鍵映射到內(nèi)核中預(yù)定義的鍵值。3)linux內(nèi)核上報(bào)給上層一個(gè)具體的鍵值。

      第四個(gè)文件是位于Android/device/vendor-name/device-name/configs目錄下的sunxi-keyboard.kl文件,該文件是framework層的按鍵映射文件,增加本文的5個(gè)按鍵映射,修改其配置為:key 114 VOLUME_DOWN;key 115 VOLUME_UP;key 249 MYMENU;key 250 MYUP;key 251 MYDOWN;key 252 MYENTER;key 253 MYBACK。該文件中key為關(guān)鍵字,不能改動(dòng),249為input.h定義的上報(bào)鍵值。

      第五個(gè)文件是位于/frameworks/native/include/android目錄下的keycodes.h文件,該文件定義了用于Android應(yīng)用層的按鍵鍵值,修改該文件后,菜單鍵應(yīng)用層鍵值A(chǔ)KEYCODE_MYMENU=300;AKEYCODE_MYUP=301;AKEYCODE_MYDOWN=302;AKEYCODE_MYENTER=303;AKEYCODE_MYBACK=304。需要注意的是,該文件的鍵值與linux層上報(bào)的鍵值是不同的,那么如何把兩者對(duì)應(yīng)起來(lái)呢?

      第六個(gè)文件是位于/frameworks/native/include/input目錄下的InputEventLabels.h文件,修改該文件,把增加的5個(gè)鍵的定義加入其中,代碼為DEFINE_KEYCODE(MYMENU),DEFINE_KEYCODE(MYUP),DEFINE_KEYCODE(MYDOWN),DEFINE_KEYCODE(MYENTER),DEFINE_KEYCODE(MYBACK)。

      第七個(gè)文件是位于frameworks/base/core/res/res/values目錄下的attrs.xml,修改后代碼為;;

      經(jīng)過(guò)以上文件的修改,新增加的5個(gè)物理按鍵就可以響應(yīng)Android上層APP程序了。

      3 驗(yàn)證

      為了測(cè)試驗(yàn)證物理按鍵的響應(yīng)效果,本文在Android6.0平臺(tái)上設(shè)計(jì)了APP程序進(jìn)行驗(yàn)證[3],測(cè)試代碼如圖5所示。

      圖5 物理按鈕響應(yīng)驗(yàn)證程序代碼

      經(jīng)過(guò)測(cè)試,系統(tǒng)原有的兩個(gè)音量鍵仍舊功能不變,新增加的5個(gè)按鍵可以準(zhǔn)確響應(yīng)。

      猜你喜歡
      功能鍵鍵值數(shù)組
      JAVA稀疏矩陣算法
      時(shí)鐘 秒表 倒計(jì)時(shí) 三合一的電子計(jì)時(shí)器
      非請(qǐng)勿進(jìn) 為注冊(cè)表的重要鍵值上把“鎖”
      JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
      一鍵直達(dá) Windows 10注冊(cè)表編輯高招
      定位糖
      尋找勾股數(shù)組的歷程
      VB數(shù)組在for循環(huán)中的應(yīng)用
      考試周刊(2012年88期)2012-04-29 04:36:47
      看圖識(shí)鍵 輕松掌握本本的功能鍵組合
      淺談利用按鍵精靈為病理工作軟件設(shè)計(jì)新的功能鍵
      乌拉特后旗| 永泰县| 湟中县| 固镇县| 三穗县| 城口县| 财经| 抚松县| 株洲市| 保康县| 武定县| 怀柔区| 朔州市| 东至县| 温州市| 海伦市| 青浦区| 临江市| 丹凤县| 丹寨县| 南陵县| 康马县| 商洛市| 蒙自县| 阳新县| 来安县| 旌德县| 乌审旗| 策勒县| 岳阳市| 牡丹江市| 赤城县| 乐业县| 商南县| 廊坊市| 古蔺县| 扎鲁特旗| 麟游县| 运城市| 湘潭县| 棋牌|