תת-מערכת הקלט של אנדרואיד מורכבת באופן נומינלי מצינור אירועים שחוצה שכבות מרובות של המערכת.
צינור קלט
בשכבה הנמוכה ביותר, התקן הקלט הפיזי מייצר אותות המתארים שינויים במצב כמו לחיצות מקשים ונקודות מגע. קושחת ההתקן מקודדת ומשדרת את האותות הללו בדרך כלשהי, כגון על ידי שליחת דוחות USB HID למערכת או על ידי הפקת פסיקות באוטובוס I2C.
האותות מפוענחים לאחר מכן על ידי מנהל התקן בקרנל של לינוקס. ליבת לינוקס מספקת מנהלי התקנים עבור ציוד היקפי סטנדרטי רבים, במיוחד אלה התואמים את פרוטוקול HID. עם זאת, יצרן OEM חייב לרוב לספק מנהלי התקנים מותאמים אישית עבור התקנים משובצים המשולבים היטב במערכת ברמה נמוכה, כגון מסכי מגע.
מנהלי ההתקנים של הקלט אחראים על תרגום אותות ספציפיים למכשיר לפורמט אירוע קלט סטנדרטי, באמצעות פרוטוקול הקלט של לינוקס. פרוטוקול הקלט של לינוקס מגדיר קבוצה סטנדרטית של סוגי אירועים וקודים בקובץ כותרת הליבה linux/input.h
. בדרך זו, רכיבים מחוץ לקרנל אינם צריכים לדאוג לפרטים כגון קודי סריקה פיזיים, שימושי HID, הודעות I2C, פיני GPIO וכדומה.
לאחר מכן, רכיב ה-Android EventHub
קורא אירועי קלט מהקרנל על ידי פתיחת מנהל ההתקן evdev
המשויך לכל התקן קלט. לאחר מכן, רכיב Android InputReader מפענח את אירועי הקלט בהתאם למחלקת המכשיר ומייצר זרם של אירועי קלט אנדרואיד. כחלק מתהליך זה, קודי אירועי פרוטוקול הקלט של לינוקס מתורגמים לקודי אירועי אנדרואיד בהתאם לתצורת מכשיר הקלט, קבצי פריסת מקלדת וטבלאות מיפוי שונות.
לבסוף, InputReader
שולח אירועי קלט ל-InputDispatcher שמעביר אותם לחלון המתאים.
נקודות בקרה
ישנם מספר שלבים בצינור הקלט אשר משפיעים על שליטה על התנהגות התקן הקלט.
תצורת מנהל ההתקן והקושחה
מנהלי התקני קלט מגדירים לעתים קרובות את ההתנהגות של התקן הקלט על ידי הגדרת פרמטרים באוגרים או אפילו העלאת הקושחה עצמה. זה נכון במיוחד עבור מכשירים משובצים כמו מסכי מגע שבהם חלק גדול מתהליך הכיול כולל כוונון פרמטרים אלו או תיקון הקושחה כדי לספק את הדיוק וההיענות הרצויים ולדיכוי רעשים.
אפשרויות תצורת מנהל ההתקן מצוינות לעתים קרובות כפרמטרים של מודול בחבילת התמיכה של לוח הקרנל (BSP), כך שאותו מנהל התקן יכול לתמוך במספר יישומי חומרה שונים.
תיעוד זה אמנם מנסה לתאר את תצורת מנהל ההתקן או הקושחה, אך הוא מספק הדרכה לגבי כיול המכשיר באופן כללי.
מאפייני תצורת לוח
חבילת התמיכה של לוח הקרנל (BSP) עשויה לייצא מאפייני תצורת לוח באמצעות SysFS המשמשים את רכיב Android InputReader, כגון מיקום מקשים וירטואליים על מסך מגע.
עיין בסעיפים של מחלקת ההתקן לפרטים על האופן שבו מכשירים שונים משתמשים במאפייני תצורת הלוח.
שכבות-על של משאבים
מספר התנהגויות קלט מוגדרות באמצעות שכבות-על של משאבים ב- config.xml
כגון פעולת מתג המכסה.
הנה כמה דוגמאות:
config_lidKeyboardAccessibility
: מציין את ההשפעה של מתג המכסה על האם מקלדת החומרה נגישה או מוסתרת.config_lidNavigationAccessibility
: מציין את ההשפעה של מתג המכסה על האם משטח העקיבה נגיש או מוסתר.config_longPressOnPowerBehavior
: מציין מה צריך לקרות כאשר המשתמש מחזיק את לחצן ההפעלה לחוץ.config_lidOpenRotation
: מציין את ההשפעה של מתג המכסה על כיוון המסך.
עיין בתיעוד בתוך frameworks/base/core/res/res/values/config.xml
לפרטים על כל אפשרות תצורה.
מפות מפתח
מפות מפתח משמשות את רכיבי Android EventHub
ו- InputReader
כדי להגדיר את המיפוי מקודי אירועי לינוקס לקודי אירועי אנדרואיד עבור מקשים, לחצני ג'ויסטיק וצירי ג'ויסטיק. המיפוי עשוי להיות תלוי מכשיר או שפה.
עיין בסעיפים של מחלקת המכשירים לפרטים על האופן שבו מכשירים שונים משתמשים במפות מפתח.
הזנת קבצי תצורה של המכשיר
קובצי תצורת התקן קלט משמשים את רכיבי Android EventHub
ו- InputReader
כדי להגדיר מאפייני מכשיר מיוחדים כגון האופן שבו מדווח מידע על גודל המגע.
עיין בסעיפים של מחלקת המכשירים לפרטים על האופן שבו מכשירים שונים משתמשים במפות תצורת התקני קלט.
הבן שימושי HID וקודי אירועים
לעתים קרובות ישנם מספר מזהים שונים המשמשים להתייחסות לכל מקש נתון במקלדת, כפתור בבקר משחק, ציר ג'ויסטיק או שליטה אחרת. היחסים בין המזהים הללו אינם תמיד זהים: הם תלויים בקבוצה של טבלאות מיפוי, חלקן קבועות וחלקן משתנות בהתאם למאפיינים של המכשיר, מנהל ההתקן, המקום הנוכחי, תצורת המערכת, העדפות משתמש וגורמים נוספים.
- קוד סריקה פיזית
קוד סריקה פיזי הוא מזהה ספציפי למכשיר המשויך לכל מפתח, לחצן או פקד אחר. מכיוון שקודי סריקה פיזיים משתנים לרוב ממכשיר אחד למשנהו, הקושחה או מנהל ההתקן אחראים למיפוי שלהם למזהים סטנדרטיים כגון שימושי HID או קודי מפתחות של Linux.
קודי סריקה מעניינים בעיקר מקלדות. התקנים אחרים בדרך כלל מתקשרים ברמה נמוכה באמצעות פיני GPIO, הודעות I2C או אמצעים אחרים. כתוצאה מכך, השכבות העליונות של ערימת התוכנה מסתמכות על מנהלי ההתקן כדי להבין מה קורה.
- שימוש ב-HID
שימוש ב-HID הוא מזהה סטנדרטי המשמש לדיווח על מצב פקד כגון מקש מקלדת, ציר ג'ויסטיק, לחצן עכבר או נקודת מגע במגע. רוב התקני כניסת ה-USB וה-Bluetooth תואמים את מפרט ה-HID, המאפשר למערכת להתממשק איתם בצורה אחידה.
מסגרת Android מסתמכת על מנהלי ההתקן HID של ליבת לינוקס כדי לתרגם קודי שימוש ב-HID לקודי מפתח לינוקס ומזהים אחרים. לכן שימושי HID מעניינים בעיקר יצרני ציוד היקפי.
- קוד מפתח לינוקס
קוד מפתח לינוקס הוא מזהה סטנדרטי למפתח או לחצן. קודי מפתחות לינוקס מוגדרים בקובץ הכותרת
linux/input.h
באמצעות קבועים שמתחילים בקידומתKEY_
אוBTN_
. מנהלי ההתקן של קלט ליבת לינוקס אחראים על תרגום קודי סריקה פיזיים, שימושי HID ואותות ספציפיים אחרים למכשיר לקודי מפתח לינוקס ומסירת מידע עליהם כחלק מאירועיEV_KEY
.ה-API של אנדרואיד מתייחס לפעמים לקוד מפתח לינוקס המשויך למפתח כ"קוד הסריקה" שלו. זה שגוי מבחינה טכנית אבל זה עוזר להבחין בין קודי מפתח לינוקס מקודי מפתח אנדרואיד ב-API.
- קוד ציר יחסי או מוחלט של לינוקס
קוד ציר יחסי או מוחלט של לינוקס הוא מזהה סטנדרטי לדיווח על תנועות יחסיות או מיקומים מוחלטים לאורך ציר, כגון תנועות יחסיות של עכבר לאורך ציר ה-X שלו או המיקום המוחלט של ג'ויסטיק לאורך ציר ה-X שלו. קוד ציר לינוקס מוגדר בקובץ הכותרת
linux/input.h
באמצעות קבועים שמתחילים בקידומתREL_
אוABS_
. מנהלי ההתקן של קלט ליבת לינוקס אחראים על תרגום שימושי HID ואותות ספציפיים אחרים למכשיר לקודי ציר לינוקס ומסירת מידע עליהם כחלק מאירועיEV_REL
ו-EV_ABS
.- קוד בורר לינוקס
קוד מתג לינוקס הוא מזהה סטנדרטי לדיווח על מצב מתג במכשיר, כגון מתג מכסה. קודי מתג לינוקס מוגדרים בקובץ הכותרת
linux/input.h
באמצעות קבועים שמתחילים בקידומתSW_
. מנהלי ההתקן של קלט ליבת לינוקס מדווחים על שינויים במצב המתג כאירועיEV_SW
.יישומי אנדרואיד בדרך כלל אינם מקבלים אירועים ממתגים, אך המערכת עשויה להשתמש בהם באופן פנימי כדי לשלוט בפונקציות שונות ספציפיות למכשיר.
- קוד מפתח אנדרואיד
קוד מפתח אנדרואיד הוא מזהה סטנדרטי המוגדר ב-Android API לציון מפתח מסוים כגון 'HOME'. קודי מפתחות אנדרואיד מוגדרים על ידי המחלקה
android.view.KeyEvent
כקבועים שמתחילים בקידומתKEYCODE_
.פריסת המפתח מציינת כיצד קודי מפתחות לינוקס ממופים לקודי מפתח אנדרואיד. ניתן להשתמש בפריסות מקשים שונות בהתאם לדגם המקלדת, לשפה, למדינה, לפריסה או לפונקציות מיוחדות.
שילובים של קודי מפתח אנדרואיד הופכים לקודי תווים באמצעות מפת תו מפתח ספציפית למכשיר ולאזור. לדוגמה, כאשר המקשים המזוהים כ-
KEYCODE_SHIFT
ו-KEYCODE_A
נלחצים שניהם יחד, המערכת מחפשת את השילוב במפת תו המפתח ומוצאת את האות הגדולה 'A', אשר מוכנסת לאחר מכן לתוך ווידג'ט הטקסט הממוקד כעת.- קוד ציר אנדרואיד
קוד ציר אנדרואיד הוא מזהה סטנדרטי המוגדר ב-Android API לציון ציר מכשיר מסוים. קודי ציר אנדרואיד מוגדרים על ידי המחלקה
android.view.MotionEvent
כקבועים שמתחילים בקידומתAXIS_
.פריסת המפתח מציינת כיצד קודי ציר Linux ממופים לקודי ציר אנדרואיד. ניתן להשתמש בפריסות מפתח שונות בהתאם לדגם המכשיר, השפה, המדינה, הפריסה או הפונקציות המיוחדות.
- Android Meta State
מצב מטא של אנדרואיד הוא מזהה סטנדרטי המוגדר ב-Android API לציון אילו מקשי שינוי נלחצים. מצבי מטא של אנדרואיד מוגדרים על ידי המחלקה
android.view.KeyEvent
כקבועים שמתחילים בקידומתMETA_
.מצב המטא הנוכחי נקבע על ידי רכיב ה-Android InputReader שעוקב אחר כאשר מקשי שינוי כגון
KEYCODE_SHIFT_LEFT
נלחצים / משוחררים ומגדיר / מאפס את דגל המטא המתאים.הקשר בין מפתחות השינוי למצבי מטא מקודד קשה אך פריסת המפתחות יכולה לשנות את אופן מיפוי מפתחות השינוי עצמם, אשר בתורו משפיע על מצבי המטא.
- מצב כפתור אנדרואיד
מצב לחצן אנדרואיד הוא מזהה סטנדרטי המוגדר ב-Android API לציון אילו כפתורים (על עכבר או חרט) נלחצים. מצבי כפתורי Android מוגדרים על ידי המחלקה
android.view.MotionEvent
כקבועים שמתחילים בקידומתBUTTON_
.מצב הכפתור הנוכחי נקבע על ידי רכיב ה-Android InputReader שעוקב אחרי הלחיצה/שחרור של לחצנים (על עכבר או חרט) ומגדיר/מאפס את דגל מצב הכפתור המתאים.
הקשר בין הלחצנים למצבי הכפתורים מקודד.
לקריאה נוספת
- קודי קלט של אירועי לינוקס
- פרוטוקול מולטי-טאץ' של לינוקס
- מנהלי התקנים של קלט לינוקס
- משוב בכוח לינוקס
- מידע HID, כולל טבלאות שימוש ב-HID