מערך (stack) של Ultra Wideband (UWB) ב-AOSP משתמש בממשק UCI שהוגדר על ידי FiRa כמשטח 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 stack (המתג 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
ספק המיקום המשולב. - קוד המדינה שמוגדר כברירת מחדל על ידי יצרן הציוד המקורי (OEM): קוד המדינה שהוגדר על ידי יצרן המכשיר.
אם מסגרת ה-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) לכל ההודעות שמוגדרות במפרט. במפרט מוגדר גם קבוצה של מזהי קבוצות ששמורים לשימוש הספק בלבד. ב-AOSP, מחסנית ה-UWB משתמשת בחלק ממזהי הספק וממזהי האובייקט האלה עבור פקודות ספציפיות ל-Android שלא מוגדרות במפרט. פרטים נוספים מופיעים בקטע 8.4 במפרט של UCI.
ההודעות האלה של הספקים שמשמשות את Android מוגדרות בחבילת android.hardware.uwb.fira_android
HAL.
ניהול גרסאות של ממשק הספק
ספקי UWB צריכים לחשוף את הגרסה של חבילת android.hardware.uwb.fira_android
HAL שנתמכת במכשיר באמצעות 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]
אלה ערכי האורך של הסוג (TLVs) שמוגדרים על ידי מחסנית AOSP בחלק השמור של הספק ב-TLVs ב-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 | מסכת ביטים (bitmask) בגודל 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 בגלל סיבה רגולטורית. |