Android红外摇控与remote.conf

这几天在研究Amlogic的红外摇控,主要涉及到/system/etc/remote.conf和/system/usr/keylayout/Vendor_0001_Product_0001.kl这两个文件,其实一般情况下只需要修改/system/etc/remote.conf这个文件就可以了,下面我们来介绍下remote.conf怎么修改.

换摇控之后,你按键会出现这样的打印信息:

[  727.416139@0] Wrong custom code is 0x2dd2ff00
[  727.868522@0] Wrong custom code is 0x6699ff00
[  728.217197@0] Wrong custom code is 0x3ec1ff00
[  728.626735@0] Wrong custom code is 0x2dd2ff00
[  728.929900@0] Wrong custom code is 0x6699ff00
[  729.239544@0] Wrong custom code is 0x3ec1ff00

如果按键没这些,请在终端执行remotecfg,如果还是没有执行下dmesg查看下内核信息.

我们来看下remote.conf的内容:

#*********************************************************************************************************
#this file is configuration for each factory remote device
# 	work_mode	  0 :software mode  1 :hardware mode 
#	repeat_enable	  0 :disable repeat 1 :enable repeat	
#
#	factory_code      each device has it's unique factory code. 
#			  pattern:custom_code(16bit)+index_code(16bit)
#			  examble: 0xff000001 = 0xff00(custom cod)  0001 (index)
#
#	release_delay	  unit:ms.release will report from kernel to user layer after this period of time
#			  from press or repeat triggered. 
#
#	debug_enable      0 :debug disable  1 :debug disable
#
# SW MODE:
#	bit_count	  how many bits in each frame	  
#	tw_leader_act	  time window for leader active 
#	tw_bit0		  time window for bit0 time.
#	tw_bit1		  time window for bit1 time
#	tw_repeat_leader  time window for repeat leader
# REG
#	reg_base_gen	  set value for PREG_IR_DEC_BASE_GEN	
#	reg_control	  set value for PREG_IR_DEC_CONTROL
#	reg_leader_act	  set value for PREG_IR_DEC_LEADER_ACTIVE
#	reg_leader_idle	  set value for PREG_IR_DEC_LEADER_IDLE
#	reg_repeat_leader set value for PREG_IR_DEC_REPEAT_IDLE
#	reg_bit0_time	  set value for PREG_IR_DEC_BIT0_TIME
#************************************************************************************************************* 
#amlogic NEC remote
factory_code	= 0xff000001 
work_mode  		= 1
repeat_enable = 1
release_delay	=	150
debug_enable 	= 1
reg_control	= 0xfbe40
#left 0x6699ff00
left_key_scancode  = 0x99
right_key_scancode = 0xc1
up_key_scancode    = 0xca
down_key_scancode  = 0xd2
ok_key_scancode    = 0xce

key_begin
		0x99 105
		0xc1 106
		0xca 103
		0xd2 108
	        0xce 28
		0x92 2
		0x93 3
key_end
这个是我修改之后的,首先看下这部分:

#amlogic NEC remote
factory_code	= 0xff000001 
work_mode  		= 1
repeat_enable = 1
release_delay	=	150
debug_enable 	= 1
reg_control	= 0xfbe40
这里只有factory_code需要进行修改,我们按键之后的打印信息如下:

[  727.416139@0] Wrong custom code is 0x2dd2ff00
[  727.868522@0] Wrong custom code is 0x6699ff00
[  728.217197@0] Wrong custom code is 0x3ec1ff00
[  728.626735@0] Wrong custom code is 0x2dd2ff00
[  728.929900@0] Wrong custom code is 0x6699ff00
[  729.239544@0] Wrong custom code is 0x3ec1ff00

可以看到后16位是不变的都是ff00,有的可能是在高16位例如:

[  728.929900@0] Wrong custom code is 0xff002dd2
[  729.239544@0] Wrong custom code is 0xff003ec1

这是我乱编的,当然也有可能不是ff00也有可能是其它的,所以这里我们得到factory_code

factory_code就是0xff000001,前面得到的ff00在高位,低位的0001网上说可以随便写,不过这里还是写成0001

