Відкриваємо ящик Пандори
Колись в клубі ваговодів-аудістів трапилось фото, на якому хтось спробував підключити рестовий тач-дисплей на дорест мультимедію. Виглядало це приблизно ось так:
Згодом дізнався про існування китайської коробочки (по ціні в $380), яка конвертує сигнал з дореста і виводить збільшену картинку для реста:
Стало цікаво розібратись, як ця магія влаштована. Щоб не ковиряти свій автомобіль - зібрав bench setup, тобто MMI на столі. З розбірки приїхав дисплей і mib2h юніт. Пізніше - відрізок quadlock конектора та обрізки LVDS кабелів, щоб все підключити більш-менш цивільно. Спойлер: ще пізніше замовив цілу косу передньої панелі. Бо економити на проводах - це як економити на гальмах.
Розпіновка LVDS кабеля на схемі вище непроста, не вийде запаяти обрізки по кольору один до одного, та й повертати роз'єм на 90 град не допоможе.
Для розуміння правильної пайки малякаємо підказку:


Bench setup, тиждень тиші
З просторів тирнетів дізнався, що для запуску систем по CAN-шині потрібні дані віртуальної шини запалення - Terminal 15.

Не проблема: берем мікроконтролер, приліпляємо фізичний CAN-модуль, програмуємо, граємо з CRC, програємо, ще раз граємо - і ось уже по шині літають потрібні фрейми кожні 100 мс.
Підключився до UART MMX, щоб бачити, що відбувається. По логах система стартувала, але чогось їй не вистачало - і вона просто йшла в сон. Тиждень безуспішних страждань. Вирішив все ж докупити блок керування.
Коса передньої панелі вже була придбана, тому блок підключився запросто по рідних конекторах. І о диво - панель стартанула одразу.

Бо ВАГ передбачили: якщо чогось бракує - воно не запуститься, як би ти не старався. Особливо, якщо ти старався.
1024 на 480, і ні пікселем більше
Тепер - як взагалі працює вивід на дисплей і що там можна змінити.
MIB2 побудований на Snapdragon 602A з графічним ядром Adreno 320. Він рендерить інтерфейс і через вбудований display-контролер подає сигнал на фізичні виходи. Виходів два: один на головний дисплей через серіалайзер DS90UH929Q, другий на приладову панель через DS90UH927Q. Обидва просто перетворюють сигнал у FPD-Link III для передачі по кабелю - обробку зображення вони не роблять.
Тут починається весело. Є два абсолютно різних поняття, які легко переплутати.
Перше - розмір framebuffer'а. Його можна крутити через конфіги і через власноруч створений dm_force_res.
Друге - фізичний timing сигналу, який контролер видає на виходах. А ось це жорстко прописано в qcdisplaycfg.xml: частота пікселів, синхроімпульси, паузи. Саме цей файл визначає, що на виході завжди буде 1024x480.
Проблема в тому, що файл лежить у read-only розділі, який завантажується разом з ядром QNX ще до того, як стають доступні writable розділи. Тобто фізично змінити його без перепакування boot-образу неможливо.
Тому коли до виходу MIB2 підключається панель 1540x720, вона отримує сигнал з таймінгами 1024x480. Але є додатковий нюанс: у доресті в LVDS кабелі живий лише один канал, другий не використовується. У ресті - живі обидва.

Тому панель намагається малювати сигнал не туди, не так і не з тими тимінгами - і отримує подвоєне зображення з пропуском рядків. Для підтвердження теорії розкрив рестовий дисплей: всередині DS90UH948Q, двоканальний FPD-Link III. Все сходиться.

Єдине живе рішення - поставити між MIB2 і панеллю окремий апаратний скалер з десеріалайзером і серіалайзером. Ланцюжок: DS90UH928 -> TW8844 -> DS90UH947. Приймаємо сигнал з MIB2 як є, масштабуємо до потрібної роздільної здатності, і вже коректний сигнал подаємо на панель. HDCP формально присутній, але дуже ймовірно деактивований - бо це VAG, і слова «секʼюріті» та «MIB2» в одному реченні зустрічаються рідко.
Знайти ці мікросхеми в Китаї - не проблема. Єдине завдання - розвести плату. Місяць безперервної роботи по вечорах. Чи воно мені треба? Не знаю. Але ідея гарна - і це найгірше, що з нею можна зробити.
Тачскірн: теоретична теорія і вологі мрії
Виявилось, що рестовий дисплей відправляє CAN-пакети про взаємодію з тачскрином. То, можливо, можна прокинути ці дані прямо в MIB2?
Архітектура така. У MIB2 уже є dio_manager, який конвертує локальні touch-події з блоку керування в iAP2 HID reports і AA Input messages. Тобто стек local touch -> CarPlay/AA вже існує і працює. Якщо вкинути подію на рівні local touch input - і CarPlay, і Android Auto автоматично проб'ють її в активну сесію без жодних модифікацій протоколу. Безкоштовно. Майже.
Нюанс простий і красивий: CAN читає IOC - окремий мікроконтролер MIB2, який займається power management, шинами і клемами. А інжектити touch треба на MMX - головному application-процесорі. Тобто ліва рука читає те, чого права не бачить. Класична німецька архітектура: усе на місці, просто не з'єднано.
Тому ця глава - теоретична. Поки що.
Чи варто продовжувати дослідження і зайнятись виготовленням плати - питання відкрите.
ЗІ: без шуткав - рівень збочення вражає. Я правильно розумію, що в доресті можуть існувати одночасно тач і "аналогове" керування?
Нічого не зрозумів- але дуже цікаво. Краса й годі)