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