您的位置:首页 > 移动开发 > Android开发

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

2016-06-14 17:24 811 查看
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 遥控器定制