I need to write a script to detect if the physical touchscreen is connected to my Android device at boot time.
I tried to list the content of the folder /dev/input
via adb and I obtain the following output:
root@q88:/dev/input # ls
event0
event1
event2
event3
event4
mice
If I am not mistaken, event0
identifies the touchscreen, but it is visible in both case the touchscreen is connected or not.
Is there a way to detect if the touchscreen is connected to the device?
Thanks in advance.
You can read /proc/bus/input/devices
to get details of your existing input devices.
Depending on your hardware's name, you could do something like that and check if there is any output:
cat /proc/bus/input/devices | grep "Name=" | grep "Touch"
This is the full output of /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)
The B in front stands for bitmap, N, P, S, U, H are simply first letter in corresponding name value and I is for ID. In ordered fashion:
I
→ @id: id of the device (struct input_id)
Bus
→ id.bustypeVendor
→ id.vendorProduct
→ id.productVersion
→ id.versionN
→ name of the deviceP
→ physical path to the device in the system hierarchyS
→ sysfs pathU
→ unique identification code for the device (if device has it)H
→ list of input handles associated with the deviceB
→ bitmaps
PROP
→ device properties and quirksEV
→ types of events supported by the deviceKEY
→ keys/buttons this device hasMSC
→ miscellaneous events supported by the deviceLED
→ leds present on the deviceREL
→ relative addressABS
→ absolute address
To test if the device is actually attached, you can try simulating events and see if you get any errors:
input tap [x] [y]
Android comes with an input command-line tool that can simulate miscellaneous input events.
- input → The command line tool to send events
- tap → the action
- [x] → X coordinate on the screen
- [y] → Y coordinate on the screen
Find a driver name for the touch controller of your device. Then check its sysfs
location. There will be few files mapped to the internal variables which were populated with data read from the physical touchscreen device during its initialization. For example most touchscreen controllers have updateable firmware and provide a way to query its current version.
One of my devices uses atmel_mxt_ts
touchscreen controller and its sysfs
location is /sys/bus/i2c/drivers/atmel_mxt_ts/1-004a/
. There is a fw_version
file in that folder. If the physical touchscreen is connected that file would contain the current firmware label. The empty file would mean that there is no touchscreen.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With