EV
그 가치가 무엇인지 나에게 설명해 줄 수 있는 사람이 있나요 /proc/bus/input/devices
?
키보드에는 항상 가치가 있습니다 120013
. 왜?
답변1
bitmask
장치에서 지원하는 이벤트를 나타냅니다 .
devices
AT 키보드 입력 예:
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
...
따라서 값이 비트 0과 2를 포함하는 비트맵이 있는 경우 5
, 즉 각 숫자에 이름을 지정하고 해당 숫자가 특정 값에 해당하는지 확인할 수 있습니다.
예를 들어
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 )
그러므로 내 var가지다A와 C.
커널은 보다 정교한 방법을 사용하고 오프셋별로 비트를 설정합니다. 한 가지 이유는 컴퓨터(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-event-codes.h
당신은 그것들이 다음에 해당한다는 것을 알게 됩니다:
0 EV_SYN (0x00)
1 EV_KEY (0x01)
4 EV_MSC (0x04)
17 EV_LED (0x11)
20 EV_REP (0x14)
의미를 확인하기 위해 간단한 소개가 제공됩니다.커널 문서.
* 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(계속):"특히 관심이 있을 수 있습니다.