Свойства автомобиля

Интерфейс Vehicle Hardware Abstraction Layer (VHAL) определяет свойства, которые OEM-производители могут реализовать, и содержит метаданные свойств (например, является ли свойство целым числом и какие режимы изменения разрешены). Интерфейс VHAL основан на доступе (чтении, записи, подписке) к свойству, которое является абстракцией для определенной функции.

HAL-интерфейсы

VHAL использует следующие интерфейсы:

  • getAllPropConfigs() генерирует (vec<VehiclePropConfig>propConfigs)
    Перечислите конфигурацию всех свойств, поддерживаемых VHAL. CarService использует только поддерживаемые свойства.
  • getPropConfigs(vec<int32_t> props) генерирует (StatusCode status,vec<VehiclePropConfig> propConfigs);
    Верните конфигурацию выбранных свойств.
  • set(VehiclePropValue propValue) генерирует (StatusCodestatus);
    Записать значение в свойство. Результат записи определяется для каждого свойства.
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options) генерирует (StatusCode status);
    Начать мониторинг изменения значения свойства. Для зонированного свойства unsubscribe(IVehicleCallback callback, int32_t propId) генерирует (StatusCode status);

VHAL использует следующие интерфейсы обратного вызова:

  • oneway onPropertyEvent(vec<VehiclePropValue>propValues);
    Уведомляет об изменении стоимости имущества транспортного средства. Следует делать только для подписанных свойств.
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    Возвращает глобальную ошибку уровня VHAL или ошибку по свойству. Глобальная ошибка приводит к перезапуску HAL, что может привести к перезапуску других компонентов (включая приложения).

Свойства транспортного средства

Свойства могут быть только для чтения, только для записи (используются для передачи информации на уровень VHAL) или для чтения и записи (поддержка большинства свойств необязательна). Каждое свойство уникально идентифицируется ключом int32 и имеет предопределенный тип ( value_type ):

  • BYTES
  • BOOLEAN
  • EPOCH_TIME
  • FLOAT
  • FLOAT[]
  • INT32
  • INT32[]
  • INT64
  • INT64[]
  • STRING
  • MIXED

Зонированная недвижимость может иметь более одного значения в зависимости от количества зон, поддерживаемых недвижимостью.

Типы площадей

VHAL определяет несколько типов областей:

Тип площади Описание
GLOBAL Данный объект недвижимости является одиночным и не имеет нескольких зон.
WINDOW Область основана на окнах, использует перечисление VehicleAreaWindow .
MIRROR Площадь на основе зеркал, использует перечисление VehicleAreaMirror .
SEAT Площадь определяется по количеству мест, используется перечисление VehicleAreaSeat .
DOOR Площадь на основе дверей, использует перечисление VehicleAreaDoor .
WHEEL Площадь основана на колесах, используется перечисление VehicleAreaWheel .

Каждое зонированное свойство должно использовать предопределенный тип области. Каждый тип области имеет набор битовых флагов, определенных в перечислении для типа области. Например, область SEAT определяет перечисления VehicleAreaSeat :

  • ROW_1_LEFT = 0x0001
  • ROW_1_CENTER = 0x0002
  • ROW_1_RIGHT = 0x0004
  • ROW_2_LEFT = 0x0010
  • ROW_2_CENTER = 0x0020
  • ROW_2_RIGHT = 0x0040
  • ROW_3_LEFT = 0x0100
  • ...

Идентификаторы областей

Зонированные свойства адресуются через идентификаторы областей. Каждое зонированное свойство может поддерживать один или несколько идентификаторов областей. Идентификатор области состоит из одного или нескольких флагов из соответствующего перечисления. Например, свойство, использующее VehicleAreaSeat , может использовать следующие идентификаторы областей:

Элемент Описание
ROW_1_LEFT | ROW_1_RIGHT Идентификатор зоны применяется к обоим передним сиденьям.
ROW_2_LEFT Применимо только к заднему левому сиденью.
ROW_2_RIGHT Применимо только к заднему правому сиденью.

Статус имущества

