Ultra-wideband (UWB) stack של AOSP משתמש ב-FiRa-defined UCI interface כמשטח HAL. ממשק ה-HAL משתמש בצינור אטום (IUwbChip::sendUciMessage() ו-IUwbClientCallback::onUciMessage()) כדי לשלוח ולקבל פקודות, תגובות והתראות של ממשק הפקודות של UWB (UCI).
כל הספקים של UWB ב-Android חייבים לתמוך בכל ההודעות שמוגדרות במפרט של FiRa. מסגרת ה-UWB תואמת לדורות קודמים ועובדת עם כל גרסת UCI שהספק של ה-UWB הטמיע במכשיר. מכיוון ש-AOSP UWB
framework הוא מודול,
אפשר גם להוסיף לו באופן סלקטיבי תמיכה בבקשות לשינוי (CR) שאושרו מתוך
מפרטי UCI בטיוטה שמיועדים למהדורות מרכזיות של תקני FiRa. כל טיוטת בקשה לשינוי כזו שתיושם עשויה להשתנות.
הגדרת הממשק
ממשק ה-HAL של UWB מוגדר באמצעות AIDL יציב.
הממשק הראשי משתמש בחבילה android.hardware.uwb.
אלה שני הממשקים העיקריים בחבילה android.hardware.uwb
IUwbChip.aidl
package android.hardware.uwb;
interface IUwbChip {
String getName();
void open(in android.hardware.uwb.IUwbClientCallback clientCallback);
void close();
void coreInit();
void sessionInit(int sessionId);
int getSupportedAndroidUciVersion();
int sendUciMessage(in byte[] data);
}
IUwbClientCallback.aidl
package android.hardware.uwb;
interface IUwbClientCallback {
oneway void onUciMessage(in byte[] data);
oneway void onHalEvent(in android.hardware.uwb.UwbEvent event, in android.hardware.uwb.UwbStatus status);
}
זרימת שיחות HAL ממסגרת UWB
בתמונות הבאות מוצג תרשים זרימת השיחות ממסגרת ה-UWB לאתחול ערימת ה-UWB, לביטול האתחול של ערימת ה-UWB ולתהליכי ההתחלה וההפסקה של סשן ה-UWB.
איור 1. תהליך קריאה לאתחול של מחסנית UWB (המתג UWB מופעל)
איור 2. תהליך קריאה לביטול האתחול של מחסנית UWB (המתג של UWB מושבת)
איור 3. תהליך התחלה/הפסקה של סשן UWB
הגדרה של קוד המדינה ל-UWB
כפי שמוצג באיור 1, מסגרת ה-UWB מגדירה את קוד המדינה של ה-UWB במהלך האתחול של מחסנית ה-UWB באמצעות פקודת ה-UCI של ספק ANDROID_SET_COUNTRY_CODE (GID=0xC, OID=0x1). מסגרת ה-UWB מנסה לקבוע את קוד המדינה של ה-UWB באמצעות המקורות הבאים (מופיעים לפי סדר העדיפות): מסגרת ה-UWB מפסיקה במקור הראשון שבו נקבע קוד המדינה.
- החלפת קוד המדינה: קוד המדינה שנכפה באמצעות פקודת adb shell (בדיקה מקומית או אוטומטית).
- קידומת חיוג של מדינה: קידומת המדינה שאוחזרה דרך הרשת הסלולרית. אם יש כמה כרטיסי SIM שמחזירים קודים שונים, קוד המדינה שנבחר הוא לא דטרמיניסטי.
- קוד המדינה של Wi-Fi: קוד המדינה שאוחזר דרך Wi-Fi (80211.ad).
- קידומת המדינה האחרונה הידועה של הטלפון: קידומת המדינה האחרונה הידועה שאוחזרה דרך הרשת הסלולרית. אם יש כמה כרטיסי SIM שמחזירים קודים שונים, קוד המדינה שנבחר הוא לא דטרמיניסטי.
- קוד המדינה שבה נמצא המיקום: קוד המדינה שאוחזר מ
LocationManagerספק המיקום המשולב. - קוד המדינה שמוגדר כברירת מחדל על ידי יצרן המכשיר.
אם מסגרת ה-UWB לא מצליחה לקבוע קוד מדינה של UWB, היא קוראת לפקודת ה-UCI ANDROID_SET_COUNTRY_CODE עם הערך DEFAULT_COUNTRY_CODE ("00") ומודיעה לאפליקציות UWB שסטטוס מחסנית ה-UWB הוא DISABLED. בהמשך, כשהמסגרת של UWB תוכל לקבוע קוד מדינה תקין, היא תגדיר את קוד המדינה החדש באמצעות הפקודה ANDROID_SET_COUNTRY_CODE ותודיע לאפליקציות UWB שמערך UWB הוא READY.
אם אי אפשר להשתמש ב-UWB בגלל תקנות מקומיות במדינה מסוימת, בקר ה-UWB מחזיר את קוד הסטטוס STATUS_CODE_ANDROID_REGULATION_UWB_OFF. לאחר מכן, מסגרת ה-UWB מודיעה לאפליקציות UWB שהמצב של מחסנית ה-UWB הוא DISABLED.
כשמשתמש נוסע למדינה אחרת, מסגרת ה-UWB מגדירה קוד מדינה חדש באמצעות פקודת ה-UCI ANDROID_SET_COUNTRY_CODE. בהתאם לקוד הסטטוס שמוחזר על ידי בקר ה-UWB (בהתבסס על תקנות ה-UWB במדינה החדשה), יכול להיות שיוביל לשינוי במצב מחסנית ה-UWB.
פורמט הפקודות שמוגדר במפרט FIRA UCI
למידע על הפורמט של מנות בקרה של UCI, אפשר לעיין בסעיף 4.4.2 במפרט של UCI.
ניהול גרסאות של הממשק
מפרט ה-UCI מאפשר לספקי UWB לחשוף את הגרסה של מחסנית ה-UCI שהוטמעה במכשיר באמצעות הפקודות UCI_GET_DEVICE_INFO_RSP ו-UCI_GET_CAPS_INFO_RSP. המסגרת משתמשת בפקודות האלה כדי לאחזר את גרסת ה-UCI של המכשיר ולשנות את ההתנהגות שלו בהתאם.
רשימה של בקשות לשינוי (CR) בטיוטה שנתמכות על ידי מודול ה-UWB
מודול UWB בגרסה #330810000 תומך בטיוטות הבאות של CR ל-FiRa 2.0:
ממשק Android UCI (החלק של ספק FiRa)
במפרט UCI מוגדרת קבוצה של מזהי קבוצה (GID) ומזהי אופקוד (OID) לכל ההודעות שמוגדרות במפרט. במפרט מוגדר גם סט של GID ששמורים לשימוש הספקים בלבד. במערך ה-UWB של AOSP נעשה שימוש בחלק מהמזהים האלה של ספקים ושל OID עבור פקודות ספציפיות ל-Android שלא מוגדרות במפרט. פרטים נוספים מופיעים בקטע 8.4 במפרט של UCI.
ההודעות האלה של הספק שמשמשות את Android מוגדרות בחבילת android.hardware.uwb.fira_android HAL.
ניהול גרסאות של ממשק הספק
ספקי UWB צריכים לחשוף את הגרסה של חבילת android.hardware.uwb.fira_androidHAL שנתמכת במכשיר באמצעות IUwbChip.getSupportedAndroidUciVersion(). המסגרת משתמשת במידע על ניהול הגרסאות כדי לטפל בתאימות לדורות קודמים.
רשימה של מזהי GID ו-OID ב-Android
בטבלה הבאה מפורטים ה-GID וה-OID של Android. מספרי ה-GID 0xE ו-0xF
שמורים לשימוש של יצרני ציוד מקורי (OEM) של Android.
| GID | OID | הגדרה |
|---|---|---|
ANDROID = 0xC |
ANDROID_GET_POWER_STATS = 0x0 |
הפקודה והתגובה משמשות לקבלת נתונים סטטיסטיים שקשורים להספק של UWB.
המאפיין הזה נתמך רק אם הערך של UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY הוא 1. |
ANDROID_SET_COUNTRY_CODE = 0x1 |
המאפיין משמש להגדרת קוד המדינה הנוכחי לצורכי רגולציה (נקבע באמצעות כרטיס SIM או Wi-Fi, או מוטמע בקוד על ידי יצרן הציוד המקורי). קוד המדינה נשלח כערך של 2 בייט שמתאים לקוד המדינה בתקן ISO-3166. הערך |
|
ANDROID_RANGE_DIAGNOSTICS = 0x2 |
ההתראה משתמשת בה כדי לקבל נתונים סטטיסטיים של אבחון טווח UWB.
המאפיין הזה נתמך רק אם הערך של UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS הוא 1.
|
|
OEM = 0xE,0xF |
0x00 - 0x3F |
שמור לשימוש של יצרן ציוד מקורי. |
תוספים של ספקים להודעות שמוגדרות במפרט UCI
בקטע הזה מפורטים תוספים של ספקים להודעות שמוגדרות במפרט UCI.
SESSION_SET_APP_CONFIG_[CMD|RSP] ו-SESSION_GET_APP_CONFIG_[CMD|RSP]
אלה ערכי האורך של הסוג (TLV) שמוגדרים על ידי מחסנית AOSP בחלק השמור של הספק ב-TLV ב-APP_CONFIG:
- GID: 0001b (קבוצת הגדרות של סשן UWB)
- OID: 000011b (
SESSION_SET_APP_CONFIG_CMD) - OID: 000100b (
SESSION_GET_APP_CONFIG_CMD)
בטבלה הבאה מפורטים הפרמטרים של הודעות ההגדרה של סשן UWB.
| שם פרמטר | אורך (אוקטטים) |
תג (מזהים) |
גרסת ממשק הספק | תיאור |
|---|---|---|---|---|
NB_OF_RANGE_MEASUREMENTS |
1 | 0xE3 |
1 | יחס השילוב אם הערך של AOA_RESULT_REQ הוא 0xF0. המאפיין נתמך רק אם התג
UwbVendorCapabilityTlvTypes.SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING
מוגדר לערך 1. |
NB_OF_AZIMUTH_MEASUREMENTS |
1 | 0xE4 |
1 | |
NB_OF_ELEVATION_MEASUREMENTS |
1 | 0xE5 |
1 | |
ENABLE_DIAGNOSTICS |
1 | 0xE8 |
2 | ערך של בייט אחד להפעלה או להשבתה של דיווח אבחון.
מגדירים את הפרמטר הזה רק כש- הערכים:
|
DIAGRAMS_FRAME_REPORTS_FIELDS |
1 או 4 | 0xE9 |
2 | מסכת ביטים של 1 או 4 בייט להגדרת דיווח על אבחון. מסיכת הביטים הזו היא באורך של בייט אחד ב-Android מגרסה 14 ואילך, ובאורך של 4 בייטים ב-Android מגרסה 13 ומטה. מגדירים את הפרמטר הזה רק אם הפונקציה הגדרות של ביטים:
|
CORE_GET_CAPS_INFO_RSP
אלה הם ערכי ה-TLV שמוגדרים על ידי מחסנית ה-AOSP בחלק השמור לספקים של ערכי ה-TLV ב-CAPS_INFO:
- GID: 0000b (UWB core group)
- OID: 000011b (
CORE_GET_CAPS_INFO_RSP)
בטבלה הבאה מפורטים הפרמטרים של הודעות לגבי יכולת UWB.
| שם פרמטר | אורך (אוקטטים) |
תג (מזהים) |
גרסת ממשק הספק | תיאור |
|---|---|---|---|---|
SUPPORTED_POWER_STATS_QUERY |
1 | 0xC0 |
1 | ערך של בייט אחד שמציין תמיכה בשאילתת נתוני צריכת חשמל. הערכים:
|
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING |
1 | 0xE3 |
1 | ערך של בייט אחד שמציין תמיכה בתכונה של שילוב אנטנות. הערכים:
|
SUPPORTED_MIN_RANGING_INTERVAL_MS |
4 | 0xE4 |
2 | ערך של 4 בייטים שמציין את מרווח המינימום הנתמך של מדידת המרחק במילישניות. |
SUPPORTED_RANGE_DATA_NTF_CONFIG |
4 | 0xE5 |
2 | מסיכת ביטים בגודל 4 בייט שמציינת את הערכים הנתמכים של RANGE_DATA_NTF_CONFIG.
מסיכת ביטים שבה כל ביט תואם לערכים שמשמשים ב-RANGE_DATA_NTF_CONFIG ב-SET_APP_CFG_CMD. |
SUPPORTED_RSSI_REPORTING |
1 | 0xE6 |
2 | ערך של 1 בייט שמציין את התמיכה בדיווח על עוצמת האות (RSSI). הערכים:
|
SUPPORTED_DIAGNOSTICS |
1 | 0xE7 |
2 | ערך של בייט אחד שמציין את התמיכה בדיווח על אבחון. הערכים:
|
SUPPORTED_MIN_SLOT_DURATION_RSTU |
4 | 0xE8 |
2 | ערך של 4 בייטים שמציין את משך הזמן המינימלי של משבצת הזמן שנתמך ב-RSTU. |
SUPPORTED_MAX_RANGING_SESSION_NUMBER |
4 | 0xE9 |
2 | ערך של 4 בייטים שמציין את המספר המקסימלי של סשנים של מדידת מרחק בטכנולוגיית FiRa שאפשר לתמוך בהם. |
SUPPORTED_CHANNELS_AOA |
2 | 0xEA |
2 | מסיכת ביטים של 2 בייט שמציינת את הערוצים שתומכים ב-AoA. כל
הערכים:
|
קודי סטטוס
אלה קודי הסטטוס במרחב של הספק. הם מוחזרים בתגובות של UCI (כמו SESSION_START_RSP) על ידי מערכת המשנה של UWB (UWBS).
| קוד סטטוס | ערך | תיאור |
|---|---|---|
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT |
0x52 |
קוד הסטטוס שמוחזר כשאי אפשר להתחיל את סשן המדידה הנוכחי בגלל התנגשות עם סשנים אחרים של מדידת מרחק ב-CCC או ב-FiRa. |
STATUS_REGULATION_UWB_OFF |
0x53 |
קוד הסטטוס שמוחזר כשאי אפשר להתחיל את סשן המדידה הנוכחי בגלל סיבות רגולטוריות שקשורות ל-UWB. |
קוד הסיבה לשינוי הסטטוס ב-SESSION_STATUS_NTF
בהמשך מפורטים קודי הסיבות לשינוי הסטטוס שמוגדרים במרחב הספק בשדה הסטטוס שמוחזר על ידי UWBS ב-SESSION_STATUS_NTF. ההתראה הזו נשלחת על ידי UWBS כשמצב ההפעלה של סשן מדידת המרחק משתנה (לדוגמה, מ-ACTIVE ל-IDLE).
| קוד הסיבה לשינוי הסטטוס | ערך | תיאור |
|---|---|---|
REASON_ERROR_INVALID_CHANNEL_WITH_AOA |
0x80 |
מצב הסשן השתנה כי הערוץ שהוגדר לא תומך בחישוב מרחק ב-AoA. |
REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT |
0x81 |
מצב הסשן השתנה בגלל התנגשות עם סשנים אחרים של CCC או של מדידת מרחק ב-FiRa. |
REASON_REGULATION_UWB_OFF |
0x82 |
מצב הסשן השתנה כי צריך להשבית את ה-UWB בגלל סיבה רגולטורית. |