Эталонная реализация

Мы предоставляем эталонную реализацию AIDL VHAL. Основной поток службы реализован в VehicleService.cpp . Реализация интерфейса VHAL находится в DefaultVehicleHal.cpp .

Эталонная реализация основана на двухуровневой архитектуре. На верхнем уровне DefaultVehicleHal реализует интерфейс VHAL AIDL и предоставляет логику VHAL, общую для всех аппаратных устройств. На нижнем уровне FakeVehicleHardware реализует интерфейс IVehicleHardware . Этот класс имитирует логику VHAL взаимодействия с реальным оборудованием или шиной автомобиля и зависит от устройства. При желании поставщики могут адаптировать эту же архитектуру, повторно использовать тот же класс DefaultVehicleHal (расширяя его для перезаписи метода) и предоставить свою собственную реализацию IVehicleHardware .

Эталонная реализация VHAL
Рисунок 1. Эталонная реализация VHAL

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, не была жестко закодирована и могла динамически определяться во время запуска. Конфигурация свойств автомобиля должна быть статической после запуска устройства.