Что ты собираешься делать с ним в первую очередь?

Что ты собираешься делать с ним в первую очередь?

Цель этой статьи — рассказать о моём опыте модификации автомобиля и экспериментах с шиной CAN.

Содержание
  1. С чего всё началось
  2. Программный сниффер VCDS
  3. What are you gonna do to it first?
  4. Heart shaped ass in need of some spanking
  5. What would you like to do to it first?
  6. Clean canvas for your to unload on
  7. Anyone in need for a giant heart shaped ass?
  8. I need to borrow your mouth for an hour or two
  9. Can I be your breakfast every morning?
  10. Soaped up just so you can get me dirty again
  11. Wanna join me in the shower?
  12. Soaped up and ready for you to get me dirty again [F]
  13. Hope my ass helps to make your Monday a little better
  14. Fresh out the shower but still have a dirty mind
  15. Wanna fill up my holes?
  16. What would you like to do to them?
  17. Fresh out the shower but still have a filthy mind
  18. I hope they are big enough for you
  19. Fuck me right here on the stairs!
  20. Tight pussy needs filling
  21. Please fuck me right here on the stairs!
  22. My ass likes to eat underwear whenever it gets the chance! [F]
  23. Plenty to go around
  24. Hope this helps make your Sunday that much better!
  25. All the ass you’ll ever need
  26. Help me soap them up?
  27. Режимы работы
  28. Разблокировка
  29. Прошивки
  30. Восстановление работоспособности
  31. Как это работает
  32. Как это работает на самом деле
  33. Использование под FreeBSD
  34. Тесты
  35. Мобильное приложение VAG Virtual Cockpit
  36. В будущем
  37. Протокол UDS
  38. Интеграция
  39. Диагностический адаптер ELM327
  40. VW Transport Protocol 2
  41. Функциональность
  42. Шина CAN
  43. Всё вместе
  44. Узнайте больше о Huawei

С чего всё началось

Сначала я решил добавить фронтальную камеру в свой 2017 Chevrolet Cruze. Поскольку у автомобиля уже есть заводская камера заднего вида, то на высоком уровне нужно было выяснить две вещи:

  • Способ передачи видео с фронтальной камеры, которую я добавлю.
  • Способ отображения на экране картинки с камеры заднего вида в любое время.

Видеочасть была простой. Из предыдущего опыта я знал, что можно сделать видеомикшер на реле.

Запуск на экране оказался более сложным, и после некоторого расследования я пришёл к выводу, что машина должна подавать сигнал от камеры заднего вида на экран через какую-то шину данных.

Что ты собираешься делать с ним в первую очередь?

Мобильное приложение VAG Virtual Cockpit

Я продолжаю изучать CAN шину авто. В предыдущих статьях я голосом открывал окна в машине и собирал виртуальную панель приборов на RPi. Теперь я разрабатываю мобильное приложение VAG Virtual Cockpit, которое должно полностью заменить приборную панель любой модели VW/Audi/Skoda/Seat. Работает оно так: телефон подключается к ELM327 адаптеру по Wi-Fi или Bluetooth и отправляет диагностические запросы в CAN шину, в ответ получает информацию о датчиках.

По ходу разработки мобильного приложения пришлось узнать, что разные электронные блоки управления (двигателя, трансмиссии, приборной панели и др.) подключенные к CAN шине могут использовать разные протоколы для диагностики, а именно UDS и KWP2000 в обертке из VW Transport Protocol 2.0.

Программный сниффер VCDS

Что ты собираешься делать с ним в первую очередь?

Программный сниффер VCDS: CAN-Sniffer

Чтобы узнать по какому протоколу общаются электронные блоки я использовал специальную версию VCDS с программным сниффером в комплекте. В этот раз никаких железных снифферов на Arduino или RPi не пришлось изобретать. С помощью CAN-Sniffer можно подсмотреть общение между VCDS и автомобилем, чтобы затем телефон мог прикинуться диагностической утилитой и отправлять те же самые запросы.

Я собрал некоторую статистику по использованию диагностических протоколов на разных моделях автомобилей:

  • VW/Skoda/Seat (2006-2012) – приборная панель UDS. Двигатель и трансмиссия VW TP 2.0
  • Audi (2006-2012) – приборная панель VW TP 2.0. Двигатель UDS. Трансмиссия VW TP 2.0
  • VW/Skoda/Seat/Audi (2012-2021) – везде UDS

Попался мне E3272 в варианте от билайна. Прошит в HiLink с противной билайновской вебмордой, которая ничего не умеет и не дает настроить, и портов нет, модем залочен на билайн. Изначально это выглядело “не очень” – довольно огорожено от пользователя. Почитав немного этот форум я все же смог разблокировать оператора, сменить imei и все такое. Вчера я наконец понял как порты включить. Можно usb_modeswitch -J это включает режим модема, или типа того, невзирая на HiLink. Или же – на противной билайновской морде нет нужной страницы, однако лобовой POST характерной XML-ки все же включает дебаговые порты и без страницы. Заодно узнал как в Linux подцеплять драйвер устройства на нестандартные VID:PID.

И все же – мне очень хочется1) Заменить эту мерзкую билайновскую морду на что-то более приличное.2) Попробовать другие версии прошивок т.к. у этой есть дурной глюк – при настройке автоконекта она иногда отваливается от сети и не делает автореконет.3) Мне просто интересно поковыряться в кишках этого странного устройства с Linux (очень странным).

А в чем проблема? Я так и не понял как из САБЖА сбэкапать NVRAM а желательно и full flash, используя Linux – у меня нет windows. Инструкция для 3372 и проч не работает – fbrflash после заваливания в режим AT^GODLOAD не может определить инфо nand и все такое. Видимо у 3272 урезанный fastboot/загрузчик? И есть ли у 3272 Cortex M как у 3372? В прошивках упоминается некий MCore – это оно же? Какой у сабжа boot sequence вообще?

