我需要编写一个脚本来检测物理触摸屏是否在启动时连接到我的Android设备。
我尝试通过adb列出文件夹/dev/input
的内容,并获得以下输出:
root@q88:/dev/input # ls
event0
event1
event2
event3
event4
mice
如果我没有弄错的话,event0
会识别触摸屏,但无论是否连接触摸屏都可以看到它。
有没有办法检测触摸屏是否连接到设备?
提前致谢。
答案 0 :(得分:3)
您可以阅读/proc/bus/input/devices
至get details of your existing input devices。
根据您的硬件名称,您可以执行类似的操作并检查是否有任何输出:
cat /proc/bus/input/devices | grep "Name=" | grep "Touch"
这是/proc/bus/input/devices
的完整输出:
I: Bus=0011 Vendor=0002 Product=0008 Version=2222
N: Name="AlpsPS/2 ALPS DualPoint TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/class/input/input2
H: Handlers=mouse1 event2 ts1
B: EV=f
B: KEY=420 0 70000 0 0 0 0 0 0 0 0
B: REL=3
B: ABS=1000003
[...] (blank line, next device)
前面的B代表位图,N,P,S,U,H只是第一个 相应名称值的字母,我是ID。在订购 时尚:
I
→@ id:设备的ID(struct input_id)
Bus
→id.bustypeVendor
→id.vendorProduct
→id.productVersion
→id.versionN
→设备名称P
→系统层次结构中设备的物理路径S
→sysfs路径U
→设备的唯一识别码(如果设备有)H
→与设备关联的输入句柄列表B
→位图
PROP
→设备属性和怪癖EV
→设备支持的事件类型KEY
→此设备的按键/按钮MSC
→设备支持的杂项事件LED
→设备上的LEDREL
→相对地址ABS
→绝对地址
要测试设备是否实际连接,您可以尝试模拟事件并查看是否有任何错误:
input tap [x] [y]
Android附带一个输入命令行工具,可以模拟各种输入事件。
- 输入→命令行工具发送事件
- 点按→操作
- [x]→屏幕上的X坐标
- [y]→屏幕上的Y坐标
答案 1 :(得分:2)
查找设备的触摸控制器的驱动程序名称。然后检查其sysfs
位置。将几乎没有文件映射到内部变量,这些内部变量填充了在初始化期间从物理触摸屏设备读取的数据。例如,大多数触摸屏控制器都具有可更新的固件,并提供了查询其当前版本的方法。
我的某个设备使用atmel_mxt_ts
触摸屏控制器,其sysfs
位置为/sys/bus/i2c/drivers/atmel_mxt_ts/1-004a/
。该文件夹中有一个fw_version
文件。如果物理触摸屏已连接,则该文件将包含当前固件标签。空文件意味着没有触摸屏。