Стек сверхширокополосной связи (UWB) AOSP использует интерфейс UCI, определенный FiRa, в качестве поверхности HAL. Интерфейс HAL использует непрозрачный канал ( IUwbChip::sendUciMessage()
и IUwbClientCallback::onUciMessage()
) для отправки и получения команд, ответов и уведомлений интерфейса команд UWB (UCI). Все поставщики Android UWB должны поддерживать все сообщения, определенные спецификацией FiRa. Фреймворк UWB обратно совместим и работает с любой версией UCI, реализованной поставщиком UWB на устройстве. Поскольку фреймворк AOSP UWB является модулем , он также может выборочно добавлять поддержку утвержденных запросов на изменение (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.
ГИД | ОИД | Определение |
---|---|---|
ANDROID = 0xC | ANDROID_GET_POWER_STATS = 0x0 | Используется командой и ответом для получения статистики, связанной с питанием UWB. Поддерживается только если UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY установлен на 1 . |
ANDROID_SET_COUNTRY_CODE = 0x1 | Используется для установки текущего нормативного кода страны (определяется с помощью SIM или Wi-Fi, или жестко закодирован OEM). Код страны отправляется как 2-байтовое значение, соответствующее коду страны 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 | 1-байтовое значение для включения или выключения диагностических отчетов. Настройте этот параметр только тогда, когда Ценности:
|
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 | 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 необходимо отключить по нормативным причинам. |