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}/
, корень созданного вами целевого вывода.