Каждое значение свойства имеет значение VehiclePropertyStatus . Оно указывает текущий статус свойства:

Элемент Описание
AVAILABLE Недвижимость доступна и ее стоимость действительна.
UNAVAILABLE Значение свойства в настоящее время недоступно. Используется для временно отключенных функций для поддерживаемого свойства.
ERROR С этим объектом недвижимости что-то не так.

Настройка свойства

Используйте VehiclePropConfig для предоставления информации о конфигурации для каждого свойства. Информация включает:

Переменная Описание
access r , w , rw
changeMode Показывает, как контролируется свойство: при изменении или непрерывно.
areaConfigs Значения areaId , min и max .
configArray Дополнительные параметры конфигурации.
configString Дополнительная информация передается в виде строки.
minSampleRate maxSampleRate
prop Идентификатор свойства, int

Обработка свойств зоны

Зонированная недвижимость эквивалентна набору нескольких объектов недвижимости, где к каждому подобъекту недвижимости можно получить доступ с помощью указанного значения идентификатора области.

  • вызов get для зонированного свойства всегда включает в запрос идентификатор области. Поэтому возвращается только текущее значение для запрошенного идентификатора области. Если свойство глобальное, идентификатор области равен 0.
  • вызов set для зонированной собственности всегда включает в запрос идентификатор области. Поэтому изменяется только запрошенный идентификатор области.
  • Вызов subscribe генерирует события для всех идентификаторов областей объекта недвижимости.

Получайте звонки

Во время инициализации значение свойства может быть еще недоступно, поскольку соответствующее сообщение сети транспортного средства еще не получено. В таких случаях вызов get должен возвращать -EAGAIN . Некоторые свойства (например, HVAC) имеют отдельное свойство включения/выключения питания. Вызов get для такого свойства (при выключенном питании) должен возвращать статус UNAVAILABLE , а не возвращать ошибку. Например, get HVAC Temperature

VHAL получить пример HVAC

Рисунок 1. Получить температуру HVAC (CS = CarService, VHAL = Vehicle HAL)

Установить звонки

В типичной операции вызов set приводит к выполнению запроса на изменение по всей сети транспортного средства. В идеале вызов set — это асинхронная операция, которая возвращается как можно скорее, но она также может быть синхронной. Некоторые вызовы set могут потребовать готовности начальных данных, но во время инициализации такие данные могут быть еще недоступны. В таких случаях вызов set должен возвращать StatusCode#TRY_AGAIN . Некоторые свойства с раздельным включением и выключением питания должны возвращать StatusCode#NOT_AVAILABLE или StatusCode#NOT_AVAILABLE_DISABLED когда свойство выключено и set не может быть выполнено. Пока set не вступит в силу, get не обязательно возвращает то же значение, что и set. Например, set HVAC Temperature .

Пример установки VHAL HVAC

Рисунок 2. Установка температуры HVAC (CS = CarService, VHAL = Vehicle HAL)

Обработка пользовательских свойств

Для поддержки потребностей партнеров VHAL допускает пользовательские свойства, которые ограничены системными приложениями. Используйте следующие рекомендации при работе с пользовательскими свойствами:

  • Идентификатор недвижимости должен быть сформирован с использованием следующих полей:
    • VehiclePropertyGroup:VENDOR
      Группа VENDOR используется только для пользовательских свойств.
    • VehicleArea
      Выберите подходящий тип области.
    • VehiclePropertyType
      Выберите правильный тип данных. Тип BYTES позволяет передавать необработанные данные, что достаточно в большинстве случаев. Частая отправка больших данных через пользовательские свойства может замедлить доступ ко всей сети транспортного средства — будьте осторожны при добавлении большой полезной нагрузки.
    • Property ID
      Выберите четырехбайтовый идентификатор для пользовательского свойства.
  • Чтобы предотвратить фрагментацию экосистемы, пользовательские свойства не должны использоваться для копирования свойств транспортного средства, которые уже существуют в (SDK VehiclePropertyIds ).
  • Заполните VehiclePropConfig.configString кратким описанием пользовательского свойства. Это позволяет инструментам проверки работоспособности отмечать случайное копирование существующих свойств транспортного средства. Например, «состояние аварийного сигнала».
  • Доступ через CarPropertyManager (для компонентов Java) или через API службы сети транспортного средства (для нативных). Не изменяйте другие автомобильные API, так как это может привести к будущим проблемам совместимости.
  • После реализации свойств поставщика выберите только список разрешений в перечислении VehicleVendorPermission для свойств поставщика. Сопоставление разрешений поставщика со свойствами системы нарушит CTS и VTS.

