Интерфейс 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
Рисунок 1 . Получить температуру HVAC (CS = CarService, VHAL = HAL автомобиля)
Набор вызовов
Вызов set
— это асинхронная операция, включающая уведомление о событии после внесения запрошенного изменения. В типичной операции set
вызов приводит к выполнению запроса на изменение по сети автомобиля. Некоторые вызовы set
могут потребовать, чтобы исходные данные были готовы, но во время инициализации такие данные могут быть еще недоступны. В таких случаях вызов set
должен возвращать -EAGAIN
. Некоторые свойства с отдельным включением/выключением питания должны возвращать -ESHUTDOWN
когда свойство выключено и его установка невозможна. Пока set
не станет эффективным, get
не обязательно возвращает то же значение, что и set. Например, set HVAC Temperature
.
Рисунок 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. Это перечисление используется как первое целое число в массиве целых чисел свойств транспортного средства и определяет, как декодируется остальная часть сообщения.