ไฟล์คีย์เลย์เอาต์

ไฟล์เลย์เอาต์หลัก (.kl ไฟล์) แมปโค้ดคีย์และรหัสแกน Linux และรหัสคีย์ Android และระบุแฟล็กนโยบายที่เกี่ยวข้อง ไฟล์เลย์เอาต์คีย์เฉพาะอุปกรณ์มีดังนี้

  • จำเป็นสำหรับอุปกรณ์อินพุตภายใน (ในตัว) ที่มีคีย์ ซึ่งรวมถึง แป้นพิเศษ เช่น แป้นปรับระดับเสียง แป้นเปิด/ปิด และแป้นสื่อชุดหูฟัง
  • ไม่บังคับสำหรับอุปกรณ์อินพุตอื่นๆ แต่แนะนำสำหรับ แป้นพิมพ์และจอยสติ๊กสำหรับวัตถุประสงค์พิเศษ

หากไม่มีไฟล์เลย์เอาต์คีย์เฉพาะอุปกรณ์ ระบบจะเลือก เป็นค่าเริ่มต้นแทน

ตำแหน่ง

ไฟล์คีย์เลย์เอาต์อยู่โดยผู้ให้บริการ USB, ผลิตภัณฑ์ (และเวอร์ชันที่ไม่บังคับ) รหัสหรือตามชื่ออุปกรณ์อินพุต เราจะพิจารณาเส้นทางต่อไปนี้ตามลำดับ

  • /odm/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
  • /vendor/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
  • /system/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
  • /data/system/devices/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
  • /odm/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
  • /vendor/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
  • /system/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
  • /data/system/devices/keylayout/Vendor_XXXX_Product_XXXX.kl
  • /odm/usr/keylayout/DEVICE_NAME.kl
  • /vendor/usr/keylayout/DEVICE_NAME.kl
  • /system/usr/keylayout/DEVICE_NAME.kl
  • /data/system/devices/keylayout/DEVICE_NAME.kl
  • /odm/usr/keylayout/Generic.kl
  • /vendor/usr/keylayout/Generic.kl
  • /system/usr/keylayout/Generic.kl
  • /data/system/devices/keylayout/Generic.kl

เมื่อสร้างเส้นทางไฟล์ที่มีชื่ออุปกรณ์ อักขระทุกตัว ในชื่ออุปกรณ์อื่นที่ไม่ใช่ "0"-'9', "a"-'z' 'A'-'Z', '-' หรือ '_' แทนที่ด้วย "_"

ไฟล์รูปแบบคีย์ทั่วไป

ระบบจะให้ไฟล์รูปแบบคีย์ทั่วไปในตัวแบบพิเศษชื่อ Generic.kl เลย์เอาต์หลักนี้มีไว้เพื่อสนับสนุน แป้นพิมพ์ภายนอกและจอยสติ๊กมาตรฐาน อย่าแก้ไขคีย์ทั่วไป เลย์เอาต์

วากยสัมพันธ์

ไฟล์เลย์เอาต์คีย์คือไฟล์ข้อความธรรมดาที่ประกอบด้วยการประกาศคีย์หรือแกน และแฟล็ก

การประกาศคีย์

การประกาศคีย์ประกอบด้วยคีย์เวิร์ด key ตามด้วย Linux หมายเลขรหัสคีย์และชื่อรหัสคีย์ Android หรือการใช้คีย์เวิร์ดตามด้วย การใช้งาน HID และชื่อรหัสคีย์ Android การใช้งาน HID จะแสดงเป็น 32 บิต จำนวนเต็ม โดยค่า 16 บิตที่สูงจะแสดงหน้าการใช้งาน HID และ 16 บิตระดับต่ำ แสดงรหัสการใช้งาน HID อาจมีการประกาศที่ไม่บังคับ ชุดของ Flag นโยบายที่คั่นด้วยช่องว่าง

key 1     ESCAPE
key 114   VOLUME_DOWN
key 16    Q                 VIRTUAL
key usage 0x0c006F          BRIGHTNESS_UP

ทราบถึงแฟล็กนโยบายต่อไปนี้

  • FUNCTION: ระบบควรตีความคีย์นี้ว่าเป็นคีย์ FUNCTION ก็มีคนกดดันเช่นกัน
  • GESTURE: คีย์ที่สร้างขึ้นโดยท่าทางสัมผัสของผู้ใช้ เช่น การฝ่ามือ หน้าจอสัมผัส
  • VIRTUAL: คีย์เป็นซอฟต์คีย์เสมือน (ปุ่มแบบ Capacitive) ที่อยู่ติดกับหน้าจอสัมผัสหลัก ซึ่งจะทําให้ตรรกะการดีเบี่ยงเบนพิเศษ เปิดใช้งานอยู่ (ดูด้านล่าง)

