ЗАО «ЗЭО»

Техническая поддержка пользователей => Тион, Тион-Про, Тион-Про v2, Сириус => Тема начата: Ivan от 31 Октября, 2013, 20:06:29

Название: Собрать tslib для Tion
Отправлено: Ivan от 31 Октября, 2013, 20:06:29
Всем доброго времени суток.

Постараюсь максимально подробно описать возникшую проблему, поэтому пост будет длинным.

Процессорный модуль Тион у нас используется не со штатно поставляемой системой, а с emdebian - системой на базе Debian Linux для процессоров arm. Ядро - 2.6.20.21 с патчами для Тиона. КФС находится на usb-флешке.

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

Что было сделано:
1. Из buildroot2009.08 были выдраны исходники tslib и патчи tslib для Тиона. Все патчи были успешно применены, библиотека была кросс-компилирована и установлена в КФС.
2. При сборке ядра был добавлен модуль для тачскрина (который собирается в ep93xx_ts.ko).
3. Конфигурационные файлы для tslib были взяты из стандартной системы Тиона.

Как пытаюсь насторить тачксрин:

1. Загружаю модуль ep93xx_ts.ko
# insmod path/to/module/ep93xx_ts.ko
После этого в /dev появляется новое устройство /dev/ep93xx_ts

2. Настраиваю переменные окружения:
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_TSDEVICE=/dev/ep93xx_ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_FBDEVICE=/dev/fb0

Содержимое ts.conf:
module_raw ep93xx

module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear

3. Пытаюсь запустить ts_calibrate. На этом этапе происходят странные вещи - калибровка экрана происходит САМА. То есть, я еще не успеваю прикоснуться к тачскрину, а крестик, на который надо нажимать, уже делает полный круг, и калибровка завершается. Кроме того, если запустить ts_print, то он начнет выдавать различные значения ровно до тех пор, пока я не прикоснусь к экрану. А ведь должно быть наоборот.

Во всем этом важен еще один момент - когда я, для теста, использую другой Тион со штатной прошивкой, калибровка и ts_print работают корректно.

Соответственно, мой вопрос заключается в следующем: все ли необходимое для корректной работы тачскрина я собрал? Правильно ли я настроил переменные окружения (не нашел, где посмотреть их в стандартной прошивке)? Возможно, надо сделать что-то еще?

Если возникнут дополнительные вопросы, постараюсь на них ответить.

Заранее спасибо!
Название: Re: Собрать tslib для Tion
Отправлено: asv от 01 Ноября, 2013, 10:32:29
Приведите вывод printenv после задания переменных окружения для вызова ts_calibrate.
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 01 Ноября, 2013, 15:03:00
Приведите вывод printenv после задания переменных окружения для вызова ts_calibrate.

Здравствуйте! Спасибо за ответ.

Вот вывод переменных окружения:

ep9315:~# printenv                                                             
SHELL=/bin/bash                                                                 
TERM=vt100                                                                     
TSLIB_CONFFILE=/etc/ts.conf                                                     
HUSHLOGIN=FALSE                                                                 
TSLIB_CALIBFILE=/etc/pointercal                                                 
USER=root                                                                       
MAIL=/var/mail/root                                                             
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin               
PWD=/root                                                                       
PS1=\h:\w\$                                                                     
SHLVL=1                                                                         
HOME=/root                                                                     
TSLIB_FBDEVICE=/dev/fb0                                                         
LOGNAME=root                                                                   
TSLIB_TSDEVICE=/dev/ep93xx_ts                                                   
TSLIB_PLUGINDIR=/lib/ts/                                                       
_=/usr/bin/printenv
Название: Re: Собрать tslib для Tion
Отправлено: asv от 01 Ноября, 2013, 16:17:52
Выложите где-нибудь свою КФС (Emdebian) и ядро с модулем ts (если они не в КФС).
Ссылку можете прислать мне на почту, я посмотрю.
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 01 Ноября, 2013, 17:15:13
Выложите где-нибудь свою КФС (Emdebian) и ядро с модулем ts (если они не в КФС).
Ссылку можете прислать мне на почту, я посмотрю.

