Стек сверхширокополосной связи (СШП) AOSP использует интерфейс UCI, определенный FiRa, в качестве поверхности HAL. Интерфейс HAL использует непрозрачный канал (IUwbChip::sendUciMessage() и IUwbClientCallback::onUciMessage()) для отправки и получения команд, ответов и уведомлений интерфейса команд UWB (UCI).
Все поставщики UWB-решений для Android должны поддерживать все сообщения, определенные в спецификации FiRa. Фреймворк UWB обратно совместим и работает с любой версией UCI, реализованной поставщиком UWB на устройстве. Поскольку фреймворк AOSP UWB является модулем, он также может выборочно добавлять поддержку одобренных запросов на изменение из черновых спецификаций 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.
Рисунок 1. Схема вызовов для инициализации стека СШП (переключатель СШП включен)
Рисунок 2. Схема вызовов для деинициализации стека СШП (переключатель СШП выключен)
Рисунок 3. Запуск и остановка сеанса СШП
Настройка кода страны для СШП
Как показано на рисунке 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поставщика геоданных из нескольких источников. - Код страны по умолчанию от производителя оригинального оборудования.
Если фреймворк UWB не может определить код страны UWB, он вызывает команду UCI ANDROID_SET_COUNTRY_CODE со значением DEFAULT_COUNTRY_CODE ("00") и уведомляет приложения UWB о том, что состояние стека UWB – DISABLED. Когда фреймворк UWB сможет определить действительный код страны, он настроит новый код с помощью команды ANDROID_SET_COUNTRY_CODE и уведомит приложения UWB о том, что стек UWB READY.
Если в стране действуют местные нормативные требования, из-за которых нельзя использовать сверхширокополосную связь, контроллер UWB возвращает код статуса STATUS_CODE_ANDROID_REGULATION_UWB_OFF. Затем фреймворк СШП уведомляет приложения, использующие эту технологию, что стек СШП находится в состоянии DISABLED.
Когда пользователь приезжает в другую страну, фреймворк СШП настраивает новый код страны с помощью команды UCI ANDROID_SET_COUNTRY_CODE. В зависимости от кода статуса, возвращенного контроллером СШП (на основе регламента СШП в новой стране), это может привести к изменению состояния стека СШП.
Формат команд, определенный спецификацией FIRA UCI
Формат управляющих пакетов UCI описан в разделе 4.4.2 спецификации UCI.
Версии интерфейса
Спецификация UCI позволяет поставщикам СШП-устройств указывать версию стека UCI, реализованную на устройстве, с помощью команд UCI_GET_DEVICE_INFO_RSP и UCI_GET_CAPS_INFO_RSP. Фреймворк использует эти команды, чтобы получить версию UCI устройства и соответствующим образом изменить его поведение.
Список проектов CR, поддерживаемых модулем UWB
В модуле СШП версии 330810000 поддерживаются следующие проекты запросов на изменение для FiRa 2.0:
Интерфейс Android UCI (часть поставщика FiRa)
Спецификация UCI определяет набор идентификаторов групп (GID) и идентификаторов кодов операций (OID) для всех сообщений, определенных в спецификации. Спецификация также предусматривает набор идентификаторов GID, зарезервированных исключительно для использования поставщиками. Стек UWB AOSP использует некоторые из этих GID и OID поставщика для команд, относящихся к Android и не описанных в спецификации. Подробную информацию можно найти в разделе 8.4 спецификации UCI.
Эти сообщения поставщика, используемые Android, определены в пакете HAL android.hardware.uwb.fira_android.
Управление версиями интерфейса поставщика
Поставщики СШП-устройств должны предоставлять информацию о версии пакета HAL android.hardware.uwb.fira_android, поддерживаемой на устройстве, с помощью IUwbChip.getSupportedAndroidUciVersion(). Фреймворк использует эту информацию о версиях для обеспечения обратной совместимости.
Список идентификаторов GID и OID для Android
В таблице ниже перечислены идентификаторы GID и OID для Android. Идентификаторы 0xE и 0xF зарезервированы для использования производителями устройств 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 |
Используется уведомлением для получения статистики диагностики дальнометрии СШП.
Поддерживается, только если для параметра 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 байт в Android 14 или более поздней версии и 4 байта в Android 13 или более ранней версии. Настраивайте этот параметр, только если свойство Определения битов
|
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 | Однобайтовое значение, указывающее на поддержку запроса статистики энергопотребления. Значения:
|
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING |
1 | 0xE3 |
1 | Однобайтовое значение, указывающее на поддержку чередования антенн. Значения:
|
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. Значения:
|
SUPPORTED_DIAGNOSTICS |
1 | 0xE7 |
2 | Однобайтовое значение, указывающее на поддержку отчетов о диагностике. Значения:
|
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. Каждый бит Значения:
|
Коды статуса
Ниже приведены коды статусов в пространстве поставщика. Они возвращаются в ответах UCI (например, SESSION_START_RSP) подсистемой UWB (UWBS).
| Код статуса | Значение | Описание |
|---|---|---|
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT |
0x52 |
Код статуса, возвращаемый, когда текущий сеанс определения местоположения не может быть запущен из-за конфликта с другими сеансами определения местоположения CCC или FiRa. |
STATUS_REGULATION_UWB_OFF |
0x53 |
Код статуса, возвращаемый, когда текущий сеанс определения расстояния не может быть запущен из-за нормативных требований к сверхширокополосной связи. |
Код причины изменения состояния в SESSION_STATUS_NTF
Ниже приведены коды причин изменения состояния, определенные в пространстве поставщика для поля статуса, возвращаемого UWBS в SESSION_STATUS_NTF. Это уведомление отправляется UWBS при изменении состояния сеанса определения местоположения (например, с ACTIVE на IDLE).
| Код причины изменения статуса | Значение | Описание |
|---|---|---|
REASON_ERROR_INVALID_CHANNEL_WITH_AOA |
0x80 |
Состояние сеанса изменилось, поскольку настроенный канал не поддерживает определение расстояния по углу прибытия. |
REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT |
0x81 |
Состояние сеанса изменилось из-за конфликта с другими сеансами CCC или FiRa. |
REASON_REGULATION_UWB_OFF |
0x82 |
Состояние сеанса изменилось, поскольку UWB необходимо отключить по нормативным причинам. |