การประกาศแกน

การประกาศแกนแต่ละรายการประกอบด้วยคีย์เวิร์ด axis ตามด้วย หมายเลขรหัสแกน Linux และตัวระบุที่ควบคุมลักษณะการทำงานของแกน รวมชื่อรหัสแกน Android อย่างน้อย 1 ชื่อ

แกนพื้นฐาน

แกนพื้นฐานจะแมปโค้ดแกน Linux กับชื่อรหัสแกน Android แมปการประกาศต่อไปนี้ ABS_X (ระบุโดย 0x00) ไปยัง AXIS_X (ระบุโดย X)

axis 0x00 X

ในตัวอย่างด้านบน หากค่าของ ABS_X คือ 5 ระบบจะตั้งค่า AXIS_X เป็น 5

แกนแยก

แกนแบบแยกจะแมปโค้ดแกน Linux กับชื่อรหัสแกน Android 2 ชื่อ ซึ่งทำให้ ค่าที่น้อยกว่าหรือมากกว่าเกณฑ์จะถูกแบ่งออกเป็น 2 แกน เมื่อทำแผนที่แล้ว การแมปนี้มีประโยชน์เมื่อมีแกนทางกายภาพเดียวที่รายงานโดย อุปกรณ์จะเข้ารหัสแกนตรรกะ 2 แกนที่แตกต่างกันพร้อมกัน

การประกาศต่อไปนี้จะจับคู่ค่าของแกน ABS_Y (ระบุโดย 0x01) เป็น AXIS_GAS เมื่อน้อยกว่า 0x7f หรือ AXIS_BRAKE เมื่อมากกว่า 0x7f

axis 0x01 split 0x7f GAS BRAKE

ในตัวอย่างด้านบน หากค่าของ ABS_Y คือ 0x7d จากนั้น AXIS_GAS ได้รับการตั้งค่าเป็น 2 (0x7f - 0x7d) และ AXIS_BRAKE ตั้งค่าเป็น 0 ในทางกลับกัน หากค่า ของ ABS_Y มีค่าเป็น 0x83 แล้วตั้งค่า AXIS_GAS เป็น ตั้งค่า 0 และ AXIS_BRAKE เป็น 4 (0x83 - 0x7f) สุดท้าย หากค่าของ ABS_Y เท่ากับ ค่าแบ่งของ 0x7f ตามด้วยทั้ง AXIS_GAS และ ตั้งค่า AXIS_BRAKE เป็น 0

แกนกลับสี

แกนที่กลับด้านจะกลับสัญลักษณ์ของค่าแกน ดังต่อไปนี้ แมปการประกาศ ABS_RZ (ระบุโดย 0x05) กับ AXIS_BRAKE (ระบุโดย BRAKE) และกลับค่า โดยลบเครื่องหมายนั้น

axis 0x05 invert BRAKE

ในตัวอย่างด้านบน หากค่าของ ABS_RZ คือ 2 ระบบจะตั้งค่า AXIS_BRAKE เป็น -2

ตัวเลือกกึ่งกลางแฟลต

อุปกรณ์จอยสติ๊กอาจรายงานเหตุการณ์อินพุตแม้ในขณะที่ไม่ได้ใช้จอยสติ๊กเนื่องจากมีเสียงรบกวน เสียงนี้มักมาจากแท่งด้านซ้ายและ/หรือขวา ซึ่งทำให้ผู้ขับขี่รายงาน ค่าตำแหน่งที่ใกล้เคียง 0 "แนวราบตรงกลาง" จะระบุปริมาณเสียงรบกวนที่คาดว่าจะได้รับจากตัวควบคุมที่ไม่มีการเคลื่อนไหว

โปรโตคอลอินพุตของ Linux จะให้วิธีที่ไดรเวอร์อุปกรณ์อินพุตระบุ ค่าคงที่ตรงกลางของแกนจอยสติ๊ก แต่มีเพียงไดรเวอร์บางรายเท่านั้นที่รายงาน และบางคันมี ค่าไม่ถูกต้อง ในการแก้ไขปัญหานี้ การประกาศแกนอาจตามด้วย ตัวเลือก flat ที่ระบุความกว้างของพื้นที่รอบๆ กึ่งกลาง ตำแหน่งของแกนที่ควรถือว่าเป็นกึ่งกลาง

