![]() |
Вывод инфы на дисплей приборки VW.
Вложений: 8
Думаю многим было бы интересно выводить какую либо свою информацию на дисплей приборки. На эксперименты потратил кучу времени и решил поделиться информацией, может поможет кому-нибудь сократить путь до достижения желаемого результата.
Как известно есть два вида протокола по которому общаются дисплей приборки и устройства авто между собой, это DDP и BAP. DDP (Display Data Protocol) - устаревший на данный момент протокол. Этот протокол используют красные и некоторые чернобелые дисплеи. BAP (Bedien und Anzeigeprotokoll) - новый протокол. Используют цветные и некоторые чернобелые дисплеи. В моей машине красный дисплей, поэтому буду рассматривать соответственно DDP протокол. Небольшая предистория зачем мне все это понадобилось. Установил в авто китайскую бошку, все бы ничего, но она отказалась понимать управление с руля, вернее громкость управляется, но нет переключения радиостанций и треков. В описании заявлена поддержка, на деле же хрен. Задавал вопросы в официальную тех.поддержку - тишина. Можно было бы сдать обратно в магаз, но на момент установки прошло больше двух недель с момента покупки - раз, интернет магазина, где приобреталась бошка уже нет - это два. Пришлось выкручиваться самому. Был бы 12 кнопочный руль проблем не возникло бы. Но как переключать треки на 8-ми кнопочном руле, если нет кнопок смены треков? Есть только вверх/вниз, которыми управляется бортовой комп. Смотрим, что в этом случае делает штатная голова. При ее включении на дисплее приборки появляется страница "audio", попадая в которую можно переключать треки теми самыми кнопками вверх/вниз и при этом не мешая бортовику. Вот это меня натолкнуло на идею сделать свою страницу "audio" и генерировать коды недостающих кнопок на руле. Путем снифинга кан шины и анализа данных штатной головы получилось создать нужную страницу. Как я и ожидал, управление с руля теперь работает нормально. Далее выяснилось, что китайская бошка всетаки может выводить инфу на приборку, но только по BAP протоколу. Эту инфу тоже удалось отображать. Вообще можно выводить любые нужные данные. DDP представляет из себя набор команд для дисплея, такие как стереть область экрана, вывести текст определенного размера в нужном месте и другие служебные. Чтобы передать эти данные по кан шине используется транспортный протокол TP2.0. В целом процесс выглядит так: запрашиваем соединение передачи данных, производим инициализацию областей экрана, отправляем данные для отображения на дисплей, при выключении авто нужно деактивировать экраные области. Соединений может быть 5 и у каждого соединения используется своя пара ID для передачи данных по кан шине. У VW они распределены по следующим устройствам: 0x680-0x681 Радио (0х680 - радио, 0х681 - дисплей) 0x682-0x683 Нави (0х682 - Нави, 0х683 - дисплей. Остальное аналогично) 0x684-0x685 Телефон 0x686-0x687 Телематика 0x688-0x689 Компас Транспортный протокол TP2.0 (http://www.doc88.com/p-396948011721.html) Нужное нам начинается с 10 страницы. Все описывать не буду, немного поясню, очень много нюансов. Общение с дисплеем начинается с обмена параметрами: 680 06 A0 04 59 FF 32 FF - запрашивает радио 681 06 A1 04 8A FF 32 FF - дисплей отвечает A0 - запрос соединения. Отправляется устройством, который будет что-либо выводить на дисплей. 04 - количество подряд идущих сообщений перед запросом подтверждения. Значения от 1 до 15. 59 - время ожидания следующего сообщения (как считаются временые параметры см на стр 12). В данном случае 25 мсек. 32 - минимальное время между отправками сообщений этому устройству. В данном случае 5 мсек. FF - не используется и всегда должно быть FF A1 - подтвердить соединение. Ответ дисплея. 04 - количество подряд идущих сообщений перед запросом подтверждения. 8A - время ожидания следующего сообщения 100 мсек. 32 - минимальное время между отправками сообщений дисплею 5 мсек. FF - не используется и всегда должно быть FF A3 - тест соединения. Отправляется раз в секунду. В ответ придет A1 04 8A FF 32 FF. Если дисплей не поймает сообщение в период 1050 мсек, то он сам станет слать A3, если не отвечать A1, то после 5 попыток разорвет соединение сообщением A8. A4 - прервать передачу данных A8 - отсоединиться, в ответ придет A8 Сообщения с данными начинаются с контрольного байта: 0n - требуется подтверждение о получении данных, будет продолжение отправки, n - порядковый номер 1n - требуется подтверждение о получении данных, не будет продолжения отправки 2n - не требуется подтверждение о получении данных, будет продолжение отправки 3n - не требуется подтверждение о получении данных, не будет продолжения отправки Bn - подтверждение, n - порядковый номер + 1 9n - неготовность к приему новых данных, n - порядковый номер в зависимости от ситуации (стр 18, 19) пример, контрольный байт в столбце: Код:
680 08 |27| 00 61 0A 00 00 03 00 - Радио шлет данные дисплею, по 4 сообщения Протокол DDP. Документации в инете нет, так что возможно неточное или полное непонимание тех или иных данных. Надеюсь совместными усилиями разберемся. В авто у меня стоит полноразмерный дисплей highline (MFD+). Размер экрана 110х166 точек. Для вывода инфы доступны 3 экранные области. 1. В списке SETTINGS, когда заходим в настройки и выбираем свой пункт в меню, доступна вся область 110х166 точек. 2. В рабочем режиме, когда кнопкой меню прокручиваем страницы, доступна центральная часть экрана. Размер 110х91 точек. 3. В рабочем режиме, спустя 10 сек после переключения страниц в верхней части экрана (когда пропадает заголовок). Размер 45х20 точек. 1->Вложение 43489Вложение 43486 2->Вложение 43487 3->Вложение 43488 Какие области экрана будут доступны указываем при инициализации. Организация экранных меню может отличаться от того, что в моем авто. У меня нет главного MENU, в котором есть пункты SETUP, MFD, AUDIO, так что могут быть серьезные отличия. Инициализация: Инициализация начинается со строки 00 xx 00 FF где xx идентификатор устройства. Есть следующие варианты: Радио - 52, Нави - 4D, Телефон - 5A, Телематика - 55, Компас - 40 в ответ придет 3 сообщения: 20 01 11 00 11 00 11 00 11 00 0A 00 0D 00 11 00 Что здесь передается непонятно, может версию дисплея, короче если сообщение такое, то можно продолжать. Далее необходимо указать дисплею какие области будут использоваться, путем отправки сообщений: 01 07 - область в меню настроек SETTINGS. Ответом будет сообщение с размерами 110х166 точек - 21 00 3F 00 6E 00 A6 01 12 - центральная область экрана. Ответ с размерами 110х91 точек - 21 00 04 00 6E 00 5B 01 23 - область в верхней части экрана. Ответ с размерами 45х20 точек - 21 00 03 00 2D 00 14 Далее идет привязка областей экрана к идентификатору устройства (как это правильно назвать незнаю) и присваивание названия к строке меню в списке SETTINGS и названия страницы по аналогии со страницей audio. Отправляем такие сообщения: 02 70 xx 07 ss ss ss ss ss ss ss ss ss ss - xx - идентификатор устройства, 07 - область экрана в SETTINGS, ss - название строки меню в ASCII кодировке. Какая максимальная длина не проверял. 02 70 xx 12 ss ss ss ss ss ss ss ss ss ss - xx - идентификатор устройства, 12 - центральная область экрана, ss - название заголовка страницы в ASCII кодировке. 02 80 xx 23 - xx - идентификатор устройства, 23 - область вверху экрана. Здесь названия нет. После каждого сообщения ответ будет: 23 xx 00 00 - xx - индефикатор экранной области. Что означает само сообщение написано ниже. Идентификаторы экранных областей будут разные у каждого из 5 соединений, по 3: 00, 01, 02 у Радио 10, 11, 12 у Нави 08, 09, 0A у Телефона 18, 19, 1A у Телематики 20, 21, 22 у Компаса Динамическая смена названия пункта в меню или заголовка страницы: 0F xx tt tt tt tt tt tt - xx - идентификатор области экрана, tt - новое название. Возможно она ограничена 12 символами, надо проверять. В ответ придет сообщение 27 xx 01, о котором написано ниже. Незабываем, что сообщения завернуты в транспортный протокол. Пример инициализации радио: Код:
680 06 A0 04 59 FF 32 FF радио делает запрос на соединение Итак, все готово чтобы начать выводить информацию на экран. Вывод можно производить только тогда, когда дисплей разрешит это сделать. Например в случае с радио, мы листаем страницы на дисплее и попадаем на страницу с названием AUDIO. Дисплей посылает две комманды: 2A xx - область экрана доступна, незнаю точно для чего служит эта команда, если есть вторая. Посылаются они одна за другой. xx - идентификатор области экрана. 23 xx 01 00 - область экрана доступна, отрисовка разрешена. После этой команды можно выводить свои данные. Пока область доступна, можно выводить несколько раз подряд или не выводить ничего. xx - идентификатор области экрана. Есть нюанс с областью вверху экрана, она разрешается только одной этой командой. Когда в SETTINGS заходим в свое меню, как уже говорил, становится доступна вся область экрана, придется самим рисовать все элементы меню, включая заголовки. Когда мы будем переключать страницы дальше и уйдем со страницы AUDIO, или откроем дверь и на экране появится автомобиль, или в каких-то других случаях, дисплей отправит команду, что экранная область больше не доступна: 23 xx 00 00 - область экрана недоступна, отрисовка запрещена. xx - идентификатор области экрана. Тут крылась засада, никак не мог понять, почему иногда просто отваливалась отрисовка и дисплей больше не хотел выводить мои данные. Не сразу-то и поймешь, что происходит и куда смотреть. Дело оказалось в том, что бывают ситуации, когда данные дисплею полностью еще не передались, а он сообщает, что область экрана стала недоступна. Я прекращал передачу и при следующем разрешении на вывод выводил все сначала. Это неправильно. Нужно спокойно выводить все данные до конца. В конце отправки дисплей опять скажет, что область недоступна. И все, никакого сбоя не будет. После получения разрешения на отрисовку можно начинать передачу. Чтобы дисплей понял где начало и конец данных есть две команды: 09 xx - начало массива данных. xx - идентификатор области экрана 08 - конец массива данных После приема и отображения на экране дисплей ответит об успешности отрисовки: 27 xx 01 - отрисовка завершена. xx- идентификатор области экрана. Если данные были отправлены на отрисовку, то только после этой команды можно отправлять новые данные. Бывают ситуации когда, данные отправлены полностью, но отрисовка не произошла, так как экранная область стала недоступна. В этом случае вместо подтверждения отрисовки будет сообщение 23 xx 00 00. Это нормально. Текст и графика: Команда работы с прямоугольниками. Можно стирать, закрашивать прямоугольные области, рисовать горизонтальные и вертикальтные линии, точки. Комбинируя несколько команд можно рисовать рамки. С помощью точек рисовать изображения, главное чтобы дисплей не опух от потока данных). 60 ll aa xx 00 yy 00 ww 00 hh 00 где: 60 - команда ll - длина данных в команде после этого байта, всегда 09 aa - атрибут: 0 или 1-стереть, 2 - рисовать, 3-рисовать курсор. Курсор рисуется всегда одинаково, в независимости от ширины и высоты прямоугольника. 00 - разделители xx - координата X, в пикселах. 0 верхний левый угол экранной области в которую производится отрисовка. yy - координата Y ww - ширина hh - высота Чтобы не возникло ошибки, координаты X и Y, должны находиться в пределах области экрана, ширина и высота могут уходить за пределы. Команда работы с текстом. Рисует текст в кодировке ASCII. В красных дисплеях нет русских символов, тем у кого чернобелая придется искать самим. 61 ll aa ii xx 00 yy 00 tt .... tt где: 61 - команда ll - длина данных в команде после этого байта, с учетом количества символов текста aa - атрибут шрифта: (младший полубайт) x0 - нормальный, x1 - жирный 1, x2 - жирный 2, x3 - китайский, x4 - мелкий, x5 - графические символы, (старший полубайт) 0x - выравнивание по левому краю, 1х - выравнить по центру от координаты X ii - атрибут инверсии: 0 - нормальный, 2- инверсный xx - координата X, в пикселах. 0 верхний левый угол экранной области в которую производится отрисовка. yy - координата Y tt - текст 00 - разделители Чтобы не возникло ошибки, координаты X и Y, должны находиться в пределах области экрана, текст может уходить за пределы. Вся графика, которую RNS510 выводит на приборку в режиме навигации отображается графическими символами знакогенератора дисплея. Вложение 43484 Вложение 43485 пример вывода: Вложение 43495 Вложение 43496 Код:
681 03 1B 2A 00 переключились на страницу AUDIO 0C xx - показать область экрана. Запрос на отображение без нажатия кнопок на руле. Работает только с центральной областью экрана. При попытке показать другие области произойдет ошибка. xx - идентификатор области экрана. В ответ получим два сообщения 23 xx 00 00, 23 xx 01 00. После второго сообщения можно отправлять данные для отображения. 0A xx - скрыть область экрана, xx - идентификатор области экрана. Когда нужно выйти из своего собственного меню на странице SETTINGS необходимо отправить эту команду. Если не отправлять ее и не нажимать кнопки, то дисплей сам выйдет через несколько секунд. Так же этой командой скрываются верхняя и центральная области экрана. 05 xx - деактивировать область экрана. Чтобы стала доступна снова, нужно инициализировать по новой. Не уверен в правильности понимания, но такая команда пролетает когда например радио выключается. После команд 0A и 05 придет ответ: 25 xx - экран деактивирован или что-то вроде того, xx - идентификатор области экрана 2B FF xx - критическая ошибка. xx - какие-то коды ошибок видимо. Не выясненная команда, как на нее реагировать пока не ясно. Также необходимо раз в секунду отправлять сообщения: Код:
661 08 00 00 00 00 00 00 00 00 - для радио |
Это очень крутая и полезная инфа!
Спасибо! |
офигенно!
|
Очень интересно! У меня Ауди с красным монохромным дисплеем. Я правильно понимаю, что будет примерно всё то же самое?
|
Скорее всего там что-то подобное. Есть же Фис контрол для Ауди, значит есть возможность выводить свою информацию на экране.
|
Непонятно как качать с dot88.com, за деньги только наверное или просто региться надо. Делал printscreen, кому надо качайте https://cloud.mail.ru/public/2Xvv/ST9eLory2
|
Обновил первый пост. Есть возможность без нажатия кнопок руля выводить инфу на экране.
|
Добрый день, можно уточнить - в момент когда на MFA находится меню Audio, то кнопки вверх-вних выдают ДРУГОЙ CAN код, чем когда в других меню, верно?
(у меня тоже 8-кнопочный руль на одной машине) |
Нет. Рулевые кнопки не меняют свой код. У меня работает так: когда находимся в меню Audio ловим код нужной кнопки и сразу отправляем код нужной кнопки от 12 кнопочного руля. В итоге в кан шине появляется 2 команды подряд, но моя китайская магнитола не понимает кнопки вверх вниз от руля, поэтому первый код игнорируется магнитолой, но она срабатывает на второй код.
|
Круто! А про BAP протокол что то удалось нарыть ?
|
Часовой пояс GMT +4, время: 11:27. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot