Mstar Android下添加新的自定义键值和按键处理流程

本文介绍了在Mstar智能电视上添加新的自定义键值及按键处理流程。通过查看 `/proc/bus/input/devices` 文件,可以看到当前设备的按键信息,如 IR 接收器的键值。在Android系统的按键映射文件中,详细定义了各种按键的值和行为,包括电源键、方向键、音量键等。添加新键值需要修改这些映射文件,并理解按键处理流程。
摘要由CSDN通过智能技术生成
Android下添加新的自定义键值和按键处理流程
   
    首先分析下Android下怎么添加新的自定义键值。在Android的原生系统中键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢?
    在介绍Android怎么添加新的键值以前先介绍下Android下INPUT子系统FLOW的流程,下面就是精简的流程图示意图:



    1.添加按键及其映射
    1)如果系统有新的按键需要添加,玛门是怎么添加并上报到系统上层去的呢(这里的上层主要指的是Android应用层),首先要确定的是我们的遥控设备是通过/dev/input目录下那个event调用那个kl文件,这里可以通过如下命令超看cat /proc/bus/input/devices,下面是在终端下的打印信息
  1. <span style="font-family:FangSong_GB2312;font-size:18px;">shell@orange:/ # cat /proc/bus/input/devices   
  2. I: Bus=0018 Vendor=3697 Product=0001 Version=0001  
  3. N: Name="MStar Smart TV IR Receiver"  
  4. P: Phys=/dev/ir  
  5. S: Sysfs=/devices/virtual/rc/rc0/input0  
  6. U: Uniq=  
  7. H: Handlers=kbd event0   
  8. B: PROP=0  
  9. B: EV=13  
  10. B: KEY=fc0000 0 fc900 142851 0 0 0 0 108000 1a8 c0000c01 9e37c0 48007 f8000000 10000ffc  
  11. B: MSC=10  
  12.   
  13. I: Bus=0000 Vendor=0000 Product=0000 Version=0000  
  14. N: Name="MCE IR Keyboard/Mouse (ir)"  
  15. P: Phys=/input0  
  16. S: Sysfs=/devices/virtual/input/input1  
  17. U: Uniq=  
  18. H: Handlers=kbd mouse0 event1   
  19. B: PROP=0  
  20. B: EV=100017  
  21. B: KEY=30000 0 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe  
  22. B: REL=3  
  23. B: MSC=10  
  24.   
  25. shell@orange:/ #   
  26. shell@orange:/ # </span>  

