Особые свойства

Свойства продавца

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

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

Например, следующий массив конфигурации настраивает два свойства поставщика, 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 .

СИДЕНЬЕ и РУЛЕВОЕ УПРАВЛЕНИЕ

См. Свойства сиденья и рулевого колеса .

ОВиК

Вы можете использовать VHAL для управления HVAC, устанавливая свойства, связанные с HVAC. Большинство свойств HVAC связаны с определенными областями в автомобиле, хотя некоторые из них являются глобальными свойствами. Примеры определенных свойств включают:

Свойство Цель
HVAC_TEMPERATURE_SET Установите температуру для каждого идентификатора области.
HVAC_POWER_ON Состояние питания системы HVAC по идентификатору области.

Для свойств HVAC, зависящих от состояния питания системы HVAC, они должны быть перечислены в массиве конфигурации HVAC_POWER_ON . Чтобы увидеть полный список свойств HVAC, выполните поиск HVAC_* в VehicleProperty.aidl , см. Поддерживаемые системные свойства . свойства.

Правила сопоставления не-GLOBAL VehicleArea типа HVAC свойств AreaID: Каждая «область» для определенного типа VehicleArea , на которую влияет свойство, должна быть включена в идентификатор области для этого свойства. Контроллеры температуры назначаются сиденьям, на которые они «наиболее влияют», но каждое затронутое сиденье должно быть включено ровно один раз. Назначение центрального заднего сиденья левому или правому AreaID может показаться произвольным, но включение каждого затронутого сиденья ровно в один AreaID гарантирует, что все сиденья в автомобиле выражены и что доступен разумный способ повлиять на каждое сиденье.

Пример 1

В автомобиле два передних сиденья (ROW_1_LEFT, ROW_1_RIGHT) и три задних сиденья (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Имеется два блока управления температурой, по одному для стороны водителя и стороны пассажира. Допустимый набор сопоставлений AreaID для HVAC_TEMPERATURE_SET будет представлять собой двухэлементный массив:

  • РЯД_1_ЛЕВЫЙ | РЯД_2_ЛЕВЫЙ
  • ROW_1_ПРАВАЯ | ROW_2_ЦЕНТР | ROW_2_ПРАВАЯ

Альтернативное сопоставление для той же конфигурации оборудования будет следующим:

  • ROW_1_LEFT | ROW_2_CENTER | ROW_2_LEFT
  • РЯД_1_ПРАВЫЙ | РЯД_2_ПРАВЫЙ

Пример 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 — это массив из трех элементов:

  • РЯД_1_ЛЕВЫЙ
  • РЯД_1_ПРАВЫЙ
  • 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 имел два отдельных блока управления для стороны водителя и стороны пассажира, альтернативным отображением был бы массив из двух элементов:

  • РЯД_1_ЛЕВЫЙ
  • РЯД_1_ПРАВЫЙ

ИНФОРМАЦИЯ_ВНЕШНИЕ_РАЗМЕРЫ

Внешние размеры транспортного средства измеряются в миллиметрах, как показано на рисунке 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 должно поддерживаться. Примером варианта использования является GSR-ISA (Intelligent Speed ​​Assist), как определено в Регламенте ЕС 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 и enum из 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 .