קובצי פריסה של מפתחות (קבצי .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. אחרי כל הצהרה יכולה להופיע קבוצה אופציונלית של דגלי מדיניות מופרדים ברווחים לבנים.
key 1 ESCAPE key 114 VOLUME_DOWN key 16 Q VIRTUAL key usage 0x0c006F BRIGHTNESS_UP
הדגלים הבאים של המדיניות מוכרים:
FUNCTION
: צריך לפרש את המקש כאילו לחצתם גם על מקש הפונקציה.GESTURE
: המפתח שנוצר על ידי תנועת משתמש, כמו הנחת כף היד על מסך המגע.VIRTUAL
: המפתח הוא מקש וירטואלי (לחצן קיבולי) לצד מסך המגע הראשי. הפעולה הזו מפעילה לוגיקה מיוחדת של ביטול רטט (ראו בהמשך).
הצהרות על צירים
כל הצהרת ציר מורכבת ממילת המפתח axis
ואחריה מספר קוד של ציר Linux ומאפיינים שמאפשרים לשלוט בהתנהגות הציר, כולל שם קוד אחד לפחות של ציר Android.
צירים בסיסיים
ציר בסיסי ממפה קוד ציר של Linux לשם קוד של ציר Android. ההצהרה הבאה ממפה את ABS_X
(שמצוין על ידי 0x00
) אל AXIS_X
(שמצוין על ידי X
).
axis 0x00 X
בדוגמה שלמעלה, אם הערך של ABS_X
הוא 5
, הערך של AXIS_X
מוגדר ל-5
.
צירים מפוצלים
ציר מפוצל ממפה קוד ציר של Linux לשני שמות של קודי צירים של Android, כך שערכי ערכים שקטנים או גדולים מסף מסוים מחולקים לשני צירים שונים במהלך המיפוי. המיפוי הזה שימושי כשציר פיזי יחיד שמדווח על ידי המכשיר מקודד שני צירים לוגיים שונים שאינם חופפים.
ההצהרה הבאה ממפה ערכים של ציר 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. הערך 'center flat' מציין את כמות הרעש הצפויה מהבקר במצב מנוחה.
פרוטוקול הקלט של Linux מספק דרך לנהגים של התקני קלט לציין את הערך השטוח של מרכז הצירים של ג'ויסטיק, אבל לא כל הנהגים מדווחים עליו וחלקם מספקים ערכים שגויים. כדי לפתור את הבעיה הזו, אפשר להוסיף להצהרה על ציר את האפשרות flat
שמציינת את רוחב האזור סביב מיקום הציר במרכז, שצריך להיחשב כממורכז.
לדוגמה, אם מנהל התקן של מכשיר מדווח על ערכים של AXIS_X
בין 0 ל-100, מערכת הקלט של Android ממפה את הערך 0 לערך -1 ואת הערך 100 לערך 1.
מרכז הטווח יהיה 50 בקואורדינטות ללא שינוי קנה מידה ו-0 בקואורדינטות עם שינוי קנה מידה.
אם הערך השטוח שווה ל-10, המפתחים צריכים להניח שכל ערך AXIS_X
שמדווח בין -0.1 ל-0.1 (בין 40 ל-60 בקואורדינטות ללא שינוי קנה מידה) הוא רעש, ולטפל בערכים האלה שמגיעים מהג'ויסטיק כערך אפס.
הערה: קובץ הפריסה של המפתחות מציין את הערך במרחב הקואורדינטות של הנהג, אבל הערך שמדווח על ידי 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
ג'ויסטיק
# 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
מקשים וירטואליים
מערכת הקלט מספקת תכונות מיוחדות להטמעת מקשים וירטואליים בתרחישי השימוש הבאים:
- אם המקשים הווירטואליים מוצגים באופן גרפי במסך (למשל ב-Galaxy Nexus), הם מיושמים על ידי הרכיב של סרגל הניווט בחבילת System UI. מאחר שמפתחות וירטואליים גרפיים מוטמעים בשכבה גבוהה במערכת, קבצים של פריסות מפתחות לא נכללים בכך והמידע הבא לא רלוונטי.
- אם המקשים הווירטואליים מוטמעים כאזור מגע מורחב שנמצא במסך המגע הראשי (כמו ב-Nexus One), מערכת הקלט משתמשת בקובץ מפת מפתחות וירטואליים כדי לתרגם קואורדינטות מגע X/Y לקודי מפתחות של Linux, ואז משתמשת בקובץ הפריסה של המפתחות כדי לתרגם קודי מפתחות של Linux לקודי מפתחות של Android (פרטים על קובצי מפות מפתחות וירטואליים זמינים במאמר מכשירי מגע). קובץ הפריסה של המפתחות למכשיר הקלט עם מסך המגע חייב לציין את מיפוי המפתחות המתאים ולכלול את הדגל
VIRTUAL
לכל מקש. - אם המקשים הווירטואליים מוטמעים כלחצנים קיבוליים נפרדים ממסך המגע הראשי (כמו ב-Nexus S), מנהל ההתקן של הליבה או הקושחה אחראים לתרגם את המגעים לקודי מפתחות של Linux, שמערכת הקלט מתרגמת לאחר מכן לקודי מפתחות של Android באמצעות קובץ הפריסה של המפתחות.
קובץ הפריסה של המפתחות של מכשיר הקלט עם הלחצן הקינטי חייב לציין את המיפוי המתאים של המפתחות ולכלול את הדגל
VIRTUAL
לכל מפתח.
כשמקשי מגע וירטואליים ממוקמים בתוך מסך המגע או בסמוך לו, קל למשתמשים ללחוץ בטעות על לחצן כשהם נוגעים בחלק התחתון של המסך או כשהם מחליקים אצבע מלמעלה למטה או מלמטה למעלה במסך. כדי למנוע זאת, מערכת הקלט מחילה קצת דפוס ביטול רטט, כך שלחיצות על מקש וירטואלי יתעלמו למשך פרק זמן קצר אחרי המגע האחרון במסך המגע (העיכוב הזה נקרא זמן השקט של המקש הווירטואלי).
כדי להפעיל את הדחייה של הקשה על מקש וירטואלי:
- מספקים קובץ של פריסת מפתחות למסך המגע או למכשיר הקלט עם הלחצנים הקיבוליים, עם הדגל
VIRTUAL
מוגדר לכל מפתח.key 139 MENU VIRTUAL key 172 HOME VIRTUAL key 158 BACK VIRTUAL key 217 SEARCH VIRTUAL
- מגדירים את הערך של זמן השקט של המפתח הווירטואלי בשכבת-על של משאב למשאב
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>
אימות
צריך לאמת את קובצי הפריסה של המפתחות באמצעות הכלי Validate Keymaps.