我们依次读到各个按键所打印出的数据:

[  727.416139@0] Wrong custom code is 0x2dd2ff00
[  727.868522@0] Wrong custom code is 0x6699ff00
[  728.217197@0] Wrong custom code is 0x3ec1ff00
[  728.626735@0] Wrong custom code is 0x2dd2ff00
[  728.929900@0] Wrong custom code is 0x6699ff00

[  729.239544@0] Wrong custom code is 0x3ec1ff00

这些code就是对应的按键信息:

up: 0x35caff00

down:0x2dd2ff00

left:0x6699ff00

right:0x3ec1ff00

这里我就只说这几个了,其它的按键方法都是一样.

我们看到remote.conf剩下的部分:

left_key_scancode  = 0x99
right_key_scancode = 0xc1
up_key_scancode    = 0xca
down_key_scancode  = 0xd2
ok_key_scancode    = 0xce

key_begin
		0x99 105
		0xc1 106
		0xca 103
		0xd2 108
	        0xce 28
		0x92 2
		0x93 3
key_end
left_key_scancode后面的是一个8位的数和key_begin下面的以0x开关的数都是从

[  727.416139@0] Wrong custom code is 0x2dd2ff00
[  727.868522@0] Wrong custom code is 0x6699ff00
[  728.217197@0] Wrong custom code is 0x3ec1ff00
[  728.626735@0] Wrong custom code is 0x2dd2ff00
[  728.929900@0] Wrong custom code is 0x6699ff00

[  729.239544@0] Wrong custom code is 0x3ec1ff00

这些数据里面解析出来的,而key_begin后面的105 106 这些都是对应的系统的键码

我们先来看下前面的那个0x的数据怎么得到,首先以0x2dd2ff00为例,这个在摇控器上是对应的方向键down

0x2dd2ff00去掉产家代号ff00后剩下的就是2dd2了,remote.conf中的数值码就是以0x开关的那个要么就是0x2d要么就是0xd2,不是高8位就是低8位,这个不同的产家有可能不一样,像我这个就是低8位0xd2,这个我是试了之后才知道的。

不过也可以不用试就可以得出,首先得记录摇控器各个按键的编码,然后修改remote.conf的factory_code后,重启盒子,然后你在按键的时候就会出来这样的信息:

[  145.727698@0] scancode is 0x008a, invalid key is 0x0000.
[  145.868198@0] scancode is 0x008a, invalid key is 0x0000.
[  166.160143@0] scancode is 0x008b, invalid key is 0x0000.
[  166.308242@0] scancode is 0x008b, invalid key is 0x0000.

这个0x008a,8a是低8位,所以可以确定低8位是按键数值码.

下面说下remote.conf后面的105 103这些值,这些都是系统键码,码值定义一般是在内核源码include/linux/input.h中,然后在/system/usr/keylayout/Vendor_0001_Product_0001.kl中也会出现部分,当你要用的按键功能这个.kl里没有的时候你就可以去input.h里找.

我们看下/system/usr/keylayout/Vendor_0001_Product_0001.kl内容:

key 399   GRAVE
key 1     BACK
key 2     1
key 3     2
key 4     3
key 5     4
key 6     5
key 7     6
key 8     7
key 9     8
key 10    9
key 11    0
key 15    BACK
key 158   BACK
key 58    SOFT_RIGHT
key 107   ENDCALL
key 62    ENDCALL
key 139    MENU
key 125    MENU
key 60    NOTIFICATION
key 127   SEARCH
key 217   SEARCH
key 228   POUND
key 227   STAR
key 231   CALL
key 61    CALL
key 97    DPAD_CENTER
key 232   DPAD_CENTER
key 108   DPAD_DOWN
key 103   DPAD_UP
key 102   HOME
key 105   DPAD_LEFT
key 106   DPAD_RIGHT
key 115   VOLUME_UP
key 114   VOLUME_DOWN
key 104   VOLUME_UP
key 109   VOLUME_DOWN
key 212   CAMERA