Отправил на почту из Вашего профиля. Если будут вопросы - пишите.

Спасибо за помощь!
Название: Re: Собрать tslib для Tion
Отправлено: asv от 04 Ноября, 2013, 18:56:36
Попробуйте прилагаемый патч. Работает в вашей КФС. Но нужно проверить не
будет ли из-за такого изменения 100% занят процессор в приложении. ts_test и
так 100% занимает процессор, на другой программе я не проверял.
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 05 Ноября, 2013, 12:03:46
Попробуйте прилагаемый патч. Работает в вашей КФС.

Спасибо за патч. Теперь в конфигурации дисплея 640х480 тачскрин работает. По крайней мере, работают утилиты ts_test и ts_calibrate. Свое приложение пока проверить не удалось

Однако, есть еще один вопрос. Дело в том, что на самом деле наш дисплей имеет конфигурацию 800х480.

Я покопался в ядре и в файле drivers/video/ep93xxfb.с внес изменения в структуру static struct ep93xxfb_videomodes ep93xxfb_vmods[]:
...
{ // 20
"TFT 800x480 8\"",
800, 40, 40, 144,
480, 8, 3, 30,
72,
        CLK_INTERNAL, EDGE_FALLING, POL_LOW, POL_LOW, POL_LOW,
    },
...

В коде выше изменения минимальны - просто вставил 480 вместо 600, как было изначально.

Теперь в режиме 20 на дисплее отображается честных 800х480 пикселей, но тачскрин в таком режиме после применения патча не реагирует на нажатия вообще (по крайней мере, в утилите ts_calibrate).

Я подозреваю, что надо поменять еще какие-то параметры, вот только пока не могу понять, какие и где. Буду признателен, если подскажете, куда копать...
Название: Re: Собрать tslib для Tion
Отправлено: asv от 05 Ноября, 2013, 12:25:20
Проверьте ещё раз. Разрешение экрана влияет только на приведение значений TS
к экрану, но не на их получение.  Вы проверили работу TS на 640x480 и
поменяли экран на 800x480? Может быть проблема в соединении сигналов TS,
самом TS или его креплении.
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 05 Ноября, 2013, 12:56:48
Вы проверили работу TS на 640x480 и поменяли экран на 800x480? Может быть проблема в соединении сигналов TS,
самом TS или его креплении.

Я пробовал на одном и том же дисплее. Когда я передаю ядру video=ep93xxfb:vout=1,vmode=16, дисплей работает с разрешением 640х480, то есть правый край просто обрезается. При такой конфигурации после применения Вашего патча утилиты ts_calibrate и ts_test работают.

Если передать ядру параметры video=ep93xxfb:vout=1,vmode=20, дисплей работает с разрешением 800х480. При этом текст в консоли отображается корректно, GUI-приложение на Qt тоже отображается на весь экран (это к вопросу о параметрах дисплея). Но при такой конфигурации ts_calibrate вообще не реагирует на нажатия, а ts_test и ts_print ведут себя так же, как и до применения патча (возможно это связано как раз с тем, что тачскрин не удается откалибровать).

Именно поэтому я и подумал о том, что не отредактировал какие-то параметры, которые внешне не влияют на изображение на дисплее, но могут влиять на тачскрин...
Название: Re: Собрать tslib для Tion
Отправлено: asv от 05 Ноября, 2013, 13:16:41
У вас точно одинаковый tslib (КФС) в обоих случаях?
Что выводит ts_harvest?
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 05 Ноября, 2013, 13:47:15
У вас точно одинаковый tslib (КФС) в обоих случаях?
Что выводит ts_harvest?

tslib одинаковый, КФС одна и та же.

Вывод ts_harvest для 640х480 прикрепил.

