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

Интерфейс уровня абстракции аппаратного обеспечения транспортного средства (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 Идентификатор свойства, целое число

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

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

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

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

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

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

Рисунок 1 . Получить температуру HVAC (CS = CarService, VHAL = 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 . Установите температуру системы отопления, вентиляции и кондиционирования (CS = CarService, VHAL = HAL автомобиля)

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

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

  • Идентификатор объекта должен быть сгенерирован с использованием следующих полей:
    • VehiclePropertyGroup:VENDOR
      Группа VENDOR используется только для пользовательских свойств.
    • VehicleArea
      Выберите подходящий тип области.
    • VehiclePropertyType
      Выберите правильный тип данных. Тип BYTES позволяет передавать необработанные данные, чего достаточно в большинстве случаев. Частая отправка больших данных через пользовательские свойства может замедлить доступ ко всей сети автомобиля — будьте осторожны при добавлении большой полезной нагрузки.
    • Property ID
      Выберите четырехбайтовый идентификатор для пользовательского свойства.
  • Чтобы предотвратить фрагментацию экосистемы, пользовательские свойства не должны использоваться для репликации свойств транспортного средства, которые уже существуют в ( VehiclePropertyIds SDK).
  • Заполните 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 с идентификаторами областей. Каждое доступное место в автомобиле должно быть частью идентификатора зоны в массиве Area ID.

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