Не простые проблемы простого устройства — тачскрин

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Непростые проблемы простого устройства, ёмкостной тачскрин на ft5406

Чистил однажды облако и нашел свои заметки по проблеме сенсорного экрана с ёмкостным тачскрином на ft5406. Вот так и появилась эта статья, а вдруг кто еще наткнётся на подобное во время разработки...

Наткнулся как-то на проблему с ёмкостным тачскрином на ft5406, сенсорный экран в один прекрасный момент просто подвисал и отказывался дальше работать. Ну, а теперь поподробней об этом. 

Железо: marsboard sun7i A20. 

ПО: uboot 2017, kernel 4.10, LUbuntu 16.04. 

Суть проблемы. 

Сенсорный экран по окончании загрузки, если во время загрузки его не трогать, отказывался работать. Т.е. не реагировал на касания, при этом такой же экран на этом же железе вполне сносно отрабатывал.  

Чтоб его оживить, приходилось перезагружать его виртуальный указатель через Xinput, система ввода Xorg, в консоли. 

т.к. touchscreen показывал такую странную реакцию на xinput, то покопавшись в его недрах (xinput), были найдены два теста xinput test – тест виртуального указателя и xinput test-xi2 - тоже такой же тест, но по протоколу XI 2.0 (The X Input Extension 2.x), просто более адаптирован под мультитач. Можно почитать про него тут. В общем, если первый тест не показал никакой реакции на сенсорный экран, то второй - исправно показал перемещение координат.

Опускаемся на уровень ниже, тест работы модуля ядра evt-ft5x06 (драйвер для ft5406) evtest, немножко нервов и ожидания, показал интересные результаты. Периодически, по любой из пяти точек, поддерживаемых контроллером сенсорного экрана, проскакивает координата вне предела панели. Эта координата драйвером ввода xserver-xorg-input-evdev воспринимается как нажатие, а событие отжатия (есть такое на ft5406) не приходит и до тех пор, пока не тыкнешь в экран количеством пальцев соответствующим номеру проскочившей координаты (хорошо что их пять и хватало пятерни) сенсорная панель будет висеть, думая что событие нажатия еще не окончено.

Проба установки других драйверов экрана, таких как: 

  • xserver-xorg-input-libinput 

  • xserver-xorg-input-mtrack

И прописывание их в /usr/share/X11/xorg.conf.d ситуацию не изменили, если libinput полностью повторил оригинальный драйвер, то mtrack хоть и избавил от проблемы, но то, что он ориентирован только на touchpad,поставило на нем крест. Т.к. сенсорный экран становился, как большой touchpad с полным несоответствием координат, и никакая калибровка при загрузке не помогла. 

т.к. вышеуказанное показало свою несостоятельность в режиме multitouch, а протокол XI 2.0 еще находится в разработке, то решение было найдено на уровне модулей ядра. 

Решено было запретить прерывания всех точек, кроме первой, а так как это для уровня devicetree (файл devicetree используется для настройки kernell при загрузке, он стал основным методом конфигурирования после версии ядра 3.11) не реализовано, то делалось это прямо в модуле и свелось все практически к запятой... 

В исходниках ядра по адресу /drivers/input/touchscreen/ находим файл модуля edt-ft5x06.c и в самом конце в структуре: 

static const struct edt_i2c_chip_data edt_ft5x06_data = { 
     ...
    .max_support_points = 5, 
    ...
}; 

Исправляем 5 на 1. И становится у нас сенсорная панель с одновременной обработкой только одной координаты.  

Дальнейшая сборка и запуск ядра показали работоспособность сенсорной панели. Ошибки, конечно, проскакивают и по первой координате, но лишний раз ткнуть в экран одним пальцем куда проще чем пятернёй одновременно. 

Конечно, можно еще указать обновление координат при сбое в обработчике прерывания  

static irqreturn_t edt_ft5x06_ts_isr(int irq, void *dev_id) 

, но это уже не принципиально. 

Вместо заключения.

В связке контроллер панели и сама сенсорная панель так и не удалось выяснить кто виноват. Но основные подозрения падали на саму панель, т.к. через некоторое время после работы (считай прогрева) левые координаты переставали идти. 

Источник: https://habr.com/ru/post/554186/


Интересные статьи

Интересные статьи

Варнинг: заметка пишется больше для технически не особо подкованных людей, хабр читают и они. Специалисты и так всё знают. Не у технарей другие профессии и увлечения, для...
Анализ производительности и настройка — мощный инструмент проверки соответствия производительности для клиентов. Анализ производительности можно применять для проверки узких мест в ...
Cloud4Y продолжает рассказывать о возможностях использования ИИ в медицине. Это третья часть, в которой мы рассмотрели возможные проблемы, возникающие при использовании «умных» те...
Аппараты миссии «Чанъэ-4» (спускаемый модуль и ровер) успешно выполнили научные исследования во время своего пятого лунного дня на обратной стороне Луны, прислав на Землю уже более 6,6 GB нау...
Сегодня мы поговорим о перспективах становления Битрикс-разработчика и об этапах этого пути. Статья не претендует на абсолютную истину, но даёт жизненные ориентиры.