Сообщение отредактировал linuxer9e – 03.04.22, 06:50

5 hours ago

What are you gonna do to it first?

Что ты собираешься делать с ним в первую очередь?

Heart shaped ass in need of some spanking

Что ты собираешься делать с ним в первую очередь?

What would you like to do to it first?

Что ты собираешься делать с ним в первую очередь?

Clean canvas for your to unload on

Что ты собираешься делать с ним в первую очередь?

Anyone in need for a giant heart shaped ass?

Что ты собираешься делать с ним в первую очередь?

I need to borrow your mouth for an hour or two

Что ты собираешься делать с ним в первую очередь?

Can I be your breakfast every morning?

Что ты собираешься делать с ним в первую очередь?

Soaped up just so you can get me dirty again

Что ты собираешься делать с ним в первую очередь?

Wanna join me in the shower?

Что ты собираешься делать с ним в первую очередь?

Soaped up and ready for you to get me dirty again [F]

Что ты собираешься делать с ним в первую очередь?

Hope my ass helps to make your Monday a little better

Что ты собираешься делать с ним в первую очередь?

Fresh out the shower but still have a dirty mind

Что ты собираешься делать с ним в первую очередь?

Wanna fill up my holes?

Что ты собираешься делать с ним в первую очередь?

What would you like to do to them?

Что ты собираешься делать с ним в первую очередь?

Fresh out the shower but still have a filthy mind

Что ты собираешься делать с ним в первую очередь?

I hope they are big enough for you

Что ты собираешься делать с ним в первую очередь?

Fuck me right here on the stairs!

Что ты собираешься делать с ним в первую очередь?

Tight pussy needs filling

Что ты собираешься делать с ним в первую очередь?

Please fuck me right here on the stairs!

Что ты собираешься делать с ним в первую очередь?

My ass likes to eat underwear whenever it gets the chance! [F]

Что ты собираешься делать с ним в первую очередь?

Plenty to go around

Что ты собираешься делать с ним в первую очередь?

Hope this helps make your Sunday that much better!

Что ты собираешься делать с ним в первую очередь?

All the ass you’ll ever need

Что ты собираешься делать с ним в первую очередь?

Help me soap them up?

Что ты собираешься делать с ним в первую очередь?

Что ты собираешься делать с ним в первую очередь?

Where would you like to start?

2d ⋅ Commercial_Can3272 ⋅ r/BBW_Chubby

Что ты собираешься делать с ним в первую очередь?

All on display for you

1yr ⋅ Commercial_Can3272 ⋅ r/chubby

More than a snack

1yr ⋅ Commercial_Can3272 ⋅ r/BBWPussys

Spread open and ready for some fun

3mo ⋅ Commercial_Can3272 ⋅ r/BBW_Chubby

how many licks to get to my creamy center?

3wk ⋅ Commercial_Can3272 ⋅ r/fatwomenlove

hope I make your hump day a little bit sexier

I crave someone’s hands on all my curves

your dose of thickness for thick Thursday!

1mo ⋅ Commercial_Can3272 ⋅ r/fatwomenlove

View if I was on top

1yr ⋅ Commercial_Can3272 ⋅ r/EngorgedVeinyBreasts

Chaturbate: Come and play right now!

it’s an open invitation

2wk ⋅ Commercial_Can3272 ⋅ r/BBW_Chubby

would love to give you a long tit job

3wk ⋅ Commercial_Can3272 ⋅ r/Humongousaurustits

How ya’ll doing today?

I’m so desperate for your cock!

3wk ⋅ Commercial_Can3272 ⋅ r/BBWHardcore

let’s ring in the new year with some 69ing!

3wk ⋅ Commercial_Can3272 ⋅ r/BBW_Chubby

Ready and waiting for you

1yr ⋅ Commercial_Can3272 ⋅ r/BBWHardcore

Wanna fuck a naughty Slytherin?

1yr ⋅ Commercial_Can3272 ⋅ r/fatwomenlove

Being on display makes me so wet

breakfast, lunch and dinner

10mo ⋅ Commercial_Can3272 ⋅ r/BBWPussys

your view if I was on top

7mo ⋅ Commercial_Can3272 ⋅ r/boobs

2mo ⋅ Commercial_Can3272 ⋅ r/BBW_Chubby

hope my holes help you thru your hump day!

2wk ⋅ Commercial_Can3272 ⋅ r/BBWHardcore

Fat ass and tight pussy

1yr ⋅ Commercial_Can3272 ⋅ r/BigAss

Spread and waiting

big spread for your monday!

6mo ⋅ Commercial_Can3272 ⋅ r/BBWHardcore

you’ve caught a chubby slut!

1wk ⋅ Commercial_Can3272 ⋅ r/BBW_Chubby

help me out of these panties?

4mo ⋅ Commercial_Can3272 ⋅ r/BBW_Chubby

1yr ⋅ Commercial_Can3272 ⋅ r/bigasses

big spread to start your week

6mo ⋅ Commercial_Can3272 ⋅ r/BigAss

TGIF! Time to have some naughty fun this weekend!

1mo ⋅ Commercial_Can3272 ⋅ r/BBW_Chubby

Wanna join me?

Where do you start?

just in time for thick Thursday

3mo ⋅ Commercial_Can3272 ⋅ r/BBWHardcore

Me riding a dildo in the shower

Wishing you a lovely Saturday!

get lost in my curves baby

Ready for you to test her out

Spread and ready

dive right in

rub a dub dub there’s a slut in the tub!

Don’t stop until you are satisfied

Thick thighs to hold up a fat ass

1yr ⋅ Commercial_Can3272 ⋅ r/ThickThighs

my fuzzy pussy craves your touch

I just fall out of lingerie

Who needs pillows with boobs as big as mine?

1yr ⋅ Commercial_Can3272 ⋅ r/BigBoobsGW

Happy Titty Tuesday!

grab on wherever you like!

6mo ⋅ Commercial_Can3272 ⋅ r/bigasses

