СШП HAL-интерфейс

Стек сверхширокополосной связи (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.

Инициализация стека UWB

Рисунок 1. Поток вызовов инициализации стека UWB (переключатель UWB включен)

Деинициализация стека UWB

Рисунок 2. Поток вызовов деинициализации стека UWB (переключатель UWB выключен)

Запуск и остановка сеанса UWB

Рисунок 3. Процесс запуска/остановки сеанса UWB

Конфигурация кода страны UWB

Как показано на рисунке 1, фреймворк UWB настраивает код страны UWB во время инициализации стека UWB с помощью команды UCI пространства поставщика ANDROID_SET_COUNTRY_CODE (GID= 0xC , OID= 0x1 ). Фреймворк UWB пытается определить код страны UWB, используя следующие источники (перечислены в порядке приоритета). Фреймворк UWB останавливается на первом источнике, где определяется код страны.

  1. Переопределить код страны: код страны принудительно устанавливается с помощью команды оболочки adb (локальное или автоматическое тестирование).
  2. Телефонный код страны: Код страны, полученный через сотовую связь. Если есть несколько SIM-карт, которые возвращают разные коды, выбранный код страны не является детерминированным.
  3. Код страны Wi-Fi: Код страны, полученный через Wi-Fi (80211.ad).
  4. Последний известный код страны телефонии: Последний известный код страны, полученный через сотовую связь. Если есть несколько SIM-карт, которые возвращают разные коды, выбранный код страны не является детерминированным.
  5. Код страны местоположения: Код страны, полученный от поставщика объединенного местоположения LocationManager .
  6. Код страны 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. Значение 00 используется для указания того, что код страны неизвестен.

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

Ценности:

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

DIAGRAMS_FRAME_REPORTS_FIELDS 1 или 4 0xE9 2

1-байтовая или 4-байтовая битовая маска для настройки диагностических отчетов. Эта битовая маска составляет 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 (основная группа UWB)
  • OID: 000011b ( CORE_GET_CAPS_INFO_RSP )

В следующей таблице перечислены параметры сообщений о возможностях UWB.

Имя параметра Длина
(октеты)
Ярлык
(удостоверения личности)
Версия интерфейса поставщика Описание
SUPPORTED_POWER_STATS_QUERY 1 0xC0 1

1-байтовое значение, указывающее на поддержку запроса статистики энергопотребления.

Ценности:

  • 1 : Функция поддерживается
  • 0 : Функция не поддерживается
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING 1 0xE3 1

1-байтовое значение, указывающее на поддержку функции чередования антенн.

Ценности:

  • 1 : Функция поддерживается
  • 0 : Функция не поддерживается
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.

Ценности:

  • 1 : Функция поддерживается
  • 0 : Функция не поддерживается
SUPPORTED_DIAGNOSTICS 1 0xE7 2

1-байтовое значение, указывающее на поддержку диагностических отчетов.

Ценности:

  • 1 : Функция поддерживается
  • 0 : Функция не поддерживается
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. Каждая 1 в битовой маске соответствует определенному каналу UWB.

Ценности:

  • 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

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