2009-08-14 6 views
3

私は今日、Linuxマシンに接続されたUSBマウスとのインターフェースについて質問します。しかし、私はマウスにX環境で伝統的な効果を持たせることを望んでいません - ただ、未加工の入力を通してその中に埋め込まれたエンコーダを利用できるようにしたいのです。だから私の質問です。マウス以外のマウス入力を使用する

Linuxでは、C++内の代替マウスデバイスから低レベルですが意味のあるデータを取得するにはどうすればよいですか?具体的には、x軸とy軸の両方に沿った相対位置または少なくともエンコーダカウントを知りたいと思います。

+0

「X環境には従来どおりの効果はありません」とは思っていませんが、x軸とy軸が必要ですか? X環境では座標は意味/可用性しか持たないのですか? –

+0

わからないのですか?彼らは?生データが相対x-y差異にない場合、どのようにエンコードされますか? – duckworthd

答えて

4

HID(ヒューマンインタフェースデバイス)を使用する必要があります私はHIDキーボードとして提示したUSBバーコードリーダーのための類似した何かをやりました。

最近のカーネルでは、/dev/input/event*にマウスのイベントデバイスがあります。あなたがそれを開いて、EVIOCGRAB ioctl()でそれをつかむと、他のアプリケーションにマウスイベントを送信しません。マウスからまっすぐにイベントを読むことができます - LinuxソースコードディストリビューションのDocumentation/input/input.txtにあるevdevのインタフェースドキュメントを参照してください。

struct input_event { 
    struct timeval time; 
    unsigned short type; 
    unsigned short code; 
    unsigned int value; 
}; 

struct input_eventをし、次のマクロは、すべてのlinux/input.hに定義されています):イベント・デバイスから読み取るとき

、あなたは次の形式で、入力イベントの全体数を取得します。あなたが興味を持っている

イベントがinput_event.type == EV_REL(相対移動イベントを)持っているだろう、input_event.codeメンバーはREL_Xのようなもの(X軸を示す - 完全なリストについてlinux/input.hファイルを参照してください)になり、そしてinput_event.value変位になります。

別の答えが示すように、HIDプロトコルを自分で実装する必要はありません。

+0

これは、独立して追跡する必要がある複数のUSBマウスで動作しますか? – Gerharddc

+0

@Gerhman:はい、各マウスには独自の '/ dev/input/event *'デバイスがあります。 – caf

関連する問題