誰かが/proc/bus/input/devices
のEV
の値を教えてくれませんか?
キーボードの値は常に120013
です。どうして?
デバイスがサポートするイベントのbitmask
を表します。
ATキーボードのdevices
エントリのサンプル:
_I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input2
U: Uniq=
H: Handlers=sysrq kbd event2
B: PROP=0
B: EV=120013
B: KEY=20000 200 20 0 0 0 0 500f 2100002 3803078 f900d401 feffffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=7
_
前のB
はbitmap
、N
、P
、S
、U
、H
は対応する名前の値の最初の文字であり、I
はID
を表します。 順序どおり:
I => @id: id of the device
_ _(struct input_id)
_Bus => id.bustype
_Vendor => id.vendor
_Product => id.product
_Version => id.version
_N => name of the device.
_P => physical path to the device in the system hierarchy.
_S => sysfs path.
_U => unique identification code for the device (if device has it).
H => list of input handles associated with the device.
_B => bitmaps
_ PROP => device properties and quirks.
_EV => types of events supported by the device.
_KEY => keys/buttons this device has.
_MSC => miscellaneous events supported by the device.
_LED => leds present on the device.
_ご存知のように、コンピュータはバイナリで処理されるので、
_1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
...
_
したがって、値_5
_のビットマップがある場合、他のWordでビット0および2を保持し、各番号に名前を付けて、値に対応するかどうかを確認できます。
例えば。
_A = 1, 001
B = 2, 010
C = 4, 100
_
次に、バイナリで_MYVAR = 5
_である_101
_がある場合、これはチェックアウトします。
_MYVAR & A == TRUE (101 & 001 => 001)
MYVAR & B == FALSE (101 & 010 => 000)
MYVAR & C == TRUE (101 & 100 => 100 )
_
したがって、私の変数は、AおよびCです。
カーネルはもう少し高度で複雑な方法を使用し、オフセットによってビットを設定します。 1つの理由は、1つのコンピューター(CPU)整数で使用できるビット数が増えることです。たとえば、KEY
ビットマップを見てください。
だから、私たちが言うなら:
_A = 0
B = 1
C = 6
...
_
その後
_target = 0;
set_bit(A, target); => target == 0001
set_bit(C, target); => target == 0100 0001
_
120013
_値_120013
_は16進数です。バイナリとしてそれは私たちに与えます:
_0x120013 == 0001 0010 0000 0000 0001 0011 binary
1 2 0 0 1 3
_
右から番号が付けられています:
_ 2 1 <= offset (10's)
3210 9876 5432 1098 7654 3210 <= offset (counted from right)
0001 0010 0000 0000 0001 0011 <= binary
Set bits are:
0, 1, 4, 17, 20
_
次に _input.h
_ を確認します。
_ 0 EV_SYN (0x00)
1 EV_KEY (0x01)
4 EV_MSC (0x04)
17 EV_LED (0x11)
20 EV_REP (0x14)
_
それらが何を意味するかを確認するために、簡単な紹介を kernel Documentation で示します。
_* EV_SYN:
- Used as markers to separate events. Events may be separated in time or in
space, such as with the multitouch protocol.
* EV_KEY:
- Used to describe state changes of keyboards, buttons, or other key-like
devices.
* EV_MSC:
- Used to describe miscellaneous input data that do not fit into other types.
* EV_LED:
- Used to turn LEDs on devices on and off.
* EV_REP:
- Used for autorepeating devices.
_
これ 、 "編集2(続き):"特に、興味深いかもしれません。