Специальные свойства

Свойства поставщика

Чтобы удовлетворить потребности партнеров, 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.

Рисунок 1. Внешние размеры автомобиля, вид спереди.
Рисунок 2. Внешние размеры автомобиля, вид сбоку.

Используйте свойства, описанные в таблице ниже, чтобы указать внешние габариты автомобиля.

Свойство автомобиля Поле 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.