میانای لایه انتزاع سخت‌افزار فراپهن‌باند

پشته فراپهن‌باند (UWB) در AOSP از میانای UCI تعریف‌شده توسط FiRa به‌عنوان سطح HAL استفاده می‌کند. میانای HAL از یک پایپ مبهم (IUwbChip::sendUciMessage() و IUwbClientCallback::onUciMessage()) برای ارسال و دریافت فرمان‌های میانای فرمان UWB (UCI)، پاسخ‌ها، و اعلان‌ها استفاده می‌کند. همه فروشندگان Android UWB باید از همه پیام‌های تعریف‌شده در مشخصات FiRa پشتیبانی کنند. چارچوب «فراپهن‌باند» با نسخه‌های قدیمی سازگار است و با هر نسخه UCI که فروشنده «فراپهن‌باند» در دستگاه پیاده‌سازی کرده باشد کار می‌کند. ازآنجایی‌که چارچوب AOSP UWB یک واحد است، می‌تواند به‌صورت انتخابی از درخواست‌های تغییر (CR) تأییدشده از مشخصات پیش‌نویس UCI که برای نسخه‌های اصلی استاندارد FiRa هدف‌گذاری شده‌اند نیز پشتیبانی کند. هرگونه پیش‌نویس «درخواست تغییر» پیاده‌سازی‌شده ممکن است تغییر کند.

تعریف میانا

میانای UWB HAL بااستفاده از 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 بااستفاده از فرمان UCI فضای فروشنده ANDROID_SET_COUNTRY_CODE (GID=0xC،‏ OID=0x1) پیکربندی می‌کند. چارچوب UWB تلاش می‌کند کد کشور UWB را بااستفاده از منابع زیر (فهرست‌شده به ترتیب اولویت) تعیین کند. چارچوب «فراپهن‌باند» در اولین منبعی که کد کشور در آن تعیین شده است متوقف می‌شود.

  1. لغو کد کشور: کد کشور ازطریق دستور پوسته adb اجباری شده است (آزمایش محلی یا خودکار).
  2. کد کشور تلفن: کد کشور ازطریق تلفن همراه بازیابی می‌شود. اگر چندین سیم‌کارت وجود داشته باشد که کدهای مختلفی برمی‌گردانند، کد کشور انتخاب‌شده غیرقطعی است.
  3. کد کشور Wi-Fi: کد کشور ازطریق Wi-Fi (80211.ad) بازیابی می‌شود.
  4. آخرین کد کشور تلفنی شناخته‌شده: آخرین کد کشور شناخته‌شده که ازطریق سلولی بازیابی شده است. اگر چند سیم‌کارت وجود داشته باشد که کدهای مختلفی برمی‌گردانند، کد کشور انتخابی غیرقطعی است.
  5. کد کشور مکان: کد کشور بازیابی‌شده از LocationManager ارائه‌دهنده مکان ترکیبی.
  6. کد کشور پیش‌فرض سازنده اصلی محصول: کد کشوری که سازنده دستگاه تنظیم کرده است.

اگر چارچوب «فراپهن‌باند» نتواند کد کشور «فراپهن‌باند» را تعیین کند، فرمان UCI ANDROID_SET_COUNTRY_CODE را با مقدار DEFAULT_COUNTRY_CODE ("00") فراخوانی می‌کند و به برنامه‌های «فراپهن‌باند» اطلاع می‌دهد که وضعیت پشته «فراپهن‌باند» DISABLED است. بعداً، وقتی چارچوب «فراپهن‌باند» بتواند کد کشور معتبری را تعیین کند، کد کشور جدید را بااستفاده از فرمان ANDROID_SET_COUNTRY_CODE پیکربندی می‌کند و به برنامه‌های «فراپهن‌باند» اطلاع می‌دهد که پشته «فراپهن‌باند» READY است.

اگر به‌دلیل مقررات محلی در کشوری نتوان از «فراپهن‌باند» استفاده کرد، کنترل‌کننده «فراپهن‌باند» کد وضعیت STATUS_CODE_ANDROID_REGULATION_UWB_OFF را برمی‌گرداند. سپس چارچوب «فراپهن‌باند» به برنامه‌های «فراپهن‌باند» اطلاع می‌دهد که وضعیت پشته «فراپهن‌باند» DISABLED است.

