Android Automotive OS (AAOS) содержит общие свойства VHAL, которые можно просмотреть в окне VHAL эмулятора. В результате вы можете просмотреть множество информации о VHAL, включая имена, описания и значения значений. Информация извлекается из метаданных свойств VHAL, которые жестко закодированы в эмуляторе QEMU .
Когда вы добавляете свои собственные свойства VHAL для эксклюзивного использования на своих устройствах, для просмотра метаданных VHAL в окне VHAL вам потребуется изменить код и создать собственный эмулятор QEMU. Чтобы обойти эту проблему, вы можете написать свои собственные описания в формате JSON и добавить их в образ вашей системы.
Обзор
На этой странице подробно описано, как можно расширить описания свойств VHAL в эмуляторе AAOS.
Создайте метаданные JSON для расширения свойств VHAL.
Эмулятор ищет дополнительные метаданные во всех файлах, заканчивающихся на -types-meta.json в пути к виртуальному устройству Android (AVD). Ожидается, что файлы JSON будут состоять из массива объектов Enum , как показано ниже.
Объект перечисления
Объект Enum с именем VehicleProperty — это особый случай, в котором его можно рассматривать как корень. Его содержимое добавляется на карту свойств автомобиля. Другие Enums (с именем, отличным от VehicleProperty ) определяют карты имен пользовательских значений.
Enum: {
"name" : String,
"values" : Array of { ValueObject }
} ValueObject
ValueObject: { "name" : String, "value" : Integer, "data_enum" : String, VehicleProperty only, optional, }
Для VehicleProperty имя Enum описывает, как это свойство отображается в окне VHAL эмулятора. Значением является property_id свойства, описанного ValueObject . data_enum связывает ValueObject с другим Enum . Эта ассоциация используется для преобразования значения в удобочитаемую строку и существует только для ValueObjects в Enum для VehicleProperty . Пример VehicleProperty показан ниже:
[
{
"name": "VehicleProperty",
"values": [
{
"name": "CURRENT_GEAR",
"value": 289408001
}
]
}
] В этом примере property_id со value 289408001 предоставляется в качестве name для CURRENT_GEAR . В эмуляторе это свойство уже жестко запрограммировано как имя Current Gear . (Вы не можете воспроизвести этот сценарий, поскольку эта страница была создана после удаления всех жестко запрограммированных свойств в демонстрационных целях.)

Рисунок 1. VehicleProperty, определенный с именем и значением.
На вкладке свойств VHAL эмулятора имя обновляется и становится CURRENT_GEAR , как и ожидалось.
data_enum
В приведенном выше примере отображаемое значение равно 4, когда передача установлена на P.

Рисунок 2. Значение отображается как 4.
Как и предполагалось, на вкладке «Свойства VHAL» в эмуляторе имя отображается как CURRENT_GEAR . В этом отличие от существующего эмулятора, где он отображается как P.
enum VehicleGear { GEAR_UNKNOWN = 0x0000, GEAR_NEUTRAL = 0x0001, GEAR_REVERSE = 0x0002, GEAR_PARK = 0x0004, GEAR_DRIVE = 0x0008, GEAR_1 = 0x0010, GEAR_2 = 0x0020, GEAR_3 = 0x0040, GEAR_4 = 0x0080, GEAR_5 = 0x0100, GEAR_6 = 0x0200, GEAR_7 = 0x0400, GEAR_8 = 0x0800, GEAR_9 = 0x1000, }
Чтобы узнать больше, см. определение AIDL .
Как определено в AIDL, значение механизма парковки равно 4 , что означает, что вам необходимо перевести значение 4 в P. Это когда вы используете data_enum , который сопоставляет значение этого свойства с удобочитаемой строкой в другом Enum . Эмулятор использует эту карту для перевода значений свойств. Например:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001, "data_enum": "VehicleGear" } ] }, { "name": "VehicleGear", "values": [ { "name": "GEAR_UNKNOWN", "value": 0 }, { "name": "GEAR_PARK", "value": 4 } ] } ]
Добавьте "data_enum": "VehicleGear" , чтобы эмулятор использовал Enum с именем VehicleGear для перевода значения свойства. Добавьте еще один Enum с именем VehicleGear , значение которого представляет собой массив ValueObject , где значение свойства (со значением) должно отображаться как имя.

Рисунок 3. Значение отображается как GEAR_PARK.
На вкладке «Свойства VHAL» для эмулятора имя обновляется и становится CURRENT_GEAR , как и ожидалось. Значение свойства 4 отображается как GEAR_PARK .
Используйте метаданные JSON для расширения свойств VHAL.
Чтобы использовать метаданные JSON для расширения свойств VHAL, запустите этот сценарий Python (содержащийся в исходном коде Android), чтобы сгенерировать JSON расширенного свойства на основе информации в AIDL.
Результирующий JSON включает в себя некоторые избыточные значения, такие change_mode , access и unit . Хотя эта информация является частью свойства VHAL, эти значения JSON не влияют на то, что отображается в окне свойств VHAL эмулятора.
Добавьте метаданные JSON в образ системы
Помните, что имя файла должно заканчиваться на -types-meta.json . В противном случае файл игнорируется.
Добавить цель сборки
Добавьте файл -types-meta.json в PRODUCT_COPY_FILE . Например:
PRODUCT_COPY_FILES += \ device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json
Этот код копирует файл в out/target/product/{your_target_path}/ , корень созданного вами целевого вывода.