А ts_harvest для 800х480 запустить не удается, т.к. он, так же, как и ts_calibrate, не реагирует на нажатия на тачскрин.
Название: Re: Собрать tslib для Tion
Отправлено: asv от 05 Ноября, 2013, 16:59:29
Я поменял в указанной вами структуре 640 на 800 (у дисплея 5.7'') и у меня
ts_calibrate и ts_test работает нормально, разумеется часть экрана я не вижу
используя дисплей 5.7'' 640x480. Результат ts_calibrate при размере по
горизонтали 800 выглядит правдоподобным.

tslib я собирал в присланной вами КФС с указанным патчем, доставив
необходимые для сборки пакеты.
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 05 Ноября, 2013, 17:40:47
Я поменял в указанной вами структуре 640 на 800 (у дисплея 5.7'') и у меня
ts_calibrate и ts_test работает нормально, разумеется часть экрана я не вижу
используя дисплей 5.7'' 640x480. Результат ts_calibrate при размере по
горизонтали 800 выглядит правдоподобным.

Большое спасибо за то, что активно пытаетесь помочь мне.

Я получил Ваше письмо.
Попробовал у себя сделать так, как Вы описали - изменить параметры для дисплея 640х480 (а не у 800х600, как я делал раньше). Результат, к сожалению, такой же.

tslib я собирал в присланной вами КФС с указанным патчем, доставив
необходимые для сборки пакеты.

Можете расписать подробнее, как Вы это делали? Какие брали исходники tslib, какие патчи накладывали кроме того, который присылали выше? GCC ставили из репозитория emdebian, или использовали какой-то другой компилятор?

Спасибо!
Название: Re: Собрать tslib для Tion
Отправлено: asv от 05 Ноября, 2013, 18:03:31
tslib взял версии 1.0 (как в Buildroot).

Патчи:
tslib-1.0-no-cxx.patch
tslib-1.0-remove-bzero.patch
tslib-1.0-remove-return-on-error-from-check-df.patch
tslib-1.0-x-ep93xx.patch
tslib-1.0-x-ep93xx_glibc.patch

> GCC ставили из репозитория emdebian

Да.
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 05 Ноября, 2013, 18:30:06
tslib взял версии 1.0 (как в Buildroot).

Патчи:
tslib-1.0-no-cxx.patch
tslib-1.0-remove-bzero.patch
tslib-1.0-remove-return-on-error-from-check-df.patch
tslib-1.0-x-ep93xx.patch
tslib-1.0-x-ep93xx_glibc.patch

> GCC ставили из репозитория emdebian

Да.

Странно, делал все то же самое... Только gcc другой - тот, которым собирал ядро и модули.

Ваше письмо получил. Попробую все поставить уже завтра, т.к. сегодня пора убегать. По результатам отпишусь.

Еще раз огромное спасибо за помощь!
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 06 Ноября, 2013, 16:00:48
tslib взял версии 1.0 (как в Buildroot).

Патчи:
tslib-1.0-no-cxx.patch
tslib-1.0-remove-bzero.patch
tslib-1.0-remove-return-on-error-from-check-df.patch
tslib-1.0-x-ep93xx.patch
tslib-1.0-x-ep93xx_glibc.patch

> GCC ставили из репозитория emdebian

Да.

Добрый день!

Наконец-то добрался до работы и поставил deb-пакет, который Вы собрали.

Вот что получил - пока все копировал и устанавливал, у меня отключилась подсветка дисплея (т.к. собирал все через ttyAM1-терминал).  При запуске ts_calibrate с отключенной подсветкой дисплея калибровка прошла успешно (это видно по логам в терминале). После калибровки подсветка дисплея включилась. Теперь ts_test корректно определяет положение курсора, но не реагирует на наведение на кнопки Drag и Draw (всегда просто перемещает курсор, не рисует).

Сейчас, прежде чем отвечать, проверил еще раз. ts_calibrate отрабатывает только при выключенной подсветке.

Я понимаю, что это, мягко говоря, странно... Но это так! Возможно, мы где-то неправильно подключили тачскрин и подсветку. Но тогда почему все работает в режиме 640х480?!
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 06 Ноября, 2013, 16:15:46
Цитировать
ts_calibrate отрабатывает только при выключенной подсветке

