В рамках домашнего технического развлечения занимаюсь проектом устройства позволяющего выводить любое видео или зеркалить телефон на головное устройство машины. Мне не очень нравится идея разбирать приборную панель в не официальных сервисах и ставить на борт AppleTV или Android. Хочется менее инвазивное решение.

Если iPhone или Android можно подключать просто по USB и уже отображать что-то на экран головного устройства машины, то почему нельзя также поступить сделав свое устройство ?

Так домой для отладки было приобретено головное устройство машины с поддержкой CarPlay и Android Auto, Android телефон и несколько разных Single Board решений, с поддержкой HW кодирования и декодирования h264:

И даже получилось вот так

https://www.youtube.com/watch?v=WRit3JYlGH4

На видео к головному устройству машины по USB (Android Open Accessory) подключен Raspberry Pi, он представляется, как Android Auto устройство, а также является WiFi точкой доступа и Apple AirPlay сервером. Телефон подключается к WiFi и транслирует свой экран на Raspberry Pi, который преобразует видео в протокол Android Auto и отображает на головном устройстве машины.

Протоколы CarPlay и AndroidAuto закрыты. Для CarPlay какое-то время назад с одного из китайских автомобильных заводов утекли исходники SDK который предоставляет Apple. Для Android Auto есть Open Source проект, эмулирующий Android Auto сервер, но не клиент. Эмулирующий клиент проект я также находил от нашего коллеги программиста из Польши, но он заточен под одну платформу, не умеет звук, не умеет аппаратное декодирование и кодирование видео, ну и не функционирует на текущий момент. В любом случае Android Auto выглядел немного более исследованным на момент решения с чего начать, хотя и не было ни одного работающего проекта решающего задачу.

Но... статья не совсем о проекте.

Есть часть аспектов Android Auto протокола, которые не описаны в публичных источниках, часть, которые описаны не корректно, часть появившихся новых. Для возможности реализации полноценного решения необходимо анализировать живое взаимодействие Android телефона с живым головным устройством. К счастью нет необходимости пытаться записать взаимодействие прямо по USB. Google предоставляет Desktop Head Unit для отладки Android Auto приложений, позволяет подключить Android Auto телефон по TCP, без USB слоя. Появляется возможность сделать TCP dump.