Интерфейс HAL для СШП

Стек сверхширокополосной связи (СШП) 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. Схема вызовов для деинициализации стека СШП (переключатель СШП выключен)

Начало и завершение сеанса UWB

Рисунок 3. Запуск и остановка сеанса СШП

Настройка кода страны для СШП

Как показано на рисунке 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. Код страны по умолчанию от производителя оригинального оборудования.

Если фреймворк 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. Значение 00 указывает, что код страны неизвестен.

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

Однобайтовое значение для включения или отключения диагностических отчетов. Настраивайте этот параметр, только если CORE_GET_CAPS_INFO_RSP возвращает SUPPORTED_DIAGNOSTICS со значением 1, указывающим на то, что функция диагностических отчетов поддерживается.

Значения:

  • 1: функция включена
  • 0: функция отключена

DIAGRAMS_FRAME_REPORTS_FIELDS 1 или 4 0xE9 2

Битовая маска из одного или четырех байтов для настройки диагностических отчетов. Эта битовая маска имеет размер 1 байт в 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 (основная группа СШП)
  • 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 в битовой маске соответствует определенному каналу СШП.

Значения:

  • 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

Код статуса, возвращаемый, когда текущий сеанс определения расстояния не может быть запущен из-за нормативных требований к сверхширокополосной связи.

Код причины изменения состояния в 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 необходимо отключить по нормативным причинам.