/ প্রো / বাস / ইনপুট / ডিভাইস ডেটাতে ইভি ব্যাখ্যা করুন


12

কেউ কি আমাকে বোঝাতে পারেন যে এর EVমান /proc/bus/input/devicesকী?

কীবোর্ডের সর্বদা মান থাকে 120013। কেন?


দয়া করে নোট করুন: কীবোর্ডগুলি সবসময় থাকে না 0x120013, তবে সর্বনিম্ন তারা তা করে। আপনি করতে চান না if(ev == 0x120013){ isKeyboard = true; }, আপনি করতে চাইবেনif((ev & 0x120013) == 0x120013){ isKeyboard = true; }
অ্যান্ডি

উত্তর:


22

এটি bitmaskডিভাইস দ্বারা সমর্থিত ইভেন্টগুলির জন্য প্রতিনিধিত্ব করে ।

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.

Bitmasks

আপনি যেমন জানেন যে কম্পিউটারগুলি বাইনারি হিসাবে ডিল করে, তাই:

1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
...

সুতরাং আমার কাছে যদি মান সহ একটি বিটম্যাপ থাকে 5তবে অন্য শব্দের সাথে বিট 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 )

সুতরাং আমার Var হয়েছে A এবং সি


কার্নেলটি আরও কিছু পরিশীলিত / জটিল উপায়ে ব্যবহার করে এবং অফসেট দ্বারা বিট সেট করে। তারপরে আরও বিট একটি কম্পিউটারে উপলব্ধ (সিপিইউ) পূর্ণসংখ্যার ব্যবহৃত হয় reason উদাহরণস্বরূপ KEYবিটম্যাপটি দেখুন।

সুতরাং, আমরা যদি বলি:

A = 0
B = 1
C = 6
...

এবং তারপর

target = 0;
set_bit(A, target);  => target ==      0001
set_bit(C, target);  => target == 0100 0001

গঠনের কথা মাথায় রেখে 120013

মানটি 120013হেক্সাডেসিমাল। বাইনারি হিসাবে এটি আমাদের দেয়:

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)

তাদের অর্থ কী তা খতিয়ে দেখার জন্য কার্নেল ডকুমেন্টেশন দ্বারা একটি দ্রুত ভূমিকা দেওয়া হয়েছে ।

* 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 (অব্যাহত):" বিশেষত, এটি আগ্রহী হতে পারে।


2
এই উত্তর আশ্চর্যজনক!
আনিস রামস্বামী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.