open access to my holes

4mo ⋅ Commercial_Can3272 ⋅ r/BBWHardcore

delicious holes that need to be stuffed

1mo ⋅ Commercial_Can3272 ⋅ r/BBWHardcore

Heart shaped ass

11mo ⋅ Commercial_Can3272 ⋅ r/BBWHardcore

Replace it please?

I would love to see how good you are with your tongue

Want a facefull?

10mo ⋅ Commercial_Can3272 ⋅ r/fatwomenlove

Could you cover my tits with your load?

who needs breakfast when you could have this?

They taste as yummy as they look

She taste very sweet

tits so big I can suck them while I touch myself

6mo ⋅ Commercial_Can3272 ⋅ r/chubby

I’m ready Daddy

I long for summer time again. Wanna suck my tits on the hammock?

This really is just decorative floss with my fat ass and pussy

Join me in the tub please?

this would be your view every day you woke up if we dated

4mo ⋅ Commercial_Can3272 ⋅ r/Humongousaurustits

Got anything for my tight holes?

Would love for you to faceplant into my wet pussy

Care for a mouthful?

11mo ⋅ Commercial_Can3272 ⋅ r/BBWPussys

give her a lick please?

6mo ⋅ Commercial_Can3272 ⋅ r/BBWPussys

spread, wet and ready

They hang so heavy

it’s important to stay flexible

hope you had a lovely Easter

10mo ⋅ Commercial_Can3272 ⋅ r/chubby

great way to start the day!

Would I make you late to work?

could you handle all this thickness?

offering up my body for your pleasure is such a turn on

2wk ⋅ Commercial_Can3272 ⋅ r/fatwomenlove

Can I be dessert?

I could use some help being unwrapped the rest of the way

Thick all over

Care for some breakfast?

My pussy is craving cock this morning!

3mo ⋅ Commercial_Can3272 ⋅ r/BBWPussys

who needs champagne at midnight when you can devour this at midnight

3wk ⋅ Commercial_Can3272 ⋅ r/BBWPussys

Made me cum so hard

I’ve got your breakfast right here

Got anywhere for me to sit?

Wanna join me in the tub?

1yr ⋅ Commercial_Can3272 ⋅ r/u_Commercial_Can3272

put this tongue to use while you grab a few handfuls

5d ⋅ Commercial_Can3272 ⋅ r/Humongousaurustits

care for a nibble?

Titty Tuesday with a little extra

Hope you’re enjoying Sinful Sunday

love sucking my own tits while I touch myself 🤤

I give the best tit jobs

1mo ⋅ Commercial_Can3272 ⋅ r/Humongousaurustits

dinner is served

No panties is the best dress code

I love wearing panties that don’t get in the way

Hoping to make your Saturday a little better

1yr ⋅ Commercial_Can3272 ⋅ r/curvy

join me and my big titties in the bath?

2wk ⋅ Commercial_Can3272 ⋅ r/Humongousaurustits

wanna taste test? She tastes very sweet!

2mo ⋅ Commercial_Can3272 ⋅ r/BBWPussys

would you take advantage if you found me like this?

2mo ⋅ Commercial_Can3272 ⋅ r/BBWHardcore

extra fat ass

1mo ⋅ Commercial_Can3272 ⋅ r/thick

Let’s make this weekend full of naughty escapades

tell me your fantasies and I’ll see what I can do

I’m ready for you to fuck me

5mo ⋅ Commercial_Can3272 ⋅ r/ChubbyGirlsGW

Ready for you to make good use of me

11mo ⋅ Commercial_Can3272 ⋅ r/EngorgedVeinyBreasts

would we make it upstairs to my bed or do it right on the stairs?

I’m in serious need for your hands on all of my body!

I’m ready for you!

teal is a favorite color of mine. hopefully it’s a fav of yours now too!

Let’s get busy by the fire

Delicious view with my pretty holes

wanna solve a mystery with me?

Fat girls fuck better!

Would you reward me with cock after I clean?

3mo ⋅ Commercial_Can3272 ⋅ r/fatwomenlove

Ready for breakfast?

do you like my heart shaped ass?

Bent over and patiently waiting for you!

help me out baby?

9mo ⋅ Commercial_Can3272 ⋅ r/BBWPussys

reading is a clothing optional activity

I could use both holes stuffed

2wk ⋅ Commercial_Can3272 ⋅ r/BBWPussys

Wanna help me out?

Hope everyone is having a fantastic frisky Friday. I know I will 😈

Too much clothes?

pussy from the back!

1wk ⋅ Commercial_Can3272 ⋅ r/BBWPussys

ready to be fucked

7mo ⋅ Commercial_Can3272 ⋅ r/ChubbyGirlsGW

I have the perfect place for you to rest your head

Dinner, dessert and a midnight snack

В основном про модем и про работу в разных ОС с интимными подробностями.
Режимы работы: HiLink, NCM (NDIS), modem (RAS).
Что и зачем нужно крутить в Windows и FreeBSD для того чтобы завёлся.
E3276 — тоже касается, железо аналогичное, прошивки совместимы.

Что ты собираешься делать с ним в первую очередь?

E3272 модемом можно назвать с натяжкой — понимает AT команды с некоторыми прошивками, начинка там вполне роутерная.
Ещё и MicroSD кардридер в подарок.

Кладовая знаний по этому модему тут: 4pda.ru/forum/index.php?showtopic=508842&st=3440
В первой части много ссылок на 4PDA потому что там расписано всё в подробностях, а упомянуть об этом важно прежде чем переходить к тому что я накопал.

Режимы работы

HiLink — прошивка 22.*, так же шьётся отдельно веб интерфейс. Модем определяется как сетевой адаптер подключённый к сети, в которой есть роутер с NAT, DHCP сервер и Web сервер — это всё модем. Модем сам подключается, сам раздаёт адреса и сам NAT-ит.
В веб интерфейсе можно смотреть уровень сигнала, читать SMS и отправлять USSD запросы. (не во всех веб интерфейсах это доступно)
Минусы: если брать «белый» IP адрес то в этом режиме входящие подключения так же не будут работать; возможно что модему не хватит ресурсов для того чтобы задействовать доступную пропускную способность.

