LINUX.ORG.RU

Клавиатура + встраиваемое приложение на qt embedded

 ,


0

1

Всем доброго времени суток.

Есть у меня железка на арме. Я запилил на нее Qt, прикрутил тачскрин и написал приложение с интерфейсом на кутях.

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

И здесь начинаются проблемы - клавиатура работает неадекватно. Если подцепить клаву, включить девайс, залогиниться с помощью этой клавиатуры в консоль (ту, которая отображается на тачскрине - tty1) и затем из консоли запустить приложение, то все работает прекрасно.

Но надо автоматизировать процесс, поэтому засовываем приложение в автозапуск (по простому - по крону на @reboot). Теперь все работает ровно до тех пор, пока мы не нажмем любую клавишу на клавиатуре. После этого весь интерфейс зависает, да и само приложение перестает что-либо делать...

Такая же ситуация наблюдается, если запилить автологин на tty1 и добавить в .profile запуск своего приложения.

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

...
# export needed variables
export TSLIB_PLUGINDIR=/lib/ts/
export TSLIB_TSDEVICE=/dev/ep93xx_ts
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_FBDEVICE=/dev/fb0
export QWS_MOUSE_PROTO=tslib:/dev/ep93xx_ts
export QWS_KEYBOARD=TTY:/dev/tty0

# start app here
...

Собственно, вопрос: как заставить клавиатуру корректно работать?

P.S.: Когда-то давно я уже создавал подобную тему, поэтому кастую сюда velikS :)

★★

Ответ на: комментарий от trex6

Внесу уточнение: приложение повисает не навсегда. Если, например, установить фокус в поле ввода и несколько раз (каждый раз - разное количество) нажать на какую-либо кнопку на клавиатуре, то в конце концов желаемый символ отобразится. Точно так же, если долго жать на кнопки, приложение перестанет «висеть».

При этом это никак не связано с отображением символа - это может произойти одновременно, а может - и на разные нажатия. То есть, сначала нажали N раз - отобразился символ, но приложение все еще «висит», нажали еще M раз - GUI стал активен, но новый символ так и не отобразился.

solovey ★★
() автор топика
Ответ на: комментарий от trex6

Тоже грешил на проц, ибо был опыт с tslib. Но практически ничего не происходит, вырастает совсем незначительно - на 0.5-1%.

solovey ★★
() автор топика
Ответ на: комментарий от solovey

Можете попробовать реализовать собственный цикл обработки событий (наследуетесь от Q{Core/Gui}Application, дальше все легко. если необходимы подробности - отпишу), И после этого смотреть, проблема в том, что событие приходит поздно или в том, что событие долго обрабатывается. Так же можно будет определить, кто именно долго обрабатывает событие и т.п. Т.е. проблема в вашем приложении, в библиотеках Qt или в окружении.

trex6 ★★★★★
()
Ответ на: комментарий от trex6

если необходимы подробности - отпишу

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

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

Я бы понял, если бы оно вообще не работало, например. А так я теряюсь в догадках, почему это происходит.

solovey ★★
() автор топика

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

А тебе точно нужна конcоль ? Убери getty в /etc/inittab с виртуального терминала (tty) все будет работать. Всякую ерунду про клавиатуру для QWS не надо экспортировать - он сам разберется. У тебя скорей всего login перехватывает управление клавиатурного ввода.

anonymous
()
Ответ на: комментарий от trex6

Пробовал двумя способами:

1. По крону на @reboot вешал запуск скрипта

2. Делал автологин на tty1, а затем в .profile прописывал запуск скрипта.

В обоих случаях результат одинаковый.

solovey ★★
() автор топика
Ответ на: комментарий от solovey

Лишнее подтверждение тому, что нельзя выгонять анонимов из техразделов! Анон прав, спасибо ему! Надо было просто убрать getty c tty1.

А переменную QWS_KEYBOARD я все-таки оставил, хотя, скорее всего, и без нее бы работало.

trex6, Вам также огромное спасибо за то, что вникли в проблему и предлагали варианты решения!

solovey ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.