PDA

Просмотр полной версии : Вывод инфы на дисплей приборки VW.


xmetal
14.04.2016, 03:26
Думаю многим было бы интересно выводить какую либо свою информацию на дисплей приборки. На эксперименты потратил кучу времени и решил поделиться информацией, может поможет кому-нибудь сократить путь до достижения желаемого результата.

Как известно есть два вида протокола по которому общаются дисплей приборки и устройства авто между собой, это 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->4348943486 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 радио делает запрос на соединение
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 выводит на приборку в режиме навигации отображается графическими символами знакогенератора дисплея.
43484 43485

пример вывода:
43495 43496
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 - для телефона
??? - компас и нави

cherkasoff
14.04.2016, 11:10
Это очень крутая и полезная инфа!
Спасибо!

(vS)
14.04.2016, 15:12
офигенно!

JamesDoe
19.04.2016, 13:22
Очень интересно! У меня Ауди с красным монохромным дисплеем. Я правильно понимаю, что будет примерно всё то же самое?

xmetal
19.04.2016, 22:00
Скорее всего там что-то подобное. Есть же Фис контрол для Ауди, значит есть возможность выводить свою информацию на экране.

xmetal
09.08.2016, 18:28
Непонятно как качать с dot88.com, за деньги только наверное или просто региться надо. Делал printscreen, кому надо качайте https://cloud.mail.ru/public/2Xvv/ST9eLory2

xmetal
30.08.2016, 16:59
Обновил первый пост. Есть возможность без нажатия кнопок руля выводить инфу на экране.

Alex57
08.11.2016, 13:24
Добрый день, можно уточнить - в момент когда на MFA находится меню Audio, то кнопки вверх-вних выдают ДРУГОЙ CAN код, чем когда в других меню, верно?

(у меня тоже 8-кнопочный руль на одной машине)

xmetal
09.11.2016, 22:36
Нет. Рулевые кнопки не меняют свой код. У меня работает так: когда находимся в меню Audio ловим код нужной кнопки и сразу отправляем код нужной кнопки от 12 кнопочного руля. В итоге в кан шине появляется 2 команды подряд, но моя китайская магнитола не понимает кнопки вверх вниз от руля, поэтому первый код игнорируется магнитолой, но она срабатывает на второй код.

ghans
13.02.2017, 16:49
Круто! А про BAP протокол что то удалось нарыть ?

xmetal
14.02.2017, 16:09
Круто! А про BAP протокол что то удалось нарыть ?
Не много. Мне тестировать неначем. У меня в автомобиле по этому протоколу сыпет данные только парктроник, но там все просто, я вообще удивиляюсь зачем они это сделали. В более свежих авто по BAP протоколу передается инфа парков, климата, блютус, магнитолы, приборки, наверняка еще что-нибудь.

Когда игрался с китайской магнитолой пришлось тупо брутфорсить, чтобы она смогла показывать климат на своем экране. Вроде все команды нашел. Хотел конвертировать данные простого климата в BAP. Забил, так как мой гейтвей пропускает не все данные климата в шину инфотеймент или я плохо искал.

По отображению на приборке - как отправлять данные на цветные приборки я не знаю, нужно сниферить, экспериментировать, разбираться. Не видел никого, кто бы этим занимался. У меня старая приборка, поэтому больше вопросов, чем ответов.

С какой целью интересуешься, копаешь BAP протокол?

ghans
14.02.2017, 17:47
Пока еще только собираюсь. Купил ардуинку с can шилдом.
У меня цветная приборка, есть мечта вывести туда сообщения радар - детектора.
Вторая мечта - перехватывать сообщения климата.
Подцепил к кан - комфорт. Пока еще читаю соседнюю тему...

ghans
14.02.2017, 17:51
Каким софтом лучше пользовался для снифа/анализа?
Еще в хозяйстве есть VAS 5054A и Вася диагност.

xmetal
15.02.2017, 01:26
Можно эти попробовать
http://pccar.ru/showpost.php?p=340652&postcount=58
http://pccar.ru/showpost.php?p=365579&postcount=150
Я ими не пользовался, писал свою программку, которая просто сохраняет все в текстовый файл.
Данные из кан получается принимать?

ghans
15.02.2017, 16:18
Не знаю ещё. Все вывел и уехал в отпуск ))) Через две недели попробую. Пока читаю.

xmetal
15.02.2017, 18:55
А что за автомобиль и в каком месте подключился к комфорту?
Отпуск это хорошо)

ghans
16.02.2017, 00:23
Touareg NF. Там прямо под магнитолой - климат. На нем есть. Тьфу наврал. К CAN информированию.
CAN комфорт там тоже есть, но СAN информирования выглядит заманчивее.

ghans
14.05.2017, 23:05
Получил первые результаты.

У туарега с 2010 по 2015 есть конструктивная недоработка. Управление обогревом руля и ветрового стекла осуществляется только с магнитолы. Удалось эмулировать нажатие кнопок на экране через перехват кан шины.

http://www.youtube.com/watch?v=O_1Sbk6jND4

sorex
12.06.2017, 18:01
xmetal добрый день ! очень интресная тема по выводу инфы на дисплей, сейчас занимаюсь шиной на туареге GP рестайлинг, есть наработки по кнопкам замкам и прочему оборудованию кроме приборной панели, очень хотелось бы выводить туда информацию но панель большая цветная. Для этих дел прикупил магнитолу штатную Delta она умеет выводить страницу Audio, хотел узнать у вас есть наработки по готовому коду для вашего дисплея ? просто пытаюсь сканировать 680 681 id очень много информации по ним идет

xmetal
14.06.2017, 12:18
Добрый! Вам надо с ghans объединить усилия, у него тоже Туарег. Цветная приборка, да еще в рестайле сто процентов работает по BAP протоколу, тесты с Дельтой должны это подтвердить. Снимите логи работы Дельты с приборкой с момента включения, потом можно попытаться сэмулировать Дельту. Если получится, следующим шагом менять данные в посылках, смотреть на что это влияет.

ghans
22.06.2017, 21:52
О! Привет. Я готов. Немножко забросил проект, куча других дел, но буду заниматься дальше однозначно.