Class PacketDecoder
- java.lang.Object
-
- org.yamcs.tctm.ccsds.PacketDecoder
-
public class PacketDecoder extends Object
Receives data chunk by chunk and assembles it into packets. Two types of packets are supported:Space Packet Protocol CCSDS 133.0-B-1 September 2003.
The first 3 bits of these packets are 000.
The header is 6 bytes and the last two bytes of the header represent the size of the packet (including the header) - 7.
The minimum packet length is 7 bytes.
Encapsulation Service. CCSDS 133.1-B-2. October 2009.
The first 3 bits of these packets are 111.
The minimum packet length is 1 byte.
Depending on the last 2 bits of the first byte, the size of the header can be 1,2,4 or 8 bytes with the length of the packet read from the last 0,1,2 or 4 header bytes respectively
The two types can be both present on the same stream.
The objects of this class can processes one "stream" at a time and they are not thread safe!
-
-
Constructor Summary
Constructors Constructor Description PacketDecoder(int maxPacketLength, Consumer<byte[]> consumer)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
hasIncompletePacket()
void
process(byte[] data, int offset, int length)
void
reset()
Removes a partial packet if anyboolean
skipIdlePackets()
void
skipIdlePackets(boolean skipIdlePackets)
Skip or not the idle packets.boolean
stripEncapsulationHeader()
void
stripEncapsulationHeader(boolean stripEncapsulationHeader)
If set to true, the encapsulation header will be stripped out.
-
-
-
Constructor Detail
-
PacketDecoder
public PacketDecoder(int maxPacketLength, Consumer<byte[]> consumer)
-
-
Method Detail
-
process
public void process(byte[] data, int offset, int length) throws TcTmException
- Throws:
TcTmException
-
reset
public void reset()
Removes a partial packet if any
-
hasIncompletePacket
public boolean hasIncompletePacket()
- Returns:
- true of the decoder is in the middle of a packet decoding
-
skipIdlePackets
public boolean skipIdlePackets()
- Returns:
- true of the idle packets are skipped (i.e. not sent to the consumer)
-
skipIdlePackets
public void skipIdlePackets(boolean skipIdlePackets)
Skip or not the idle packets. If true (default), the idle packets are not sent to the consumer.- Parameters:
skipIdlePackets
-
-
stripEncapsulationHeader
public boolean stripEncapsulationHeader()
- Returns:
- true if the header of the encapsulated packets will be stripped out.
-
stripEncapsulationHeader
public void stripEncapsulationHeader(boolean stripEncapsulationHeader)
If set to true, the encapsulation header will be stripped out. This means:- the Protocol ID information will be lost.
- an empty array buffer will be delivered for the one byte packets (or any other packet of size 0)
- Parameters:
stripEncapsulationHeader
-
-
-