android系统触摸屏虚拟按键Word格式.docx

上传人:b****3 文档编号:15898419 上传时间:2022-11-16 格式:DOCX 页数:25 大小:27.36KB
下载 相关 举报
android系统触摸屏虚拟按键Word格式.docx_第1页
第1页 / 共25页
android系统触摸屏虚拟按键Word格式.docx_第2页
第2页 / 共25页
android系统触摸屏虚拟按键Word格式.docx_第3页
第3页 / 共25页
android系统触摸屏虚拟按键Word格式.docx_第4页
第4页 / 共25页
android系统触摸屏虚拟按键Word格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

android系统触摸屏虚拟按键Word格式.docx

《android系统触摸屏虚拟按键Word格式.docx》由会员分享,可在线阅读,更多相关《android系统触摸屏虚拟按键Word格式.docx(25页珍藏版)》请在冰豆网上搜索。

android系统触摸屏虚拟按键Word格式.docx

/sys/board_properties/virtualkeys.synaptics-rmi-touchscreen

0x01:

158:

55:

835:

90:

139:

172:

125:

102:

298:

115:

217:

412:

95:

55

由此可见,其中定义了4个区域的虚拟按键,它们的Y坐标相同,可见4个按键的矩形区域位于水平的一排。

其转换的扫描码分别为158,139,102,217,分别对应于BACK(返回),MENU(菜单),HOME(主界面),SEARCH(搜索)这4个按键。

另外一个系统的虚拟按键的配置文件如下所示:

/sys/board_properties/virtualkeys.qtouch-touchscreen

936:

116:

104:

252:

402:

104

其转换的扫描码分别为:

139,102,158,分别对应于MENU(菜单),HOME(主界面),BACK(返回)这3个按键。

提示:

使用虚拟按键转换成为的是按键的扫描码,不是按键码,因此依然需要经过按键布局文件的转化才能得到按键码。

(二)如果按照韩超和梁泉的《Android系统级深入开发——移植与调试》的第八章描述虚拟按键的实现过程如下:

1.硬件分析

我所使用的触摸屏分辨率是1158*768,可视区域大小是1024*768(这也是LCD屏的大小),在触摸屏两侧总有5个按键。

2.触摸屏按键驱动的修改

既然可视区域在触摸屏中间部位,因此需要在触摸屏驱动中修改input_set_abs_params()函数中的参数

1.input_set_abs_params(input_dev, 

ABS_MT_POSITION_X, 

61, 

1085, 

0, 

0);

2.input_set_abs_params(input_dev, 

ABS_MT_POSITION_Y, 

SCREEN_MAX_Y, 

其中61是可视区域左侧x轴左边坐标,1085是右侧的。

3.Android框架层

Android上层通过读取触摸屏坐标并经过转算后来识别定义好的虚拟按键,代码位于frameworks/base/services/java/com/android/server/KeyInputQueue.java中:

staticclassVirtualkey{}是负责按键定位的方法;

privatevoidreadVirtualKeys(StringdeviceName)负责读取sys文件,这是最重要的代码,也是与底层sys文件系统沟通的桥梁,它会读取/sys/board_properties/virtualkeys.{deviceName}文件,deviceName一定要与触摸屏设备名称一致,不然会找不到指定的sys文件。

4.sys文件系统

前面讲到了readVirtualKeys会读取sys文件,这个sys文件就是定义虚拟按键的坐标以及键值,它的协议格式是一段字符串,每个按键有六项分别用冒号分割,按键按键之间也是用冒号分割,标准格式是:

键类型:

键值:

按键区域中心x坐标:

按键区域中心y坐标:

按键区域宽:

按键区域高

加载触摸屏以及创建sys文件的代码:

[cpp] 

viewplaincopy

1.<

span 

style="

font-size:

13px;

"

>

#ifdef 

VIRTUAL_KEYS 

2. 

3.static 

ssize_t 

virtual_keys_show(struct 

kobject 

*kobj, 

4. 

5. 

struct 

kobj_attribute 

*attr, 

char 

*buf) 

6. 

7.{ 

8. 

9. 

if 

(1) 

10. 

11. 

12. 

13. 

return 

sprintf(buf, 

14. 

15. 

__stringify(EV_KEY) 

:

__stringify(KEY_VOLUMEUP) 

1030:

370:

30:

30"

16. 

17. 

__stringify(KEY_VOLUMEDOWN) 

470:

18. 

19. 

__stringify(KEY_BACK) 

18:

20. 

21. 

__stringify(KEY_HOME) 

136:

22. 

23. 

__stringify(KEY_MENU) 

236:

24. 

25. 

\n"

);

26. 

27. 

else 

28. 

29. 

30. 

31. 

32. 

33.} 

34. 

35. 

36. 

37.static 

virtual_keys_attr 

38. 

39. 

.attr 

40. 

41. 

.name 

virtualkeys.xxxx"

 

42. 

43. 

.mode 

S_IRUGO, 

44. 

45. 

}, 

46. 

47. 

.show 

&

virtual_keys_show, 

48. 

49.};

50. 

51. 

52. 

53.static 

attribute 

*properties_attrs[] 

54. 

55. 

virtual_keys_attr.attr, 

56. 

57. 

NULL 

58. 

59.};

60. 

61. 

62. 

63.static 

attribute_group 

properties_attr_group 

64. 

65. 

.attrs 

properties_attrs, 

66. 

67.};

68. 

69. 

70. 

71.static 

void 

virtual_keys_init(void) 

72. 

73.{ 

74. 

75. 

int 

ret;

76. 

77. 

*properties_kobj;

78. 

79. 

80. 

81. 

properties_kobj 

kobject_create_and_add("

board_properties"

NULL);

82. 

83. 

(properties_kobj) 

84. 

85. 

ret 

sysfs_create_group(properties_kobj, 

86. 

87. 

properties_attr_group);

88. 

89. 

(!

|| 

ret) 

90. 

91. 

pr_err("

failed 

to 

create 

board_properties\n"

92. 

93.} 

94.#endif 

95.<

/span>

其中.name="

的xxxx就是触摸屏设备名称,也就是前面说到的{deviceName},virtual_keys_init()函数可以在触摸屏probe函数中调用。

另外,我将可视区域左侧的两侧按键移到了右侧实现,因此五个按键区域中心x坐标都是一样,这部分要在触摸屏驱动增加x轴坐标调整,这部分我就不再说明。

以上步骤完成后可以使用cat/sys/board_properties/virtualkeys.{deviceName}查看虚拟按键的配置文件,并试试按下触摸屏上按键是否有反应,如果坐标不正确还要进行耐心地校准。

具体的可以去HTC网站(

(三)但是我用的是四线电阻触摸屏,用上面的方式好像没有任何反应,所以我采用最直接的方式用input_event发送按键消息,就是在触摸屏处理芯片TSC2007驱动中当读到一定范围内的触摸事件就发送按键消息:

这种方式只要修改TSC2007驱动的几个地方:

1.定义全局局部变量用于记录是否有虚拟按键按下

1.static 

backkeydown=0;

2.static 

homekeydown=0;

menukeydown=0;

2..在prope函数中添加

view

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1