Modem — прошивка 21.*, (он же RAS) модем внутри себя эмулирует PPP сервер на COM порте. Нужно по «старинке» создавать подключение и «дозваниваться».
В таком режиме у меня наблюдались флуктуации пинга: 25+-4 мс. И в этом режиме у меня нагрузка на систему при замерах скорости была выше.
Уровень сигнала и прочее доступно через AT команды.

NCM — прошивка 21.*, модем виден в системе как сетевой интерфейс и COM порт для управления.
Ещё этот режим называют NDIS, тк модем эмулирует стандартный сетевой адаптер, драйвера на который есть во многих ОС из коробки.
Это наиболее интересный, на мой взгляд, режим работы модема.
Можно получить «белый» IP адрес прямо на сетевой интерфейс системы по DHCP, пинги не прыгают как в режиме модема, нагрузки на систему не заметно.
В винде в этом режиме он работает практически как WiFi: в списке доступных сетей показывает сеть оператора, один щелчок, вводим APN и инет работает.

Разблокировка

см шапку топика: 4pda.ru/forum/index.php?showtopic=508842&st=3440
всё делаем в точности, у меня получилось.
Код вводил командой: AT^CARDLOCK=«666666» (цифры у каждого свои).

Прошивки

Прошивки есть для разных моделей: 153, 210, 927 и тп. Разные модели работают на разных частотах/каналах

Hint: Если прошить мегафоновский модем прошивкой от МТС светодиод начнёт светится красным вместо зелёного, вероятно есть и какие то другие последствия, поскольку мегафон модель 153 а мтс 210.

Большая коллекция прошивок:
unlock4modem.in/download-huawei-e3272-modem-firmware-software-update-free/
и
3ginfo.ru/download58.html

Восстановление работоспособности

Опять же отсылаю на 4pda, метод «иголки», ссылка в шапке.
Я замыкал контакт пока модем не отдавал в систему свои COM порты и дальше шил обычную прошивку.
Некоторые говорят что такое для них не срабатывает а вот флешер от хуавея помогает.
Мне приходилось его восстанавливать 2-3 раза после AT^SETPORT с неправильной последовательностью, об этом ниже.

Как это работает

Тут всё просто и без подробностей.

Плывём по течению

Вставили модем, подождали пока он прогрузится, система увидела CD-ROM, можно поставить от туда софт оператора, при его установке дрова поставятся автоматом.

Плывём правильно

Ближе ко второму случаю, максимум поставить дрова, остальное сделается автоматом.
HiLink прошивку я поставил, посмотрел и снёс, подробностей не помню.

Как только я увидел 192.168.1.1 в качестве шлюза по умолчанию и DNS сервера, зашёл и узрел веб интерфейс с минимум инфы и настроек, мне вспомнился мой первый ADLS модем DSL-300T, примерно такого же содержания, который держал максимум 100 соединений через себя в режиме «роутера». И хотя прошло 8 лет, железо уже совсем другое, но ассоциации с ограниченным функционалом никуда не делись.

EDGE, 3G, LTE

Текущий режим смотреть в конект манагере или через терминал послать команду:
AT^SYSINFOEX
^SYSINFOEX:1,0,1,255,,3,«WCDMA»,41,«WCDMA»

Настроить что использовать — аналогично, + см топик 4PDA.

USSD

В терминале набрать (через порт модема точно работает):
AT^USSDMODE=0
AT+CUSD=1,”*100#”,15
В ответ придёт пачка кодов, видимо сообщение в юникоде.
Вероятно есть какой то софт, который умеет делать тоже самое по нажатию кнопки.

Как это работает на самом деле

Дальше хардкор, на основе собственных опытов.

Конфигурация модема

Команда: AT^SETPORT=? покажет как сконфигурирован модем.
Отправлять в COM порт для управления или в то что винда/линукс/фря называет модемом.
Отправить можно взяв софт из шапки в 4PDA или Putty или cu -l /dev/cuaU0.1 (~. — выход из терминалки) во FreeBSD.

В ответ можно получить какой то из вариантов:
AT^SETPORT=«A1,A2;10,12,16,A1,A2»
AT^SETPORT=«A1;10,12,16,A1,A2»
AT^SETPORT=«FF;10,12,16,A1,A2»
AT^SETPORT=«FF;61,62,76,A1,A2»

Для того чтобы узнать какой код что означает служит команда: AT^SETPORT=?

AT^SETPORT=?
^SETPORT:1: 3G MODEM
^SETPORT:2: 3G PCUI
^SETPORT:3: 3G DIAG
^SETPORT:5: 3G GPS
^SETPORT:A: BLUE TOOTH
^SETPORT:16: NCM
^SETPORT:A1: CDROM
^SETPORT:A2: SD
^SETPORT:10: 4G MODEM
^SETPORT:12: 4G PCUI
^SETPORT:13: 4G DIAG
^SETPORT:14: 4G GPS

Модель 153 – GPS

Я тоже было раскатал губу, но это, похоже, не распаяно физически или вообще от софта сходного чипа, тем более в прошивке от модели 210 GPS вообще не упоминается.

AT^SETPORT=?
^SETPORT:1: 3G MODEM
^SETPORT:2: 3G PCUI
^SETPORT:7C: SerialC
^SETPORT:78: Shell A
^SETPORT:79: Shell B
^SETPORT:76: NCM
^SETPORT:A1: CDROM
^SETPORT:A2: SD
^SETPORT:61: 4G MODEM
^SETPORT:62: 4G PCUI
^SETPORT:7B: SerialB
^SETPORT:7A: SerialA

