亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

通俗易通講解Android藍(lán)牙鍵值適配

 更新時(shí)間:2021年12月03日 08:57:38   作者:peak?wang  
這篇文章介紹了Android藍(lán)牙鍵值適配的方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值。需要的朋友可以收藏下,方便下次瀏覽觀看

以下圖中TV VOD兩個(gè)按鍵為例,文章中所涉及到的文件只寫(xiě)文件名,因每個(gè)方案的路徑各不相同,請(qǐng)自行全局搜索文件。

?1.獲取按鍵的掃描碼

android設(shè)備串口或adb shell下執(zhí)行getevent -l(小寫(xiě)的L),然后按下按鍵(以VOD鍵為例),打印結(jié)果如下:

getevent顯示結(jié)果中的三個(gè)有效信息:

  • 1)000c006b? ?前四位000c為鍵值類(lèi)型(詳情請(qǐng)?zhí)?與閱讀hid.h),后四位為藍(lán)牙鍵值;
  • 2)KEY_BLUE? 如果在linux_key.h中有此按鍵的定義,此處就會(huì)顯示,如果linux_key.h中沒(méi)有對(duì)此鍵的定義就會(huì)顯示KEY_UNKNOWN.
  • 3)/dev/input/event4: 設(shè)備節(jié)點(diǎn),可以通過(guò)dumpsys input命令查看此節(jié)點(diǎn)使用KeyLayoutFile(即映射鍵值的.kl的文件)
console:/ # getevent -l                                                        
add device 1: /dev/input/event4
  name:     "語(yǔ)音助手"
could not get driver version for /dev/input/mouse2, Not a typewriter
add device 2: /dev/input/event3
  name:     "Hi Keypad"
could not get driver version for /dev/input/mouse1, Not a typewriter
add device 3: /dev/input/event1
  name:     "Hi mouse"
could not get driver version for /dev/input/mice, Not a typewriter
add device 4: /dev/input/event0
  name:     "Hi keyboard"
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 5: /dev/input/event2
  name:     "qwerty"
/dev/input/event4: EV_MSC       MSC_SCAN             000c006b            
/dev/input/event4: EV_KEY       KEY_BLUE             DOWN                
/dev/input/event4: EV_SYN       SYN_REPORT           00000000            
/dev/input/event4: EV_MSC       MSC_SCAN             000c006b            
/dev/input/event4: EV_KEY       KEY_BLUE             UP                  
/dev/input/event4: EV_SYN       SYN_REPORT           00000000    

2.hid-input.c

從getevent -l時(shí)已知VOD按鍵為000c006b,前四位詳細(xì)定義可以參考kernel下的hid.h,此處只列舉幾個(gè):

#define HID_UP_KEYBOARD         0x00070000
#define HID_UP_LED              0x00080000
#define HID_UP_BUTTON           0x00090000
#define HID_UP_ORDINAL          0x000a0000
#define HID_UP_TELEPHONY        0x000b0000
#define HID_UP_CONSUMER         0x000c0000

在hid-input.c中有個(gè)函數(shù)hidinput_configure_usage,會(huì)根據(jù)不同的hid執(zhí)行不同的代碼,為0007(HID_UP_KEYBOARD)時(shí)會(huì)處理hid_keyboard[256]的數(shù)組,把掃描碼轉(zhuǎn)換為10進(jìn)制后就是該數(shù)組的下標(biāo),數(shù)組下標(biāo)的數(shù)組元素就是linux鍵值,我的鍵值前面是000c所以跳過(guò)前面說(shuō)的,case走的是HID_UP_CONSUMER,此case下已有對(duì)0x6b的處理,意思就是此鍵在linux中代表的是KEY_BLUE。

static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_field *field,
				     struct hid_usage *usage)
{
 
