Skoda Rapid (1G) (Rapid)

MIB2 STD Technisat/Preh. Вивід навігації Android Auto на MaxiDot.

Я їжджу на Skoda Rapid (1G)
Warsaw, Poland

Спливло півтора тижні, "головокружение от успеха" після вдалої прив'язки б/в MaxiDot почало минати, і раптом з'ясувалося, що він ніяк не дружить з Android Auto. Абсолютно. Меню Telephone починало працювати тільки якщо підключити телефон по BT до MIB, те саме було і з меню Music. Телефон у машині я завжди використовую тільки в режимі Android Auto, тому в моєму випадку обидва ці менюшки залишалися "бесполезными" завжди.


Що я хочу отримати?


У пріоритеті — навігація, опціонально — виведення інформації про трек, що грає. Приклади:

Що робити?

Я одразу почав шукати способи якось "подружити" AA з приборкою, і знайшов дуже цікавий репозиторій — https://github.com/adi961/mib2-android-auto-vc . Цей патч призначений для MIB2 HIGH (Harman) і додає до нього функціонал виведення навігаційних підказок/музики на приладову панель (у випадку автора репо — на VC).



В issues репозиторію виявилася така issue, де описано, що людина спробувала накотити патч на MIB2 STD (як у мене) і в неї нічого не вийшло.


Також, у процесі "розкопок", виявився пост одного з авторів патчу NavIgnore, де він описав свій шлях розробки, який трохи пізніше дуже допоміг мені.


Далі я трохи "копнув" у прошивку (свою 480) і не без допомоги Клода з'ясував, як влаштована зв'язка телефон — приборка, складається вона з трьох частин:

  • Телефон -> ГУ: Android Auto проєктується через бібліотеку libext.google.gal.receiver.so (лежить у /tsd/lib/sal/gal/). Усередині неї — набір "ендпоінтів" на кожен вид проєкції: Bluetooth, Radio, MediaBrowser, MediaPlaybackStatus, Navigation, Phone, Notification.
  • ГП (SAL -> HMI): нативний шар SAL (tsd.mibstd2.sal.main) піднімає GAL-приймач; дані доходять до Java-HMI, HMI "годує" приладку по шині BAP.
  • ГП -> приладка: приладка підписана на підмножину BAP-груп. Аудіо-віджет "now playing" (CurrentStationInfo, група audiosd) приладка малює завжди (якщо ввімкнено кодування "[LN]_audio" у 17 блоці), навігацію (navsd) — тільки якщо юніт фізично підтримує навігацію (Amundsen).

З п.3 виник дуже великий затик — мені ніяк не вдавалося змусити приладку "дружити" з моїм Bolero у частині Navigation. Що я спробував:

  • Увімкнув пункт Navigation/Compass у кодуванні 17 блока (приладка)
  • Увімкнув [LO]_byte_24_Navigation_System у кодуванні блока 5f (радіо).
  • Погрався з compass-related налаштуваннями в 5f.
  • Увімкнув FEC 00040100 (Навігація) у bolero.

Що вийшло? А нічого :) У блоці 17 повисла помилочка "FFFF3E" (Function restriction due to communication interruption), а в 5f — "Control module coded incorrectly" з посиланням на байт 24 (якраз про наві). На приладці при спробі зайти в меню "Navigation" я отримував іноді "Navigation not available", а іноді "Compass not available". Усі свої правки кодувань я відкотив назад і став думати, як можна обійти це обмеження.


Відповідь знайшлася швидко — можна спробувати виводити Naví-підказки в меню Music, яке при підключенні по AA завжди показує одне й те саме — стаб "Android Auto". Після занурення у прошивку, з'ясувалося, з чого складається екран Audio:
Головний віджет — CurrentStationInfo. Його статус несе 4 текстові рядки (max 73 символи): primaryInformation / secondaryInformation / tertiaryInformation / quaternaryInformation. Вирішив швиденько бахнути патч, щоб подивитися, як розташовуються ці поля на екрані:




Окей, тобто тепер можна спробувати зробити патчик CurrentStationInfo, але для навігації. Для цього нам потрібно змінити два моменти:

  • libext.google.gal.receiver.so, щоб він реєстрував media і nav ендпоінти, брав звідти дані і клав їх у два файлики — /dev/shmem/aa_nav і /dev/shmem/aa_media.
  • Новий jar, який за аналогією з NavIgnore буде вантажитися поверх стокових класів, читати ці два RAM-файли і малювати потрібні нам значення на приладці.

На цю справу я теж нацькував Клода і за 10 (20? 30? 40?) ітерацій отримав потрібні файлики.


Як доставляти на пристрій?

Через mib2 toolbox. Впхнув у вкладку Customisation->Navi три нові пункти:

  • Enable AAtoKombi
  • Disable AAtoKombi
  • Dump source files.

По перших двох, думаю, все зрозуміло, третій — дампить MIBHMI.jxe і libext.google.gal.receiver.so з пристрою, після чого їх потрібно прогнати через патчер, покласти результуючі AAtoKombi.jar і libext.google.gal.receiver.so в custom/java і custom/sal відповідно, і прогнати 'Enable AAtoKombi', щоб заінжектити потрібні файлики на пристрій. Enable/Disable скрипти зробив максимально безпечними.

Бонусом зробив відображення треку, що грає, якщо навігація не активна.


Що я отримав у результаті?
За допомогою застосунку на андроїд "GPS Emulator" побудував маршрут по Берліну і поїхав віртуально кататися :)







На відео загалом видно проблеми поточної реалізації (стрілкові артефакти, стрибки тощо), але для PoC, зібраного на колінці за два вечори, я вважаю, що результат непоганий. У кінці відео видно, як відбувається перемикання режимів Naví -> Music.


У недалекому майбутньому планую полірнути поточний код, пофіксити мотлох, і викотити на github. Відкритими питаннями все ще є:

  • IPC (файлики в /dev/shmem)
  • Патч libext.google.gal.receiver.so — більш елегантне рішення?
  • Можливість "вбудовування" патчера безпосередньо в toolbox, оминаючи збірку на комп'ютері.
    і бонус:
  • Як змусити працювати меню Navigation у зв'язці з Bolero??

Якщо в когось знайдуться рішення/ідеї щодо питань вище — welcome у коментарі/лс.


На Amundsen можна зробити виведення в штатне Navigation menu.


Для MIB2 STD Delphi поки рішення нема.  

Реклама
Ремонт та обслуговування системи кондиціювання
Опубліковано: 20 червня 15:08
2 0 0

Коментарі

Щоб залишати коментарі, потрібно авторизуватись.
Я їжджу на Audi S5 (2G), Audi A5 (1G)
Ахуєнно!
22 червня 00:45
Автор Я їжджу на Skoda Rapid (1G)
eBatushka
Ахуєнно!
eBatushka, благодарчик :) далі буде
1
22 червня 13:41