но это не «железно», те возможно данные коды к модели и не привязаны, просто на тех прошивках что я пробовал было вот так.
Как минимум есть модели/прошивки где: ^SETPORT:46: NCM (код из дров линуха)

Итак,
AT^SETPORT=”A1,A2;10,12,16,A1,A2″
AT^SETPORT=”A1;10,12,16,A1,A2″
AT^SETPORT=”FF;10,12,16,A1,A2″
Первый — два кода (до точки с запятой) описывают какие устройства будут видны системе до того как драйвер отправит код переключения режима, все оставшиеся коды это устройства которые доступны в рабочем режиме.
FF — означает что модем сразу переходит в рабочий режим.
A1, A2 — у меня сводился к A1 — только CD-ROM.

Пример: AT^SETPORT=«A1;10,12,16,A1,A2» — в системе появляется CD-ROM с Dashboard, если это первый раз, то юзер ставит от туда дрова, дрова отправляют спец код и в системе появляется всё остальное.
Время переключения конфигурации — примерно 2 секунды.

Пример: AT^SETPORT=«FF;10,12,16,A1,A2» — в системе сразу появляется куча устройств, юзер/система сам ищет и ставит дрова.

С точки зрения ОС

idProduct — это PID устройства, так драйвер отличает разные устройства одного производителя.
VID — идентификатор производителя одинаковый, 0x12d1 — для хуавея.

Для начальной конфигурации A1:
idProduct = 0x14fe — с родной прошивкой меги (21.*, модель 153 скорее всего для всех них)
idProduct = 0x155b — с прошивкой МТС (21.*, модель 210)
При этом система видит только один CD-ROM. Если прошит дашборд то его можно примонтировать и там будут файлы.

Переключение режима

Для продолжения работы вставьте 5 долларов в дисковод А требуется отправить в модем специальный код.
Это не только хуавей такой, многие модемы так же работают.

В венде код отправляет драйвер, заботливо написанный хуавеем.
В Linux пользуются программой usb_modeswitch (насчёт драйверов которые это умеют я ничего не знаю).
Во FreeBSD можно воспользоваться usb_modeswitch либо это в может сделать драйвер u3g (если его заботливо пропатчить, см ниже).
Пример: usb_modeswitch -v 0x12d1 -V 0x12d1 -p 0x14fe -P 0x14fe -M 55534243123456780000000000000011060000000000000000000000000000

Коды переключение режима

В интернете нашлось три разных кода:
1. 55534243123456780000000000000011060000000000000000000000000000
2. 55534243123456780000000000000011062000000100000000000000000000
3. 55534243123456780000000000000011062000000101000100000000000000
(555342431234567800000000000000 — это коды обёртка для SCSI, насколько я понял, в u3g оно генерируется на лету и код в исходнике начинается с 0x11, 0x06).

Различия поведения с разными кодами

Код 1: 11060000000000000000000000000000
Похоже старый код инициализации.
На данный момент именно он прописан в u3g драйвере FreeBSD.

Прошивка 153-21.470.05.00.00 (вроде как самая свежая) вообще не принимает этот код и похоже зависает!

Остальные (210-21.436.11.00.143_Russia+MTS, 153-21.436.05.00.56_Tele2_Estonia, 153-21.436.05.00.1134_Baltic_OM (как и родная от меги)) принимают и выставляют PID
idProduct = 0x1c1e

при этом все устройства идут со стандартными идентификаторами, универсальными для всех производителей

Эти идентификаторы известны как стандартные и подхватываются стандартные дрова типа if_cdce во FreeBSD или аналогичный в линухе, для COM порта и модема аналогично.

Ещё к побочным эффектам можно отнести что команда: AT^SETPORT=? на прошивке: 210-21.436.11.00.143_Russia+MTS выдаёт вот такую ошибочную конфигурацию:
AT^SETPORT:A1,A2;7C,A1,62,76,A2,79
хотя должна
AT^SETPORT:A1,A2;61,62,76,A1,A2
и под вендой она выдаёт правильно, что намекает что в венде данный код инициализации не используется.
Больше похоже на то, что этот код использовался раньше, и ещё некоторое время работал (до 153-21.470.05.00.00 или раньше), но потом хуавей отказалась от него, возможно из за каких то проблем с универсальными драйверами или ещё каких то причин.

Код 2: 11062000000100000000000000000000
Код 3: 11062000000101000100000000000000
Режим FF (это который через SETPORT настраивается)
Код 3 — похоже самый «новый», его я достал из самого свежего usb_modeswitch, а уж откуда они его взяли я не интересовался 🙂

PID получается:
idProduct = 0x1506

А вот устройства уже

FreeBSD

Всё что выше и ниже пришлось раскопать чтобы написать патч и понять почему с оригинальной прошивкой от меги работало а с новой универсальной уже нет, и почему с прошивкой от МТС заработало после добавления идентификаторов устройства.

Можно накатить патч: bz-attachments.freebsd.org/attachment.cgi?id=145319
Здесь обсуждение: bugs.freebsd.org/bugzilla/show_bug.cgi?id=192345
А здесь видно что он и где меняет: bugs.freebsd.org/bugzilla/attachment.cgi?id=145319&action=diff

if_cdce.c: просто добавляем идентификаторы NCM устройств от хуавея

u3g.c: выкидываем кусок неиспользуемых констант, добавляем идентификаторы E3272 в список известных, макрос U3G_HUAWEI_IS_CDC чтобы не приставать к NCM устройствам от хуавея в этом драйвере, и два места в которых эта проверка выполняется, и ещё по мелочи.

umodem.c: добавляем идентификаторы специфичные для хуавея, хотя по сути его можно не патчить, u3g делает всё вместо него.

usb_msctest.c: заменяем старый код переключения режима на новый и улучшаем обработку ошибок.

usbdevs: идентификаторы новых устройств.

