首頁(yè) 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場(chǎng)

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計(jì)算器

綜合交流 / 評(píng)測(cè) / 活動(dòng)區(qū)

交流區(qū) | 測(cè)硬件 | 網(wǎng)站活動(dòng) | Z幣中心

新手入門 / 進(jìn)階 / 社區(qū)互助

新手 | 你問我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 27152|回復(fù): 11
上一主題 下一主題
[分享]

如何修改遙控器鍵碼值?Android系統(tǒng)中自定義與修改遙控鍵值

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-8-16 15:25 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式 | 來自上海

在Android系統(tǒng)中,修改遙控器鍵碼值是一項(xiàng)實(shí)用的功能,它允許開發(fā)者或用戶根據(jù)實(shí)際需求自定義遙控器的行為。通過編程接口或系統(tǒng)設(shè)置,可以輕松實(shí)現(xiàn)對(duì)鍵碼值的添加、刪除及修改,從而優(yōu)化用戶體驗(yàn)或滿足特定應(yīng)用場(chǎng)景的需求。


TV 上遙控器鍵值怎么樣對(duì)應(yīng)到android的系統(tǒng)中,最近一個(gè)客戶需要在我們的平臺(tái)上修改,所以,我順便做了一下總結(jié),方便以后參考。


第一步:

init.rc:通過service remotecfg /system/bin/remotecfg /system/etc/remote.conf在開機(jī)init階段,將remote.conf中的配置通過ioctl賦值到ir驅(qū)動(dòng)的變量中(用戶空間—>內(nèi)核空間),這樣遙控定制化配置才會(huì)生效。remotecfg程序代碼位于external/remoteconf/irremote.c,可以在設(shè)備的/system/bin/下找到它并手動(dòng)運(yùn)行#./system/bin/remotecfg /system/etc/remote.conf


第二步:

紅外驅(qū)動(dòng)(Linux內(nèi)核層):Linux irremote driver將依照紅外驅(qū)動(dòng)配置文件,將紅外鍵值ircode映射為L(zhǎng)inux標(biāo)準(zhǔn)鍵盤掃描碼scancode。這個(gè)過程即將紅外遙控器的按鍵事件轉(zhuǎn)換為L(zhǎng)inux的標(biāo)準(zhǔn)input event。a) 紅外驅(qū)動(dòng)配置文件/system/etc/remote.confb)標(biāo)準(zhǔn)鍵盤掃描碼kernel/include/linux/input.h(在幾次遙控器定制化中,尚未修改過該文件)


第三步:

Andriod層:windows manager從irremote driver中讀出key event,再通過/system/usr/keylayout/aml_keypad.kl文件,將標(biāo)準(zhǔn)input設(shè)備的scan code映射為Andriod API按鍵KEYCODE字符串。最終scancode和keycode被window manager發(fā)送到應(yīng)用程序,被其focus view消化處理。例如:key 113 SEARCH官方稱.kl為key layout map file。


映射/配置文件說明

ircode映射為scan code: device/a***c/xxx/remote.conf

#a***c NECremote

factory_code = 0xfb040001 //每個(gè)設(shè)備都有獨(dú)特的factory code. 格式custom_code(16bit)+index_code(16bit) //例子: 0xfb040001= 0xfb04(客戶碼) + 0001 (低16位可填寫任意值)

key_begin //按鍵映射表 0x47 11 //0x47是紅外鍵值,11是對(duì)應(yīng)的標(biāo)準(zhǔn)按鍵scancode,可以多個(gè)鍵值對(duì)應(yīng)一個(gè)scancode

0x5C 97

……

key_end //按鍵映射表結(jié)束


mouse_begin //鼠標(biāo)方向映射表,每行

0 0x10 //0是方向數(shù)字表示符(Left),對(duì)應(yīng)紅外按鍵鍵值0x10

1 0x11 //方向鍵右

2 0x0b //方向鍵上

3 0x0e //方向鍵下

mouse_end //鼠標(biāo)方向映射表結(jié)束

scancode與KEYCODE字符串映射:

在2.3系統(tǒng)中,位于源碼目錄的device/a***c/xxx/ aml_keypad.kl

在4.0系統(tǒng)中,位于源碼目錄的device/a***c/xxx/Vendor_0001_Product_0001.kl

.....................

key 9 8

key 10 9

key 11 0

key 228 POUND

key 227 STAR

key 231 CALL

key 61 CALL

key 97 DPAD_CENTER

key 108 DPAD_DOWN

key 103 DPAD_UP

key 102 HOME

key 114 VOLUME_DOWN

KEYCODE字符串轉(zhuǎn)換為Andriod UI鍵值:frameworks/base/include/ui/KeycodeLabels.h

static const KeycodeLabel KEYCODES[] = {

{ "SOFT_LEFT", 1 },

{ "HOME", 3 },

{ "BACK", 4 },

{ "CALL", 5 },

{ "ENDCALL", 6 },

{ "0", 7 },

{ "1", 8 },

{ "2", 9 },

{ "3", 10 },

{ "4", 11 },

{ "5", 12 },

{ "STAR", 17 },

{ "POUND", 18 },

{ "DPAD_UP", 19 },

{ "VOLUME_UP", 24 },

.........................................

鍵盤scancode定義:kernel/include/linux/input.h

......

#define KEY_SPACE 57

#define KEY_CAPSLOCK 58

#define KEY_F1 59

#define KEY_F2 60

#define KEY_F3 61

#define KEY_F4 62

#define KEY_F5 63

#define KEY_F6 64

#define KEY_F7 65

#define KEY_F8 66

#define KEY_F9 67

#define KEY_F10 68

........


案例一:新平臺(tái)增加/移植遙控器代碼


mid產(chǎn)品往往沒有遙控器,如果要增加遙控器的支持,需要從mbox代碼中拷貝以下文件和目錄:

1)遙控器驅(qū)動(dòng):kernel\drivers\a***c\input\irremote

