Свойства поставщика
Чтобы удовлетворить потребности партнеров, VHAL позволяет использовать свойства поставщиков, доступ к которым осуществляется только через системные API. При работе со свойствами поставщиков придерживайтесь следующих рекомендаций:
- Всегда старайтесь использовать системные свойства. Свойства поставщика следует использовать только в том случае, если ни одно из системных свойств не соответствует вашим требованиям.
- Чтобы избежать фрагментации экосистемы, свойства поставщика не должны использоваться для репликации свойств автомобиля, которые уже существуют в SDK VehiclePropertyIds. Подробную информацию можно найти в разделе 2.5 "Требования к автомобилям" документа CDD.
- Чтобы сгенерировать идентификатор объекта, используйте следующие поля:
VehiclePropertyGroup:VENDORГруппа VENDOR используется только для свойств поставщика.VehicleAreaВыберите подходящий тип административной единицы.VehiclePropertyTypeВыберите нужный тип данных. Тип BYTES позволяет передавать необработанные данные, чего достаточно в большинстве случаев. Частая отправка больших объемов данных через свойства поставщика может замедлить доступ ко всей сети автомобиля. Будьте осторожны при добавлении больших полезных нагрузок.Property IDВыберите уникальный двухбайтовый идентификатор для свойства поставщика. Например, 0x1234.
- Вместо
VehiclePropConfig.configStringдобавьте краткое описание свойства поставщика. Это позволяет инструментам проверки помечать случайное дублирование существующих свойств транспортного средства. Например, "Мой дополнительный параметр для XYZ". - Доступ к нему можно получить через CarPropertyManager (для компонентов Java) или через
libvhalclient(для нативных компонентов). Не изменяйте другие API, так как это может привести к проблемам с совместимостью в будущем.
Разрешение на доступ к свойствам поставщика
Разрешение по умолчанию для всех заданных свойств поставщика – android.car.Car.PERMISSION_VENDOR_EXTENSION. Для более точного управления разрешениями поддерживайте свойство SUPPORT_CUSTOMIZE_VENDOR_PERMISSION. Это СТАТИЧЕСКОЕ свойство доступно только для чтения. Его массив конфигурации определяет разрешения для свойств поставщика.
Параметр configArray задается следующим образом (i – целое число, начиная с 0):
configArray[3 * i]propId – идентификатор ресурса поставщика.configArray[3 * i + 1]Перечисление вVehicleVendorPermission.aidl, указывающее на разрешение читать значение свойства.configArray[3 * i + 2]Перечисление вVehicleVendorPermission.aidl, указывающее на разрешение записывать значение свойства.
Например, в следующем массиве config для двух свойств поставщика, vendor_prop_1 и vendor_prop_2, заданы разрешения:
- Для
vendor_prop_1требуетсяandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEATдля чтения иandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEATдля записи. - Для чтения
vendor_prop-2требуетсяandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO. Приложения Android не могут записывать данные в .
configArray = { PERMISSION_SET_VENDOR_CATEGORY_SEAT vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE }
Свойства поставщиков, не включенные в этот массив, получают разрешение по умолчанию. Если выбрано значение PERMISSION_NOT_ACCESSIBLE, у приложений Android не будет доступа к свойству.
В примере приложения для Android не могут записать значение для vendor_prop_2. Записывать данные в это свойство могут только нативные клиенты VHAL.
Усовершенствованные системы помощи водителю (ADAS)
Подробнее о свойствах автомобиля ADAS…Сиденье и руль
Подробнее о свойствах SEAT и STEERING_WHEEL…
Обслуживание систем отопления, вентиляции и кондиционирования воздуха
Вы можете использовать VHAL для управления климат-контролем, задав свойства, связанные с климат-контролем. Большинство свойств климат-контроля связано с определенными зонами в автомобиле, хотя некоторые из них являются глобальными. Примеры определенных свойств:
| Свойство | Назначение |
|---|---|
HVAC_TEMPERATURE_SET |
Установить температуру для идентификатора области. |
HVAC_POWER_ON |
Состояние питания системы климат-контроля по идентификатору области. |
Свойства, зависящие от состояния питания системы климат-контроля, должны быть перечислены в массиве конфигурации HVAC_POWER_ON. Чтобы посмотреть полный список свойств климат-контроля, выполните поиск по запросу HVAC_* в VehicleProperty.aidl. Подробнее о поддерживаемых свойствах системы…
ресурсов.
Правила сопоставления свойств HVAC типа VehicleArea, отличных от GLOBAL, с AreaID:
Каждая область для определенного типа VehicleArea, на которую влияет свойство, должна быть включена в идентификатор области для этого свойства. Регуляторы температуры назначаются сиденьям, на которые они оказывают наибольшее влияние, но каждое сиденье должно быть включено ровно один раз.
Назначение заднего центрального сиденья левому или правому AreaID может показаться произвольным, но включение каждого затронутого сиденья ровно в один AreaID гарантирует, что все сиденья в автомобиле будут выражены и что доступен разумный способ воздействия на каждое сиденье.
Пример 1
В автомобиле два передних сиденья (ROW_1_LEFT, ROW_1_RIGHT) и три задних (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Есть два блока управления температурой: один для водителя, другой для пассажира. Допустимый набор сопоставлений AreaID для HVAC_TEMPERATURE_SET будет представлять собой массив из двух элементов:
- ROW_1_LEFT | ROW_2_LEFT
- ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
Для той же конфигурации оборудования можно использовать и другое сопоставление:
- ROW_1_LEFT | ROW_2_CENTER | ROW_2_LEFT
- ROW_1_RIGHT | ROW_2_RIGHT
Пример 2
В автомобиле три ряда сидений. В первом ряду два сиденья (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 с AreaID – это массив из трех элементов:
- ROW_1_LEFT
- ROW_1_RIGHT
- ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT
Пример 3
В автомобиле два передних сиденья (ROW_1_LEFT, ROW_1_RIGHT) и три задних (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Предположим, что автомобиль поддерживает HVAC_AUTO_ON только для двух передних сидений. Допустимый набор сопоставлений AreaID для HVAC_AUTO_ON будет представлять собой массив из одного элемента:
- ROW_1_LEFT | ROW_1_RIGHT
Если бы в HVAC_AUTO_ON было два отдельных блока управления для водителя и пассажира, альтернативным сопоставлением был бы массив из двух элементов:
- ROW_1_LEFT
- ROW_1_RIGHT
INFO_EXTERIOR_DIMENSIONS
Внешние габариты автомобиля измеряются в миллиметрах, как показано на рисунке 1.
Используйте свойства, описанные в таблице ниже, чтобы указать внешние габариты автомобиля.
| Свойство автомобиля | Поле VHAL | Описание |
|---|---|---|
| Высота | int32Values[0] |
Расстояние по вертикали между землей и самой высокой точкой автомобиля. Это предполагает, что колеса накачаны до стандартного давления. |
| Длина | int32Values[1] |
Расстояние по горизонтали между крайними точками передней и задней частей автомобиля. |
| Ширина без зеркал | int32Values[2] |
Расстояние по горизонтали между двумя крайними точками с каждой стороны автомобиля, за исключением боковых зеркал. |
| Ширина с зеркалами | int32Values[3] |
Расстояние по горизонтали между двумя крайними точками по бокам автомобиля, включая боковые зеркала. |
| Колесная база | int32Values[4] |
Расстояние между центрами передних и задних колес автомобиля. |
| Ширина колеи, передняя | int32Values[5] |
Расстояние между передними колесами, измеренное от центральной линии протектора одной шины до центральной линии протектора противоположной шины. |
| Ширина колеи, задняя | int32Values[6] |
Расстояние между задними колесами, измеренное от центральной линии протектора одной шины до центральной линии протектора противоположной шины. |
| Диаметр разворота от бордюра до бордюра | int32Values[7] |
Диаметр круга, который описывают внешние колеса автомобиля при полном развороте с максимально вывернутым рулем. |
Соответствие общим правилам безопасности Европейского союза
Если автомобиль должен соответствовать требованиям Общих правил безопасности (GSR) Европейского союза через Android, должно поддерживаться свойство GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT. Пример использования – интеллектуальная система контроля скорости (ISA), описанная в регламенте ЕС 2019/2144. Это свойство добавлено в AIDL VHAL в Android 13, но поддерживается в Car Service с момента выпуска Android 12. Это свойство определяется как статическое глобальное целочисленное свойство, доступное только для чтения, возможные значения которого определяются перечислением GsrComplianceRequirementType:
| Название | Значение | Описание |
|---|---|---|
GSR_COMPLIANCE_NOT_REQUIRED |
0 | Соответствие GSR не требуется |
GSR_COMPLIANCE_REQUIRED_V1 |
1 | Требуется соответствие GSR, версия решения – 1. |
Чтобы поддерживать это свойство в HIDL VHAL (в Android 12), поставщики должны жестко закодировать идентификатор свойства.
Например, в следующем фрагменте показано, как это поддерживается в эталонном HIDL VHAL DefaultConfig.h:
{
.config =
{
// GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
.prop = 0x11400F47,
.access = VehiclePropertyAccess::READ,
.changeMode = VehiclePropertyChangeMode::STATIC,
},
// GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1
.initialValue = {.int32Values = {1}},
}Чтобы поддерживать это свойство в AIDL VHAL (начиная с Android 13), поставщики могут использовать идентификатор свойства из VehicleProperty.h и перечисление из GsrComplianceRequirementType.h. Например, как в эталонном AIDL VHAL DefaultProperties.json:
{
"property": "VehicleProperty::GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT",
"defaultValue": {
"int32Values": [
"GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1"
]
}
}Чтобы прочитать это свойство из приложения Android, используйте CarPropertyManager.getIntProperty.
- В Android 13 и более поздних версиях в качестве идентификатора свойства используйте
VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE. - В Android 12 используйте в качестве идентификатора свойства заданное в коде значение 0x11400F47. Для этого свойства требуется разрешение
Car#PERMISSION_CAR_INFO.