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

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

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

  • Всегда старайтесь сначала использовать свойства системы, свойства поставщика следует использовать в крайнем случае, когда ни одно из свойств системы не соответствует вашим требованиям.
  • Чтобы предотвратить фрагментацию экосистемы, свойства поставщиков не должны использоваться для репликации свойств транспортных средств, которые уже существуют в SDK VehiclePropertyIds . Дополнительную информацию см. в разделе 2.5 «Требования к автомобилям» в CDD.
  • Используйте следующие поля для создания идентификатора свойства:
    • VehiclePropertyGroup:VENDOR используется только для свойств поставщиков.
    • VehicleArea Выберите соответствующий тип зоны.
    • VehiclePropertyType Выберите правильный тип данных. Тип BYTES позволяет передавать необработанные данные, чего в большинстве случаев достаточно. Частая отправка больших данных через объекты поставщиков может замедлить доступ ко всей сети автомобиля. Будьте осторожны при добавлении большой полезной нагрузки.
    • Property ID Выберите уникальный двухбайтовый идентификатор свойства поставщика. Например, 0x1234.
  • Заполните VehiclePropConfig.configString кратким описанием свойства поставщика. Это позволяет инструментам проверки достоверности отмечать случайное повторение существующих свойств транспортного средства. Например, «Мое пользовательское свойство для XYZ».
  • Доступ через CarPropertyManager (для компонентов Java) или через libvhalclient (для нативного). Не изменяйте другие автомобильные API, поскольку это может привести к проблемам совместимости в будущем.

Разрешение на свойства поставщика

Разрешение по умолчанию для любых определенных свойств поставщика — android.car.Car.PERMISSION_VENDOR_EXTENSION . Для более детального управления разрешениями поддержите свойство SUPPORT_CUSTOMIZE_VENDOR_PERMISSION . Это свойство STATIC доступно только для чтения, для которого его массив конфигурации определяет разрешения для свойств поставщика. 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 , см. раздел Поддерживаемые свойства системы . характеристики.

Правила сопоставления свойств HVAC, не относящихся к GLOBAL типу VehicleArea, с 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 . Примером использования является GSR-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 .