![]() |
|
Уж не знаю что у него , но вот он писал
Цитата:
|
Цитата:
Цитата:
|
Найдена очередная неточность в описании от autowp.
ID 265 байт 2 это не текущий элемент меню, а вообще выбранный элемент! Тоесть скажем Sport и он будет выбран даже после выхода из меню. байт 3 это текущяя PTY станции. Если она не совпадает с выбранной в меню, то значёк PTY перечёркнут, а если совпадает, то нормальный. |
В том же 265 ID
Байт 0 бит 5 это сообщение Please Wait когда идёт поиск PTY станций. Причём 1 когда надписи нету, тоесть рабочий режим. ошибся! Всё ещё проще байт 0 бит 7 надпись RDS бит 5 надпись перечёркнутая RDS и REG бит 4 TA бит 2 перечёркнутое TA байт 1 бит7 PTY бит6 PTY menu show бит4 надпись перечёркнутая PTY |
ещё покопал.
Сообщение Please Wait обозначается почему-то в двух ID сразу! 1E0 второй байт в режиме радио и если идёт поиск PTY с надписью на экране Please Wait, то 61 если надпись пропала, то A2. Скорее всего там только какой-то бит отвечает за это, а что остальное- хз. А второе место из раскопаного ID 225 Byte 0 0- В процессе поиска PTY (бит 2 показывает тоже самое?). 1- 1 когда идёт поиск частоты радио 2- см выше 3- не опознан 4- не опознан 5- в какую сторону шло сканирование. Если в + частоты, то 1 если в - то 0 6- не опознан 7- после поиска PTY 1- нашли, 0- нет. Если 1, то мультифреймом выводится список, если 0, то надпись что не нашли с выбранной опцией PTY. Byte 1 Если текущая частота в памяти то 10,20,30,40,50,60 в DEC или если не в памяти, то 0 Byte 2 10dec- fm1 20dec- fm2 40dec- fm ast 50dec- MW Byte 3,4 частота радио для FM формула (byte3|byte4)/20+50, для MW byte3|byte4 |
Вложений: 12
Спасибо lti1. Научил меня делать скриншоты с планшета :)
Ловите! |
Вложений: 3
Ну и фотки того что творю не в виртуальном мире, а в материальном.
Обтянуто плёнкой, оргстекло как основа для крепления платы и держалка планшета в рамке. |
Вложений: 3
Все окна что выводят инфу они поверх всего и вылезают даже когда приложение скрыто.
Дописал PTY лист и сообщение когда идёт поиск PTY Рамки этим сообщениям сделать надо, но ща тестирование и попытка дружить железки вместе. |
Вложений: 1
И ещё одна менюшка готова.
|
Цитата:
|
приложение состоит из трёх частей.
Первая часть это главное активити которое стартует сервис. Сервис принимает сообщения из порта и делит в две стороны- в главную активити и на всплывающие окно. Это часть два. И часть три это всплывающее окно. Оно реализовано тоже сервисом. Ну и да- в фоне всегда служба приёма пакетов :) |
В основе лежит всё равно проект автора дров.
https://github.com/felHR85/UsbSerial Я не претендую на первенство- я просто модифицировал его библиотеку под себя. |
Я немного о другом спрашивал. Что вы подразумеваете под:
Цитата:
|
Dmitry8
Про свойства активности я не понял, но окно создаётся динамически. Сначала создаётся сервис, а потом создаётся лейаут и компоненты на нём формируя конечное "окно". |
Цитата:
|
нету его. XML в смысле
И активити там нет. Динамически из явы создаётся Код создания окна если поможет public void Window_style_rec (){ Typeface face = Typeface.createFromAsset(getAssets(), "lcd.ttf"); wm = (WindowManager) getSystemService(WINDOW_SERVICE); ll = new LinearLayout(this); msgstr = new TextView(this); img = new ImageView(this); LinearLayout.LayoutParams llParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParam s.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT ); ll.setBackgroundColor(Color.argb(180, 0, 0, 0)); //255,0,0 ll.setOrientation(LinearLayout.HORIZONTAL); ViewGroup.LayoutParams groupParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP _CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); img.setLayoutParams(groupParameters); msgstr.setTypeface(face); msgstr.setTextSize(80); msgstr.setTextColor(0xFFE6E9FD); msgstr.setLayoutParams(groupParameters); ll.setLayoutParams(llParameters); ll.addView(img); ll.addView(msgstr); WindowManager.LayoutParams parameters = new WindowManager.LayoutParams(WindowManager.LayoutPar ams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTE NT,WindowManager.LayoutParams.TYPE_PHONE,WindowMan ager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); parameters.x = 0; parameters.y = 0; parameters.gravity = Gravity.CENTER | Gravity.CENTER; wm.addView(ll, parameters); } |
Народ- вопрос.
Кто что знает про радиотекст? Интересует есть ли у него ограничение по длине текста или нет? |
Цитата:
|
Вложений: 2
xmetal Вот спасибо!
Так, теперь в ход пошла тяжёлая артиллерия. Мультифрейм стало быть. |
Вложений: 2
Может кто знает.
Есть XML В нём рамка. PHP код:
Получается как на первой картинке, а надо как на второй. Что куда вписать? |
Вложений: 1
Вопрос с LayoutInflater снят.
Результат: |
Вложений: 1
Ну и пошёл процесс окультуривания
|
Всё, сегодня я закончил со всеми меню которые можно повторить без эмуляции дисплея. Мне осталось сделать
1 отображение если станция в памяти (Mem1 -6) 2 Радиотекст 3 Отловить поиск станций РДС. Надпись появляется RDS Search и всё замолкает. |
Вложений: 1
Вот окончательный вид интерфейса. Не реальный только радиотекст, всё остальное снимается с магнитолы которая лежит на столе.
|
Вопрос с радиотекстом решён. Кстати он почему-то всегда одного размера в кане передаётся. Максимального :)
Вот код PHP код:
|
Всё народ. С первой частью задачи я справился благодаря всем вам. За что вам огромное спасибо.
На данный момент полностью повторён дисплей. Тоесть отображаем на планшете всё что на дисплее. Бортовик, всё что отображает магнитола в режиме радио\ЦД\Ченджера, настройки аудио и громкость. Во второй части будем пытаться эмулировать дисплей. Без этого невозможно отобразить меню(3 разных для каждого режима работы) по кнопке ОК и меню по кнопке MENU. Делать меню по кнопке ОК я не буду так как не удобно, а вот по кнопке MENU сделать нужно. Но для начала надо понять главное- не в дисплее ли случаем считается бортовик? Если нет, то перед тем как разбираться с меню надо разобраться с загвоздкой со сбросом трипа. Он сбрасывается только тогда, когда находится в отображении трипа. Надо понять кто в этом замешен и если кто идентифицирует в каком мы сейчас режиме отображения. |
Заказал Ардуино и Шилд . Тоже хочу помучаться в этом плане. Идея такая на первых порах ловить сообщения, которые рисуют надписи на штатном мониторе. И посылать сообщения для того, чтобы написать свои сообщения на штатном мониторе ! Конкретно для чего пока не знаю, но мысли есть ! Возможно ли такая процедура на Ардуино ? Авто Ниссан Теана2 . Направьте в нужное русло с чего начинать ? Может ЕЛМ327 пока протокол пощупать ? Какой принцип прорисовки экрана в протоколе, текст допустим ascii сообщениями (если я не ошибаюсь), а прорисовка других элементов ?
|
Для начала нужно узнать какая шина в тиане на которой висит дисплей.
Потом уже разбираться с протоколом. Ардуине с CAN платой вполне справляется с задачами обработки, приёма и передачи данных из шины. Возможно или нет на дисплее что-то писать своё станет понятно после разбора протокола. И сообщения в CAN ходят не обязательно в ASCII, тем более что в нём нет русских буковок, а в тиане они скорее всего есть. Ловить сообщения можно, но они для дисплея идут явно не символами. Скорее стандартные меню дисплея прошиты в нём, а идут только указатели на то, что надо отображать. |
Цитата:
|
Если к монитору подключиться по CAN сможет Ардуино распознать протокол и скорость ? или эти данные явно нужно знать, чтобы снюхать Ардуино с шиной на дисплее ?
т.е если выловить данные управляющие стандартными меню дисплея в шине, то этими меню можно управлять для своих сообщений ! |
dmit
Нету понятия монитор, дисплей, магнитола и так далее. Есть понятие "шина данных". Она бывает по крайней мере двух типов- стандартная высокоскоростная и FT-CAN. Для стандартной на плате распаяна микруха TJA1050, для FT потребуется перепайка на TJA1054 или 1055. Эти данные можно узнать перебором. Перебирая для каждой из категорий скорость. Но лутчше найти данные сразу. Там не так всё просто. Более или менее просто "читать" данные из шины и выводить их на своё устройство. Нельзя просто взять и вмешаться своими сообщениями в шину. Точнее в некоторых случаях можно, но в 90% сообщения цикличны. Тоесть каждые, скажем 500мс, идёт передача данных о, ну допустим, нажатой или нет кнопке. И этот статус будет в битовом виде допустим 0, а ты будешь пихать ему 1. С кнопкой это может и прокатит, а вот с сообщениями, кроме как мерцания ни чего не выйдет. Короче. При удачном подключении к шине нужно будет заниматься анализом пакетов. Тупо тыкать кнопки, крутить ручки и смотреть что происходит. Это долго и уныло. Да ещё можно и чего-то не заметить. С наскока не выйдет короче. Посмотри дату начала этой темы и пойми сколько нужно время для раскопки примерно 50% информации в шине FT(кан комфорт). |
Цитата:
2. Получается кроме анализа никакой радости не принес попытка разбираться с сообщениями. Если я допустим вычислю как опустить стеклоподъемник , то послав свое сообщение , а не нажимая кнопки стекло не опуститься ? Или монитор не напишет слово и не прорисует стандартное меню ? 3. Хотел бы уточнить по Вашему проекту . Как я понял Вы просто перевели содержимое штатного монитора на свой ! Т.е. вы выловили сообщения , расшифровали их и средсвами Андроид нарисовали на экране андроида в своей современной интерпритации ! Ардуин у вас вылавливает сообщения , а далее что , кто занимается формирование новой информации на основе выловленых данных, тоже Ардуин ? Как соединен АРдуин с Андроид ? Вот здесь можно подробнее ? |
1 Сначала пробовать.
2 Пока не увидишь что происходит и не попробуешь послать пакет ни чего не узнаешь. Протокол у всех разный. 2. У меня всё идёт при помощи разных ID и байт/бит в них, сама визуализация в дисплее вшита. Отдельно только идёт мультифрейм для вывода сообщений и RDS. Они идут фактически в ASCII. Ардуина ловит с платы кан сообщения и передаёт их на сериал порт, а к тому уже подключена микруха которая выдаёт это на ЮСБ(стандартный разъём на плате ардуины). Далее по юсб это подключено к планшету. На планшете при помощи изисканий вот этого дяди написан софт https://github.com/felHR85/UsbSerial/releases/ |
Народ, а теперь вопрос на засыпку!
Походу я загрузил дуину настолько, что она стала тупо не успевать за пакетами. Как отфильтровать аппаратно при помощи mcp пакеты? нашёл только это INT8U init_Mask(const INT8U num,const INT32U ulData); /* init Masks */ INT8U init_Filt(const INT8U num,const INT8U ext,const INT32U ulData); Что с этим делать не понятно. Какой фильтр подсовывать и маску чего? Мне надо пропускать около 30 ID, а всё остальное игнорировать. Сегодня выяснилось что очень большие грабли с приёмом одиночных сообщений. Коими является мультифрейм. Дома всё ок, всё принимается нормально, менюшки выскакивают, очень редко бывают пустыми, но это фигня. В машине меню показывает с 10 нажатия, часто не закрывает. Единственное логическое объяснение такому поведению это то, что ардуина сравнивает все пакеты которые приходят немаленьким кодом и просто захлёбывается данными. |
Там по-моему можно только 6 аппаратных фильтров настроить. Нужно либо оптимизировать проверки, либо переносить всю логику в андроид. Ардуине оставить фильтр и передачу сырых данных в компорт.
|
Я как понял там две маски на Разрешить и Запретить и 6 фильтров.
Мало. Нужно проверять 21 ID. По пробую заменить if на switch. Должно быть быстрее. Ps. Попробовал подключить к своей шине стандартный контроллер can с tja1050 и увидил странную штуку- половину id он видит, но только половину )) |
Я больше думаю на то, что где-то слишком долго идет обработка самих данных. На ардуиновский код можно посмотреть?
|
Цитата:
Там вообще странная штука получилась. Походу глюк компилятора при работе с памятью. Короче, если код мультифрейма вконце, то нужно перед сравнением массивов ставит delay(2). Имено 2- меньше не работает. Если его нет, то вывод оконечного массива в порт получается с ошибками.тоесть каша тупо пишется. Такое происходит похоже только при интенсивной работе с массивами в памяти. Если код мультифреймом вначале, то работает без делея. Вообще понять не могу в чём дело. Если заменить if на switch, то задержки даже в 20 мало- каша пишется. Может совместно разобраться выйдет... |
вот код- сильно не пинать, потом окультурю
PHP код:
|
Часовой пояс GMT +4, время: 08:37. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot