Tệp bố cục chính

Các tệp bố cục khóa (tệp .kl ) ánh xạ mã khóa và mã trục Linux tới mã khóa và mã trục Android, đồng thời chỉ định các cờ chính sách liên quan. Các tệp bố cục khóa dành riêng cho thiết bị là:

  • Bắt buộc đối với các thiết bị đầu vào bên trong (tích hợp) có phím, bao gồm các phím đặc biệt như phím âm lượng, nguồn và phím đa phương tiện tai nghe.
  • Tùy chọn cho các thiết bị đầu vào khác nhưng được khuyên dùng cho bàn phím và cần điều khiển có mục đích đặc biệt.

Nếu không có sẵn tệp bố cục khóa dành riêng cho thiết bị thì hệ thống sẽ chọn mặc định để thay thế.

Vị trí

Các tệp bố cục chính được đặt theo nhà cung cấp USB, id sản phẩm (và phiên bản tùy chọn) hoặc theo tên thiết bị đầu vào. Các đường dẫn sau đây được tham khảo theo thứ tự:

  • /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

Khi xây dựng đường dẫn tệp chứa tên thiết bị, tất cả các ký tự trong tên thiết bị ngoại trừ '0'-'9', 'a'-'z', 'A'-'Z', '-' hoặc '_' được thay thế bằng '_'.

Tệp bố cục khóa chung

Hệ thống cung cấp một tệp bố cục khóa chung được tích hợp sẵn đặc biệt có tên Generic.kl . Bố cục phím này nhằm hỗ trợ nhiều loại bàn phím và cần điều khiển bên ngoài tiêu chuẩn. Không sửa đổi bố cục khóa chung!

Cú pháp

Tệp bố cục khóa là một tệp văn bản thuần túy bao gồm các khai báo khóa hoặc trục và cờ.

Khai báo khóa

Khai báo khóa bao gồm key từ khóa, theo sau là số mã khóa Linux và tên mã khóa Android hoặc cách sử dụng từ khóa, theo sau là cách sử dụng HID và tên mã khóa Android. Việc sử dụng HID được biểu thị dưới dạng số nguyên 32 bit, trong đó 16 bit cao biểu thị trang sử dụng HID và 16 bit thấp biểu thị ID sử dụng HID. Có thể theo sau một trong hai tuyên bố bằng một bộ cờ chính sách được phân cách bằng khoảng trắng tùy chọn.

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

Các cờ chính sách sau đây được công nhận:

  • FUNCTION : Phím này phải được hiểu như thể phím FUNCTION cũng được nhấn.
  • GESTURE : Phím được tạo bởi cử chỉ của người dùng, chẳng hạn như chạm vào màn hình cảm ứng.
  • VIRTUAL : Phím là phím mềm ảo (nút điện dung) nằm cạnh màn hình cảm ứng chính. Điều này khiến logic gỡ lỗi đặc biệt được bật (xem bên dưới).

Khai báo trục

Mỗi khai báo trục bao gồm axis khóa trục theo sau là số mã trục Linux và các bộ hạn định kiểm soát hoạt động của trục bao gồm ít nhất một tên mã trục Android.

Trục cơ bản

Trục cơ bản chỉ cần ánh xạ mã trục Linux tới tên mã trục Android. Khai báo sau ánh xạ ABS_X (được biểu thị bằng 0x00 ) thành AXIS_X (được biểu thị bằng X ).

axis 0x00 X

Trong ví dụ trên, nếu giá trị của ABS_X5 thì AXIS_X được đặt thành 5 .

Trục chia

Trục phân chia ánh xạ mã trục Linux thành hai tên mã trục Android, sao cho các giá trị nhỏ hơn hoặc lớn hơn ngưỡng sẽ được phân chia thành hai trục khác nhau khi ánh xạ. Ánh xạ này hữu ích khi một trục vật lý duy nhất được thiết bị báo cáo mã hóa hai trục logic loại trừ lẫn nhau khác nhau.

Khai báo sau ánh xạ các giá trị của trục ABS_Y (được biểu thị bằng 0x01 ) thành AXIS_GAS khi nhỏ hơn 0x7f hoặc tới AXIS_BRAKE khi lớn hơn 0x7f .

axis 0x01 split 0x7f GAS BRAKE

Trong ví dụ trên, nếu giá trị của ABS_Y0x7d thì AXIS_GAS được đặt thành 2 ( 0x7f - 0x7d ) và AXIS_BRAKE được đặt thành 0 . Ngược lại, nếu giá trị của ABS_Y0x83 thì AXIS_GAS được đặt thành 0AXIS_BRAKE được đặt thành 4 ( 0x83 - 0x7f ). Cuối cùng, nếu giá trị của ABS_Y bằng giá trị phân tách của 0x7f thì cả AXIS_GASAXIS_BRAKE đều được đặt thành 0 .

Trục đảo ngược

Trục ngược đảo ngược dấu của giá trị trục. Khai báo sau ánh xạ ABS_RZ (được biểu thị bằng 0x05 ) thành AXIS_BRAKE (được biểu thị bằng BRAKE ) và đảo ngược đầu ra bằng cách phủ định nó.

axis 0x05 invert BRAKE

Trong ví dụ trên, nếu giá trị của ABS_RZ2 thì AXIS_BRAKE được đặt thành -2 .

Tùy chọn căn hộ trung tâm

Thiết bị cần điều khiển có thể báo cáo các sự kiện đầu vào ngay cả khi không sử dụng cần điều khiển do nhiễu. Tiếng ồn này thường phát ra từ cần điều khiển bên trái và/hoặc bên phải và khiến người lái báo cáo giá trị vị trí gần 0. Giá trị "trung tâm phẳng" chỉ định lượng tiếng ồn có thể xảy ra từ bộ điều khiển khi nghỉ ngơi.

