web-dev-qa-db-ja.com

/ proc / bus / input / devicesデータでEVを説明する

誰かが/proc/bus/input/devicesEVの値を教えてくれませんか?

キーボードの値は常に120013です。どうして?

12
Gabriel

デバイスがサポートするイベントの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
_

前のBbitmapNPSUHは対応する名前の値の最初の文字であり、IIDを表します。 順序どおり:

  • _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(続き):"特に、興味深いかもしれません。

22
Runium