Untitled
unknown
plain_text
2 months ago
5.4 kB
2
Indexable
package org.stupor.deviceInteractiion; import org.stupor.model.FinishedMessageAboutObject; import org.stupor.model.MessageAboutObject; import org.stupor.model.SynchroMessage; import java.nio.ByteBuffer; import java.nio.ByteOrder; public class MessageParser { /** * Предполагаем, что пакет имеет следующую структуру: * * Byte idx | Поле (Little Endian) * 0..3 : заголовок (не участвует в парсинге) * 4 : typeMessage (1 байт) * 5..8 : numberOfMessages (int, 4 байта) * 9..12 : numberObject (int, 4 байта) -- если нужно * 13..20 : latitude (double, 8 байт) * 21..28 : longitude (double, 8 байт) * 29..32 : altitude (int, 4 байта) * 33..36 : speed (float, 4 байта) * 37..40 : course (float, 4 байта) * 41 : typeTarget (1 байт) * 42..45 : epr (float, 4 байта) * 46 : updateTarget (1 байт) * 47..54 : time (double, 8 байт) * ... : (если есть хвостовые байты) * * Точные смещения надо подгонять под ваш реальный формат. */ public static MessageAboutObject parseMessageAboutObject(byte[] data) { // Обязательно Little Endian: ByteBuffer buffer = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN); // Начинаем читать поля, пропустив первые 4 байта «заголовка» int offset = 4; // 1) typeMessage (1 байт) int typeMsg = Byte.toUnsignedInt(buffer.get(offset)); offset += 1; // 2) numberOfMessages (4 байта, int) int numberOfMessages = buffer.getInt(offset); offset += 4; // 3) numberObject (4 байта, int) — если нужно int numberObject = buffer.getInt(offset); offset += 4; // 4) latitude (8 байт, double) double latitude = buffer.getDouble(offset); offset += 8; // 5) longitude (8 байт, double) double longitude = buffer.getDouble(offset); offset += 8; // 6) altitude (4 байта, int) int altitude = buffer.getInt(offset); offset += 4; // 7) speed (4 байта, float) float speed = buffer.getFloat(offset); offset += 4; // 8) course (4 байта, float) float course = buffer.getFloat(offset); offset += 4; // 9) typeTarget (1 байт) int typeTarget = Byte.toUnsignedInt(buffer.get(offset)); offset += 1; // 10) epr (4 байта, float) float epr = buffer.getFloat(offset); offset += 4; // 11) updateTarget (1 байт) int updateTarget = Byte.toUnsignedInt(buffer.get(offset)); offset += 1; // 12) time (8 байт, double) double time = buffer.getDouble(offset); offset += 8; System.out.println("message parsed"); // Заполняем объект MessageAboutObject message = new MessageAboutObject(); message.setTypeMessage(typeMsg); message.setNumberOfMessages(numberOfMessages); message.setNumberObject(numberObject); message.setLatitude(latitude); message.setLongitude(longitude); message.setAltitude(altitude); message.setSpeed(speed); message.setCourse(course); message.setTypeTarget(typeTarget); message.setEpr(epr); message.setUpdateTarget(updateTarget); message.setTime(time); return message; } public static FinishedMessageAboutObject parseFinishedMessage(byte[] data) { ByteBuffer buffer = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN); // Аналогично, пропускаем заголовок int offset = 4; // typeMessage (1 байт) int typeMsg = Byte.toUnsignedInt(buffer.get(offset)); offset += 1; // numberOfMessages (int, 4 байта) int numberOfMessages = buffer.getInt(offset); offset += 4; // Время (double, 8 байт) double time = buffer.getDouble(offset); offset += 8; FinishedMessageAboutObject message = new FinishedMessageAboutObject(); message.setTypeMessage(typeMsg); message.setNumberOfMessages(numberOfMessages); message.setTime(time); return message; } public static SynchroMessage parseSynchroMessage(byte[] data) { ByteBuffer buffer = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN); // Пропускаем заголовок int offset = 4; // typeMessage (1 байт) int typeMsg = Byte.toUnsignedInt(buffer.get(offset)); offset += 1; // Признак перезапуска (1 байт) int updateTarget = Byte.toUnsignedInt(buffer.get(offset)); offset += 1; // Время (double, 8 байт) double time = buffer.getDouble(offset); offset += 8; SynchroMessage message = new SynchroMessage(); message.setTypeMessage(typeMsg); message.setUpdateTarget(updateTarget); message.setTime(time); return message; } }
Editor is loading...
Leave a Comment