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

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

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

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

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

Принимать звонки

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

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

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

Набор вызовов

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

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

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

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

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

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

Обработка свойств ОВКВ

Вы можете использовать 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) предоставляет механизм обмена картографическими данными между клиентами через интерфейс публикации/подписки для поддержки общих функций транспортных средств, таких как усовершенствованные системы помощи водителю (ADAS) . Клиенты могут включать системы транспортного средства, взаимодействующие через свойство VMS в VHAL или привилегированных приложениях Android. Данные, передаваемые в VMS, должны быть ограничены картографическими данными для использования системами автомобиля и вспомогательными приложениями.

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