ตัวอย่างเช่น หากไดรเวอร์ของอุปกรณ์รายงานค่าสำหรับ AXIS_X ระหว่าง 0 ถึง 100 แล้ว 0 จะจับคู่กับ -1 และระบบอินพุตของ Android จะแมป 100 กับ 1 จุดศูนย์กลางของช่วงจะเป็น 50 ในพิกัดที่ไม่ได้ปรับขนาด และ 0 ในพิกัดที่ปรับขนาด หากค่าคงที่เท่ากับ 10 นักพัฒนาซอฟต์แวร์ควรคิดว่าค่า AXIS_X ที่รายงานระหว่าง -0.1 ถึง 0.1 (ระหว่าง 40 ถึง 60 ในพิกัดที่ไม่ปรับสเกล) คือนอยส์ และถือว่าค่าเหล่านี้กำลังมา จากจอยสติ๊กเป็น 0

หมายเหตุ: ขณะที่ไฟล์เลย์เอาต์คีย์ระบุค่า สำหรับพื้นที่พิกัดคนขับ ค่าที่ android.view.InputDevice.MotionRange#getFlat() รายงานอยู่ใน Android พิกัด

axis 0x03 Z flat 4096

ในตัวอย่างด้านบน ค่าศูนย์กลางแบบแฟลตได้รับการตั้งค่าเป็น 4096

ความคิดเห็น

บรรทัดความคิดเห็นจะขึ้นต้นด้วย # แล้วไปจนสุดบรรทัด

# A comment!

ระบบจะไม่สนใจบรรทัดว่าง

ตัวอย่าง

แป้นพิมพ์

# This is an example of a key layout file for a keyboard.

key 1     ESCAPE
key 2     1
key 3     2
key 4     3
key 5     4
key 6     5
key 7     6
key 8     7
key 9     8
key 10    9
key 11    0
key 12    MINUS
key 13    EQUALS
key 14    DEL

# etc...

การควบคุมระบบ

# This is an example of a key layout file for basic system controls,
# such as volume and power keys which are typically implemented as GPIO pins
# the device decodes into key presses.

key 114   VOLUME_DOWN
key 115   VOLUME_UP
key 116   POWER

ปุ่มแบบคาปาซิทีฟ

# This is an example of a key layout file for a touch device with capacitive buttons.

key 139    MENU           VIRTUAL
key 172    HOME           VIRTUAL
key 158    BACK           VIRTUAL
key 217    SEARCH         VIRTUAL

การควบคุมสื่อสำหรับช่องเสียบชุดหูฟัง

# This is an example of a key layout file for headset mounted media controls.
# A typical headset jack interface might have special control wires or detect known
# resistive loads as corresponding to media functions or volume controls.
# This file assumes that the driver decodes these signals and reports media
# controls as key presses.

key 163   MEDIA_NEXT
key 165   MEDIA_PREVIOUS
key 226   HEADSETHOOK

Joystick

# This is an example of a key layout file for a joystick.

# These are the buttons that the joystick supports, represented as keys.
key 304   BUTTON_A
key 305   BUTTON_B
key 307   BUTTON_X
key 308   BUTTON_Y
key 310   BUTTON_L1
key 311   BUTTON_R1
key 314   BUTTON_SELECT
key 315   BUTTON_START
key 316   BUTTON_MODE
key 317   BUTTON_THUMBL
key 318   BUTTON_THUMBR

# Left and right stick.
# The reported value for flat is 128 in a range of -32767 to 32768, which is absurd.
# This confuses applications that rely on the flat value because the joystick
# actually settles in a flat range of +/- 4096 or so. We override it here.
axis 0x00 X flat 4096
axis 0x01 Y flat 4096
axis 0x03 Z flat 4096
axis 0x04 RZ flat 4096

# Triggers.
axis 0x02 LTRIGGER
axis 0x05 RTRIGGER

# Hat.
axis 0x10 HAT_X
axis 0x11 HAT_Y

ซอฟต์คีย์เสมือน

