Мы предоставляем базовую реализацию 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. Формат и содержимое файла конфигурации см. в файле README VHAL .
 FakeVehicleHardware также поддерживает переопределение конфигурационного файла для тестирования. Если задано системное свойство persist.vendor.vhal_init_value_override (это свойство должно быть задано во время сборки или на очень раннем этапе загрузки до инициализации VHAL), то для переопределения существующей конфигурации используется конфигурационный файл из папки /vendor/etc/automotive/vhaloverride/ на устройстве. Реализация поставщика может использовать аналогичный подход, чтобы поддерживаемая VHAL конфигурация свойств не была жёстко задана и могла динамически определяться при запуске. Список конфигураций свойств транспортного средства должен быть статическим после инициализации VHAL.
 Начиная с Android 16, GRPCVehicleHardware предоставляет ещё одну референсную реализацию IVehicleHardware . Эта реализация предполагает наличие отдельного сервера, работающего на удалённом компьютере или виртуальной машине, который содержит логику обработки свойств. VHAL, работающий на устройствах AAOS, действует как прокси-сервер, перенаправляющий запросы на удалённый сервер. Подробнее см. в описании grpc .