遥控器测试程序相关技术文档

遥控器测试程序相关技术文档


1. 关于如何屏蔽部分特殊按键
遥控器中有些特殊按键是经过Android 特殊处理的 ,在--中,这些特殊按键会妨碍遥控器按钮的测试,所以必须屏蔽。
屏蔽的方法有一下几种:
1. 在PhoneWindowManager.java中,对于特殊按钮部分的代码进行处理。
2. 在onkeydown()方法中,获得对应按钮的keycode之后,进行自己想要的操作,然后 return true。但是这种处理只能对
   部分按钮有效果,如vol+,vol- 等,但对于Home,Power键是无效的。而且这种处理只有在当前的activiy中才会有效,在
   别的界面中就失效了,局限性很严重。
3. 在framework中修改,遥控器中的每个按钮在整个源码中都是有码值表对应的,而且Android应用层和linux层各有一张。
   Android应用层:
路径:frameworks/base/include/ui/KeycodeLabels.h 
格式:   { "A", 29 },  { "B", 30 }, { "C", 31 },通过键值对的方式进行存储的。字符串是遥控器上的按键,
数值是对应的onkeydown()中的Keycode。
   linux层:
地址:frameworks/base/data/keyboards/Generic.kl
格式:key 16    Q   ,Q指的是按钮, 16是底层传上来的一个数值,在linux层中使用。
可以看出这两个表是互相联系的,通过按钮的文字信息可以将两个表关联起来。这里,对于一些特殊键,只需要改变Android应用层
的码值就可以了,因为特殊处理是在应用层中的PhoneWindowManager.java中,在onkeydown()方法中,只需要接收你更改后的那
个码值就可以了,同时也屏蔽了特栓按钮。


2. 关于如何得到不确定按键的码值
打开串口,在串口中输入getevent指令,此时按下某个不确定的按钮 ,终端会出现如下结果:
/dev/input/event8: 0004 0004 000c01b6
/dev/input/event8: 0001 00e2 00000001
/dev/input/event8: 0000 0000 00000000
看第二行第二列的值: e2 ,这是16进制的数值,转换为10进制为226 ,在Generic.kl中对应226查询结果为key 226   MEDIA_BROWSER
,然后再通过MEDIA_BROWSER ,在KeycodeLabels.h 中找出对应 MEDIA_BROWSER 的数值,就是keyevent 中要得到的keycode。


3. 关于如何重新定义按钮
1.获得按钮的原始ir值  :IR scan keycode: 0xcd323e01
2.在kernel/include/linux/input.h 中定义自己按钮的名称 如:#define KEY_WJ_TV   248
3.到kernel/drivers/amlogic/input/irremote/cvt_iptv_rc_decoder.h  ,将ir值和名称关联定义 ,如:
 {0xcc333e01, KEY_WJ_TV, 0},
          {0xcd323e01, KEY_WJ_TV, 0},
4.在以下的文件中都要加上
(1)+++ b/include/ui/KeycodeLabels.h
@@ -249,6 +249,10 @@ static const KeycodeLabel KEYCODES[] = {
    { "TV_REPEAT", 221},
    { "TV_SUBTITLE", 222},
    { "TV_SWITCH", 223},
+
+
+    { " APPS_VIEW ", 224},
+


<2>
+++ b/core/res/res/values/attrs.xml 
@@ -1508,6 +1508,9 @@ 
<enum name="KEYCODE_EARLY_POWER" value="218" /> 
<enum name="KEYCODE_TV_SLEEP" value="219" /> 


+        <enum name="KEYCODE_APPS_VIEW" value="224" /> 



<3>
+++ b/core/java/android/view/KeyEvent.java
@@ -618,8 +618,10 @@ public class KeyEvent extends InputEvent implements Parcela
public static final int KEYCODE_TV_SUBTITLE = 222;


public static final int KEYCODE_TV_SWITCH = 223;
+
+    public static final int KEYCODE_APPS_VIEW = 224;


-    private static final int LAST_KEYCODE = KEYCODE_TV_SWITCH;
+    private static final int LAST_KEYCODE = KEYCODE_APPS_VIEW;


    // NOTE: If you add a new keycode here you must also add it to:
    //  isSystem()
@@ public class KeyEvent extends InputEvent implements Parcelab
names.append(KEYCODE_TV_REPEAT, "KEYCODE_TV_REPEAT");
names.append(KEYCODE_TV_SUBTITLE, "KEYCODE_TV_SUBTITLE");
names.append(KEYCODE_TV_SWITCH, "KEYCODE_TV_SWITCH");
     names.append(KEYCODE_APPS_VIEW, "KEYCODE_APPS_VIEW");
    };
5. 在板卡的系统中/system/usr/keylayout/Generic.kl 和 qwerty.kl  中都加上 key 248   KEY_WJ_TV。  




4. 过程中出现的问题处理
1. 在新定义按钮后,在编译的过程中会出现以下的问题:
You have tried to change the API from what has been previously approved.
并有以下的提示:、
******************************
You have tried to change the API from what has been previously approved.
To make these errors go away, you have two choices:
  1) You can add "@hide" javadoc comments to the methods, etc. listed
in the
     errors above.
  2) You can update current.xml by executing the following commands:
p4 edit frameworks/base/api/current.xml
make update-api
     To check in the revised current.xml, you will need OWNERS
approval.
******************************


解决办法:
1. 在你添加的API或者变量前面,(在java类中找到自己定义的变量)增加javadoc 注释@hide。但是要注意的是,
并不是简单写个@hide 或者 /*@hide*/ 就可以了,这些都是错误的javadoc注释格式,标准的javadoc都是这样的 /**  */ 而且
对于 format 变量 应该加上 {  }。所以我们应该这样写  /** {@hide} */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值