/تنسيق لوحة المفاتيح DEV/إدخال
-
01-10-2019 - |
سؤال
لقد كنت ألعب مع التقاط المدخلات من جهاز لوحة المفاتيح الخاص بي:
/dev/input/by-path/platform-i8042-serio-0-event-kbd
بالنسبة لي ، وكنت أتساءل عما إذا كان هناك أي مواصفات لما يعيده ، باستخدام
od -tx1 /dev/input/by-path/platform-i8042-serio-0-event-kbd
للاستماع. أشعر بالفضول في الغالب بسبب سلوك بعض المفاتيح ؛ Meta ، مفاتيح السهم ، Numpad Forward Slash.
0520300 ac 9d 86 4c 6b 0f 04 00 04 00 04 00 (db) 00 00 00
0520320 ac 9d 86 4c 8c 0f 04 00 01 00 (7d) 00 00 00 00 00
0520340 ac 9d 86 4c 95 0f 04 00 00 00 00 00 00 00 00 00
كل مفتاح آخر نظرت إليه حتى الآن لديه البايتان بين قوسين كقيم مطابقة ، هل هناك أي سبب من الأسباب المميزة؟
المحلول
/dev/input/by-path/platform-i8042-serio-0-event-kbd
هو مجرد ارتباط /dev/input/eventX
ملف جهاز الحدث. يمكن قراءة البيانات من ملفات جهاز الحدث كما
struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};
المعرفة في /usr/include/linux/input.h
.
القيم الممكنة type
بادئة مع EV_
. القيم الممكنة code
يعتمد على type
. هم بادئة مع KEY_
أو BTN_
أو REL_
أو هكذا. القيم الممكنة value
تعتمد على كليهما type
و code
. على سبيل المثال لأحداث الضغط المفاتيح value
يساوي 1
ولأحداث الإفراج عن المفاتيح 0
.
يمكنك فحص بيانات الحدث مع:
evtest /dev/input/eventX
أين X
هو رقم جهاز الحدث للوحة المفاتيح الخاصة بك (أو أي جهاز حدث آخر). ينبعث أو إصدار مفتاح واحد عادة ثلاثة أحداث (EV_MSC
, EV_KEY
و EV_SYN
).
نصائح أخرى
بعض المفاتيح لها رموز مسح غير عادية ...
من: http://www.beyondlogic.org/keyboard/keybrd.htm (مع التعديلات):
الآن هناك 101 مفتاح و 8 بتات تصنع 256 مجموعة مختلفة ، وبالتالي تحتاج فقط إلى إرسال بايت واحد لكل مفتاح ، أليس كذلك؟
لا. لسوء الحظ ، هناك حفنة من المفاتيح الموجودة على لوحة المفاتيح هي مفاتيح ممتدة ، وبالتالي تتطلب رمز المسح. يسبق هذه المفاتيح E0 (Hex). لكنه لا يتوقف عند رموبين المسحين أيضًا. ماذا عن E1،14،77 ، E1 ، F0،14 ، F0،77! الآن لا يمكن أن يكون رمز مسح صالح؟ مخطئ مرة أخرى. يحدث أن يتم إرساله عند الضغط على مفتاح الإيقاف المؤقت/الكسر. لا تسألني لماذا يجب عليهم جعلها وقتًا طويلاً! ربما كانوا يقضون يومًا سيئًا أو شيء من هذا القبيل؟