Я начинающий Android-разработчик. Хочу написать приложение для чтения ошибок с авто. Пытаюсь прочитать телефоном информацию с авто по USB без использования ELM327. Согласно стандарту OBDII, запрос должен выглядеть примерно так:
The functional PID query is sent to the vehicle on the CAN bus at ID 7DFh,
using 8 data bytes
0x7DF 0x02 0x01 0x05 0x00 0x00 0x00 0x00 0x00
где 0x7DF - ID запроса;
0x02 - количество байт, которые нужно считать;
0x01 - Сервис;
0X05 - Parameter ID (температура охлаждающей жидкости);
Остальные байты должны игнорироваться.
Здесь я столкнулся с проблемой того, что ID запроса занимает 11 бит и я не могу просто отправить запрос одним массивом.
byte diagnosticId = (byte) 0x7DF; // Это неправильно, показано для примера.
byte[] request = {diagnosticId, 0x02, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00};
Для работы по USB я использовал эту библиотеку
Подскажите, как я могу отправить запрос такого формата. Может быть нужно переписать библиотеку или как-то упаковать ID запроса, разбив его на 2 байта? Но я не уверен, что он правильно прочитается ECU...
Я находил несколько решений для отправки таких пакетов реализованных на С++. Но там огромное количество кода, которое связано между собой, и я пока хотел бы избежать внедрения нативного кода на этом этапе...
Согласно документации OBD2 (с трудом представляю себе что это) - написано, что идентификатор запроса (11 бит) должен быть упакован в 2-х байтовое слово (16 бит) - в терминах Java это переменная типа short
, это можно сделать так:
short diagnosticId = ByteBuffer.wrap(new byte[]{0x07, 0xDF}).getShort();
Или в байтовых массивах так:
byte[] diagnosticId = {0x07, 0xDF};
Update
Как говорится в некоем спец форуме:
When receiving a message with an 11-bit ID, only the lower 11 bits will be filled
Что и подразумевает, что из 16 бит будет заполнены нижние 11 битов. Если идентификатор 29 битовый то тогда заполняются из 32 битов только нижние 29
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Создаю расписание, в нём есть день недели, время, предметВсё хранится в json получает по средством запроса на сайт
Есть форма, если одно из полей не заполнено нужно чтобы форма не отправлялась и рамка подсвечивалась красным и вылезала подсказка "Поле не может...
суть вопроса: У меня есть скажем 12 000 страниц одного сайта, при обычном парсинге с помощью request и cheerio через несколько страниц сайт падает с ошибкойКак...