![]() |
Цитата:
Уже разобрался. Глюк компилятора однако. Если нет пробела между переменными и знаком "-" почему-то бред был. За библиотеку спасибо. PS Я уже двигаюсь к завершению первоочередной задачи. У меня остались только непонятные глюки при коннекте планшета к модулю. По неизвестным причинам и без всякой логики иногда при коннекте приложение вылетает с ошибкой. Ну и не пойму ни как как сделать чтоб работало всё в фоне. Поток создан, а всёравно при свёртывании приложения если не терминировать коннект сокета, то вываливается с ошибкой. Надо тоже разобраться. |
В связи с выходом новой версии драйвера у Фелча, вернулся на провод.
К проге прикрутил работу сервиса в фоне, окна сообщений поверх всего. Купил планшет новый Lenovo tab 2. Вот его и буду использовать. Скоро установка в машину будет. |
Цитата:
|
Это вот этот человек.
Где-то на форуме его так называли. Как его зовут на самом деле понятия не имею. https://github.com/felHR85/UsbSerial На самом деле дело было не в дровах, а в посылках. Если передавать с промикры в виде чисел, то не фига не работает. Нужно жёстко указать что передаём стринг. Короче вот так надо передавать PHP код:
|
Вложений: 1
Ребят, а к вам вопрос!
Не могу разобраться в посылке листа списки станций! У autowp написано следующее: |
Вложений: 1
Пакеты которые приходят вот:
Как это собрать просто в строки на стороне ардуины с пометкой строки которая в данный момент выделена? |
Смотрите в сторону ISO 15765-2 (мультифреймовые посылки)
https://en.wikipedia.org/wiki/ISO_15765-2 http://www.canbushack.com/blog/index...&c=1&tb=1&pb=1 |
Да я понимаю как они идут.
Идёт пакет в котором сначала инфа техническая (показывает меню или нет и так далее), а последние два байта это начало строки данных. Потом в какой- то посылке дальше идёт сообщение начинающиеся с символа "!" и после него 6 байт продолжение строки. Что значит 8 байт я не понимаю. Как всю эту кашу собрать воедино-то. Я этого сообразить не могу. |
Цитата:
Поэтому изучите организацию таких посылок и напишите код, который соберёт её, согласно протоколу. Готовый код на Си показать не могу, не писал, но вот на java, если чем-то поможет (ищите по слову isMultiFrame ) https://github.com/autowp/CAN/blob/m...CanClient.java |
Чо-то я не понимаю тогда!
Как организован пакет? Идёт первая посылка, потом он ждёт ответа от принимающий стороны? Потом кидает пакеты с данными длинна которых описана в первом пакете и опять ждёт подтверждения? Или как? |
Примерно так, но в вашем случае, принимающая сторона уже есть и вам об этом (подтверждении) не придется беспокоиться. Вы "подслушиваете" обмен между другими устройствами.
|
Ну тогда вопрос как отмечается конец посылки?
Как посылается длинна следующего пакета? Ну или если хотите, то данные о следующем пакете. Можно описать человеческим языком как происходит обмен? Да и кстати дисплея у меня потом не будет. Так что на мою железку и это ляжет. |
> как отмечается конец посылки?
зачем его как-то отмечать? Получили задекларированный объем данных - передача закончена > Как посылается длинна следующего пакета? Как и любого другого - в его DLC > Можно описать человеческим языком как происходит обмен? Я ж дал вам 2 ссылки с детальнейшим описанием всего процесса. |
T_r_D, спасибо, нашёл уже. Я так понял, что вся логика работы вашего девайса организована на ардуине. С чем связано такое решение? Почему бы всю логику не реализовать на андройде?
|
Цитата:
Получили пакет, переделали в стринг и отправили его. В некоторых случаях проанализировали данные в пакете и отправили результат. Так гораздо проще посылать пакеты и длина их получается приемлемой. И на стороне андройда не надо следить за целостностью пакета, а проверять целостность можно по его длине. |
autowp
> как отмечается конец посылки? зачем его как-то отмечать? Получили задекларированный объем данных - передача закончена Где этот объём смотреть? И вопрос второй был в том- посылается в первом пакете полный размер сообщения текста или только первого фрейма? Если всего, то не понятно зачем после каждого фрейма ждать подтверждения от дисплея, если только первого, то какой пакет посылает магнитола потом для описания следующего пакета с текстом и как узнать сколько всего пакетов в таком случае. Я всё прочитал, но ни чего особо не понял к сожалению. Мне бы на примере моих пакетов ткнули бы носом где какая посылка и что она значит был бы очень благодарен! |
>Где этот объём смотреть?
Вы точно смотрели то, что по ссылкам? В первом фрейме. >И вопрос второй был в том- посылается в первом пакете полный размер сообщения текста или только первого фрейма? Странный вопрос. Зачем в первом фрейме посылать размер первого фрейма? Он и так в DLC есть > зачем после каждого фрейма ждать подтверждения от дисплея Это мера, направленная на исключение перегрузки входного буфера принимающей стороны. |
Цитата:
Как я понял в 4 байте первого фрейма указаны размеры 4 фреймов с данными далее? Или всётаки 8? Если 4, то первая пара бит указывает первым битом на количество данных о исполнители в пакете, а вторым на количество данных названия трека? И почему в конце первого пакета 2 бита данных текстовых? Это биты относятся к исполнителю или треку? |
Цитата:
т.е. всего Цитата:
Когда соберете готовое сообщение, в 4ом (с нуля) байте получившегося блока данных (6ом с нуля байте первого фрейма) будут флажки, сигнализирующие о том, что следует искать в последующей части сообщение: названия исполнителей и треков (1100000 будет означать, что дальше будет 40 байт с исполнителем и названием первого трека, а остальные 3 трека не имеют названия и исполнителя) |
Вот кусок лога:
16 13 16 29 25 16 86 69 4 0 96 48 0 10 16 0 33 83 84 73 32 70 77 144 0 0 0 0 0 0 0 208 0 255 255 0 85 0 0 1 3 146 64 0 208 0 16 0 0 2 111 0 89 0 0 255 255 0 80 0 1 0 0 0 0 0 0 0 0 255 255 0 0 7 56 9 2 63 255 255 255 0 255 255 В первом сообщении в двух битах с конца буквы VE В пятом ! S T I F M Можно ли считать первое сообщение заглавным мультифрейма? По каким признакам вообще определить первое сообщение? Как его найти в потоке данных? В 4 байте первого сообщение DEC 25 что в бинарном виде 00011001 это означает что 20 байт следующие за этим сообщением названия артиста первого, потом 20 байт названия второго трека, потом 20 байт артиста 3 трека? или я не с той стороны считаю биты? или то что обозначено "0", то тоже занимает 20 байт? |
Лог должен быть в hex и выровненным, если вы хотите, чтобы в нем кто-то разбирался
https://en.wikipedia.org/wiki/ISO_15765-2 Написано, что первым является то сообщение, у которого в старших четырех битах единица (0001). Так же сообщение может быть первым и единственным, если в вся посылка уместилась в 1 фрейм. Тогда в старших битах 0 (0000) |
Цитата:
И если бы оно начиналось на 0x0, то это тоже то, что мне надо. С этим разобрались. |
Так я правильно понял что информация о фреймах находиться в 4 байте который 25 в DEC или 0x19 в HEX?
Мне же эти данные и нужны для сборки пакета целиком. Как я без них его соберу-то? мой лог в HEX 10 0D 10 1D 19 10 56 45 04 00 60 30 00 0A 10 00 21 53 54 49 20 46 4D 90 00 00 00 00 00 00 00 D0 00 FF FF 00 55 00 00 00 01 03 92 40 00 D0 00 10 00 00 02 6F 00 59 00 00 FF FF 00 50 00 00 00 00 01 00 00 00 00 00 FF FF 00 00 07 38 09 02 3F FF FF FF 00 FF FF |
Цитата:
Забудьте на время про радиостанции, названия и прочее. Перед вами CAN TP сообщение, передаваемое по кускам (CAN-фреймам). Вся информация, необходимая для того, чтобы собрать сообщение в целую посылку, согласно таблице https://en.wikipedia.org/wiki/ISO_15765-2 , находится в 7 .. 4 (byte 0), 3 .. 0 (byte 0), 15 .. 8 (byte 1) Вот когда соберете, тогда и будете думать про 4ый байт, названия станций и прочую полезную нагрузку посылки |
Цитата:
7-4 бит байта 0 говорит нам о длине пакета. В данном случае он равен 1, тоесть 8..4095. 3-0 бит байта 0 это длина сообщения которую надо сложить с чем? Что такое 15 .. 8 (byte 1)? это полностью первый байт или что? Судя по всему пол байта 0 нужно сложить с байтом 1. Так? Тогда получается что нам нужны 6 байт в этом пакете, а остальные 7 нужно добирать из сообщения которое начинается с 2, тоесть в бинаре старшие биты 7-4 0010, начиная со следующего байта или с байта идентификатора? Так? 10 0D 10 1D 19 10 56 45 21 53 54 49 20 46 4D или так? 10 0D 10 1D 19 10 56 45 53 54 49 20 46 4D 90 А биты 3-0 в байте 0 указывают на количество пакетов или на количество оставшихся или просто на номер этого пакета? |
Цитата:
Зачем вы тащите сюда 10 0D? Сходите по ссылке на wiki. Все, что обозначенно "data" - это данные. Их и надо собирать, чтобы получить содержимое сообщения. Сами же вот правильно рассуждает, а делаете по-другому. > Тогда получается что нам нужны 6 байт в этом пакете, а остальные 7 нужно добирать из сообщения которое начинается с 2 Т.е. от первых двух сообщений надо 6+7=13 байт. Ваш "Так?" мне не понятен.по какой причине вы выкинули последний байт фрейма? |
Это посылка
10 0D 10 1D 19 10 56 45 First frame 30 00 0A 10 00 00 00 00 Flow control frame 21 53 54 49 20 46 4D 90 Consecutive frame это данные в этой посылке 10 1D 19 10 56 45 53 54 49 20 46 4D 90 Не знаю как у вас но если стандартно то 10 - SID 1D - PID 19 10 56 45 53 54 49 20 46 4D 90 Какие то данные Cудя по SID это запрос каких-то данных |
10 0D 10 1D 19 10 56 45 - First Frame , данные 13 байт
30 00 0A - Flow Control 21 53 54 49 20 46 4D 90 - Consecutive Frame Данные тут: 10 1D 19 10 56 45 53 54 49 20 46 4D 90 ... VESTI FM |
Вложений: 1
Господа, а что означают выделенные данные в таком пакете? Машина другая, FF3, но раз пошла такая пляска...
10 90 A3 0 0 5 0 5 21 0 0D 10 10 10 0 0A 22 0 55 0 53 0 42 0 23 0 0 4C 0 69 0 6B 24 0 65 0 20 0 4E 0 25 6F 0 62 0 6F 0 64 26 0 79 0 20 0 45 0 27 6C 0 73 0 65 0 0 28 0 4D 0 79 0 20 0 29 44 0 61 0 72 0 6B 2A 0 65 0 73 0 74 0 2B 20 0 44 0 61 0 79 2C 0 73 0 0 4 1F 0 2D 2E 0 20 0 35 0 2F 2E 0 31 0 33 0 0 0A 2F 0A 0A 2 4 1E 4 3F 20 4 46 0 2E 0 0 4 21 1F 4 40 4 3E 4 41 22 4 3C 0 2E 0 0 4 23 18 4 3D 4 44 4 3E 24 0 0 CF 0 0 0 0 Вот, что на дисплее отображается в данный момент. |
10 90 A3 0 0 5 0 5 - First frame
всё что дальше: 144 байта - Consecutive frame |
Цитата:
Для меня открытыми и интересующими по TP являются вопросы: - как выбирается ID traffic control frame'ов - как определяется, какие ID являются multiframe Пока мой ответ на это: стандарта нет, по согласованию разработчиков. Но мне не нравится такой ответ. |
Цитата:
|
Так народ, не путайте меня.
Моё рассуждение правильно? Что если пакет начинается с 0001 или 0000 это или первый пакет или единственный. Младшая часть нулевого байта и весь первый байт это размер дальнейшего пакета(ов) с данными. Пакеты с данными начинаются всегда 0010 кусок из вики: Consecutive 7 .. 4 (byte 0) 2. |
Цитата:
|
Цитата:
|
Цитата:
Single frame 01 3E FF FF FF FF FF FF 02 10 81 FF FF FF FF FF Цитата:
|
GASCHE,
тогда поясните откуда вы взяли SID и PID? |
GASCHE в вики написано что 4 старших бита нулевого байта если 0000, то это одиночный пакет, а если 0001, то длинный, тоесть с мультифреймом.
так, скажите мне по коду- я правильно смещаю? PHP код:
|
Цитата:
(buf[0] >> 4) == 16 Это всегда false, не может быть равен 16и байт, 4 раза поделенный на 2 - (len - 2) Вот это не понятно. Length - это что? (понятно, что длина, но длина чего?) |
Код:
if ((buf[0] >> 4) == 0 // Single frame |
Часовой пояс GMT +4, время: 08:37. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot