41 lines
1.7 KiB
C#
41 lines
1.7 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace DTS.Serialization.IRIGCH10.Packets
|
|
{
|
|
public class TransportStreamHeader : ITransportStreamHeader
|
|
{
|
|
/*• Transport Stream: 4-byte or 32-bit value. (Byteswap to PC format.)
|
|
o Bit [3:0] 4-bit Message Format is set to 1.
|
|
o Bit [7:4] 4-bit Message Type is set to 0.
|
|
o Bit [31:8] 24-bit UDP message sequence number. It is incremented by 1 for each packet sent out in stream including Time data packet, CGPD (TMATS), and Analog data packets.
|
|
*/
|
|
private byte[] _bytes = new byte[4];
|
|
public int MessageFormat { get; }
|
|
public int MessageType { get; }
|
|
public int SequenceNumber { get; }
|
|
|
|
public TransportStreamHeader()
|
|
{
|
|
|
|
}
|
|
public TransportStreamHeader(byte[] input)
|
|
{
|
|
if (null == input) { throw new NullReferenceException($"input is null"); }
|
|
if (TRANSPORT_HEADER_LENGTH != input.Length) { throw new Exception($"Expected {TRANSPORT_HEADER_LENGTH} bytes, received {input.Length}"); }
|
|
Buffer.BlockCopy(input, 0, _bytes, 0, TRANSPORT_HEADER_LENGTH);
|
|
var int32 = BitConverter.ToInt32(input, 0);
|
|
var bits = new BitArray(BitConverter.GetBytes(int32));
|
|
MessageFormat = Utils.Utils.BitArrayToInt32(bits, 0, 3);
|
|
MessageType = Utils.Utils.BitArrayToInt32(bits, 4, 7);
|
|
SequenceNumber = Utils.Utils.BitArrayToInt32(bits, 8, 31);
|
|
_bytes = input;
|
|
}
|
|
public const int TRANSPORT_HEADER_LENGTH = 4;
|
|
}
|
|
}
|