matsumoto
2014年12月15日 20時39分
お世話になっております、松本です。
/dev/input/event0のキーイベントについて確認させていただければと思います。
Qtのプロジェクト内で、実行時のシステム環境変数に、
QWS_KEYBOARD linuxinput:/dev/input/event0
と記述すると、SW1〜SW4までがkeyとして認識されると考えているのですが、
現在、widget内部にオーバーライドしたkeyPressEvent(QKeyEvent* event)で感知することができません。
何か他に設定が必要となりますでしょうか?
#あるいは、USB接続のキーなどでも良いのですが
ご存知でしたら、ご教授いただければと思います。
よろしくお願いいたします。
コメント
at_kojiro.yamada
> 何か他に設定が必要となりますでしょうか?
QtでArmadillo-840のユーザースイッチ(SW1~4)のイベント受け取るには
以下の作業が必要になります。
■gen-input-run-data.shの修正
修正用のパッチを添付しました。
以下のようにして適用してください。
適用後、コンフィグ領域に保存してArmadilloを再起動すると、SW4はQtでイベントを受け取ることができるようになります。
[Armadillo ~]# ls gen-input-run-data_sw1_4.patch [Armadillo ~]# cd /etc/config/ [Armadillo /etc/config]# patch < ~/gen-input-run-data_sw1_4.patch [Armadillo /etc/config]# cd [Armadillo ~]# flatfsd -s [Armadillo ~]# reboot
■Linuxカーネルの修正
SW1~3のイベントを取得するには、
linux-3.4-at[VERSION]/arch/arm/mach-shmobile/board-armadillo840.c
の
static struct gpio_keys_button gpio_buttons[]
を修正する必要があります。
SW1~3には、KEY_POWER, KEY_BACK, KEY_MENUがそれぞれ割り当てられています。
そしてQtでは、Linuxカーネルで使われているキーボードのキーのコードを、別の値に割り当てています。
しかし、上の3つのキーのコードは、Qt5.0.2では割り当てられていません。
そのため、Qt5.0.2でSW1~3のイベントを取得するには、SW1~3に別のキーのコードを割り当てる必要があります。
以下は、修正の一例として参考にしてください。
SW1 : KEY_POWER -> KEY_KP0(テンキーの0)
SW2 : KEY_BACK -> KEY_KP1(テンキーの1)
SW3 : KEY_MENU -> KEY_KP2(テンキーの2)
static struct gpio_keys_button gpio_buttons[] = { #if IS_ENABLED(CONFIG_ARMADILLO840_GPIO_KEY_POWER_PORT97) GPIO_KEY(KEY_KP0, GPIO_PORT97, "SW1", .wakeup = 1), #endif #if IS_ENABLED(CONFIG_ARMADILLO840_GPIO_KEY_BACK_PORT98) GPIO_KEY(KEY_KP1, GPIO_PORT98, "SW2"), #endif #if IS_ENABLED(CONFIG_ARMADILLO840_GPIO_KEY_MENU_PORT99) GPIO_KEY(KEY_KP2, GPIO_PORT99, "SW3"), #endif #if IS_ENABLED(CONFIG_ARMADILLO840_GPIO_KEY_HOME_PORT100) GPIO_KEY(KEY_HOME, GPIO_PORT100, "SW4"), #endif };
他のキーを割り当てる場合は、Qtで対応しているかどうかを確認してください。
- キーボードのキーのコードの定義
linux-3.4-at[VERSION]/include/linux/input.h
- Qt5.0.2のキーボードのキーの割り当て
https://qt.gitorious.org/qt/qtbase/source/0e344bb64a8cb27f9a20cff1df612…
- Qtのキーボードの各キーの定義(Qt5.4)
http://doc.qt.io/qt-5.4/qt.html#Key-enum
例として、SW4に設定されている KEY_HOME の場合だと、
- キーのコードは 102
- Qt5.0.2での 102 の割り当て先は 0x01000010
- Qtでの 0x01000010 の定義は Qt::Key_Home
になります。
ファイル | ファイルの説明 |
---|---|
gen-input-run-data_sw1_4.patch | gen-input-run-data.shの修正パッチ |
matsumoto
ご連絡ありがとうございます。
現在実機が手元にないのですが、返ってきたら試してみたいとおもいます。
情報ありがとうございます。
> > 何か他に設定が必要となりますでしょうか?
> QtでArmadillo-840のユーザースイッチ(SW1~4)のイベント受け取るには
> 以下の作業が必要になります。
>
>
> ■gen-input-run-data.shの修正
> 修正用のパッチを添付しました。
> 以下のようにして適用してください。
> 適用後、コンフィグ領域に保存してArmadilloを再起動すると、SW4はQtでイベントを受け取ることができるようになります。
>
>
> [Armadillo ~]# ls > gen-input-run-data_sw1_4.patch > [Armadillo ~]# cd /etc/config/ > [Armadillo /etc/config]# patch < ~/gen-input-run-data_sw1_4.patch > [Armadillo /etc/config]# cd > [Armadillo ~]# flatfsd -s > [Armadillo ~]# reboot >
>
> ■Linuxカーネルの修正
> SW1~3のイベントを取得するには、
> linux-3.4-at[VERSION]/arch/arm/mach-shmobile/board-armadillo840.c
> の
> static struct gpio_keys_button gpio_buttons[]
> を修正する必要があります。
>
> SW1~3には、KEY_POWER, KEY_BACK, KEY_MENUがそれぞれ割り当てられています。
> そしてQtでは、Linuxカーネルで使われているキーボードのキーのコードを、別の値に割り当てています。
> しかし、上の3つのキーのコードは、Qt5.0.2では割り当てられていません。
>
> そのため、Qt5.0.2でSW1~3のイベントを取得するには、SW1~3に別のキーのコードを割り当てる必要があります。
> 以下は、修正の一例として参考にしてください。
>
> SW1 : KEY_POWER -> KEY_KP0(テンキーの0)
> SW2 : KEY_BACK -> KEY_KP1(テンキーの1)
> SW3 : KEY_MENU -> KEY_KP2(テンキーの2)
>
>
> static struct gpio_keys_button gpio_buttons[] = { > #if IS_ENABLED(CONFIG_ARMADILLO840_GPIO_KEY_POWER_PORT97) > GPIO_KEY(KEY_KP0, GPIO_PORT97, "SW1", .wakeup = 1), > #endif > #if IS_ENABLED(CONFIG_ARMADILLO840_GPIO_KEY_BACK_PORT98) > GPIO_KEY(KEY_KP1, GPIO_PORT98, "SW2"), > #endif > #if IS_ENABLED(CONFIG_ARMADILLO840_GPIO_KEY_MENU_PORT99) > GPIO_KEY(KEY_KP2, GPIO_PORT99, "SW3"), > #endif > #if IS_ENABLED(CONFIG_ARMADILLO840_GPIO_KEY_HOME_PORT100) > GPIO_KEY(KEY_HOME, GPIO_PORT100, "SW4"), > #endif > }; >
>
> 他のキーを割り当てる場合は、Qtで対応しているかどうかを確認してください。
>
> - キーボードのキーのコードの定義
> linux-3.4-at[VERSION]/include/linux/input.h
>
> - Qt5.0.2のキーボードのキーの割り当て
> https://qt.gitorious.org/qt/qtbase/source/0e344bb64a8cb27f9a20cff1df612…
>
> - Qtのキーボードの各キーの定義(Qt5.4)
> http://doc.qt.io/qt-5.4/qt.html#Key-enum
>
> 例として、SW4に設定されている KEY_HOME の場合だと、
> - キーのコードは 102
> - Qt5.0.2での 102 の割り当て先は 0x01000010
> - Qtでの 0x01000010 の定義は Qt::Key_Home
> になります。
>
matsumoto
2014年12月15日 20時50分
お世話になっております、松本です。
すみません、記載ミスしましたので、
訂正いたします。
>
ではなく、
になります。/dev/input/event0 は、タッチの方でした。
> お世話になっております、松本です。
>
> /dev/input/event0のキーイベントについて確認させていただければと思います。
>
> Qtのプロジェクト内で、実行時のシステム環境変数に、
>
>
>
> と記述すると、SW1〜SW4までがkeyとして認識されると考えているのですが、
> 現在、widget内部にオーバーライドしたkeyPressEvent(QKeyEvent* event)で感知することができません。
> 何か他に設定が必要となりますでしょうか?
> #あるいは、USB接続のキーなどでも良いのですが
>
> ご存知でしたら、ご教授いただければと思います。
> よろしくお願いいたします。