Amlogic android TV 遥控器按键新增流程

Amlogic android TV 遥控器按键新增流程:

最近拿到 Amlogic android TV 960 方案,新增了一套自定义的遥控器按键功能,整理分享给需要的小伙伴参考;对于Amlogic 962/972方案都是大同小异。

Android 增加按键分为两大部分,一是linux层,二是android层,两个部分分别有按键映射文件。先把遥控器的 scancode 对应到 linux层定义的键值上,此处是键值对的形式;再是把linux层键值对应到Android的键值上;其余要做的就是几个文件上键值的定义。下面列出对应的文件:

一. linux层需要添加按键定义的文件:

common\include\uapi\linux\input.h
bionic\libc\kernel\uapi\linux\input.h

common\arch\arm\boot\dts\include\dt-bindings\input\input.h --> common\include\dt-bindings\input\input.h(这两个文件其实是link的关系,修改一个,另一个会自动添加)

以上三个文件中添加 linux层按键定义,如 #define KEY_MTC_FAC_NEC_WB_SET_START         690

common\arch\arm64\boot\dts\amlogic\mesontxl.dtsi---》对于此文件中增加遥控器按键scancode对应的linux层键值对,

在已有的map里增加新的key,也可以自己新增一个 IR map举例如下:
REMOTE_KEY(0xB0, KEY_MTC_FAC_NEC_WB_SET_START)

具体代码部分参考:

在这里可以新增map,要注意map数组的大小:
	custom_maps:custom_maps {
		mapnum = <7>;
		map0 = <&map_0>;
		map1 = <&map_1>;
		map2 = <&map_2>;
		map3 = <&map_3>;
                map4 = <&map_4>;
		map5 = <&map_5>;
		map6 = <&map_6>;
		map_0: map_0{
			mapname = "amlogic-remote-1";
			customcode = <0xfb04>;
			release_delay = <80>;
			size  = <44>;   /*keymap size*/
			keymap = <REMOTE_KEY(0x01, KEY_1)
				REMOTE_KEY(0x02, KEY_2)
				REMOTE_KEY(0x03, KEY_3)



我是在原有的map里增加按键:
	map_3: map_3{ //shen@20210317 add for MTC WB IR KEY
			mapname = "amlogic-remote-4"; 
			customcode = <0xdd22>;
			release_delay = <80>;
			size  = <121>;   /*keymap size*/
			keymap = <REMOTE_KEY(0x3C, KEY_MTC_FAC_NEC_WB_DATA_60)
				REMOTE_KEY(0x3D, KEY_MTC_FAC_NEC_WB_DATA_61)
				REMOTE_KEY(0x3E, KEY_MTC_FAC_NEC_WB_DATA_62)
				REMOTE_KEY(0x3F, KEY_MTC_FAC_NEC_WB_DATA_63)
				REMOTE_KEY(0x40, KEY_MTC_FAC_NEC_WB_DATA_64)
				REMOTE_KEY(0x41, KEY_MTC_FAC_NEC_WB_DATA_65)
				REMOTE_KEY(0x42, KEY_MTC_FAC_NEC_WB_DATA_66)
				REMOTE_KEY(0x43, KEY_MTC_FAC_NEC_WB_DATA_67)
				REMOTE_KEY(0x44, KEY_MTC_FAC_NEC_WB_DATA_68)
                中间还有好多键值对映射,就不全列出来了
                REMOTE_KEY(0xB0, KEY_MTC_FAC_NEC_WB_SET_START)

在Linux还有一点要注意:默认的input.h里按键定义个数是 0x2ff,如果自定义的按键个数大于这个数,记得要改哦

/* We avoid low common keys in module aliases so they don't get huge. */
#define KEY_MIN_INTERESTING    KEY_MUTE
#define KEY_MAX            0x3ff
#define KEY_CNT            (KEY_MAX+1)

另外在这里 common\include\linux\mod_devicetable.h 也定义各种key的最大个数,也要一并改到位

/* #define INPUT_DEVICE_ID_KEY_MAX        0x2ff */
#define INPUT_DEVICE_ID_KEY_MAX        0x3ff   /* shen@20210323 modify */

以上就是linux层要改动的部分

二. Android 层修改的文件:

frameworks\native\include\android\keycodes.h
增加定义 AKEYCODE_MTC_FAC_NEC_WB_SET_START            = 5001,    

frameworks\native\include\input\InputEventLabels.h
增加定义     DEFINE_KEYCODE(MTC_FAC_NEC_WB_SET_START),

frameworks\base\core\java\android\view\KeyEvent.java
增加定义 public static final int KEYCODE_MTC_FAC_NEC_WB_SET_START         = 5001;

frameworks\base\core\res\res\values\attrs.xml
增加         <enum name="KEYCODE_MTC_FAC_NEC_WB_SET_START" value="5001" />

system\core\toolbox\getevent.h---》这个文件很关键,这里是把linux的按键get到android层的定义增加
增加定义 LABEL(KEY_MTC_FAC_NEC_WB_SET_START), 

以上文件都是Android层关于按键key的定义

device\amlogic\p34a9\files\Vendor_0001_Product_0001.kl ---》这里就是linux层到Android的映射键值对
增加映射 key    690            MTC_FAC_NEC_WB_SET_START   

到这里就把 遥控器 scancode REMOTE_KEY(0xB0, KEY_MTC_FAC_NEC_WB_SET_START)---》KEY_MTC_FAC_NEC_WB_SET_START         690---》 690            MTC_FAC_NEC_WB_SET_START   映射到了android层的 MTC_FAC_NEC_WB_SET_START   了

到这里所有自定义遥控按键增加完毕,接下来就是在Framework/base下对新增按键的处理了,这里对其不再讲述了,关于framework/base下按键的处理流程,请小伙伴们自行搜索下,CSDN上有很多资源了;

另外在调试的过程中用到如下命令,用于查看输入设备及输入的键值


getevent -l/getevent -v  查看遥控器对应的设备 /dev/input/event3

dumpsys input ,可以根据所连接的遥控器的名称找到遥控器对应的kl文件。

input keycode 5001----》在Android层调试按键功能用到,发送的是Android定义的按键。

以上是个人总结,请参考,若有疑问,可留言讨论

猜你喜欢

转载自blog.csdn.net/bingsfsg/article/details/115465117