14.04.2016, 03:26 | #1 |
Пользователь
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
|
Вывод инфы на дисплей приборки VW.
Думаю многим было бы интересно выводить какую либо свою информацию на дисплей приборки. На эксперименты потратил кучу времени и решил поделиться информацией, может поможет кому-нибудь сократить путь до достижения желаемого результата.
Как известно есть два вида протокола по которому общаются дисплей приборки и устройства авто между собой, это 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 сообщения 680 08 |28| 47 00 46 4D 02 31 61 с интервалом не менее 5 и не более 100 мсек 680 08 |29| 07 08 00 6D 00 47 00 680 08 |0A| 20 61 07 02 00 03 00 - будет продолжение отправки, требуется подтверждение приема 681 01 |BB| - дисплей подтверждает прием данных, и указывает порядковый номер с какого продолжать отправку 680 08 |2B| 00 00 20 61 07 08 00 - радио продолжает отправлять 680 08 |2C| 6D 00 00 00 20 61 0F 680 08 |2D| 00 00 03 00 12 00 31 680 08 |0E| 30 33 2E 35 20 4D 48 681 01 |BF| 680 08 |2F| 7A 61 0A 00 00 03 00 680 08 |20| 24 00 41 42 54 4F 61 680 08 |21| 0F 00 00 03 00 36 00 680 08 |02| 31 30 32 2E 36 20 4D - будет продолжение отправки, требуется подтверждение приема 681 01 |B3| - дисплей подтверждает прием данных 680 04 |13| 48 7A 08 - последнее сообщение, больше отправки не будет, требуется подтверждение приема 681 01 |B4| - дисплей подтверждает прием данных Протокол DDP. Документации в инете нет, так что возможно неточное или полное непонимание тех или иных данных. Надеюсь совместными усилиями разберемся. В авто у меня стоит полноразмерный дисплей highline (MFD+). Размер экрана 110х166 точек. Для вывода инфы доступны 3 экранные области. 1. В списке SETTINGS, когда заходим в настройки и выбираем свой пункт в меню, доступна вся область 110х166 точек. 2. В рабочем режиме, когда кнопкой меню прокручиваем страницы, доступна центральная часть экрана. Размер 110х91 точек. 3. В рабочем режиме, спустя 10 сек после переключения страниц в верхней части экрана (когда пропадает заголовок). Размер 45х20 точек. 1-> 2-> 3-> Какие области экрана будут доступны указываем при инициализации. Организация экранных меню может отличаться от того, что в моем авто. У меня нет главного 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 радио делает запрос на соединение 681 06 A1 04 8A FF 32 FF дисплей отвечает 680 05 10 00 52 00 FF радио начинает инициализацию сообщая свой иденификатор - 52. Счетчик начинается с 0 681 01 B1 подтверждение - данные получены 681 08 20 20 01 11 00 11 00 11 дисплей отвечает своими какими-то параметрами. Свой счетчик начинает с 0 681 08 21 00 11 00 0A 00 0D 00 681 03 12 11 00 680 01 B3 радио подтвердило прием 680 03 11 01 12 радио запрашивает центральную область экрана 681 01 B2 подтверждение - данные получены 681 08 13 21 00 04 00 6E 00 5B дисплей отвечает параметрами экранной области 110x91 680 01 B4 подтверждение - данные получены 680 08 22 02 70 52 12 41 75 64 радио привязывает область к своему идентификатору и задает название страницы "Aud" 680 03 13 69 6F "io" продолжает отправлять название 681 01 B4 подтверждение - данные получены 681 05 14 23 00 00 00 23 xx 00 00 - xx = 00 идентификатор области центральной части экрана. О команде чуть ниже. 680 01 B5 подтверждение - данные получены Итак, все готово чтобы начать выводить информацию на экран. Вывод можно производить только тогда, когда дисплей разрешит это сделать. Например в случае с радио, мы листаем страницы на дисплее и попадаем на страницу с названием 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 выводит на приборку в режиме навигации отображается графическими символами знакогенератора дисплея. пример вывода: Код:
681 03 1B 2A 00 переключились на страницу AUDIO 680 01 BC подтвердили прием 681 05 1C 23 00 01 00 дисплей говорит, что экранная область 00 доступна для отрисовки 680 01 BD подтвердили прием 680 08 2F 09 00 60 09 00 00 00 начинаем слать данные (команда 09) для экранной области 00 680 08 20 00 00 6E 00 5B 00 61 в этих сообщениях стираем всю область и пишем текст ABTO в центре и в нижнем левом углу FM1 680 08 21 0A 10 00 37 00 1E 00 680 08 02 41 42 54 4F 61 0A 00 681 01 B3 дисплей подтвердил прием 680 08 23 00 03 00 47 00 46 4D продолжаем слать 680 04 14 02 31 08 закончили пересылку, (команда 08) 681 01 B5 дисплей подтвердил прием 681 04 1D 27 00 01 дисплей отрисовал на экране 680 01 BE подтвердили прием через какое-то время отсылаем еще 680 08 25 09 00 60 09 00 00 00 отправляем новые данные для экранной области 00 680 08 26 13 00 6E 00 36 00 60 в этикх сообщениях стираем уже не весь экран, а часть и выводим список станций с курсором 680 08 27 09 03 00 00 23 00 6E 680 08 08 00 14 00 61 0F 00 00 103.9 MHz 681 01 B9 ------------ 680 08 29 03 00 12 00 31 30 33 103.5 MHz < 680 08 2A 2E 39 20 4D 48 7A 61 ------------ 680 08 2B 0F 00 00 03 00 24 00 ABTO 680 08 0C 31 30 33 2E 35 20 4D 681 01 BD дисплей подтвердил прием 680 08 2D 48 7A 61 0A 00 00 03 продолжаем слать 680 08 2E 00 36 00 41 42 54 4F 680 02 1F 08 закончили пересылку, (команда 08) 681 01 B0 дисплей подтвердил прием 681 04 1E 27 00 01 дисплей отрисовал на экране 680 01 BF подтвердили прием 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 - для радио 5A7 08 00 00 00 00 00 00 00 00 - для телематики 665 07 00 00 00 00 00 00 00 - для телефона ??? - компас и нави Последний раз редактировалось xmetal; 30.08.2016 в 16:37. Причина: Дополнение информации. |
14.04.2016, 11:10 | #2 |
Старший Пользователь
Регистрация: 12.01.2014
Возраст: 41
Город: Москва
Регион: 77, 97, 99, 177
Машина: Skoda Superb II
Сообщений: 473
|
Это очень крутая и полезная инфа!
Спасибо!
__________________
Skoda SamSony (закрыт) Skoda Superb 2012 Nexus 7 (Завершен ввиду смерти планшета) |
19.04.2016, 13:22 | #4 |
Старший Пользователь
Регистрация: 13.09.2015
Регион: Беларусь
Машина: OOOO
Сообщений: 285
|
Очень интересно! У меня Ауди с красным монохромным дисплеем. Я правильно понимаю, что будет примерно всё то же самое?
|
19.04.2016, 22:00 | #5 |
Пользователь
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
|
Скорее всего там что-то подобное. Есть же Фис контрол для Ауди, значит есть возможность выводить свою информацию на экране.
|
09.08.2016, 18:28 | #6 |
Пользователь
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
|
Непонятно как качать с dot88.com, за деньги только наверное или просто региться надо. Делал printscreen, кому надо качайте https://cloud.mail.ru/public/2Xvv/ST9eLory2
|
30.08.2016, 16:59 | #7 |
Пользователь
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
|
Обновил первый пост. Есть возможность без нажатия кнопок руля выводить инфу на экране.
|
08.11.2016, 13:24 | #8 |
Новый Пользователь
Регистрация: 08.11.2016
Город: Москва
Регион: 77, 97, 99, 177
Машина: VW Passat B6
Сообщений: 2
|
Добрый день, можно уточнить - в момент когда на MFA находится меню Audio, то кнопки вверх-вних выдают ДРУГОЙ CAN код, чем когда в других меню, верно?
(у меня тоже 8-кнопочный руль на одной машине) |
09.11.2016, 22:36 | #9 |
Пользователь
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
|
Нет. Рулевые кнопки не меняют свой код. У меня работает так: когда находимся в меню Audio ловим код нужной кнопки и сразу отправляем код нужной кнопки от 12 кнопочного руля. В итоге в кан шине появляется 2 команды подряд, но моя китайская магнитола не понимает кнопки вверх вниз от руля, поэтому первый код игнорируется магнитолой, но она срабатывает на второй код.
|
13.02.2017, 16:49 | #10 |
Пользователь
Регистрация: 02.07.2012
Регион: 59
Сообщений: 64
|
Круто! А про BAP протокол что то удалось нарыть ?
|
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|