Стек сверхширокополосных технологий AOSP (UWB) использует интерфейс UCI, определенный FiRa, в качестве поверхности HAL. Интерфейс HAL использует непрозрачный канал ( IUwbChip::sendUciMessage()
и IUwbClientCallback::onUciMessage()
) для отправки и получения команд, ответов и уведомлений интерфейса команд UWB (UCI). Все поставщики UWB для Android должны поддерживать все сообщения, определенные спецификацией FiRa. Фреймворк UWB обратно совместим и работает с любой версией UCI, реализованной поставщиком UWB на устройстве. Поскольку фреймворк UWB AOSP является модулем , он также может выборочно добавлять поддержку утвержденных запросов на изменение (CR) из проектов спецификаций UCI, предназначенных для основных выпусков стандартов FiRa. Любые такие реализованные проекты CR могут быть изменены.
Определение интерфейса
Интерфейс 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, деинициализации стека 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 (локальное или автоматическое тестирование).
- Код страны для телефонии: код страны, полученный через сотовую связь. Если несколько 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
Следующие проекты CR для FiRa 2.0 поддерживаются модулем UWB версии #330810000:
Интерфейс Android UCI (часть поставщика FiRa)
Спецификация UCI определяет набор идентификаторов групп (GID) и идентификаторов кодов операций (OID) для всех сообщений, определённых спецификацией. Спецификация также резервирует набор GID, предназначенных исключительно для использования поставщиками. Стек AOSP UWB использует некоторые из этих 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
зарезервированы для использования 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, либо жёстко запрограммированного производителем оборудования). Код страны отправляется как двухбайтовое значение, соответствующее коду страны по стандарту ISO-3166. Значение | |
ANDROID_RANGE_DIAGNOSTICS = 0x2 | Используется уведомлением для получения статистики диагностики диапазона UWB. Поддерживается только если параметр UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS установлен в 1 . | |
OEM = 0xE,0xF | 0x00 - 0x3F | Зарезервировано для использования OEM-производителями. |
Расширения поставщика для сообщений, определенных спецификацией 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-байтовая битовая маска для настройки диагностических отчётов. Эта битовая маска имеет размер 1 байт в Android 14 и выше и 4 байта в Android 13 и ниже. Настройте этот параметр только в том случае, если Определения битов:
|
CORE_GET_CAPS_INFO_RSP
Ниже приведены TLV, определенные стеком AOSP в зарезервированной поставщиком части TLV в 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 | 1-байтовое значение, указывающее на поддержку отчетности RSSI. Ценности:
|
SUPPORTED_DIAGNOSTICS | 1 | 0xE7 | 2 | 1-байтовое значение, указывающее на поддержку диагностических отчетов. Ценности:
|
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 | Двухбайтовая битовая маска для обозначения каналов, поддерживающих 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 должен быть отключен по нормативным причинам. |