Update: ts_calibrate все-таки отрабатывает, но ОЧЕНЬ криво. Корректно откалибровать при включенной подсветке не получается. Переговорил с человеком, который разбирается в устройстве нашей платы. Будем искать проблему у себя.

Вам еще раз огромное спасибо за помощь!
Название: Re: Собрать tslib для Tion
Отправлено: asv от 06 Ноября, 2013, 16:24:22
У вас подсветка на высоковольтных лампах?
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 06 Ноября, 2013, 16:39:45
У нас дисплей 7" Ampire AM800480R2. Более подробно, похоже, здесь (http://www.ampire.com.tw/en/p1-product.asp) (прямо на этот дисплей ссылку не дать - сайт у них кривой)
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 07 Ноября, 2013, 18:18:53
Здравствуйте.

Еще раз подниму тему.

Но нужно проверить не будет ли из-за такого изменения 100% занят процессор в приложении. ts_test и
так 100% занимает процессор, на другой программе я не проверял.

Как Вы и предполагали, процессор действительно загружен на 100% всегда.

Сейчас имеем следующее - тачскрин как-то откалиброван при выключенной подсветке. Наше приложение на Qt на тачскрин не реагирует как раз из-за того, что процессор загружен полностью (иногда проходят реакции на касания, но очень редко).

Я пытаюсь самостоятельно разобраться с устройством tslib и драйвера для тачскрина чтобы сделать патч, не нагружающий процессор.

Пока что понял только, что ts_input_read() из tslib/plugins/input_ep93xx_ts.c вызывается в tslib/src/ts_read.c. А вот как все это взаимодействует с драйвером тачскрина я понять не могу. Пытаюсь разобраться в драйвере тачскрина для тиона (linux/drivers/input/touchscreen/ep93xx_ts.c), но пока что не понимаю, где там используется tslib.

А может я вообще не туда смотрю? Буду признателен, если подскажете, куда копать.

Спасибо!
Название: Re: Собрать tslib для Tion
Отправлено: asv от 08 Ноября, 2013, 10:59:03
tslib читает файл символьного устройства (/dev/ep93xx_ts), это чтение
обслуживает ep93xx_ts_read() из drivers/input/touchscreen/ep93xx_ts.c

Проблема видимо в том, что uсlibc и glibc по разному обрабатывают read() при
нулевых данных.

Можно попробовать возвращать не 0 в стр. 375 а -EAGAIN, -ENODATA
   if( !bFreshTouchData)
       {
      iReturn = 0;
       }       
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 08 Ноября, 2013, 12:32:28
tslib читает файл символьного устройства (/dev/ep93xx_ts), это чтение
обслуживает ep93xx_ts_read() из drivers/input/touchscreen/ep93xx_ts.c

Проблема видимо в том, что uсlibc и glibc по разному обрабатывают read() при
нулевых данных.

Можно попробовать возвращать не 0 в стр. 375 а -EAGAIN, -ENODATA
   if( !bFreshTouchData)
       {
      iReturn = 0;
       }       


Здравствуйте.

Да, в порядке вызова я явно запутался, спасибо что прояснили ситуацию. Замена 0 на -EAGAIN или -ENODATA проблему, к сожалению, не решила... Ну теперь я, по крайней мере, знаю, в каком месте надо что-то менять.
Название: Re: Собрать tslib для Tion
Отправлено: Ivan от 11 Ноября, 2013, 17:27:27
В общем, проблема, как обычно, решилась достаточно просто.

В модуле ядра, отвечающем за тачскрин (файл drivers/input/touchscreen/ep93xx_ts.c), надо было подредактировать параметры констант

#define   TS_HEAVY_INV_PRESSURE 3000 /*5500*/
#define   TS_LIGHT_INV_PRESSURE 5000 /*9500*/

С такими значениями все, кроме ts_calibrate, работает даже без Вашего патча. А с патчем работает и ts_calibrate. Почему так - понять до сих пор не могу, но это вроде как и не важно...