Спливло півтора тижні, "головокружение от успеха" після вдалої прив'язки б/в 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) і не без допомоги Клода з'ясував, як влаштована зв'язка телефон — приборка, складається вона з трьох частин:
З п.3 виник дуже великий затик — мені ніяк не вдавалося змусити приладку "дружити" з моїм Bolero у частині Navigation. Що я спробував:
Що вийшло? А нічого :) У блоці 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, але для навігації. Для цього нам потрібно змінити два моменти:
На цю справу я теж нацькував Клода і за 10 (20? 30? 40?) ітерацій отримав потрібні файлики.
Як доставляти на пристрій?
Через mib2 toolbox. Впхнув у вкладку Customisation->Navi три нові пункти:
По перших двох, думаю, все зрозуміло, третій — дампить 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. Відкритими питаннями все ще є:
Якщо в когось знайдуться рішення/ідеї щодо питань вище — welcome у коментарі/лс.
На Amundsen можна зробити виведення в штатне Navigation menu.
Для MIB2 STD Delphi поки рішення нема.
1