All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.dronefleet.mavlink.protocol.MavlinkPacketReader Maven / Gradle / Ivy

There is a newer version: 1.1.11
Show newest version
package io.dronefleet.mavlink.protocol;

import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;

/**
 * 

* Reads Mavlink protocol packets from an {@link InputStream}. *

* The packets read by this class are not CRC checked, and may not be valid. Users of this class * should {@link MavlinkPacket#validateCrc(int) validate packet CRC}s and {@link #drop() drop} * packets which do not pass validation. Doing so ensures that no invalid packets are processed, * and that valid packets are not skipped in favor of invalid packets. */ public class MavlinkPacketReader { private final MavlinkFrameReader in; /** * Constructs a new reader for the specified {@link InputStream} * * @param in The input stream to read from. */ public MavlinkPacketReader(InputStream in) { this.in = new MavlinkFrameReader(in); } /** * Reads the next packet from the stream. * * @throws IOException if an IO error occurs. * @throws EOFException if reached the end of stream. */ public MavlinkPacket next() throws IOException { while (in.next()) { byte[] frame = in.frame(); switch (frame[0] & 0xff) { case MavlinkPacket.MAGIC_V1: return MavlinkPacket.fromV1Bytes(frame); case MavlinkPacket.MAGIC_V2: return MavlinkPacket.fromV2Bytes(frame); } // The frame did not begin with a magic marker that we understand. in.drop(); } throw new EOFException("End of stream"); } /** * Drops the last read packet, returning its bytes to the stream skipping the first byte. * * @throws IOException if an IO error occurs. */ public void drop() throws IOException { in.drop(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy