m.hayashi
2015年12月4日 17時35分
いつもお世話になっております。
林と申します。
Armadillo-840液晶モデル開発セットを使っています。
QtでGUIアプリを作成しています。
もともとLCD側に表示し、タッチでの操作ができていたのですが
原因がよくわからないのですが、いつのまにかタッチに反応しなくなっていました。
しばらくHDMIに表示させマウス操作でテストしており
久しぶりにLCD側に表示を変えたところ
タッチに反応しなくなっているのに気がつきました。
現在作成中のアプリとは別に
QPushButtonとQLabelだけの単純なアプリで、ボタンを押すと文字表示を変更するようなものを作って
試してみたのですがそれもタッチイベントを取得できませんでした。
以下のように起動させているのですが
Qt Creatorからデプロイして実行しても、端末からの実行しても同じ状態です。
QT_QPA_EGLFS_DISPLAY=0 QT_QPA_WIDTH=800 QT_QPA_HEIGHT=480 ./Test
※ QT_QPA_EGLFS_DISPLAY は元々はHDMIが0、LCDが1でしたが
先日PWMの設定変更後、HDMIが1、LCDが0に変わりました。
起動時、端末には下記のように表示されます。
evdevtouch: Using device /dev/input/event0
min X: 0 max X: 799
min Y: 0 max Y: 479
min pressure: 0 max pressure: 1
device name: st1232-touchscreen
Protocol type B (mtdev)
ためしにマニュアルにあったタッチイベントの確認で
evtest /dev/input/event0 を実行してみたところ、
タッチすると
Event: time 946691284.679634, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 70
Event: time 946691284.679641, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 330
Event: time 946691284.679646, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 393
Event: time 946691284.679651, ++++++++++++++ SYN_MT_REPORT ++++++++++++
Event: time 946691284.679662, -------------- SYN_REPORT ------------
のように表示されます。何回かタッチすると反応しなくなり
i2c-sh_mobile i2c-sh_mobile.0: Transfer request timed out
が表示され、再度タッチに反応するようになり→無反応→i2c-shの表示・・・
というのを繰り返します。
LCDのタッチイベントをQtのアプリで再度取得できるようにするにはどうしたらよいでしょうか?
なにか確認事項があれば教えてください。
現在、Armadillo-840の基板と拡張ボード01(Cコネクタ用)は延長ケーブルを使って接続していますが
何か関係するのでしょうか?
よろしくお願いします。
コメント
m.hayashi
m.hayashi
林です。
最新の標準イメージで Armadillo-840 を起動させた場合、
evtestだけ動かすと特に問題なかったのですが
延長ありの状態でQtのテストアプリを起動してみたところ、タッチには反応せず
その後、再度evtestを動かすと、反応が遅くなったり i2c-sh_mobile が出るようになりました。
延長ケーブルをはずしたところ、
Qtのアプリでタッチが普通に使えるようになりました。
元々の使用環境(debian+PWM有効化設定したLinuxカーネルイメージ)でも
延長ケーブルなしなら、Qtのアプリでタッチが使えるようになりました。
いろいろ条件を変えて試したため
現在はLinuxのイメージは新たに作り直したものになっています。
下記のみ設定
・PWMの有効化(TPU0TO0、TPU0TO1)
・SCIFA0を有効化
元の環境だと
-plugin evdevtouch:/dev/input/event0
のオプションはつけなくてもタッチを使えていたのですが
今は実行時に追加しないとタッチが使えないようです。
カーネルコンフィグレーションでなにか設定し忘れているのでしょうか?
タッチイベントが取得できなかったのは
延長ケーブルを使ったことが原因のようですね・・・
お騒がせしました。
at_kojiro.yamada
> 元の環境だと
> -plugin evdevtouch:/dev/input/event0
> のオプションはつけなくてもタッチを使えていたのですが
> 今は実行時に追加しないとタッチが使えないようです。
> カーネルコンフィグレーションでなにか設定し忘れているのでしょうか?
Photo Viewerではタッチ操作できるのでしょうか?
もしできるのであれば、
カーネルコンフィギュレーションの問題ではなく、Qtアプリケーション側の問題と
いうことになります。
以下のようにするとPhoto ViewerをLCDに出力させることができます。
標準イメージでは、この方法でPhoto Viewerのタッチ操作が可能なことを確認
しています。
[Armadillo]# QT_QPA_EGLFS_DISPLAY=1 QT_QPA_EGLFS_WIDTH=800 \ QT_QPA_EGLFS_HEIGHT=480 qmlscene /usr/share/qt5/photoviewer/photoviewer.qml
m.hayashi
> 以下のようにするとPhoto ViewerをLCDに出力させることができます。
> 標準イメージでは、この方法でPhoto Viewerのタッチ操作が可能なことを確認
> しています。
>
> [Armadillo]# QT_QPA_EGLFS_DISPLAY=1 QT_QPA_EGLFS_WIDTH=800 \ > QT_QPA_EGLFS_HEIGHT=480 qmlscene /usr/share/qt5/photoviewer/photoviewer.qml >
Debianを使用しており
/usr/share/qt5/photoviewer/photoviewer.qml
はないようなので、標準イメージから photoviewer ディレクトリ以下をarmadilloにコピーして
起動してみたところ、タッチ操作不可でした。
at_kojiro.yamada
> タッチイベントが取得できなかったのは
> 延長ケーブルを使ったことが原因のようですね・・・
延長ケーブルというのは、SA-A800-FPC100P-00 [1]のことで間違いありませんか?
この延長ケーブルはネジ穴等で固定されないため、
コネクタ間の接続部分は不安定な状態になります。
そのため、
タッチパネルを押した時の力によってコネクタ間の接触が悪くなり
信号が伝わらなくなっている可能性があります。
[1] http://armadillo.atmark-techno.com/option-products/SA-A800-FPC100P-00
m.hayashi
林です。
SA-A800-FPC100P-00 [1] です。
840側CON7 と拡張ボード01側CON1 間の接続に2枚使用されていました。
(デモ時にArmadillo-840の基板が見えるように配置したいということで)
接続部をがっちり固定できれば延長自体は問題はないのでしょうか?
標準のイメージで試したときに
Armadilloを起動後、evtest だけ動かしていると
途中で止まったりもせず、特に問題はなさそうだったので、
延長しているのが主な原因ではないのかなと思っていました。
しかし、Qtアプリだとタッチに反応がないのは変わらずなのと
1度Qtアプリを起動した後だとevtestでも反応がおかしくなることがわかりました。
延長なしにすると、
Qtアプリでもevtestでも不具合が発生しないことがわかりましたので
延長するのをやめました。
evtestだけ動かす場合は延長していてもあまり影響がないようですが
Qtアプリ使用時はタッチの信号取得がシビアになるのですかね?
at_kojiro.yamada
2015年12月7日 15時00分
現時点で最新の標準イメージで Armadillo-840 を起動させた場合、 evtest の
結果はどうなるのでしょうか?
■ Armadillo-840 標準イメージ
- カーネル
http://download.atmark-techno.com/armadillo-840/image/linux-a840-v1.12…
- ユーザーランド
http://download.atmark-techno.com/armadillo-840/image/romfs-a840-v1.10…
もし、標準イメージでも evtest で
> i2c-sh_mobile i2c-sh_mobile.0: Transfer request timed out
のメッセージが表示されるなら、延長ケーブルを使わずに接続した場合に同じ
現象が再現するか試してみてください。