وقتی کاربری به کشور دیگری سفر می‌کند، چارچوب UWB کد کشور جدیدی را بااستفاده از فرمان ANDROID_SET_COUNTRY_CODE UCI پیکربندی می‌کند. بسته به کد وضعیت برگشتی از کنترل‌کننده UWB (براساس مقررات UWB در کشور جدید)، این امر ممکن است منجر به تغییر در وضعیت پشته UWB شود.

قالب فرمان تعریف‌شده با مشخصات FIRA UCI

برای قالب بسته‌های کنترل UCI، به بخش ۴.۴.۲ مشخصات UCI مراجعه کنید.

نسخه‌بندی میانا

مشخصات UCI به فروشندگان UWB اجازه می‌دهد نسخه پشته UCI پیاده‌سازی‌شده توسط دستگاه را بااستفاده از فرمان‌های UCI_GET_DEVICE_INFO_RSP و UCI_GET_CAPS_INFO_RSP نمایان کنند. چارچوب از این فرمان‌ها برای واکشی نسخه UCI دستگاه و تغییر عملکرد آن براساس آن استفاده می‌کند.

فهرست دستورات کنترل پیش‌نویس پشتیبانی‌شده توسط واحد UWB

پیش‌نویس‌های CR زیر برای FiRa 2.0 توسط واحد فراپهن‌باند نسخه ۳۳۰۸۱۰۰۰۰ پشتیبانی می‌شود:

میانای Android UCI (بخش فروشنده FiRa)

مشخصات UCI مجموعه‌ای از شناسه‌های گروه (GID) و شناسه‌های کد عملیات (OID) را برای همه پیام‌های تعریف‌شده در مشخصات تعریف می‌کند. این مشخصات همچنین مجموعه‌ای از شناسه‌های گروه را منحصراً برای استفاده فروشنده رزرو می‌کند. پشته AOSP UWB از برخی‌از این GID و OID فروشنده برای دستورات مختص Android که در مشخصات تعریف نشده‌اند استفاده می‌کند. برای جزئیات، به بخش ۸.۴ مشخصات UCI مراجعه کنید.

این پیام‌های فروشنده که Android از آن‌ها استفاده می‌کند در android.hardware.uwb.fira_android بسته HAL تعریف شده‌اند.

نسخه‌بندی میانای فروشنده

فروشندگان UWB باید نسخه بسته android.hardware.uwb.fira_android HAL پشتیبانی‌شده در دستگاه را ازطریق IUwbChip.getSupportedAndroidUciVersion() نمایان کنند. این چارچوب از این اطلاعات نسخه‌بندی برای مدیریت سازگاری با نسخه قدیمی استفاده می‌کند.

فهرست شناسه‌های گروهی و شناسه‌های شیء Android

جدول زیر GID و OID را برای Android فهرست می‌کند. ‫GIDs 0xE و 0xF برای استفاده «تولیدکنندگان تجهیزات اصلی» Android رزرو شده است.

GID OID تعریف
ANDROID = 0xC ANDROID_GET_POWER_STATS = 0x0 مورداستفاده فرمان و پاسخ برای دریافت آمار مربوط به توان «فراپهن‌باند». فقط درصورتی پشتیبانی می‌شود که UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY روی 1 تنظیم شده باشد.
ANDROID_SET_COUNTRY_CODE = 0x1

برای تنظیم کد کشور نظارتی فعلی استفاده می‌شود (بااستفاده از سیم‌کارت یا Wi-Fi تعیین می‌شود، یا توسط OEM به‌صورت کد ثابت درآمده است). کد کشور به‌عنوان مقدار ۲ بایتی متناظر با کد کشور ISO-3166 ارسال می‌شود. مقدار 00 برای نشان دادن اینکه کد کشور نامشخص است استفاده می‌شود.

ANDROID_RANGE_DIAGNOSTICS = 0x2 اعلان از آن برای دریافت آمار عیب‌یابی فاصله‌یابی فراپهن‌باند استفاده می‌کند. فقط درصورتی پشتیبانی می‌شود که 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

مقدار ۱ بایتی برای فعال یا غیرفعال کردن گزارش تشخیص خرابی. این پارامتر را فقط زمانی پیکربندی کنید که CORE_GET_CAPS_INFO_RSP مقدار SUPPORTED_DIAGNOSTICS را با مقدار 1 برمی‌گرداند که نشان می‌دهد ویژگی گزارش تشخیص خرابی پشتیبانی می‌شود.

مقادیر:

  • ‫1: ویژگی فعال شد
  • ‫0: ویژگی غیرفعال است

