Armadilloフォーラム

Qtタッチパネル操作

sankyo_fukuzawa

2024年1月30日 10時14分

お世話になります、福澤と申します。

現在、Armadillo-IoT G4でQtを使用し、タッチパネルで操作するアプリケーションを作成していますが、タッチパネル操作が反応していません。
使用しているタッチパネルは、Hsintek社 10.1インチタッチパネル「CH-L101-2HDVSB-T」、接続形式はHDMIとUSBとなります。
HDMIを通してタッチパネルへのアプリ画面表示はできております。
USBにてArmadilloとタッチパネルを接続すると、/dev/input/に「event2」、「event3」、「event4」が追加されます。

以下のフォーラムを参考にして、USB Touchscreen Driverをカーネルに適用しましたが、タッチパネル操作はできませんでした。
https://armadillo.atmark-techno.com/forum/armadillo/15679
また、上記フォーラム適用後、evtestコマンドによるパネル操作のイベントログを確認したところ、
「event3」は以下のような座標イベントとTOUCHイベントが出力されましたが、
「event2」と「event4」は、パネル操作によるログが出力されませんでした。

root@37a842e04f2e:/# evtest /dev/input/event3
 
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0xeef product 0x1 version 0x210
Input device name: "eGalax Inc. USB TouchController Stylus"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 320 (BTN_TOOL_PEN)
    Event code 330 (BTN_TOUCH)
    Event code 331 (BTN_STYLUS)
  Event type 3 (EV_ABS)
    Event code 0 (ABS_X)
      Value      0
      Min        0
      Max     4095
    Event code 1 (ABS_Y)
      Value      0
      Min        0
      Max     4095
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
Event: time 110.461848, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0042
Event: time 110.461848, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 110.461848, type 1 (EV_KEY), code 320 (BTN_TOOL_PEN), value 1
Event: time 110.461848, type 3 (EV_ABS), code 0 (ABS_X), value 1978
Event: time 110.461848, type 3 (EV_ABS), code 1 (ABS_Y), value 2158
Event: time 110.461848, -------------- SYN_REPORT ------------
Event: time 110.473848, type 3 (EV_ABS), code 1 (ABS_Y), value 2156
Event: time 110.473848, -------------- SYN_REPORT ------------
Event: time 110.477846, type 3 (EV_ABS), code 1 (ABS_Y), value 2154
Event: time 110.477846, -------------- SYN_REPORT ------------
Event: time 110.489845, type 3 (EV_ABS), code 0 (ABS_X), value 1976
Event: time 110.489845, -------------- SYN_REPORT ------------
Event: time 110.493842, type 3 (EV_ABS), code 1 (ABS_Y), value 2156
Event: time 110.493842, -------------- SYN_REPORT ------------
Event: time 110.549813, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0042
Event: time 110.549813, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 110.549813, -------------- SYN_REPORT ------------

タッチパネルを有効とするために、他にどのような設定が必要となりますか。
以上、よろしくお願いいたします。

コメント

佐藤です。

確認させていただきたいことがあります。
以下を実行すると、指で絵を描けるアプリが起動すると思います。こちらのアプリはタッチに反応しますでしょうか。

root@37a842e04f2e:/# apt install -y qtbase5-examples
root@37a842e04f2e:/# /usr/lib/aarch64-linux-gnu/qt5/examples/widgets/touch/fingerpaint/fingerpaint

sankyo_fukuzawa

2024年1月30日 17時48分

お世話になっております、福澤です。

> 佐藤です。
>
> 確認させていただきたいことがあります。
> 以下を実行すると、指で絵を描けるアプリが起動すると思います。こちらのアプリはタッチに反応しますでしょうか。
>

> root@37a842e04f2e:/# apt install -y qtbase5-examples
> root@37a842e04f2e:/# /usr/lib/aarch64-linux-gnu/qt5/examples/widgets/touch/fingerpaint/fingerpaint
> 

上記コマンドを実行したところ、タッチパネルにfingerpaintの画面が表示されましたが、画面タッチによる描画はできませんでした。
以上、よろしくお願いいたします。

佐藤です。

確認ありがとうございます。
コンテナ起動用のコンフィグファイルに "add_hotplugs input" の記載はありますでしょうか?

sankyo_fukuzawa

2024年1月31日 11時15分

お世話になっております、福澤です。

> 佐藤です。
>
> 確認ありがとうございます。
> コンテナ起動用のコンフィグファイルに "add_hotplugs input" の記載はありますでしょうか?

現在、手動でコンテナを立ち上げて操作しています。起動コマンドは以下の通りです。
また、コンテナ起動時はArmadilloとタッチパネルをUSB接続した状態で立ち上げています。

podman run -itd \
--name=at_debian_container \
--cap-add=NET_ADMIN \
--volume=/dev:/dev \
--volume=/sys:/sys \
--privileged \
-p 22:22 \
--cap-add=SYS_RAWIO \
--cap-add=SYS_ADMIN \
--cap-add=NET_RAW \
 --cap-add=SYS_TIME \
localhost/at_debian_image:v0.0.7 /bin/bash

コンテナ起動後、Qtによる画面表示を行うために以下コマンドを実行してから画面表示のアプリケーションを起動していますが、タッチパネル操作ができていない状態です。

export QT_QPA_FB_NO_LIBINPUT=1
export QT_QPA_PLATFORM=linuxfb

以上、よろしくお願いいたします。

sankyo_fukuzawa

2024年1月31日 11時21分

お世話になっております、福澤です。

