web-dev-qa-db-ja.com

/ dev / input / event *のフォーマット

/dev/input/event*にあるキャラクターデバイスの「フォーマット」は何ですか?

つまり、文字ストリームをどのようにデコードできますか? Pythonの例をいただければ幸いです。

28
jldupont

Input.py モジュールの右側。 event.py モジュールも必要です。

11
Keith

シンプルで未加工のリーダーは、以下を使用して実行できます。

#!/usr/bin/python
import struct
import time
import sys

infile_path = "/dev/input/event" + (sys.argv[1] if len(sys.argv) > 1 else "0")

#long int, long int, unsigned short, unsigned short, unsigned int
FORMAT = 'llHHI'
EVENT_SIZE = struct.calcsize(FORMAT)

#open file in binary mode
in_file = open(infile_path, "rb")

event = in_file.read(EVENT_SIZE)

while event:
    (tv_sec, tv_usec, type, code, value) = struct.unpack(FORMAT, event)

    if type != 0 or code != 0 or value != 0:
        print("Event type %u, code %u, value %u at %d.%d" % \
            (type, code, value, tv_sec, tv_usec))
    else:
        # Events with code, type and value == 0 are "separator" events
        print("===========================================")

    event = in_file.read(EVENT_SIZE)

in_file.close()
36
Treviño

フォーマットは Documentation/input/input.txt Linuxソースのファイル。基本的には、ファイルから次の形式の構造体を読み取ります。

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

typeおよびcodeは、linux/input.h。たとえば、タイプはEV_RELマウスの相対的なモーメント、またはEV_KEYキープレスの場合、codeはキーコード、またはREL_XまたはABS_Xマウス用。

22
nelhage

python-evdev パッケージは、イベントデバイスインターフェイスへのバインディングを提供します。短い使用例は次のとおりです。

from evdev import InputDevice
from select import select

dev = InputDevice('/dev/input/event1')

while True:
   r,w,x = select([dev], [], [])
   for event in dev.read():
       print(event)

# event at 1337427573.061822, code 01, type 02, val 01
# event at 1337427573.061846, code 00, type 00, val 00

これまでに説明した非常に便利で純粋なPythonicモジュールとは異なり、 evdev にはC拡張が含まれていることに注意してください。それらをビルドするには、python開発およびカーネルヘッダーをインストールする必要があります。

9
gvalkov

データはinput_event構造の形式です。 Cの例については http://www.thelinuxdaily.com/2010/05/grab-raw-keyboard-input-from-event-device-node-devinputevent/ を参照してください。構造体の定義は(たとえば) http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/input.h?v=2.6にあります。 11.8 。デバイスから読み取る前に、一連のioctl呼び出しを使用してデバイスに関する情報を取得する必要があることに注意してください。

6