Подтвердить что ты не робот

Android: программно определить, подключено ли устройство к сенсорному экрану

Мне нужно написать script, чтобы определить, подключен ли физический сенсорный экран к моему устройству Android во время загрузки. Я попытался перечислить содержимое папки /dev/input через adb, и я получаю следующий вывод:

[email protected]:/dev/input # ls
event0
event1
event2
event3
event4
mice

Если я не ошибаюсь, event0 идентифицирует сенсорный экран, но он виден в обоих случаях, когда сенсорный экран подключен или нет.
Есть ли способ определить, подключен ли сенсорный экран к устройству?

Спасибо заранее.

4b9b3361

Ответ 1

Вы можете прочитать /proc/bus/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: идентификатор устройства (struct input_id)
    • Bus → id.bustype
    • Vendor → id.vendor
    • Product → id.product
    • Version → id.version
  • N → имя устройства
  • P → физический путь к устройству в системной иерархии
  • S → путь sysfs
  • U → уникальный идентификационный код устройства (если устройство имеет его)
  • H → список ручек ввода, связанных с устройством
  • B → растровые изображения
    • PROP → свойства устройства и причуды
    • EV → типы событий, поддерживаемых устройством
    • KEY → клавиши/кнопки на этом устройстве
    • MSC → различные события, поддерживаемые устройством.
    • LED → светодиоды, присутствующие на устройстве
    • REL → относительный адрес
    • ABS → абсолютный адрес

Чтобы проверить, действительно ли устройство подключено, вы можете попробовать имитировать события и посмотреть, есть ли у вас какие-либо ошибки:

input tap [x] [y]

Android поставляется с инструментом командной строки ввода, который может имитировать разные входные события.

  • вход → Инструмент командной строки для отправки событий
    • коснитесь → действие
    • [x] → координата X на экране
    • [y] → координата Y на экране

Ответ 2

Найдите имя драйвера для сенсорного контроллера вашего устройства. Затем проверьте его расположение sysfs. Мало файлов, сопоставленных с внутренними переменными, которые были заполнены данными, считываемыми с физического сенсорного устройства во время его инициализации. Например, большинство сенсорных контроллеров имеют обновляемую прошивку и предоставляют возможность запросить текущую версию.

В одном из моих устройств используется сенсорный контроллер atmel_mxt_ts, а его расположение sysfs /sys/bus/i2c/drivers/atmel_mxt_ts/1-004a/. В этой папке есть файл fw_version. Если физический сенсорный экран подключен, этот файл будет содержать текущую метку прошивки. Пустой файл будет означать, что нет сенсорного экрана.