コンテナをconfigファイルによる自動起動で立ち上げた場合の動作も確認しましたが、タッチパネル操作ができていません。
以下、configファイル内容です。

image="localhost/at_debian_image:v0.0.7"
set_autostart yes
add_ports 22:22
add_volumes /sys:/sys /dev:/dev
add_hotplugs fb input rtc sd
add_args --cap-add=NET_RAW --cap-add=SYS_ADMIN --cap-add=SYS_TIME --cap-add=SYS_RAWIO --privileged
set_command /root/start.sh

コンテナ起動後、start.shにより画面表示アプリケーションが起動するようになっています。
start.shの内容は以下の通りです。

#!/bin/sh
 
export QT_QPA_FB_NO_LIBINPUT=1
export QT_QPA_PLATFORM=linuxfb
 
cd /tmp
 
exec python3 main.py

以上、よろしくお願いいたします。

佐藤です。

configファイルによるコンテナ起動で、
fingerpaint を実行した場合はどうでしょうか。

sankyo_fukuzawa

2024年1月31日 13時12分

お世話になっております、福澤です。

> 佐藤です。
>
> configファイルによるコンテナ起動で、
> fingerpaint を実行した場合はどうでしょうか。

コンテナ起動後のアプリケーション起動.shファイルを以下のように変更し、自動起動でfingerpaintを起動しました。

#!/bin/sh
 
export QT_QPA_FB_NO_LIBINPUT=1
export QT_QPA_PLATFORM=linuxfb
 
exec /usr/lib/aarch64-linux-gnu/qt5/examples/widgets/touch/fingerpaint/fingerpaint

この結果、タッチパネルにfingerpaintの画面が表示されましたが、タッチパネルによる操作はできませんでした。
以上、よろしくお願いいたします。

佐藤です。

QT_QPA_FB_NO_LIBINPUT を設定しないようにしても結果は同じでしょうか。
加えて podman logs を実行したらなにか表示されますでしょうか。

armadillo:~# podman logs <コンテナ名>

sankyo_fukuzawa

2024年1月31日 16時01分

お世話になっております、福澤です。

> 佐藤です。
>
> QT_QPA_FB_NO_LIBINPUT を設定しないようにしても結果は同じでしょうか。
> 加えて podman logs を実行したらなにか表示されますでしょうか。
>

> armadillo:~# podman logs <コンテナ名>
> 

コンテナ起動時のQT_QPA_FB_NO_LIBINPUT設定を無効にしたところ、タッチパネル操作が可能となりました。
QT_QPA_FB_NO_LIBINPUT設定を外すことによって、どのような変更が行われているのでしょうか。
また、podman logは何も出力されませんでした。

 今回タッチパネルを使用するにあたって上記以外に、以下2点の変更を行いましたが、これらは今回のタッチパネル操作に必要な変更だったのでしょうか。
不要なら設定を以前の状態に戻したいと考えております。
・kernelのmenuconfigにて「TOUCHSCREEN_USB_COMPOSITE」を有効
・以下内容のルール「/etc/udev/rules.d/91-libinput-egalax-local.rules」を追加

ACTION=="add|change", KERNEL=="event[0-9]*", ENV{ID_VENDOR_ID}=="0eef", \
ENV{ID_MODEL_ID}=="0001", ENV{ID_INPUT_TABLET}="", ENV{ID_INPUT_TOUCHSCREEN}="1"

(参考:https://armadillo.atmark-techno.com/forum/armadillo/15679

以上、よろしくお願いいたします。

佐藤です。

> コンテナ起動時のQT_QPA_FB_NO_LIBINPUT設定を無効にしたところ、タッチパネル操作が可能となりました。
動いたようでこちらも安心しました。
> QT_QPA_FB_NO_LIBINPUT設定を外すことによって、どのような変更が行われているのでしょうか。
udevルールによってlibinputが使われるようになったのに、NO_LIBINPUTがそれを邪魔していたのではないかと思います。

>  今回タッチパネルを使用するにあたって上記以外に、以下2点の変更を行いましたが、これらは今回のタッチパネル操作に必要な変更だったのでしょうか。
> 不要なら設定を以前の状態に戻したいと考えております。
> ・kernelのmenuconfigにて「TOUCHSCREEN_USB_COMPOSITE」を有効
> ・以下内容のルール「/etc/udev/rules.d/91-libinput-egalax-local.rules」を追加
もしかしたら、外しても動くかもしれませんが、あったほうが無難かと思います。

sankyo_fukuzawa

2024年1月31日 17時33分

お世話になっております、福澤です。

> > QT_QPA_FB_NO_LIBINPUT設定を外すことによって、どのような変更が行われているのでしょうか。
> udevルールによってlibinputが使われるようになったのに、NO_LIBINPUTがそれを邪魔していたのではないかと思います。

ご回答ありがとうございます、QT_QPA_FB_NO_LIBINPUT理解いたしました。
 
> >  今回タッチパネルを使用するにあたって上記以外に、以下2点の変更を行いましたが、これらは今回のタッチパネル操作に必要な変更だったのでしょうか。
> > 不要なら設定を以前の状態に戻したいと考えております。
> > ・kernelのmenuconfigにて「TOUCHSCREEN_USB_COMPOSITE」を有効
> > ・以下内容のルール「/etc/udev/rules.d/91-libinput-egalax-local.rules」を追加
> もしかしたら、外しても動くかもしれませんが、あったほうが無難かと思います。

承知いたしました、上記設定は残しておきます。
 
これで一通りタッチパネル操作が確認できました。お世話になりました、ありがとうございます。