Armadilloフォーラム

gpio-keys(sw1などのキー)の取り扱い

izawa

2015年12月2日 20時50分

毎度お世話様、伊澤@ITTOです。

https://armadillo.atmark-techno.com/forum/armadillo/1067からの話の続きです
CON9_11などのgpioをイベント処理できるようにキーとして割り当てた場合、
現在のレベルや割り込み要因を取得する方法が何かないかという質問です。

少なくとも割り込み要因はevtestでは表示しているわけですから
何か手がないかと思いまして。
最悪/proc/interruputを読んで割り込み回数を抽出しますが、
それもそれなりに負荷が掛かりますし。

知見あれば、宜しくお願いします。

コメント

> https://armadillo.atmark-techno.com/forum/armadillo/1067からの話の続きです
> CON9_11などのgpioをイベント処理できるようにキーとして割り当てた場合、
> 現在のレベルや割り込み要因を取得する方法が何かないかという質問です。

linuxのフレームワークをまもるのであれば、gpiolibと gpio-keyを両方有効にすることはできません。
また、ハードウェアーの設定でも、 keyの場合はチャタリング処理が入るなど、PADの設定にも影響します。

gpioとkeyのどちらが、メインの使い方ですか?

ドライバーを改造しても良いなら、
gpioメインで使う場合に、 inputのイベントを強引に投げるとか、
keyメインで使う場合は、sysfsで状態を出すように改造するとかでしょうか。

gpioをメインするなら、ドライバーの改造がなくてもできるかもしれません。
evemu[1]というので、イベントを replayできるようです。であれば、gpioから情報をとって、
input device にイベントを発行するアプリを書けるってことですよね。
[1]: http://people.freedesktop.org/~whot/evemu/

別のgpio を使ってもよいなら、ハードウェアの配線で解決しそうですが...。

毎度お世話様、伊澤です。
以下引用にて。

> > https://armadillo.atmark-techno.com/forum/armadillo/1067からの話の続きです
> > CON9_11などのgpioをイベント処理できるようにキーとして割り当てた場合、
> > 現在のレベルや割り込み要因を取得する方法が何かないかという質問です。
>
> linuxのフレームワークをまもるのであれば、gpiolibと gpio-keyを両方有効にすることはできません。
> また、ハードウェアーの設定でも、 keyの場合はチャタリング処理が入るなど、PADの設定にも影響します。
>
なるほど、ダメですか。

> gpioとkeyのどちらが、メインの使い方ですか?
>
keyとして使いたいというより、wakeup要因としたいというのがgpio-keysを使った理由です。
なので、gpio-keysでなくともgpioがwakeup要因になるなら、それも一つの解決です。

> ドライバーを改造しても良いなら、
> gpioメインで使う場合に、 inputのイベントを強引に投げるとか、
> keyメインで使う場合は、sysfsで状態を出すように改造するとかでしょうか。
>
前者はsleep中になるので無理っぽい気がします。
後者はレベル変化は検出できるでしょうけど、DIP-swのようなもので
切り替えてから起動されるので初期値が不明で……

> gpioをメインするなら、ドライバーの改造がなくてもできるかもしれません。
> evemu[1]というので、イベントを replayできるようです。であれば、gpioから情報をとって、
> input device にイベントを発行するアプリを書けるってことですよね。
> [1]: http://people.freedesktop.org/~whot/evemu/
>
先に書いた通り、望み薄なので試してみてません。

> 別のgpio を使ってもよいなら、ハードウェアの配線で解決しそうですが...。
ほんとにこれ。ハードを作るのが社内なら線一本なんですが。

念の為に今回の仕事での要件を書いておきます。
・「起きて死ね」信号
通常HIGH。LOWになったら寝てても起きる。そして自殺する。
・「寝るな」信号
LOWになったら寝てても起きる。LOWなら寝てはいけない。

つまり、どちらもwakeup要因である必要があります。
# しかし、日本語で書くと嫌な信号だw