Управление объектами HVAC

Вы можете использовать VHAL для управления HVAC, устанавливая свойства, связанные с HVAC. Большинство свойств HVAC являются зонированными свойствами, хотя некоторые из них являются незонированными (глобальными) свойствами. Примеры определенных свойств включают:

Свойство Цель
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET Установите температуру для каждой зоны.
VEHICLE_PROPERTY_HVAC_RECIRC_ON Управление рециркуляцией по зонам.

Чтобы увидеть полный список свойств HVAC, выполните поиск VEHICLE_PROPERTY_HVAC_* в types.hal . Когда свойство HVAC использует VehicleAreaSeat , применяются дополнительные правила сопоставления зонированного свойства HVAC с идентификаторами областей. Каждое доступное место в автомобиле должно быть частью идентификатора области в массиве идентификаторов областей.

Пример первый. В автомобиле два передних сиденья ( ROW_1_LEFT, ROW_1_RIGHT ) и три задних сиденья ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT ). В автомобиле два блока управления температурой: со стороны водителя и со стороны пассажира.

  • Допустимый набор сопоставлений идентификаторов областей для HVAC_TEMPERATURE SET :
    • ROW_1_LEFT | ROW_2_LEFT
    • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
  • Альтернативное сопоставление для той же конфигурации оборудования:
    • ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
    • ROW_1_RIGHT | ROW_2_RIGHT

Пример два. В автомобиле три ряда сидений с двумя сиденьями в первом ряду ( ROW_1_LEFT, ROW_1_RIGHT ), тремя сиденьями во втором ряду ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT ) и тремя в третьем ряду ( ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT ). В автомобиле три блока управления температурой: со стороны водителя, со стороны пассажира и сзади. Разумный способ сопоставить HVAC_TEMPERATURE_SET с идентификаторами областей — это использовать трехэлементный массив:

  • ROW_1_LEFT
  • ROW_1_RIGHT
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT

Обработка свойств датчика

Свойства датчика VHAL представляют собой реальные данные датчика или информацию о политике, такую ​​как статус вождения. Некоторая информация датчика (например, статус вождения и режим день/ночь) доступна любому приложению без ограничений, поскольку эти данные являются обязательными для создания безопасного приложения для транспортного средства. Другая информация датчика (например, скорость транспортного средства) более конфиденциальна и требует специальных разрешений, которыми могут управлять пользователи.

См. поддерживаемые свойства датчика (в types.hal ).

Служба карт транспортных средств

Служба карт транспортных средств (VMS) предоставляет механизм обмена картографическими данными между клиентами через интерфейс pub/sub для поддержки общих функций транспортных средств, таких как Advanced Driver Assistance Systems (ADAS) . Клиенты могут включать системы транспортных средств, взаимодействующие через свойство VMS в VHAL или привилегированные приложения Android. Данные, совместно используемые в VMS, предназначены для ограничения картографических данных для использования системами транспортных средств и вспомогательными приложениями.

VMS предназначена для использования только в реализациях Android Automotive; AOSP не содержит клиентов по умолчанию, которые публикуют или подписываются на VMS. Для свойства VMS в VHAL типы сообщений и структуры данных описаны в VHAL 2.0 в перечислении VmsMessageType , в котором перечислены типы поддерживаемых сообщений VMS. Это перечисление используется как первое целое число в массиве целых чисел свойств транспортного средства и определяет, как декодируется остальная часть сообщения.