Giao thức đầu vào Linux cung cấp cách để trình điều khiển thiết bị đầu vào chỉ định giá trị phẳng ở giữa của trục cần điều khiển, nhưng không phải tất cả trình điều khiển đều báo cáo điều đó và một số trình điều khiển trong số đó cung cấp giá trị không chính xác. Để giải quyết vấn đề này, một khai báo trục có thể được theo sau bởi một tùy chọn flat xác định chiều rộng của vùng xung quanh vị trí trung tâm của trục cần được coi là chính giữa.

Ví dụ: nếu trình điều khiển thiết bị báo cáo các giá trị cho AXIS_X trong khoảng từ 0 đến 100 thì 0 sẽ được ánh xạ thành -1 và 100 sẽ được hệ thống đầu vào Android ánh xạ tới 1. Tâm của phạm vi sẽ là 50 ở tọa độ không chia tỷ lệ và 0 ở tọa độ chia tỷ lệ. Nếu giá trị cố định bằng 10 thì nhà phát triển nên giả định rằng mọi giá trị AXIS_X được báo cáo trong khoảng từ -0,1 đến 0,1 (từ 40 đến 60 ở tọa độ không chia tỷ lệ) là nhiễu và coi các giá trị đó đến từ cần điều khiển là 0.

Lưu ý : Mặc dù tệp bố cục khóa chỉ định giá trị cho không gian tọa độ trình điều khiển, nhưng giá trị được báo cáo bởi android.view.InputDevice.MotionRange#getFlat() lại nằm trong không gian tọa độ Android.

axis 0x03 Z flat 4096

Trong ví dụ trên, giá trị căn hộ ở giữa được đặt thành 4096 .

Bình luận

Dòng chú thích bắt đầu bằng # và tiếp tục đến cuối dòng:

# A comment!

Các dòng trống được bỏ qua.

Ví dụ

Bàn phím

# 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...

Điều khiển hệ thống

# 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

Nút điện dung

# 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

Điều khiển phương tiện giắc cắm tai nghe

# 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

Cần điều khiển

# 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

Phím mềm ảo

Hệ thống đầu vào cung cấp các tính năng đặc biệt để triển khai các phím mềm ảo trong các trường hợp sử dụng sau:

  1. Nếu các phím mềm ảo được hiển thị bằng đồ họa trên màn hình (chẳng hạn như trên Galaxy Nexus), chúng sẽ được thành phần Thanh điều hướng trong gói Giao diện người dùng hệ thống triển khai. Vì các phím mềm ảo đồ họa được triển khai ở lớp cao trong hệ thống nên các tệp bố cục phím không liên quan và thông tin sau không được áp dụng.
  2. Nếu các phím mềm ảo được triển khai dưới dạng vùng có thể chạm mở rộng là một phần của màn hình cảm ứng chính (chẳng hạn như trên Nexus One), thì hệ thống đầu vào sẽ sử dụng tệp bản đồ phím ảo để dịch tọa độ cảm ứng X/Y thành mã khóa Linux, sau đó sử dụng tệp bố cục khóa để dịch mã khóa Linux sang mã khóa Android (để biết chi tiết về các tệp bản đồ phím ảo, hãy xem Thiết bị cảm ứng ). Tệp bố cục phím cho thiết bị nhập màn hình cảm ứng phải chỉ định ánh xạ phím thích hợp và bao gồm cờ VIRTUAL cho mỗi phím.
  3. Nếu các phím mềm ảo được triển khai dưới dạng các nút điện dung tách biệt với màn hình cảm ứng chính (chẳng hạn như trên Nexus S), thì trình điều khiển hoặc chương trình cơ sở của thiết bị hạt nhân chịu trách nhiệm dịch các thao tác chạm sang mã khóa Linux mà hệ thống đầu vào sau đó sẽ dịch thành mã khóa Android. bằng cách sử dụng tập tin bố trí khóa. Tệp bố cục phím cho thiết bị đầu vào nút điện dung phải chỉ định ánh xạ phím thích hợp và bao gồm cờ VIRTUAL cho mỗi phím.

Khi các phím mềm ảo được đặt bên trong hoặc gần màn hình cảm ứng, người dùng rất dễ vô tình nhấn nút khi chạm gần cuối màn hình hoặc khi trượt ngón tay từ trên xuống dưới hoặc từ dưới lên trên. trên cùng trên màn hình. Để ngăn chặn điều này, hệ thống đầu vào áp dụng một chút phản xạ sao cho các lần nhấn phím mềm ảo sẽ bị bỏ qua trong một khoảng thời gian ngắn sau lần chạm gần đây nhất trên màn hình cảm ứng (độ trễ này được gọi là thời gian im lặng của phím ảo ).

Để bật tính năng gỡ lỗi phím mềm ảo:

  1. Cung cấp tệp bố cục phím cho màn hình cảm ứng hoặc thiết bị nhập nút điện dung với cờ VIRTUAL được đặt cho mỗi phím.
    key 139    MENU           VIRTUAL
    key 172    HOME           VIRTUAL
    key 158    BACK           VIRTUAL
    key 217    SEARCH         VIRTUAL
    
  2. Đặt giá trị của thời gian im lặng của khóa ảo trong lớp phủ tài nguyên cho tài nguyên config.xml khung.
    <!-- 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>
    

Thẩm định

Bạn nên xác thực các tệp bố cục chính của mình bằng công cụ Xác thực sơ đồ bàn phím .