3

LIRCd を使用して、適切な構成ファイルを使用して、リモコンで押したキーをキャプチャしています。
ドキュメントによると、ブロッキング関数が戻るのを待つ必要がありlirc_nextcode()、次のようにデコードするのに適した行が得られます。

0000000080bf4bb4 00 CURSOR_DOWN myremote

最初の数字はキーの値、次はこのキーが押された回数(ここでは 0 です。これは押して離しただけなので)、次にキー名とリモコンの名前です。

とにかく、私がやりたいのは、リモコンのキーアップを検出することです。

一定時間ボタンを押すと、次のようになります(〜200ミリ秒ごとに改行):

0000000080bf4bb4 00 CURSOR_DOWN myremote
0000000080bf4bb4 01 CURSOR_DOWN myremote
0000000080bf4bb4 02 CURSOR_DOWN myremote
0000000080bf4bb4 03 CURSOR_DOWN myremote
0000000080bf4bb4 04 CURSOR_DOWN myremote
0000000080bf4bb4 05 CURSOR_DOWN myremote
0000000080bf4bb4 06 CURSOR_DOWN myremote
0000000080bf4bb4 07 CURSOR_DOWN myremote
0000000080bf4bb4 08 CURSOR_DOWN myremote
0000000080bf4bb4 09 CURSOR_DOWN myremote
0000000080bf4bb4 0a CURSOR_DOWN myremote
// I let go for 1s and press it again:
0000000080bf4bb4 00 CURSOR_DOWN myremote

そのため、キーを長押しするたびに 2 番目の数字が増加しますが、キーを離してもう一度押すと、0 にリセットされます。

私が欲しいのは、繰り返しが止まる瞬間を検出できることです。

これで、キーアップ検出を実装する方法がわかります。lirc_nextcode()一定時間経過してもクラックしない場合は、キーが離されたと見なすことができます。

私があなたに尋ねているのは、それを行う別の(より適切な)方法はありますか?
おそらくLIRCdを設定することによって?

または、タイマーを使用する以外に方法がない場合、最適な実装は何ですか? 確かに、lirc_getcode()をブロックしているので、タイマーがクラックしたときはいつでも戻る必要があります!

編集:ところで、いいえlircまたはlircdタグ、あればいいですね!

4

2 に答える 2

1

最後に受け取ったコードを保存して新しいコードと比較します。コードが異なる場合は、保存されているキーが解放されました。私があなたの投稿で見たものについては、コード長は固定されているようですので、私が言ったようにそれを実装するのにそれほど問題はないはずです、ただ最後のバイト(リピートカウント)を無視してください。

IR送信機は、キーを押しながら同じコードを繰り返すことで機能するため、繰り返し間の遅延である「ガードタイム」を知る必要があります。この遅延をテストして、繰り返しが発生していないかどうかを確認する必要があります。その遅延の後に何も起こらない場合は、ユーザーがキー(KEY UP)を解放したと見なすことができます。

要するに:

  1. コードを読む
  2. 後で比較するために変数に保存します
  3. ポートをポーリングしてさらにコードを探します。何も来ず、ガード時間が経過した場合は、KEY UP = true
  4. コードを取得し、保存されているコードと比較します。
  5. 異なる場合はKEYUP= true、ラベル2にさらにループします
于 2011-07-28T02:02:38.380 に答える
1

私は以前にlirc/lircdを数回使用しましたが、私が知る限り、キーアップイベントを検出する公式の方法はありません.

このテクノロジーがどのように機能するかを考えると、そうでないことは理にかなっています。リモコンは、ボタンごとに 1 つのコードのみを保存するようにプログラムされています。したがって、ボタン X が押されると、ボタンが押されたことを示すコード X が送信され、ボタン Y が押されるとコード Y が送信されます。この情報を受信して​​いる反対側 (Lircd を実行している) のデバイスは、これがキー ダウンイベントかキー アップイベントかを知る方法がありません。これは、通信システムがどのように機能するかではないためです。ボタンが押されたことだけを認識します。

RC のボタン X を押し続けると、相手側のデバイスでより多くのコードが送信されます。興味がない場合は、これらの繰り返しメッセージを破棄する必要があります。

于 2011-07-24T03:05:36.800 に答える