通过打印信息我们可以知道,我们的终端设备使用的是Vendor_3697_Product_0001.kl文件,我这里只分析IT遥控设备,那我们的Vendor_3697_Product_0001.kl里面又是啥呢,我们可以通过cat命令查看,具体的信息如下:
  1. <span style="font-family:FangSong_GB2312;font-size:18px;"># Copyright (C) 2010 The Android Open Source Project  
  2. #  
  3. # Licensed under the Apache License, Version 2.0 (the "License");  
  4. # you may not use this file except in compliance with the License.  
  5. # You may obtain a copy of the License at  
  6. #  
  7. #      http://www.apache.org/licenses/LICENSE-2.0  
  8. #  
  9. # Unless required by applicable law or agreed to in writing, software  
  10. # distributed under the License is distributed on an "AS IS" BASIS,  
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  12. # See the License for the specific language governing permissions and  
  13. # limitations under the License.  
  14.   
  15. #  
  16. # MStar Smart TV IR Receiver.  
  17. #  
  18.   
  19. key 116     POWER                   WAKE  
  20. key 11      0  
  21. key 2       1  
  22. key 3       2  
  23. key 4       3  
  24. key 5       4  
  25. key 6       5  
  26. key 7       6  
  27. key 8       7  
  28. key 9       8  
  29. key 10      9  
  30. key 398     PROG_RED  
  31. key 399     PROG_GREEN  
  32. key 400     PROG_YELLOW  
  33. key 401     PROG_BLUE  
  34. key 103     DPAD_UP  
  35. key 108     DPAD_DOWN  
  36. key 105     DPAD_LEFT  
  37. key 106     DPAD_RIGHT  
  38. key 28      ENTER  
  39. key 402     CHANNEL_UP              WAKE_DROPPED  
  40. key 403     CHANNEL_DOWN            WAKE_DROPPED  
  41. key 115     VOLUME_UP               WAKE_DROPPED  
  42. key 114     VOLUME_DOWN             WAKE_DROPPED  
  43. key 104     PAGE_UP  
  44. key 109     PAGE_DOWN  
  45. key 102     HOME                    WAKE_DROPPED  
  46. key 139     MENU                    WAKE_DROPPED  
  47. key 158     BACK  
  48. key 113     VOLUME_MUTE  
  49. key 167     DVR  
  50. key 138     GUIDE  
  51. key 358     INFO  
  52. #key 82      WINDOW  
  53. #key 79      TV_INPUT  
  54. key 168     MEDIA_REWIND  
  55. key 159     MEDIA_FAST_FORWARD  
  56. key 165     MEDIA_PREVIOUS  
  57. key 163     MEDIA_NEXT  
  58. key 207     MEDIA_PLAY  
  59. key 119     MEDIA_PAUSE  
  60. key 128     MEDIA_STOP  
  61.   
  62. # Common extended  
  63. key 392     SOUND_MODE  
  64. key 212     PICTURE_MODE  
  65. key 372     ASPECT_RATIO  
  66. key 363     CHANNEL_RETURN  
  67. key 142     SLEEP  
  68. key 365     EPG  
  69. key 395     LIST  
  70. #key 370     SUBTITLE  
  71. key 466     MTS  
  72. key 467     FREEZE  
  73. key 468     TTX  
  74. key 469     CC  
  75. key 470     TV_SETTING  
  76. key 471     SCREENSHOT  
  77. key 356     TV_POWER  
  78.   
  79. # Mstar extended  
  80. key 59      MSTAR_BALANCE  
  81. key 60      MSTAR_INDEX  
  82. key 61      MSTAR_HOLD  
  83. key 62      MSTAR_UPDATE  
  84. key 63      MSTAR_REVEAL  
  85. key 64      MSTAR_SUBCODE  
  86. key 65      MSTAR_SIZE  
  87. key 66      MSTAR_CLOCK</span>  

    2)在Vendor_3697_Product_0001.kl文件中添加映射
       key 123 WLS
       说明:
       key -- 是关键字。固定值,不需要改变。
     123 -- 该按键在linux驱动中对应的键值,我在这里只是假设的这个值,至于具体对应的是那个可以查看“include/linux/input.h”
     WLS -- 123按键映射到Android中的按键,它对应是“KeycodeLabels.h”文件中的KEYCODES表格元素的“literal”值。
        其中KeycodeLabels.h的定义如下,我们可以在"MSTAR_PVR_BROWSER", 319后面添加我们需要向Android上层抛的键值,我们这里定义为"WLS", 320,所以当Android上层监听到320的按键值是就是我们新添加的键值了。
  1. <span style="font-family:FangSong_GB2312;font-size:18px;">/* 
  2.  * Copyright (C) 2008 The Android Open Source Project 
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License"); 
  5.  * you may not use this file except in compliance with the License. 
  6.  * You may obtain a copy of the License at 
  7.  * 
  8.  *      http://www.apache.org/licenses/LICENSE-2.0 
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software 
  11.  * distributed under the License is distributed on an "AS IS" BASIS, 
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  13.  * See the License for the specific language governing permissions and 
  14.  * limitations under the License. 
  15.  */  
  16.   
  17.   
  18. #ifndef _LIBINPUT_KEYCODE_LABELS_H  
  19. #define _LIBINPUT_KEYCODE_LABELS_H  
  20.   
  21.   
  22. #include <android/keycodes.h>  
  23.   
  24.   
  25. struct KeycodeLabel {  
  26.     const char *literal;  
  27.     int value;  
  28. };  
  29.   
  30.   
  31. static const KeycodeLabel KEYCODES[] = {  
  32.     { "SOFT_LEFT", 1 },  
  33.     { "SOFT_RIGHT", 2 },  
  34.     { "HOME", 3 },  
  35.     { "BACK", 4 },  
  36.     { "CALL", 5 },  
  37.     { "ENDCALL", 6 },  
  38.     { "0", 7 },  
  39.     { "1", 8 },  
  40.     { "2", 9 },  
  41.     { "3", 10 },  
  42.     { "4", 11 },  
  43.     { "5", 12 },  
  44.     { "6", 13 },  
  45.     { "7", 14 },  
  46.     { "8", 15 },  
  47.     { "9", 16 },  
  48.     { "STAR", 17 },  
  49.     { "POUND", 18 },  
  50.     { "DPAD_UP", 19 },  
  51.     { "DPAD_DOWN", 20 },  
  52.     { "DPAD_LEFT", 21 },  
  53.     { "DPAD_RIGHT", 22 },  
  54.     { "DPAD_CENTER", 23 },  
  55.     { "VOLUME_UP", 24 },  
  56.     { "VOLUME_DOWN", 25 },  
  57.     { "POWER", 26 },  
  58.     { "CAMERA", 27 },  
  59.     { "CLEAR", 28 },  
  60.     { "A", 29 },  
  61.     { "B", 30 },  
  62.     { "C", 31 },  
  63.     { "D", 32 },  
  64.     { "E", 33 },  
  65.     { "F", 34 },  
  66.     { "G", 35 },  
  67.     { "H", 36 },  
  68.     { "I", 37 },  
  69.     { "J", 38 },  
  70.     { "K", 39 },  
  71.     { "L", 40 },  
  72.     { "M", 41 },  
  73.     { "N", 42 },  
  74.     { "O", 43 },  
  75.     { "P", 44 },  
  76.     { "Q", 45 },  
  77.     { "R", 46 },  
  78.     { "S", 47 },  
  79.     { "T", 48 },  
  80.     { "U", 49 },  
  81.     { "V", 50 },  
  82.     { "W", 51 },  
  83.     { "X", 52 },  
  84.     { "Y", 53 },  
  85.     { "Z", 54 },  
  86.     { "COMMA", 55 },  
  87.     { "PERIOD", 56 },  
  88.     { "ALT_LEFT", 57 },  
  89.     { "ALT_RIGHT", 58 },  
  90.     { "SHIFT_LEFT", 59 },  
  91.     { "SHIFT_RIGHT", 60 },  
  92.     { "TAB", 61 },  
  93.     { "SPACE", 62 },  
  94.     { "SYM", 63 },  
  95.     { "EXPLORER", 64 },  
  96.     { "ENVELOPE", 65 },  
  97.     { "ENTER", 66 },  
  98.     { "DEL", 67 },  
  99.     { "GRAVE", 68 },  
  100.     { "MINUS", 69 },  
  101.     { "EQUALS", 70 },  
  102. <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值