Android 智能TV电视系统遥控器键值添加

Android键值中遥控器中的添加,下面是在mstar平台上的添加,做一个记录,以后方便找到,使用。
1,遥控按键键值映射标准化表示例:


自定义的按键名(中文) 自定义的按键名(英文) 红外码值(东芝码) linux层键值映射 android层按键名(KeyEvent.java) android层键值映射 是否广播以全局响应


以下是普通遥控键值
待机[短按] SKY_KEY_POWER 0CH 0x74 KEYCODE_POWER 26
1【*/@】 SKY_KEY_1 01H 0x2 KEYCODE_1 8
交替 SKY_KEY_ALTERNATE 0BH 0x1d1 KEYCODE_ALTERNATE 226


例:添加交替键值--ALTERNATE
2,修改驱动(kernel):
ps:修改在kernel中的驱动
1、kernel\2.6.35.11\drivers\media\IR\keymaps\rc-skyworth-tv.c
在static struct ir_scancode skyworth_tv[]表中添加:
{ 0x000B , KEY_FN_ESC }, //KEYCODE_ALTERNATE
    a、0x000B 为红外码值。
    b、KEY_FN_ESC 在kernel\2.6.35.11\include\linux\input.h中有定义:#define KEY_FN_ESC 0x1d1
        注意:不能往input.h中添加定义,一定是里面已有的定义才拿来用!
2、编译驱动:
在kernel\2.6.35.11目录下
$> cp  .config_amber3_SMP_android_emmc  .config
$> ./genlink.sh
$> make menuconfig
如果有改动,则Save and exit
$> make


修改kl文件Vendor_1918_Product_0001.kl :
添加:key 465      ALTERNATE
465对应于input.h中定义的linux键值0x1d1


 
1、\\172.20.32.73\harry\mstar\ics\device\skyworth\skywortha3\modules
rc-skyworth-tv.ko
mdrv-ir.ko
2、\\172.20.32.73\harry\mstar\ics\device\skyworth\skywortha3
*.kl  --对应kl文件是linux到Android的键值映射
*.idc
3、mk文件
PRODUCT_COPY_FILES := \
$(LOCAL_KERNEL):kernel \
device/skyworth/skywortha3/init.amber3.rc:root/init.amber3.rc


# IR/keymap kernel module
PRODUCT_COPY_FILES += \
device/skyworth/skywortha3/modules/mdrv-ir.ko:system/lib/modules/mdrv-ir.ko \
device/skyworth/skywortha3/modules/rc-skyworth-tv.ko:system/lib/modules/rc-skyworth-tv.ko
# Device idc/keylayout
PRODUCT_COPY_FILES += \
device/skyworth/skywortha3/Vendor_1918_Product_0001.kl:system/usr/keylayout/Vendor_1918_Product_0001.kl \
device/skyworth/skywortha3/Vendor_1918_Product_0002.kl:system/usr/keylayout/Vendor_1918_Product_0002.kl \
device/skyworth/skywortha3/Vendor_1918_Product_0003.kl:system/usr/keylayout/Vendor_1918_Product_0003.kl \
device/skyworth/skywortha3/Vendor_1918_Product_1918.idc:system/usr/idc/Vendor_1918_Product_1918.idc \
device/skyworth/skywortha3/Vendor_3697_Product_0003.idc:system/usr/idc/Vendor_3697_Product_0003.idc \
device/skyworth/skywortha3/Vendor_13ff_Product_0008.idc:system/usr/idc/Vendor_13ff_Product_0008.idc \
device/skyworth/skywortha3/Vendor_0e8f_Product_0035.kl:system/usr/keylayout/Vendor_0e8f_Product_0035.kl \
device/skyworth/skywortha3/Generic.kcm:system/usr/keychars/Generic.kcm
4、init.amber3.rc
    insmod /system/lib/modules/rc-skyworth-tv.ko
    insmod /system/lib/modules/mdrv-ir.ko
5、修改framework层 


KEYCODE_HOME_LONG 761
KEYCODE_BACK_LONG 762
KEYCODE_CENTER_LONG 763
KEYCODE_NEW_SHUTTLE_LEFT 764
KEYCODE_NEW_SHUTTLE_RIGHT 765


①frameworks\base\core\java\android\view\KeyEvent.java
=>修改keycode、name.append  ,定义键值
public static final int KEYCODE_ALTERNATE       = 226;
names.append(KEYCODE_ALTERNATE, "KEYCODE_ALTERNATE");
②frameworks\base\native\include\android\keycodes.h   andriod4.1路径:frameworks\native\include\android\keycodes.h  可以不加 ,定义键值
=>修改enum
AKEYCODE_ALTERNATE       = 226,
③frameworks\base\include\ui\KeycodeLabels.h    andriod4.1路径:frameworks\base\include\androidfw\KeycodeLabels.h
=>修改static const KeycodeLabel KEYCODES[]
{ "ALTERNATE", 226},
④external\webkit\Source\WebKit\android\plugins\ANPKeyCodes.h   可以不加
=>修改enum ANPKeyCodes 
kAlternate_ANPKeyCode          = 226,
⑤frameworks\base\core\res\res\values\attrs.xml
=>修改
标签中增加:
6、修改ics\frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java
ps:这部分主要是对键值进行处理的地方
interceptKeyBeforeDispatching函数中,也可能在interceptKeyAfterDispatching函数中,或者dispatchUnhandledKey函数中,看需求
if (down) {// handler mute,volume_up,volume_down,share before dispatch key to app.
            if (keyCode == KeyEvent.KEYCODE_SENSE_ALL//靠近键控板感应,247
                    || keyCode == KeyEvent.KEYCODE_SENSE_MENU//靠近键控板菜单键感应,248
                    || keyCode == KeyEvent.KEYCODE_SENSE_CENTER//靠近键控板确定键感应,249
                    || keyCode == KeyEvent.KEYCODE_SENSE_BACK//靠近键控板返回键感应,250
                    || keyCode == KeyEvent.KEYCODE_SENSE_VOLUME_UP//靠近键控板音量加感应,251
                    || keyCode == KeyEvent.KEYCODE_SENSE_VOLUME_DOWN//靠近键控板音量减感应,252
                    || keyCode == KeyEvent.KEYCODE_SENSE_CHANNEL_UP//靠近键控板频道加感应,253
                    || keyCode == KeyEvent.KEYCODE_SENSE_CHANNEL_DOWN//靠近键控板频道减感应,254
                    || keyCode == KeyEvent.KEYCODE_SENSE_LEAVE//离开键控板频道减感应,255
                 ……
) {//发广播,将键值广播出去,供service获取
                Intent intent = new Intent("com.android.sky.SendHotKey");
                intent.putExtra("specialKey", keyCode);
                    mContext.sendBroadcast(intent);
                Log.d(TAG, "sendBroadcast: com.android.sky.SendHotKey# key:"+keyCode);
            }
        }

你可能感兴趣的:(Android)