Увы, но самое важное: замена кода инициализации на новый и макрос U3G_HUAWEI_IS_CDC добавлять не хотят и приходится тратить кучу времени на объяснение что в линуксе это уже сделали и без этого новые модемы хуавей работать не будут.
Притом это касается не только E3272 но и как минимум E3276 и скорее всего других моделей.

Использование под FreeBSD

Это для модемов со старой прошивкой, типа мегафоновской оригинальной либо после применения патча.
Для МТС не сработает без патча.
Модем эмулирует ethernet адаптер и DHCP сервер.

Modem режим

Это не оптимальный режим, поскольку модем эмулирует PPP сервер, а ОС занимается инкапсуляцией/декапсуляцией пакетов в/из PPP, всё это накладные расходы.

Устанавливаем mpd5 из портов, конфигурим и запускаем:
cd /usr/ports/net/mpd5
make install
make clean
cp /usr/local/etc/mpd5/mpd.script.sample /usr/local/etc/mpd5/mpd.script

Создаём такой файл:

/dev/cuaU0.0 — это порт модема.
Запускаем: /usr/local/etc/rc.d/mpd5 forcerestart

Тесты

Сравнил работу в режимах NDIS (NCM) и RAS (modem) под FreeBSD.
Методика: Москва, после полуночи 🙂
wget качал в 8 потоков один и тот же файл в /dev/null
Сервер с файлом в этом же городе, канал до него позволяет более 100 мегабит забирать, сам сервер тоже может 500+ легко для одного файла.

Скорость получилась примерно одинаковой: 7-8 мегабайт в секунду.

NDIS (NCM)

Пинг стабильно (более менее) держится и ниже, нагрузки на систему (E8500 — это вам не задохлик роутер на ARM/mips) не заметно вообще.

64 bytes from xxx: icmp_seq=1 ttl=244 time=25.212 ms
64 bytes from xxx: icmp_seq=2 ttl=244 time=25.939 ms
64 bytes from xxx: icmp_seq=3 ttl=244 time=29.943 ms
64 bytes from xxx: icmp_seq=4 ttl=244 time=27.439 ms
64 bytes from xxx: icmp_seq=5 ttl=244 time=25.662 ms
64 bytes from xxx: icmp_seq=6 ttl=244 time=27.778 ms
64 bytes from xxx: icmp_seq=7 ttl=244 time=28.916 ms
64 bytes from xxx: icmp_seq=8 ttl=244 time=27.233 ms
64 bytes from xxx: icmp_seq=9 ttl=244 time=24.446 ms
64 bytes from xxx: icmp_seq=10 ttl=244 time=29.356 ms
64 bytes from xxx: icmp_seq=11 ttl=244 time=25.392 ms
64 bytes from xxx: icmp_seq=12 ttl=244 time=27.369 ms
64 bytes from xxx: icmp_seq=13 ttl=244 time=25.578 ms
64 bytes from xxx: icmp_seq=14 ttl=244 time=27.748 ms

RAS (modem)

Пинг скачет и несколько выше, нагрузка на систему заметна, примерно 4-6% одного ядра. Такое походу не всем роутерам под силу.

64 bytes from xxx: icmp_seq=0 ttl=244 time=33.971 ms
64 bytes from xxx: icmp_seq=1 ttl=244 time=27.066 ms
64 bytes from xxx: icmp_seq=2 ttl=244 time=28.687 ms
64 bytes from xxx: icmp_seq=3 ttl=244 time=23.930 ms
64 bytes from xxx: icmp_seq=4 ttl=244 time=26.412 ms
64 bytes from xxx: icmp_seq=5 ttl=244 time=25.663 ms
64 bytes from xxx: icmp_seq=6 ttl=244 time=30.312 ms
64 bytes from xxx: icmp_seq=7 ttl=244 time=29.905 ms
64 bytes from xxx: icmp_seq=8 ttl=244 time=35.774 ms
64 bytes from xxx: icmp_seq=9 ttl=244 time=25.895 ms
64 bytes from xxx: icmp_seq=10 ttl=244 time=31.763 ms
64 bytes from xxx: icmp_seq=11 ttl=244 time=27.883 ms
64 bytes from xxx: icmp_seq=12 ttl=244 time=23.862 ms
64 bytes from xxx: icmp_seq=13 ttl=244 time=29.746 ms
64 bytes from xxx: icmp_seq=14 ttl=244 time=34.491 ms
64 bytes from xxx: icmp_seq=15 ttl=244 time=23.722 ms
64 bytes from xxx: icmp_seq=16 ttl=244 time=31.306 ms
64 bytes from xxx: icmp_seq=17 ttl=244 time=43.241 ms
64 bytes from xxx: icmp_seq=18 ttl=244 time=38.716 ms
64 bytes from xxx: icmp_seq=19 ttl=244 time=31.190 ms

Мобильное приложение VAG Virtual Cockpit

Для разработки мобильного приложения подключаемого к автомобилю требовалось:

  • Сниффером собрать трафик от диагностической утилиты VCDS
  • Изучить работу протоколов UDS, VW TP 2.0, KWP2000
  • Настроить диагностический сканер ELM327 на работу с UDS и VW TP 2.0
  • Изучить новый для меня язык программирования Swift

Что ты собираешься делать с ним в первую очередь?

Мобильное приложение VAG Virtual Cockpit для iOS

В итоге получилось приложение, которое сочетает в себе функции отображения точных данных панели приборов и диагностика основных параметров двигателя и трансмиссии.

Пару слов про точность данных. Штатная панель приборов не точно показывает скорость – завышает показания на 5-10 км/ч, стрелка охлаждающей жидкости всегда на 90 °C, хотя реальная температура может быть 80 – 110 °C, стрелка уровня топлива до середины идет медленно, хотя топлива уже меньше половины и при нуле на самом деле топливо еще есть в баке. Производитель это делает для удобства и безопасности водителя.

На данный момент приложение показывает следующие параметры:

