这几天在研究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的内容:
[java]
#*********************************************************************************************************
#this file is configuration for each factory remote device
#work_mode0 :software mode1 :hardware mode
#repeat_enable0 :disable repeat 1 :enable repeat
#
#factory_codeeach device has it's unique factory code.
#pattern:custom_code(16bit)+index_code(16bit)
#examble: 0xff000001 = 0xff00(custom cod)0001 (index)
#
#release_delayunit:ms.release will report from kernel to user layer after this period of time
#from press or repeat triggered.
#
#debug_enable0 :debug disable1 :debug disable
#
# SW MODE:
#bit_counthow many bits in each frame
#tw_leader_acttime window for leader active
#tw_bit0time window for bit0 time.
#tw_bit1time window for bit1 time
#tw_repeat_leadertime window for repeat leader
# REG
#reg_base_genset value for PREG_IR_DEC_BASE_GEN
#reg_controlset value for PREG_IR_DEC_CONTROL
#reg_leader_actset value for PREG_IR_DEC_LEADER_ACTIVE
#reg_leader_idleset value for PREG_IR_DEC_LEADER_IDLE
#reg_repeat_leader set value for PREG_IR_DEC_REPEAT_IDLE
#reg_bit0_timeset 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
这个是我修改之后的,首先看下这部分:
[java]
#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剩下的部分:
[java]
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内容:
[java]
key 399GRAVE
key 1BACK
key 21
key 32
key 43
key 54
key 65
key 76
key 87
key 98
key 109
key 110
key 15BACK
key 158BACK
key 58SOFT_RIGHT
key 107ENDCALL
key 62ENDCALL
key 139MENU
key 125MENU
key 60NOTIFICATION
key 127SEARCH
key 217SEARCH
key 228POUND
key 227STAR
key 231CALL
key 61CALL
key 97DPAD_CENTER
key 232DPAD_CENTER
key 108DPAD_DOWN
key 103DPAD_UP
key 102HOME
key 105DPAD_LEFT
key 106DPAD_RIGHT
key 115VOLUME_UP
key 114VOLUME_DOWN
key 104VOLUME_UP
key 109VOLUME_DOWN
key 212CAMERA
key 16Q
key 17W
key 18E
key 19R
key 20T
key 21Y
key 22U
key 23I
key 24O
key 25P
key 26LEFT_BRACKET
key 27RIGHT_BRACKET
key 43BACKSLASH
key 30A
key 31S
key 32D
key 33F
key 34G
key 35H
key 36J
key 37K
key 38L
key 39SEMICOLON
key 40APOSTROPHE
key 14DEL
key 44Z
key 45X
key 46C
key 47V
key 48B
key 49N
key 50M
key 51COMMA
key 52PERIOD
key 53SLASH
key 28ENTER
key 56ALT_LEFT
key 100ALT_RIGHT
key 42SHIFT_LEFT
key 54SHIFT_RIGHT
#key 15TAB
key 57SPACE
key 70EXPLORER
key 155ENVELOPE
key 12MINUS
key 13EQUALS
key 215AT
key 119MEDIA_PLAY_PAUSE
key 122MEDIA_PREVIOUS
key 123MEDIA_NEXT
key 120MEDIA_FAST_FORWARD
key 121MEDIA_REWIND
key 116POWER WAKE
key 113VOLUME_MUTE
key 128MEDIA_STOP
key 130ZOOM_IN
key 131ZOOM_OUT
key 133TAB
key 140F10
里面有一个:
[java]
key 108DPAD_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为:
[java]
#*********************************************************************************************************
#this file is configuration for each factory remote device
#work_mode0 :software mode1 :hardware mode
#repeat_enable0 :disable repeat 1 :enable repeat
#
#factory_codeeach device has it's unique factory code.
#pattern:custom_code(16bit)+index_code(16bit)
#examble: 0xff000001 = 0xff00(custom cod)0001 (index)
#
#release_delayunit:ms.release will report from kernel to user layer after this period of time
#from press or repeat triggered.
#
#debug_enable0 :debug disable1 :debug disable
#
# SW MODE:
#bit_counthow many bits in each frame
#tw_leader_acttime window for leader active
#tw_bit0time window for bit0 time.
#tw_bit1time window for bit1 time
#tw_repeat_leadertime window for repeat leader
# REG
#reg_base_genset value for PREG_IR_DEC_BASE_GEN
#reg_controlset value for PREG_IR_DEC_CONTROL
#reg_leader_actset value for PREG_IR_DEC_LEADER_ACTIVE
#reg_leader_idleset value for PREG_IR_DEC_LEADER_IDLE
#reg_repeat_leader set value for PREG_IR_DEC_REPEAT_IDLE
#reg_bit0_timeset 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里面这些的详细说明,我这里就不作说明,我就说下这些数据怎么来的,不知道有没有说清楚。