Мы предоставляем эталонную реализацию AIDL VHAL. Основной поток службы реализован в VehicleService.cpp
. Реализация интерфейса VHAL находится в DefaultVehicleHal.cpp
.
Эталонная реализация основана на двухуровневой архитектуре. На верхнем уровне DefaultVehicleHal
реализует интерфейс VHAL AIDL и предоставляет логику VHAL, общую для всех аппаратных устройств. На нижнем уровне FakeVehicleHardware
реализует интерфейс IVehicleHardware
. Этот класс имитирует логику VHAL взаимодействия с реальным оборудованием или шиной автомобиля и зависит от устройства. При желании поставщики могут адаптировать эту же архитектуру, повторно использовать тот же класс DefaultVehicleHal
(расширяя его для перезаписи метода) и предоставить свою собственную реализацию IVehicleHardware
.
DefaultVehicleHal
содержит следующую логику, которая считается универсальной и может применяться к любой реализации VHAL.
- Реализует интерфейс
IVehicle
. - Выполняет базовую проверку ввода, включая проверку на наличие повторяющихся идентификаторов.
- Выделяет клиентские объекты (например,
GetValuesClient
) для каждой операции для каждого клиента связывания и добавляет каждый из них в глобальный пул. - Управляет логикой асинхронных обратных вызовов, например добавлением ожидающего запроса в пул ожидающих запросов. Разрешает ожидающие запросы, когда мы получаем результаты, или возвращает ошибку, когда время ожидания одного из ожидающих запросов истекает.
- Сериализует и десериализует
LargeParcelable
(см.ParcelableUtils.h
). - Управляет подпиской (см.
SubscriptionManager.h
). - Проверяет разрешения. (См. функции
checkReadPermission
иcheckWritePermission
). - Периодически вызывает IVehicleHardware.checkHealth и отправляет сигналы пульса (см. функцию
checkHealth
).
IVehicleHardware
— это общий интерфейс, используемый для представления аппаратной реализации VHAL. Эталонной реализацией IVehicleHardware
является FakeVehicleHardware
, которая использует карту в памяти для хранения значения свойства и не взаимодействует с реальной шиной транспортного средства. Он предназначен для работы на эмуляторе и не имеет никаких аппаратных зависимостей. Реализации поставщиков не должны использовать его как есть и должны добавлять логику, специфичную для автомобильной шины.
В Android 14 FakeVehicleHardware
считывает конфигурацию поддерживаемого свойства во время выполнения во время инициализации из папки устройства /vendor/etc/automotive/vhalconfig/
, которая содержит файл конфигурации в стиле JSON. Формат и содержимое файла конфигурации см. в справочном файле VHAL README .
FakeVehicleHardware
также поддерживает переопределение файла конфигурации для тестирования. Если установлено системное свойство persist.vendor.vhal_init_value_override
, оно использует файл конфигурации из папки /vendor/etc/automotive/vhaloverride/
на устройстве для переопределения существующей конфигурации. Реализация поставщика может использовать аналогичный подход, чтобы конфигурация свойств, поддерживаемая VHAL, не была жестко закодирована и могла динамически определяться во время запуска. Конфигурация свойств автомобиля должна быть статической после запуска устройства.
Мы предоставляем эталонную реализацию AIDL VHAL. Основной поток службы реализован в VehicleService.cpp
. Реализация интерфейса VHAL находится в DefaultVehicleHal.cpp
.
Эталонная реализация основана на двухуровневой архитектуре. На верхнем уровне DefaultVehicleHal
реализует интерфейс VHAL AIDL и предоставляет логику VHAL, общую для всех аппаратных устройств. На нижнем уровне FakeVehicleHardware
реализует интерфейс IVehicleHardware
. Этот класс имитирует логику VHAL взаимодействия с реальным оборудованием или шиной автомобиля и зависит от устройства. При желании поставщики могут адаптировать эту же архитектуру, повторно использовать тот же класс DefaultVehicleHal
(расширяя его для перезаписи метода) и предоставить свою собственную реализацию IVehicleHardware
.
DefaultVehicleHal
содержит следующую логику, которая считается универсальной и может применяться к любой реализации VHAL.
- Реализует интерфейс
IVehicle
. - Выполняет базовую проверку ввода, включая проверку на наличие повторяющихся идентификаторов.
- Выделяет клиентские объекты (например,
GetValuesClient
) для каждой операции для каждого клиента связывания и добавляет каждый из них в глобальный пул. - Управляет логикой асинхронных обратных вызовов, например добавлением ожидающего запроса в пул ожидающих запросов. Разрешает ожидающие запросы, когда мы получаем результаты, или возвращает ошибку, когда время ожидания одного из ожидающих запросов истекает.
- Сериализует и десериализует
LargeParcelable
(см.ParcelableUtils.h
). - Управляет подпиской (см.
SubscriptionManager.h
). - Проверяет разрешения. (См. функции
checkReadPermission
иcheckWritePermission
). - Периодически вызывает IVehicleHardware.checkHealth и отправляет сигналы пульса (см. функцию
checkHealth
).
IVehicleHardware
— это общий интерфейс, используемый для представления аппаратной реализации VHAL. Эталонной реализацией IVehicleHardware
является FakeVehicleHardware
, которая использует карту в памяти для хранения значения свойства и не взаимодействует с реальной шиной транспортного средства. Он предназначен для работы на эмуляторе и не имеет никаких аппаратных зависимостей. Реализации поставщиков не должны использовать его как есть и должны добавлять логику, специфичную для автомобильной шины.
В Android 14 FakeVehicleHardware
считывает конфигурацию поддерживаемого свойства во время выполнения во время инициализации из папки устройства /vendor/etc/automotive/vhalconfig/
, которая содержит файл конфигурации в стиле JSON. Формат и содержимое файла конфигурации см. в справочном файле VHAL README .
FakeVehicleHardware
также поддерживает переопределение файла конфигурации для тестирования. Если установлено системное свойство persist.vendor.vhal_init_value_override
, оно использует файл конфигурации из папки /vendor/etc/automotive/vhaloverride/
на устройстве для переопределения существующей конфигурации. Реализация поставщика может использовать аналогичный подход, чтобы конфигурация свойств, поддерживаемая VHAL, не была жестко закодирована и могла динамически определяться во время запуска. Конфигурация свойств автомобиля должна быть статической после запуска устройства.