Linuxバックグラウンドカードスワイプリーダー
-
03-10-2019 - |
質問
現在、埋め込まれたLinuxマシンにUSBカードのスワイプが取り付けられており、私が伝えることができることから、調査したことからキーボードとして機能し、すべてのデータを入力しているかのように入力しています。これで、このすべてのデータを取得してファイルに保存するPerlスクリプトがあります。唯一の問題は、Perlスクリプトがフォアグラウンドで実行されている場合にのみデータを取得することを知っていることです。
私の質問は、入力を読み取るたびにこのカードをスワイプするにはどうすればよいですか?または、バックグラウンドで実行されているアプリを使用して、どういうわけかデータをキャプチャできます。 IE C ++プログラムでは、バックグラウンドで実行されていますが、CINはマシンへの入力を読みますか?
私はカードのスワイプリーダーをいじり回したことがないので、それらがどのように機能するかを100%確信していません。
これに関する提案はどんなことでも感謝されます!
解決
私にはアイデアがありますが、それは非常に一般的です。
バッファが特定のサイズに達したり、アクティビティなしで一定期間行くときに、別のプログラムでデータを常に監視してバッファしてからPerlスクリプトに結果をパイプすることができますか?パイプでパイプ化する場合は、Perlスクリプトを変更する必要はありません。
だから、それは次のようになります:
監視プログラム - >データを収集 - > PERLプログラムにパイプします
このアイデアが役立つことを願っています。
-Brian J. Stinar-
他のヒント
私はほぼ正確にこれを行いました(キーボードとして登場したUSBバーコードリーダーを除く)。
私のシステムには、ベンダーと製品IDに基づいてプラグインしたときにUSBデバイスを検出するカスタムUSBホットプラグルールがあります。このルールは、対応するものへのシンリンクを作成します event
デバイスイン /dev/input/
.
その後、常に実行されるCデーモンを持っています。それは見ます /dev/input/
ディレクトリ、そしてそれがSymlinkを見ると表示されると event
端末。次に、を使用します EVIOCGRAB
イベントデバイスを排他的に使用するためのIOCTL(これにより、他のアプリケーションでキーボード入力として表示されるデータが防止されます)、キープレスに対応する入力イベントを読み取ります。デーモンはキープレスをキャラクターに変換し、データベースに保存します。
CINは、添付の端子入力デバイスから入力を読み取ります。ソフトウェアデザインについて詳しく知ることなく、私の最初の予想は、Perlスクリプトのデータを読んでいることではなく、デザインの最良の選択ではありません。あなたが説明しているようにPerlスクリプトを使用して、埋め込みLinuxデバイスのIRリモートを読み取ることができますが、一般に、メインアプリケーション内からAPIを提供するハードウェアまたはベンダーと直接インターフェイスします。カードリーダーにAPIが提供されましたか?
カードリーダーがマシン(/dev/*)に接続されたときのデバイス名は何ですか?私はそれを開けてそのように読みます。
Linuxでこれを扱ったことはありません。しかし、これは私がWindowsで見たものと非常に似ているように聞こえます。
私の経験では、これらのタイプのデバイスの多くが、キーボードタイプのデバイスとしてオペレーティングシステムによって自動的に検出されます。そのため、読者からの入力は、実際のキーボードが使用するのと同じキーボードストリームに供給されます。これが実際のプログラムに到達するまでに、カードリーダーがデータを入力することと、本当に速くタイピングするユーザーとの違いを伝える方法はありません。
結果として、元の質問で説明されている動作を取得します。カードリーダーの入力は、通常のキーボード入力がどこに行くかだけで、焦点を合わせます。
最良の選択肢は、メーカーのWebサイトを調査し(または連絡する)、プログラムがキーボードストリームとはまったく別にその入力をキャッチできるようにするドライバーが提供されるかどうかを調べることです。
メーカーがそのようなことを提供しない場合、おそらく一部のパーティがそうしているでしょう。しかし、残念ながら、私はそれを調査したことがないので、どこであなたに見始めるように言うべきかわかりません。