Я стремлюсь чтобы приложение поддерживало как можно больше моделей автомобилей. Пока что поддерживаются производители: Volkswagen, Skoda, Seat, Audi. На разных комплектациях могут отображаться не все параметры, но это поправимо.

Сейчас я провожу тестирование версии 3.0. Приложение доступно только на iOS, после релиза 3.0 перейду к разработке версии для Android.

Если интересно потестировать и есть желание принять участие в проекте, то установить приложение можно по ссылке. Также я веду бортжурнал на drive2.ru, где делюсь полезной информацией и новостями о VAG Virtual Cockpit.

В будущем

В будущем я планирую написать углублённый учебник о том, как добавить дополнительную функциональность к существующим кнопкам в вашем автомобиле, используя бесплатное программное обеспечение и компоненты.

Протокол UDS

Unified Diagnostic Services (UDS) – это диагностический протокол, используемый в электронных блоках управления (ЭБУ) автомобильной электроники. Протокол описан в стандарте ISO 14229-1 и является производным от стандарта ISO 14230-3 (KWP2000) и ныне устаревшего стандарта ISO 15765-3 (Diagnostic Communication over Controller Area Network (DoCAN)). Более подробно в википедии.

Что ты собираешься делать с ним в первую очередь?

Диагностические данные от двигателя по протоколу UDS (Skoda Octavia A7)

В моей машине (Skoda Octavia A5) приборка использует UDS протокол, это дало мне легкий старт разработки, т.к. данные были в простом формате Single Frame SF (фрейм, вся информация которого умещается в один CAN пакет) и большинство значений легко поддавались расшифровке. Volkswagen не дает документацию на формат значений, поэтому формулу расшифровки для каждого датчика приходилось подбирать методом логического мышления. Про UDS протокол очень хорошо и с подробным разбором фреймов написано на canhacker.ru.

Что ты собираешься делать с ним в первую очередь?

Разбор UDS пакета в формате Single Frame

Пример запроса и ответа температуры моторного масла:

7E0 0x03 0x22 0x11 0xBD 0x55 0x55 0x55 0x55
7E8 0x05 0x62 0x11 0xBD 0x0B 0x74 0x55 0x55

Запрос температуры моторного масла:

  • 7E0 – Адрес назначения (ЭБУ двигателя)
  • Байт 0 (0x03) – Размер данных (3 байта)
  • Байт 1 (0x22) – SID идентификатор сервиса (запрос текущих параметров)
  • Байт 2, 3 (0x11 0xBD) – PID идентификатор параметра (температура моторного масла)
  • Байт 4, 5, 6, 7 (0x55) – Заполнитель до 8 байт

Ответ температуры моторного масла:

  • 7E8 – Адрес источника (Диагностический прибор)
  • Байт 0 (0x05) – Размер данных (5 байт)
  • Байт 1 (0x62) – Положительный ответ, такой SID существует. 0x22 + 0x40 = 0x62. (0x7F) – отрицательный ответ
  • Байт 2, 3 (0x11 0xBD) – PID идентификатор параметра (температура моторного масла)
  • Байт 4, 5 (0x0B 0x74) – значение температуры моторного масла (20.1 °C формулу пока что не смог подобрать)
  • Байт 6, 7 (0x55) – Заполнитель до 8 байт

Первая версия мобильного приложения VAG Virtual Cockpit умела подключаться только к приборной панели по UDS.

Что ты собираешься делать с ним в первую очередь?

VAG Virtual Cockpit – экран с данными от приборной панели по протоколу UDS

Интеграция

Цель состояла в том, чтобы перепроектировать вызов камеры заднего вида. Для этого с включённым снифером я повёл машину задним ходом, чтобы она включила дисплей, а затем несколько раз попробовал парковаться. На протяжении всего этого процесса я заметил один ID с сообщениями, которые последовательно имитировали мои действия.

Тогда я припарковался и через Pcan View попытался передать то же самое сообщение, которое я видел, когда включался и выключался дисплей. В мгновение ока я уже взаимодействовал с шиной.

Передача сообщения через PCAN

Впрочем, я не планировал постоянно ездить с ноутбуком. Нужен был способ автоматизировать эти функции — и здесь пригодилась Arduino. Возможность напрямую получать питание 12V в сочетании с большим количеством ресурсов и поддержки в интернете сделала этот выбор очевидным.

В дополнение к Arduino для завершения проекта мне понадобилось два компонента: модуль CAN и модуль реле. По сути, Arduino — это мозг, запускающий и выполняющий код. Модуль CAN предоставляет возможность взаимодействовать с шиной данных, а реле обеспечивает питание фронтальной камеры, а также действует как видеомикшер между ней и камерой заднего вида.

Что ты собираешься делать с ним в первую очередь?

Модуль mcp2515 (сверху), Arduino Uno (посередине), модуль реле (снизу)

После добавления и настройки соответствующих библиотек Arduino установил связь с автомобилем.

Прослушивание трафика через Arduino

Поскольку я уже знал, что могу запустить дисплей, то начал думать о том, КАК это сделать. Первоначальная идея состояла в том, чтобы установить на панели специальную кнопку мгновенного вызова, но я начал думать: «А что ЕЩЁ в сети можно использовать в качестве триггера?»

В ходе экспериментов я обнаружил, что по шине GMLAN также передаются сообщения с ID, соответствующим кнопке «Отмена круиз-контроля». Это было идеально, потому что круиз-контроль включается на скоростях более 65 км/ч, когда я буду использовать переднюю камеру, а на скоростях ниже 15 км/ч будет включаться камера заднего вида, чтобы помочь с парковкой, так что они никогда не будут перекрываться. После написания некоторого кода я смог заставить Arduino распознать, когда нажимается кнопка отмены круиз-контроля.

Распознавание однократного нажатия кнопки

Однако я не хотел, чтобы камера активировалась каждый раз, когда я отменяю круиз-контроль, поэтому я решил, что лучший подход — превратить её (по сути) в многофункциональную кнопку. Камера активируется только в том случае, если кнопка «дважды нажата».