	/**省略**/
	switch (usage->hid & HID_USAGE_PAGE) {
	case HID_UP_UNDEFINED:
		goto ignore;
    /**省略**/
    /**省略**/
	case HID_UP_KEYBOARD:
		set_bit(EV_REP, input->evbit);
 
		if ((usage->hid & HID_USAGE) < 256) {
			if (!hid_keyboard[usage->hid & HID_USAGE]) goto ignore;
			map_key_clear(hid_keyboard[usage->hid & HID_USAGE]);
		} else
			map_key(KEY_UNKNOWN);
 
		break;
    
 
	case HID_UP_CONSUMER:	/* USB HUT v1.12, pages 75-84 */
		switch (usage->hid & HID_USAGE) {
		case 0x06a: map_key_clear(KEY_GREEN);		break;
		case 0x06b: map_key_clear(KEY_BLUE);		break;
		case 0x06c: map_key_clear(KEY_YELLOW);		break;
		case 0x06d: map_key_clear(KEY_ZOOM);		break;
 
    /**省略**/
    /**省略**/
}

那KEY_BLUE的鍵值是多少呢?

{"KEY_BLUE", 0x191},

我們來(lái)查閱linux_key.h,搜索KEY_BLUE,我的sdk中KEY_BLUE的值為0x191,轉(zhuǎn)換為十進(jìn)制值為401。

3.KeyLayoutFile? --> .kl

getevent -l時(shí)已知設(shè)備節(jié)點(diǎn)為/dev/input/event4,那我們執(zhí)行下dumpsys input,結(jié)果如下:

5: 語(yǔ)音助手
      Classes: 0x8000012b
      Path: /dev/input/event4
      Enabled: true
      Descriptor: e0cab5a5e7db45d100777208b12fb1c21978adca
      Location: 
      ControllerNumber: 0
      UniqueId: 18:11:18:24:33:18
      Identifier: bus=0x0005, vendor=0x2b54, product=0x1600, version=0x0101
      KeyLayoutFile: /vendor/usr/keylayout/Vendor_2b54_Product_1600.kl
      KeyCharacterMapFile: /vendor/usr/keychars/Generic.kcm
      ConfigurationFile: 
      HaveKeyboardLayoutOverlay: false

結(jié)果中可以看出我的藍(lán)牙遙控器的vendor=2b54,product=1600,所以系統(tǒng)優(yōu)先加載的我自己加到ROM中的kl(.kl命名規(guī)則與加載優(yōu)先級(jí)請(qǐng)自行百度),有的可能找不到,會(huì)加載Generic.kl等文件,請(qǐng)根據(jù)KeyLayoutFile:后的路徑的文件修改映射關(guān)系,如果為默認(rèn)的Generic.kl時(shí),建議不要修改此文件,可以根據(jù)vendor與product規(guī)則自己新建一個(gè)文件。

那我們打開(kāi)指向的這個(gè)kl文件,內(nèi)容如下:

#key 222 "KEY_RED"                                                                                                
# key 400 "KEY_YELLOW"                                                    
key 401 PROG_GREEN                                                              
key 402   CHANNEL_UP
key 403   CHANNEL_DOWN

kl文件格式簡(jiǎn)單解析(詳解與其它使用方法自行搜索):

key?可以理解成固定格式?

222/401等數(shù)字對(duì)應(yīng)的就是linux的鍵值

PROG_GREEN 這里對(duì)應(yīng)的就是Android層的鍵值(此字符串要與InputEventLabels.h中的保持一致,否則會(huì)報(bào)Expected key code label異常,然后就加載其它默認(rèn)的kl文件了,5.0以前是KeycodeLabels.h或KeyCodeLabels.h)

既然都理清楚了,那處理按鍵豈不是很簡(jiǎn)單了?

已知前面linux_key.h中查詢(xún)VOD的linux鍵值為401,如果你想讓此按鍵生效,把前面的#號(hào)去掉重啟設(shè)備,使其映射關(guān)系生效即可,如果你想改變鍵值的功能,可以直接在此kl中把401對(duì)應(yīng)的android層的KEY_BLUE改為你想要的鍵就可以了。(當(dāng)然也可以修改linux的鍵值,但不提倡這么做.)

總結(jié):

  • 1.通過(guò)getevent -l獲取鍵值設(shè)備節(jié)點(diǎn);
  • 2.hid-input.c中添加或修改你的鍵值;
  • 3.通過(guò)設(shè)備節(jié)點(diǎn)找到對(duì)應(yīng)的kl文件;
  • 4.添加或修改映射關(guān)系;

以上所述是小編給大家介紹的Android藍(lán)牙鍵值適配,希望對(duì)大家有所幫助。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android tabLayout+recyclerView實(shí)現(xiàn)錨點(diǎn)定位的示例

    Android tabLayout+recyclerView實(shí)現(xiàn)錨點(diǎn)定位的示例

    這篇文章主要介紹了Android tabLayout+recyclerView實(shí)現(xiàn)錨點(diǎn)定位的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Android自定義超級(jí)炫酷的ViewPage指示器

    Android自定義超級(jí)炫酷的ViewPage指示器

    由于應(yīng)公司開(kāi)發(fā)要求,有一個(gè)顏色漸變帶縮放的指示器,雖然網(wǎng)上很多大佬開(kāi)源的指示器開(kāi)源庫(kù),但如果一直都是使用別人造的輪子,那么對(duì)于自身的能力是毫無(wú)提升作用的,即使是參考別人的,然后自己動(dòng)手寫(xiě)一遍那對(duì)于自身來(lái)說(shuō)也是一種升華
    2022-07-07
  • 完美解決EditText和ScrollView的滾動(dòng)沖突(下)

    完美解決EditText和ScrollView的滾動(dòng)沖突(下)

    這篇文章再次為大家詳細(xì)介紹了完美解決EditText和ScrollView滾動(dòng)沖突的方法,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android編程圖片加載類(lèi)ImageLoader定義與用法實(shí)例分析

    Android編程圖片加載類(lèi)ImageLoader定義與用法實(shí)例分析

    這篇文章主要介紹了Android編程圖片加載類(lèi)ImageLoader定義與用法,結(jié)合實(shí)例形式分析了Android圖片加載類(lèi)ImageLoader的功能、定義、使用方法及相關(guān)操作注意事項(xiàng),代碼中備有較為詳盡的注釋便于理解,需要的朋友可以參考下
    2017-12-12
  • Android結(jié)合kotlin使用coroutine的方法實(shí)例

    Android結(jié)合kotlin使用coroutine的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Android結(jié)合kotlin使用coroutine的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Fragment通過(guò)FragmentManager實(shí)現(xiàn)通信功能詳細(xì)講解

    Fragment通過(guò)FragmentManager實(shí)現(xiàn)通信功能詳細(xì)講解

    這篇文章主要介紹了Fragment通過(guò)FragmentManager實(shí)現(xiàn)通信功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-01-01
  • Android實(shí)現(xiàn)微信聊天語(yǔ)言點(diǎn)擊喇叭動(dòng)畫(huà)效果

    Android實(shí)現(xiàn)微信聊天語(yǔ)言點(diǎn)擊喇叭動(dòng)畫(huà)效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)微信聊天語(yǔ)言點(diǎn)擊喇叭動(dòng)畫(huà)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android開(kāi)發(fā)實(shí)現(xiàn)的幾何圖形工具類(lèi)GeometryUtil完整實(shí)例

    Android開(kāi)發(fā)實(shí)現(xiàn)的幾何圖形工具類(lèi)GeometryUtil完整實(shí)例

    這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)的幾何圖形工具類(lèi)GeometryUtil,涉及Android坐標(biāo)圖形數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • Flutter?WebView?預(yù)加載實(shí)現(xiàn)方法(Http?Server)

    Flutter?WebView?預(yù)加載實(shí)現(xiàn)方法(Http?Server)

    這篇文章主要介紹了Flutter?WebView?預(yù)加載實(shí)現(xiàn)方法,包括資源的配置,資源的下載和存儲(chǔ),版本的管理,如何根據(jù)實(shí)際url獲取對(duì)應(yīng)HttpServer?bind的url等,需要的朋友可以參考下
    2022-05-05
  • 淺談Android Studio 3.0 的一些小變化

    淺談Android Studio 3.0 的一些小變化

    本篇文章主要介紹了淺談Android Studio 3.0 的一些小變化,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10

最新評(píng)論