ממשק HAL של UWB

מערך (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.

אתחול של מחסנית UWB

איור 1. תהליך קריאה לאתחול של UWB stack (המתג UWB מופעל)

ביטול האתחול של רשימת רשתות בתהליך בחירת הרשת UWB

איור 2. תהליך ביטול האתחול של מחסנית UWB (המתג UWB מושבת)

התחלה והפסקה של סשן UWB

איור 3. תהליך התחלה/הפסקה של סשן UWB

הגדרת קוד המדינה של UWB

כפי שמוצג באיור 1, מסגרת ה-UWB מגדירה את קוד המדינה של ה-UWB במהלך האתחול של מחסנית ה-UWB באמצעות פקודת ה-UCI של ספק ANDROID_SET_COUNTRY_CODE (GID=0xC, OID=0x1). מסגרת ה-UWB מנסה לקבוע את קוד המדינה של ה-UWB באמצעות המקורות הבאים (מופיעים לפי סדר העדיפות): מסגרת ה-UWB מפסיקה לפעול במקור הראשון שבו נקבע קוד המדינה.

  1. החלפת קוד המדינה: קוד המדינה שנכפה באמצעות פקודת adb shell (בדיקה מקומית או אוטומטית).
  2. קידומת חיוג של מדינה: קידומת המדינה שאוחזרה דרך הרשת הסלולרית. אם יש כמה כרטיסי SIM שמחזירים קודים שונים, קוד המדינה שנבחר הוא לא דטרמיניסטי.
  3. קוד המדינה של Wi-Fi: קוד המדינה שאוחזר דרך Wi-Fi ‏ (80211.ad).
  4. קידומת המדינה האחרונה הידועה של הטלפוניה: קידומת המדינה האחרונה הידועה שאוחזרה דרך הרשת הסלולרית. אם יש כמה כרטיסי SIM שמחזירים קודים שונים, קוד המדינה שנבחר הוא לא דטרמיניסטי.
  5. קוד המדינה שבה נמצא המיקום: קוד המדינה שאוחזר מLocationManager ספק המיקום המשולב.
  6. קוד המדינה שמוגדר כברירת מחדל על ידי יצרן הציוד המקורי (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_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. הערך 00 מציין שקוד המדינה לא ידוע.

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

ערך של בייט אחד להפעלה או להשבתה של דיווח אבחון. מגדירים את הפרמטר הזה רק כש-CORE_GET_CAPS_INFO_RSP מחזיר SUPPORTED_DIAGNOSTICS עם ערך של 1, שמציין שהתכונה של דיווח על אבחון נתמכת.

ערכים:

  • 1: התכונה מופעלת
  • 0: התכונה מושבתת

DIAGRAMS_FRAME_REPORTS_FIELDS ‫1 או 4 0xE9 2

מסכת ביטים של 1 או 4 בייט להגדרת דיווח על אבחון. מסיכת הביטים הזו היא באורך של בייט אחד ב-Android מגרסה 14 ואילך, ובאורך של 4 בייטים ב-Android מגרסה 13 ומטה.

מגדירים את הפרמטר הזה רק אם הפונקציה CORE_GET_CAPS_INFO_RSP מחזירה את הערך SUPPORTED_DIAGNOSTICS עם הערך 1, שמציין שהתכונה 'דיווח על ניתוחים' נתמכת.

הגדרות הביטים:

  • b0 (0x01): הפעלת שדות RSSI
  • b1 (0x02): הפעלת שדות של AoA
  • b2 (0x04): הפעלת שדות CIR

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

ערך של בייט אחד שמציין תמיכה בשאילתת נתוני צריכת חשמל.

ערכים:

  • 1: התכונה נתמכת
  • 0: התכונה לא נתמכת
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING 1 0xE3 1

ערך של בייט אחד שמציין תמיכה בתכונה של שילוב אנטנות.

ערכים:

  • 1: התכונה נתמכת
  • 0: התכונה לא נתמכת
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).

ערכים:

  • 1: התכונה נתמכת
  • 0: התכונה לא נתמכת
SUPPORTED_DIAGNOSTICS 1 0xE7 2

ערך של בייט אחד שמציין את התמיכה בדיווח על אבחון.

ערכים:

  • 1: התכונה נתמכת
  • 0: התכונה לא נתמכת
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. כל 1 במסיכת הביטים תואם לערוץ UWB ספציפי.

ערכים:

  • 0x01: נתמך בערוץ 5
  • 0x02: יש תמיכה בערוץ 6
  • 0x04: ערוץ 8 נתמך
  • 0x08: נתמך בערוץ 9
  • 0x10: ערוץ 10 נתמך
  • 0x20: ערוץ 12 נתמך
  • 0x40: ערוץ 13 נתמך
  • 0x80: ערוץ 14 נתמך

קודי סטטוס

בהמשך מפורטים קודי הסטטוס במרחב הספקים. הם מוחזרים בתגובות של 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 בגלל סיבה רגולטורית.