DIAGRAMS_FRAME_REPORTS_FIELDS ‫۱ یا ۴ 0xE9 2

ماسک بیتی ۱ بایتی یا ۴ بایتی برای پیکربندی گزارش تشخیص خرابی. این ماسک بیت در Android 14 یا بالاتر ۱ بایت و در 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 (گروه اصلی فراپهن‌باند)
  • ‫OID: 000011b (CORE_GET_CAPS_INFO_RSP)

جدول زیر پارامترهای پیام‌های قابلیت «فراپهن‌باند» را فهرست می‌کند.

نام پارامتر طول
(اکتت)
برچسب
(شناسه‌ها)
نسخه میانای فروشنده شرح
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 مقدار ۴ بایتی که حداقل فاصله فاصله‌یابی پشتیبانی‌شده را به میلی‌ثانیه نشان می‌دهد.
SUPPORTED_RANGE_DATA_NTF_CONFIG 4 0xE5 2 ماسک بیت ۴ بایتی که مقادیر پشتیبانی‌شده RANGE_DATA_NTF_CONFIG را نشان می‌دهد. ماسک بیتی که در آن هر بیت با مقادیر استفاده‌شده در RANGE_DATA_NTF_CONFIG در SET_APP_CFG_CMD مطابقت دارد.
SUPPORTED_RSSI_REPORTING 1 0xE6 2

مقدار ۱ بایتی که نشان‌دهنده پشتیبانی از گزارش‌دهی RSSI است.

مقادیر:

  • 1: ویژگی پشتیبانی می‌شود
  • 0: از این ویژگی پشتیبانی نمی‌شود
SUPPORTED_DIAGNOSTICS 1 0xE7 2

مقدار ۱ بایتی که پشتیبانی از گزارش تشخیص خرابی را نشان می‌دهد.

مقادیر:

  • 1: ویژگی پشتیبانی می‌شود
  • ‫0: ویژگی پشتیبانی نمی‌شود
SUPPORTED_MIN_SLOT_DURATION_RSTU 4 0xE8 2 مقدار ۴ بایتی که نشان‌دهنده حداقل مدت زمان شکاف پشتیبانی‌شده در RSTU است.
SUPPORTED_MAX_RANGING_SESSION_NUMBER 4 0xE9 2 مقدار ۴ بایتی که نشان‌دهنده حداکثر تعداد جلسه‌های پشتیبانی‌شده برای فاصله‌یابی FiRa است.
SUPPORTED_CHANNELS_AOA 2 0xEA 2

ماسک بیتی ۲ بایتی برای نشان دادن کانال‌هایی که از AoA پشتیبانی می‌کنند. هر 1 در ماسک بیت مربوط به یک کانال UWB خاص است.

مقادیر:

  • ‫0x01: کانال ۵ پشتیبانی می‌شود
  • ‫0x02: کانال ۶ پشتیبانی می‌شود
  • ‫0x04: کانال ۸ پشتیبانی می‌شود
  • ‫0x08: Channel 9 پشتیبانی می‌شود
  • ‫0x10: کانال ۱۰ پشتیبانی می‌شود
  • ‫0x20: کانال ۱۲ پشتیبانی می‌شود
  • ‫0x40: کانال ۱۳ پشتیبانی می‌شود
  • ‫0x80: کانال ۱۴ پشتیبانی می‌شود

کدهای وضعیت

کدهای وضعیت در فضای فروشنده در زیر آمده است. این‌ها در پاسخ‌های UCI (مثل SESSION_START_RSP) توسط زیرسیستم باند فوق‌وسیع (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 به‌صورت زیر تعریف شده است. این اعلان وقتی وضعیت جلسه سنجش تغییر می‌کند (برای مثال، از ACTIVE به IDLE) توسط UWBS ارسال می‌شود.

کد دلیل تغییر وضعیت مقدار شرح
REASON_ERROR_INVALID_CHANNEL_WITH_AOA 0x80

وضعیت جلسه تغییر کرد زیرا کانال پیکربندی‌شده از فاصله‌یابی AoA پشتیبانی نمی‌کند.

REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT 0x81

وضعیت جلسه به‌دلیل تداخل با دیگر جلسه‌های فاصله‌یابی CCC یا FiRa تغییر کرد.

REASON_REGULATION_UWB_OFF 0x82

وضعیت جلسه تغییر کرد زیرا «باند فوق‌وسیع» باید به‌دلیل دلیل نظارتی غیرفعال شود.