2)Andriod 遙控器service:external\remoteconf目錄

3)init.rc中啟動(dòng)service remotecfg

# remote

service remotecfg /system/bin/remotecfg /system/etc/remote.conf

class main

oneshot

4)拷貝定制化remote.conf與kl兩個(gè)文件


案例二:遙控器靜音鍵改為設(shè)置鍵(不新增按鍵)


1) 按下遙控靜音鍵,觀察串口打印出的ircode

2) 在板子的/system/etc/remote.conf文件中找到靜音鍵的ircode與scancode對(duì)應(yīng)行,如下: 0x0c 113

3) 在板子的/system/usr/keylayout/aml_keypad.kl或Vendor_0001_Product_0001.kl中找到scancode 113所在行:

key 113 SEARCH

4) 將keycode ‘SEARCH’ 修改為需要的KEYCODE字符串。

5) 重新編譯


案例三:遙控器增加新按鍵功能


新增按鍵的遙控器往往不是我們公版遙控器,不能利用現(xiàn)有按鍵實(shí)現(xiàn)特定功能,需要在系統(tǒng)中新增以支持特定APK應(yīng)用場(chǎng)景。

1) 通過打印找出新增按鍵的ircode

2) 在device\a***c\xxx\remote.conf找到ircode對(duì)應(yīng)行,或新建一行。這個(gè)文件中需要注意factory_code = 0xfd020001 是遙控器的客戶碼,必須與實(shí)體遙控器對(duì)應(yīng)。

3) 修改device\a***c\xxx\aml_keypad.kl或Vendor_0001_Product_0001.kl

添加時(shí)依照上下文的格式:例如 key 1 BACK這行中,"1"對(duì)應(yīng)remote.conf 中的scancode,"BACK" 就是需要在后面keycodeLabels.h中定義的字串,新增按鍵可以自定義這個(gè)字串,比如RED。

4) frameworks/base/include/ui/KeycodeLabels.h,在KEYCODES[]數(shù)組后面順序添加:

...

{ "RED", 141},

{ NULL, 0 }

注意:

a) 追加的按鍵須在末行的{ NULL, 0 }前面。 在這個(gè)地方,會(huì)將RED等這些字符串轉(zhuǎn)換成數(shù)值、鍵值,傳送到KeyEvent.java中。

b) RED后面的數(shù)值,需要與客戶協(xié)商,客戶APK應(yīng)該專門處理這個(gè)新建的141值。

c) 141的值不應(yīng)與其他keycode重復(fù),建議新增鍵的取值依照上文的值,依次累加。

5)在frameworks/base/core/res/res/values/attrs.xml中追加:

6)在frameworks/base/core/java/android/view/KeyEvent.java中添加:

public static final int KEYCODE_RED = 141;

KeyEvent.java中添加的數(shù)值要與上面attrs.xml中的數(shù)值保持一致,如果是在最后面追加的話,需要注意修改LAST_KEYCODE的值 為最后一個(gè)。

7)修改完后,需要在根目錄下先執(zhí)行make update-api更新current.xml(frameworks\base\api目錄下)文件,再進(jìn)行編譯,否則會(huì)報(bào)錯(cuò)。

補(bǔ)充說明:不同的android版本,可能添加的方式不一樣,最近在看5.1的時(shí)候,發(fā)現(xiàn)機(jī)制又變了。留意keyevent.java中的注釋部分即可。


相關(guān)資源參考:



相關(guān)閱讀:

晶晨s905l(-b)p211 android 9.0(atv 9)固件


電視盒子紅外遙控器怎么適配 ?Amlogic盒子紅外遙控適配心得

評(píng)分

參與人數(shù) 1金幣 +1 收起 理由
wyh21cn + 1 精品文章

查看全部評(píng)分


上一篇:電視盒子紅外遙控器怎么適配 ?Amlogic盒子紅外遙控適配心得
下一篇:晶晨S905L芯片系列刷機(jī)包(一包通刷)
沙發(fā)
發(fā)表于 2024-8-16 15:26 | 只看該作者 | 來自廣東
圍觀學(xué)習(xí)一下
板凳
發(fā)表于 2024-8-16 16:44 | 只看該作者 | 來自浙江
謝謝樓主分享
地板
發(fā)表于 2024-8-16 17:48 | 只看該作者 | 來自遼寧
學(xué)習(xí)了!謝謝。
5#
發(fā)表于 2024-8-21 12:24 | 只看該作者 | 來自北京
感謝分享
6#
發(fā)表于 2024-8-21 16:26 來自ZNDS手機(jī)版 | 只看該作者 | 來自遼寧
謝謝分享太深?yuàn)W了
7#
發(fā)表于 2024-10-5 23:10 | 只看該作者 | 來自福建
感謝分享,支持
8#
發(fā)表于 2024-10-11 21:02 來自ZNDS手機(jī)版 | 只看該作者 | 來自江西
謝謝分享
9#
發(fā)表于 2024-10-15 09:30 | 只看該作者 | 來自山東

謝謝分享
10#
發(fā)表于 2024-10-19 06:45 來自ZNDS手機(jī)版 | 只看該作者 | 來自福建
感謝樓主分享指導(dǎo)。

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號(hào) )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號(hào)

GMT+8, 2024-11-20 03:35 , Processed in 0.070285 second(s), 15 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報(bào):report#znds.com (請(qǐng)將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表