ระบบอินพุตมีฟีเจอร์พิเศษสำหรับการใช้งานซอฟต์คีย์เสมือน ในกรณีการใช้งานต่อไปนี้

  1. หากซอฟต์คีย์เสมือนแสดงเป็นกราฟิกบนหน้าจอ (เช่น Galaxy Nexus) โดยจะใช้งานโดยคอมโพเนนต์แถบนำทางใน แพ็กเกจ UI ระบบ เนื่องจากมีการใช้ซอฟต์คีย์เสมือนแบบกราฟิกในระดับสูง ลงในระบบ ไฟล์เค้าโครงคีย์จะไม่มีส่วนเกี่ยวข้องใดๆ และ ไม่สามารถใช้ได้
  2. หากใช้งานซอฟต์คีย์เสมือนเป็นขอบเขตที่สัมผัสได้แบบขยาย ที่เป็นส่วนหนึ่งของหน้าจอสัมผัสหลัก (เช่น บน Nexus One) อินพุต ระบบใช้ไฟล์แผนที่แป้นเสมือนเพื่อแปลพิกัดการแตะ X/Y เป็น จากนั้นใช้ไฟล์เลย์เอาต์คีย์เพื่อแปลโค้ดคีย์ Linux เป็น รหัสคีย์ Android (โปรดดูรายละเอียดเกี่ยวกับไฟล์คีย์แมปเสมือนที่หัวข้อ อุปกรณ์ระบบสัมผัส) ไฟล์คีย์เลย์เอาต์สำหรับ อุปกรณ์อินพุตแบบหน้าจอสัมผัสต้องระบุการแมปคีย์ที่เหมาะสมและรวม แฟล็ก VIRTUAL สำหรับแต่ละคีย์
  3. หากใช้งานซอฟต์คีย์เสมือนเป็นปุ่มแบบ Capacitive ที่แยกต่างหากจาก หน้าจอสัมผัสหลัก (เช่น บน Nexus S) ไดรเวอร์อุปกรณ์เคอร์เนล หรือ เฟิร์มแวร์มีหน้าที่แปลการสัมผัสเป็นโค้ดคีย์ Linux จากนั้นระบบอินพุตจะแปลงเป็นโค้ดคีย์ Android โดยใช้ไฟล์การจัดวางคีย์ ไฟล์รูปแบบคีย์สำหรับอุปกรณ์อินพุตปุ่มแบบคาปาซิทีฟต้องระบุ การแมปคีย์ที่เหมาะสมและรวม Flag VIRTUAL ของแต่ละคีย์

เมื่อซอฟต์คีย์เสมือนอยู่ภายในหรือในระยะใกล้ของ หน้าจอสัมผัส ผู้ใช้อาจกดปุ่มโดยไม่ตั้งใจได้ง่ายเมื่อ แตะบริเวณด้านล่างของหน้าจอหรือเมื่อเลื่อนนิ้วจากบนลงล่าง หรือ จากล่างขึ้นบนบนหน้าจอ เพื่อป้องกันปัญหานี้ ระบบป้อนข้อมูลจะใช้ การดีเบานซ์เพื่อไม่ให้การกดปุ่มซอฟต์คีย์เสมือนเป็นระยะเวลาสั้นๆ หลังจากการแตะครั้งล่าสุดบนหน้าจอสัมผัส (การหน่วงเวลานี้เรียกว่า Virtual Key Quiet Time)

หากต้องการเปิดใช้การดีเดือดจากซอฟต์คีย์เสมือน ให้ทำดังนี้

  1. จัดเตรียมไฟล์เลย์เอาต์คีย์สำหรับหน้าจอสัมผัสหรือปุ่มแบบ Capacitive อุปกรณ์อินพุตที่มีการตั้งค่าแฟล็ก VIRTUAL สำหรับแต่ละคีย์
    key 139    MENU           VIRTUAL
    key 172    HOME           VIRTUAL
    key 158    BACK           VIRTUAL
    key 217    SEARCH         VIRTUAL
    
  2. ตั้งค่า Quiet Time ของคีย์เสมือนในการวางซ้อนทรัพยากรสำหรับ ทรัพยากร config.xml ของเฟรมเวิร์ก
    <!-- Specifies the amount of time to disable virtual keys after the screen
    is touched to filter out accidental virtual key presses due to swiping gestures
    or taps near the edge of the display. May be 0 to disable the feature.
    It is recommended that this value be no more than 250 ms.
    This feature should be disabled for most devices. -->
    
    <integer name="config_virtualKeyQuietTimeMillis">250</integer>
    

การตรวจสอบความถูกต้อง

คุณควรตรวจสอบไฟล์เลย์เอาต์คีย์โดยใช้ เครื่องมือตรวจสอบคีย์แมป