הסטאק של Ultra Wideband (UWB) ב-AOSP משתמש בממשק UCI שהוגדר על ידי FiRa כפני השטח של HAL. ממשק ה-HAL משתמש בצינור אטום (IUwbChip::sendUciMessage()
ו-IUwbClientCallback::onUciMessage()
) כדי לשלוח ולקבל פקודות, תשובות והתראות של ממשק הפקודה של UWB (UCI).
כל ספקי Android UWB חייבים לתמוך בכל ההודעות שמוגדרות במפרט FiRa. המסגרת של UWB תואמת לאחור ופועלת עם כל גרסת UCI שהוטמעה על ידי ספק UWB במכשיר. מאחר ש-AOSP UWB framework הוא מודול, אפשר גם להוסיף לו באופן סלקטיבי תמיכה לבקשות שינוי (CR) שאושרו מתכנוני UCI שמיועדים להפצות עיקריות של תקני FiRa. כל טיוטת CR כזו שתוטמע עשויה להשתנות.
הגדרת ממשק
ממשק ה-HAL של UWB מוגדר באמצעות stable 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 שסטטוס ה-stack של UWB הוא DISABLED
. בהמשך, כשמסגרת UWB תוכל לקבוע קוד מדינה תקין, היא תגדיר את קוד המדינה החדש באמצעות הפקודה ANDROID_SET_COUNTRY_CODE
ותודיע לאפליקציות UWB שסטאק UWB הוא READY
.
אם אי אפשר להשתמש ב-UWB בגלל תקנות מקומיות במדינה, בקר ה-UWB מחזיר את קוד המצב STATUS_CODE_ANDROID_REGULATION_UWB_OFF
. לאחר מכן, מסגרת UWB תודיע לאפליקציות UWB שהמצב של מחסנית UWB הוא DISABLED
.
כשמשתמש נוסע למדינה אחרת, מסגרת UWB מגדירה קוד מדינה חדש באמצעות הפקודה ANDROID_SET_COUNTRY_CODE
UCI. בהתאם לקוד המצב שמוחזר על ידי הבקר של UWB (על סמך תקנות UWB במדינה החדשה), הדבר עשוי להוביל לשינוי במצב של מחסנית UWB.
פורמט פקודה שמוגדר במפרט FIRA UCI
הפורמט של חבילות הבקרה של UCI מפורט בקטע 4.4.2 במפרט של UCI.
ניהול גרסאות של ממשק
מפרט UCI מאפשר ליצרני UWB לחשוף את הגרסה של סטאק UCI שהמכשיר הטמיע באמצעות הפקודות UCI_GET_DEVICE_INFO_RSP
ו-UCI_GET_CAPS_INFO_RSP
. המסגרת משתמשת בפקודות האלה כדי לאחזר את גרסת ה-UCI של המכשיר ולשנות את ההתנהגות שלו בהתאם.
רשימת טיוטות של בקשות תיקון נתמכות במודול UWB
טיוטות הבקשות הבאות לתיקון (CR) עבור FiRa 2.0 נתמכות במודול UWB בגרסה 330810000:
ממשק UCI ל-Android (החלק של הספק FiRa)
במפרט UCI מוגדרת קבוצה של מזהים של קבוצות (GID) ומזהים של קוד פעולה (OID) לכל ההודעות שמוגדרות במפרט. בנוסף, במפרט מוגדרת קבוצה של מזהי GID שמיועדים לשימוש של ספקים בלבד. ב-AOSP UWB stack נעשה שימוש בחלק מ-GID ו-OID של הספקים האלה לפקודות ספציפיות ל-Android שלא מוגדרות במפרט. פרטים נוספים זמינים בקטע 8.4 במפרט UCI.
הודעות הספקים האלה שבהן משתמש Android מוגדרות בחבילת ה-HAL android.hardware.uwb.fira_android
.
ניהול גרסאות של ממשק הספק
ספקי UWB חייבים לחשוף את הגרסה של חבילת ה-HAL android.hardware.uwb.fira_android
שנתמכת במכשיר דרך IUwbChip.getSupportedAndroidUciVersion()
. המסגרת משתמשת במידע הזה לגבי ניהול הגרסאות כדי לטפל בתאימות לאחור.
רשימה של מזהי GID ו-OID של Android
בטבלה הבאה מפורטים מזהי ה-GID וה-OID ל-Android. מזהי ה-GID 0xE
ו-0xF
מוגדרים לשימוש של יצרני ציוד מקורי ל-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 | ערך של 1 ביייט להפעלה או להשבתה של דיווח על אבחון.
מגדירים את הפרמטר הזה רק כשהערך שמוחזר על ידי ערכים:
|
DIAGRAMS_FRAME_REPORTS_FIELDS |
1 או 4 | 0xE9 |
2 | מסכת ביטים באורך 1 או 4 בייטים להגדרת דיווח על אבחון. מסכת הביטים הזו היא ביייט אחד ב-Android מגרסה 14 ואילך, ו-4 בייטים ב-Android מגרסה 13 ומטה. מגדירים את הפרמטר הזה רק כשהערך שמוחזר על ידי הגדרות ביט:
|
CORE_GET_CAPS_INFO_RSP
אלה הם ה-TLVs שמוגדרים על ידי סטאק AOSP בחלק ששמור לספק ב-TLVs ב-CAPS_INFO
:
- GID: 0000b (קבוצת הליבה של UWB)
- OID: 000011b (
CORE_GET_CAPS_INFO_RSP
)
בטבלה הבאה מפורטים הפרמטרים של הודעות היכולות של UWB.
שם הפרמטר | אורך (אוקטטים) |
תג (מזהים) |
גרסת הממשק של הספק | תיאור |
---|---|---|---|---|
SUPPORTED_POWER_STATS_QUERY |
1 | 0xC0 |
1 | ערך של 1 ביייט שמציין תמיכה בשאילתה של נתוני צריכת החשמל. ערכים:
|
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING |
1 | 0xE3 |
1 | ערך של 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 | ערך של בית אחד (byte) שמציין את התמיכה בדיווח על 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 מסיבה רגולטורית. |