После долгого уикенда изучения функции millis и отладки кода я успешно запрограммировал распознавание двойного нажатия.

И когда я привязал его к своим командам для управления дисплеем, у меня собралась довольно крутая небольшая утилита.

Двойное нажатие + команды

Диагностический адаптер ELM327

Для меня некоторое время было вопросом, как получить данные из CAN шины и передать на телефон. Можно было бы разработать собственный шлюз с Wi-Fi или Bluetooth, как это делают производители сигнализаций, например Starline. Но изучив документацию на популярный автомобильный сканер ELM327 понял, что его можно настроить с помощью AT команд на доступ к CAN шине.

Что ты собираешься делать с ним в первую очередь?

Копия диагностического сканера ELM327

Не все ELM327 одинаково полезны

Оригинальный ELM327 от компании elmelectronics стоит порядка 50$, в России я таких не встречал в продаже. У нас продаются только китайские копии/подделки, разного качества и цены 10-30$. Бывают полноценные копии, которые поддерживают все протоколы, а бывают и те которые умеют отвечать только на несколько команд, остальные игнорируют, такие адаптеры не имеют доступ к CAN шине. Я например пользуюсь копией Viecar BLE 4.0, который поддерживает 100% всех функций оригинала.

Для работы с протоколом UDS через ELM327 нужно указать адреса назначения, источника и разрешить длинные 8 байтные сообщения, по умолчанию пропускается максимум 7 байт.

Последовательность ELM327 AT команд для работы с UDS по CAN шине:

Для работы с протоколом KWP2000 через ELM327 нужно только указать адреса назначения и источника.

Последовательность ELM327 AT команд для работы с VW TP 2.0 по CAN шине:

VW Transport Protocol 2

Volkswagen Transport Protocol 2.0 используется в качестве транспортного уровня, а данные передаются в формате KWP2000. Keyword Protocol 2000 – это протокол для бортовой диагностики автомобиля стандартизированный как ISO 14230. Прикладной уровень описан в стандарте ISO 14230-3. Более подробно в википедии.

Т.к. KWP2000 использует сообщения переменной длины, а CAN шина позволяет передавать сообщения не больше 8 байт, то VW TP 2.0 разбивает длинное сообщение KWP2000 на части при отправке по CAN шине и собирает заново при получении.

Что ты собираешься делать с ним в первую очередь?

Диагностические данные от двигателя по протоколу KWP2000 (Skoda Octavia A5)

ЭБУ двигателя моей машины использует протокол VW TP 2.0, поэтому мне пришлось изучить его. Видимо Volkswagen разрабатывала транспортный протокол не только для работы по надежной CAN шине, но и для менее надежных линий связи, иначе нет объяснения для чего требуется такая избыточная проверка целостности данных. Главным источником информации по VW TP 2.0 является сайт https://jazdw.net/tp20.

Разбор протокола VW TP 2.0 на примере подключения к первой группе двигателя:

Во второй версии мобильного приложения VAG Virtual Cockpit появилась возможность диагностировать двигатель и трансмиссию по протоколу VW TP 2.0.

Что ты собираешься делать с ним в первую очередь?

VAG Virtual Cockpit – экран с данными от двигателя по протоколу VW TP 2.0

Функциональность

Теперь у меня была возможность включать и выключать дисплей, но оставалась одна проблема — что насчёт камеры заднего вида? Мне нужно было, чтобы они с фронтальной камерой работали вместе, словно их так настроили на заводе.

На блок-схеме я изобразил, как я это представляю.

Что ты собираешься делать с ним в первую очередь?

Я быстро понял, что для такой системы нужно в любой момент времени знать состояние трёх переменных:

  • Модуль передней камеры: водитель включил или выключил его?
  • Дисплей камеры: изображение на дисплее включено или выключено?
  • Задний ход: автомобиль в реверсе или нет?

Не имея опыта программирования, это было очень сложно сделать, и я всё свободное время думал о разных подходах.

В конце концов, я добился успеха!

Теперь я смог реализовать операционную логику, которая контролирует реле.

Управление через реле

На протяжении всего процесса я всё больше узнавал об Arduino и заметил, что версия Nano способна делать всё, что нужно, при этом у неё меньший размер и более низкая цена. Она идеально подходит для постоянной установки в автомобиль. Я разработал модель и распечатал на 3D-принтере корпус для размещения компонентов в качестве компактного блока для установки.

Что ты собираешься делать с ним в первую очередь?

Шина CAN

У Chevrolet две разные шины данных. Первая — это стандартная CAN, быстрая (500 Кбит/с) и надёжная, она используется для критических данных. Вторая — то, что GM называет LAN (GMLAN), более старая и медленная шина (33,3 Кбит/с), которая используется для данных, не связанных с безопасностью.

Мне нужен был способ прослушивать трафик по CAN, то есть снифер. Для этой цели невероятно полезно устройство PCAN.

Peak Can (PCAN) представляет собой USB-устройство, способное перехватывать и передавать сообщения. Благодаря программному обеспечению Pcan View можно начинать работу без особого обучения.

Поскольку камера заднего вида менее важна для безопасности, чем другие компоненты, я предположил, что искомые данные, скорее всего, будут на шине GMLAN.

Самая простая точка доступа — разъём OBD2. Я подключил Peak Can к шине GMLAN, запустил программное обеспечение — и сразу началось прослушивание трафика.

Всё вместе

Наконец настал день, когда я увидел результаты. Хотя нужно ещё повозиться с таймингом, но было приятно видеть, что модуль корректно работает.

Включение/выключение режима парковки, включение/выключение фронтальной камеры, автоматическое переключение на камеру заднего вида и автоматическое переключение обратно

В целом, этот опыт меня многому научил и открыл глаза на возможности интеграции непосредственно с шиной CAN. Довольно удивительно, чего можно достичь соединением по двум проводам.

Оцените статью
Huawei Devices
Добавить комментарий