key 16    Q
key 17    W
key 18    E
key 19    R
key 20    T
key 21    Y
key 22    U
key 23    I
key 24    O
key 25    P
key 26    LEFT_BRACKET
key 27    RIGHT_BRACKET
key 43    BACKSLASH

key 30    A
key 31    S
key 32    D
key 33    F
key 34    G
key 35    H
key 36    J
key 37    K
key 38    L
key 39    SEMICOLON
key 40    APOSTROPHE
key 14    DEL

key 44    Z
key 45    X
key 46    C
key 47    V
key 48    B
key 49    N
key 50    M
key 51    COMMA
key 52    PERIOD
key 53    SLASH
key 28    ENTER

key 56    ALT_LEFT
key 100   ALT_RIGHT
key 42    SHIFT_LEFT
key 54    SHIFT_RIGHT
#key 15    TAB
key 57    SPACE
key 70    EXPLORER
key 155   ENVELOPE

key 12    MINUS
key 13    EQUALS
key 215   AT
key 119   MEDIA_PLAY_PAUSE
key 122   MEDIA_PREVIOUS
key 123   MEDIA_NEXT
key 120   MEDIA_FAST_FORWARD
key 121   MEDIA_REWIND
key 116   POWER	WAKE
key 113   VOLUME_MUTE
key 128   MEDIA_STOP
key 130   ZOOM_IN
key 131   ZOOM_OUT
key 133   TAB
key 140   F10
里面有一个:

key 108   DPAD_DOWN

这个108就是down对应的系统键码

前面我们说到摇控器down对应的编码是0x2dd2ff00

按键数值码是0xd2,功能是down,所以在key_begin里就应该是:

0xd2 108

我的摇控器部分编码:

up:0x35caff00

down:0x2dd2ff00

left:0x6699ff00

right:0x3ec1ff00

1:0x6d92ff00

2:0x6c93ff00

所以最后的remote.conf为:

#*********************************************************************************************************
#this file is configuration for each factory remote device
# 	work_mode	  0 :software mode  1 :hardware mode 
#	repeat_enable	  0 :disable repeat 1 :enable repeat	
#
#	factory_code      each device has it's unique factory code. 
#			  pattern:custom_code(16bit)+index_code(16bit)
#			  examble: 0xff000001 = 0xff00(custom cod)  0001 (index)
#
#	release_delay	  unit:ms.release will report from kernel to user layer after this period of time
#			  from press or repeat triggered. 
#
#	debug_enable      0 :debug disable  1 :debug disable
#
# SW MODE:
#	bit_count	  how many bits in each frame	  
#	tw_leader_act	  time window for leader active 
#	tw_bit0		  time window for bit0 time.
#	tw_bit1		  time window for bit1 time
#	tw_repeat_leader  time window for repeat leader
# REG
#	reg_base_gen	  set value for PREG_IR_DEC_BASE_GEN	
#	reg_control	  set value for PREG_IR_DEC_CONTROL
#	reg_leader_act	  set value for PREG_IR_DEC_LEADER_ACTIVE
#	reg_leader_idle	  set value for PREG_IR_DEC_LEADER_IDLE
#	reg_repeat_leader set value for PREG_IR_DEC_REPEAT_IDLE
#	reg_bit0_time	  set value for PREG_IR_DEC_BIT0_TIME
#************************************************************************************************************* 
#amlogic NEC remote
factory_code	= 0xff000001 
work_mode  		= 1
repeat_enable = 1
release_delay	=	150
debug_enable 	= 1
reg_control	= 0xfbe40
#left 0x6699ff00
left_key_scancode  = 0x99
right_key_scancode = 0xc1
up_key_scancode    = 0xca
down_key_scancode  = 0xd2
ok_key_scancode    = 0xce

key_begin
		0x99 105
		0xc1 106
		0xca 103
		0xd2 108
	        0xce 28
		0x92 2
		0x93 3
key_end
网上有一对remote.conf里面这些的详细说明,我这里就不作说明,我就说下这些数据怎么来的,不知道有没有说清楚。



你可能感兴趣的:(android系统,amlogic)