转自http://blog.sina.com.cn/s/blog_5f1ebb8f0101qn7b.html
Android键值中遥控器中的添加,http://blog.sina.com.cn/s/blog_5f1ebb8f0101qn7b.html下面是在mstar平台上的添加,做一个记录,以后方便找到,使用。
1,遥控按键键值映射标准化表示例:
a、0x000B
为红外码值。
b、KEY_FN_ESC
在kernel\2.6.35.11\include\linux\input.h中有定义:#define KEY_FN_ESC 0x1d1
注意:
不能往input.h中添加定义,一定是里面已有的定义才拿来用!
insmod /system/lib/modules/rc-skyworth-tv.ko
insmod /system/lib/modules/mdrv-ir.ko
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
……
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);
}
}
自定义的按键名(中文) | 自定义的按键名(英文) | 红外码值(东芝码) | 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
2、编译驱动:
在kernel\2.6.35.11目录下
$>
cp .config_amber3_SMP_android_emmc
.config
$>
$>
如果有改动,则Save
$>
修改kl文件Vendor_1918_Product_0001.kl
添加:key 465
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
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:这部分主要是对键值进行处理的地方
interceptKeyBeforeDispat ching函数中,也可能在interceptKeyAfterDispatc hing函数中,或者dispatchUnhandledKey函数中,
看需求
if (down) {// handler mute,volume_up,volume_down,share before dispatch key to app.
) {
//发广播,将键值广播出去,供service获取