init
This commit is contained in:
@@ -0,0 +1,260 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Linq;
|
||||
|
||||
namespace DTS.Serialization.IRIGCH10.Packets
|
||||
{
|
||||
public class PCMDataPacket : AbstractDataPacket, IDataPacket
|
||||
{
|
||||
//Bit 30 Intra packet headers
|
||||
public bool HasIntraPacketHeader
|
||||
{
|
||||
get => GetCSDWBit(30);
|
||||
set => SetCSDWBit(30, value);
|
||||
}
|
||||
//Bit29 Major Frame Indicator
|
||||
//not applicable in throughput mode
|
||||
public bool IsMajorFrame
|
||||
{
|
||||
get => GetCSDWBit(29);
|
||||
set => SetCSDWBit(29, value);
|
||||
}
|
||||
//Bit28 IsMinorFrame
|
||||
//not applicable in throughput mode
|
||||
public bool IsMinorFrame
|
||||
{
|
||||
get => GetCSDWBit(28);
|
||||
set => SetCSDWBit(28, value);
|
||||
}
|
||||
public enum MinorFrameStatus
|
||||
{
|
||||
Reserved0 = 0, //00
|
||||
Reserved1 = 1, //01
|
||||
MinorFrameCheck = 2, //10
|
||||
MinorFrameLock = 3 //11
|
||||
}
|
||||
public enum MajorFrameStatus
|
||||
{
|
||||
MajorFrameNotLocked = 0, //00
|
||||
Reserved1 = 1, //01
|
||||
MajorFrameCheck = 2, //10
|
||||
MajorFrameLock = 3 //11
|
||||
}
|
||||
//bits 27-24
|
||||
//not applicable for throughput mode
|
||||
public MinorFrameStatus LockStatus
|
||||
{
|
||||
get
|
||||
{
|
||||
var csdw = BitConverter.GetBytes(ChannelSpecificDataWord);
|
||||
var bits = new BitArray(csdw);
|
||||
return (MinorFrameStatus)Utils.Utils.BitArrayToInt32(bits, 24, 27);
|
||||
}
|
||||
set
|
||||
{
|
||||
var iValue = (int)value;
|
||||
var csdw = BitConverter.GetBytes(ChannelSpecificDataWord);
|
||||
var bits = new BitArray(csdw);
|
||||
Utils.Utils.SetBits(bits, (uint)iValue, 24, 27);
|
||||
var ret = new Byte[sizeof(uint)];
|
||||
bits.CopyTo(ret, 0);
|
||||
ChannelSpecificDataWord = BitConverter.ToUInt32(ret, 0);
|
||||
}
|
||||
}
|
||||
//bit 21
|
||||
public bool Is32BitAligned
|
||||
{
|
||||
get => GetCSDWBit(21);
|
||||
set => SetCSDWBit(21, value);
|
||||
}
|
||||
//bit 20
|
||||
public bool IsThroughputMode
|
||||
{
|
||||
get => GetCSDWBit(20);
|
||||
set => SetCSDWBit(20, value);
|
||||
}
|
||||
|
||||
//bit 19 packed mode
|
||||
public bool IsPackedMode
|
||||
{
|
||||
get => GetCSDWBit(19);
|
||||
set => SetCSDWBit(19, value);
|
||||
}
|
||||
//bit 18 unpacked mode
|
||||
public bool IsUnpackedMode
|
||||
{
|
||||
get => GetCSDWBit(18);
|
||||
set => SetCSDWBit(18, value);
|
||||
}
|
||||
/// <summary>
|
||||
/// it seems the EMC ch10 validation tool only supports CH10 106v5, so use this header value for the analog packet when in this mode
|
||||
/// whether to include secondary time header or not
|
||||
/// 33199 Add Time format 1 as an export option for CH 10 export
|
||||
/// </summary>
|
||||
private const byte DATA_VERSION = 0x06;
|
||||
public PCMDataPacket(int nanoseconds, int seconds,
|
||||
Chapter10File.GetNextSampleDelegate getNextSample, int totalChannels, long channelLength, long rtc, long numSamples, long currentSample, byte sequenceNumber,
|
||||
ushort channelId, bool includeSecondaryHeader) : base(Enums.DataFileDataTypes.PCMDataFormat1, includeSecondaryHeader)
|
||||
{
|
||||
HasIntraPacketHeader = includeSecondaryHeader;
|
||||
IsMajorFrame = false;
|
||||
IsMinorFrame = false;
|
||||
LockStatus = MinorFrameStatus.Reserved0;
|
||||
IsThroughputMode = true;
|
||||
Is32BitAligned = false;
|
||||
IsPackedMode = false;
|
||||
IsUnpackedMode = false;
|
||||
|
||||
//4 bytes for CSDW, then 4 bytes for a PCM FRAMESYNC??? this isn't in the spec but f/w is using it
|
||||
var dataLength = Convert.ToUInt32(4 + 2 * totalChannels * numSamples + 4*numSamples);
|
||||
|
||||
var offset = CommonHeaderWork(channelId, DATA_VERSION, sequenceNumber, rtc, dataLength, nanoseconds, seconds);
|
||||
for (var sampleIdx = 0; sampleIdx < numSamples; sampleIdx++)
|
||||
{
|
||||
Buffer.BlockCopy(new byte[] { 0x6B, 0xFE, 0x40, 0x28 }, 0, _dataBytes, offset, 4);
|
||||
offset += 4;
|
||||
for (var chIdx = 0; chIdx < totalChannels; chIdx++)
|
||||
{
|
||||
var signed = getNextSample(chIdx);
|
||||
var unsigned = (ushort)(((signed - 0x8000 & 0x00FF) << 8) | ((signed - 0x8000 >> 8) & 0x00FF));
|
||||
var bytes = BitConverter.GetBytes(unsigned).Reverse().ToArray();
|
||||
Buffer.BlockCopy(bytes, 0, _dataBytes, offset, 2);
|
||||
offset += 2;
|
||||
}
|
||||
currentSample++;
|
||||
}
|
||||
}
|
||||
public PCMDataPacket() : base(Enums.DataFileDataTypes.PCMDataFormat1, true)
|
||||
{
|
||||
}
|
||||
public PCMDataPacket(byte[] bytes) : base (bytes)
|
||||
{
|
||||
|
||||
}
|
||||
public PCMDataPacket(bool _) : base(UDP_DATA)
|
||||
{
|
||||
}
|
||||
|
||||
private static readonly byte[] UDP_DATA = { 0x25, 0xeb, 0x03, 0x00, 0x98, 0x05, 0x00, 0x00, 0x74, 0x05, 0x00, 0x00,
|
||||
0x06, 0x65, 0xc4, 0x09, 0x21, 0xe5, 0x5d, 0xed, 0x07, 0x00, 0x83, 0x37, 0x42, 0x89, 0x77, 0x2a,
|
||||
0x4c, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x01, 0x00, 0x00, 0x10, 0x00, 0x6b, 0xfe, 0x40, 0x28,
|
||||
0x04, 0x80, 0xe3, 0x7f, 0xcf, 0x7f, 0xe1, 0x7f, 0xee, 0x7f, 0xea, 0x7f, 0x6b, 0xfe, 0x40, 0x28,
|
||||
0x07, 0x80, 0xe7, 0x7f, 0xcf, 0x7f, 0xe7, 0x7f, 0xf3, 0x7f, 0xee, 0x7f, 0x6b, 0xfe, 0x40, 0x28,
|
||||
0x04, 0x80, 0xe5, 0x7f, 0xcd, 0x7f, 0xe2, 0x7f, 0xf1, 0x7f, 0xed, 0x7f, 0x6b, 0xfe, 0x40, 0x28,
|
||||
0x05, 0x80, 0xe9, 0x7f, 0xcd, 0x7f, 0xe2, 0x7f, 0xf1, 0x7f, 0xeb, 0x7f, 0x6b, 0xfe, 0x40, 0x28,
|
||||
0x07, 0x80, 0xe9, 0x7f, 0xcd, 0x7f, 0xec, 0x7f, 0xf3, 0x7f, 0xf1, 0x7f, 0x6b, 0xfe, 0x40, 0x28,
|
||||
0x06, 0x80, 0xe3, 0x7f, 0xce, 0x7f, 0xe6, 0x7f, 0xee, 0x7f, 0xee, 0x7f, 0x6b, 0xfe, 0x40, 0x28,
|
||||
0x02, 0x80, 0xe1, 0x7f, 0xc9, 0x7f, 0xdc, 0x7f, 0xec, 0x7f, 0xea, 0x7f, 0x6b, 0xfe, 0x40, 0x28,
|
||||
0x04, 0x80, 0xe7, 0x7f, 0xc5, 0x7f, 0xe7, 0x7f, 0xef, 0x7f, 0xed, 0x7f, 0x6b, 0xfe, 0x40, 0x28,
|
||||
0x05, 0x80, 0xed, 0x7f, 0xca, 0x7f, 0xe3, 0x7f, 0xf0, 0x7f, 0xf2, 0x7f, 0x6b, 0xfe, 0x40, 0x28,
|
||||
0x04, 0x80, 0xe5, 0x7f, 0xca, 0x7f, 0xe2, 0x7f, 0xec, 0x7f, 0xec, 0x7f, 0x6b, 0xfe, 0x40, 0x28,
|
||||
0x04, 0x80, 0xe6, 0x7f, 0xcc, 0x7f, 0xe5, 0x7f, 0xec, 0x7f, 0xed, 0x7f, 0x6b, 0xfe, 0x40, 0x28 };/*,
|
||||
0x06, 80, e7, 7f, cc, 7f, e6, 7f, f0, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, e7, 7f, d2, 7f, e4, 7f, f0, 7f, f2, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, eb, 7f, cc, 7f, e7, 7f, e9, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x03, 80, e7, 7f, d1, 7f, ed, 7f, ef, 7f, f1, 7f, 6b, fe, 40, 28,
|
||||
0x06, 80, ec, 7f, d7, 7f, e9, 7f, f2, 7f, ee, 7f, 6b, fe, 40, 28,
|
||||
0x07, 80, ed, 7f, cf, 7f, e7, 7f, f1, 7f, f0, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, e7, 7f, d0, 7f, e6, 7f, f0, 7f, f0, 7f, 6b, fe, 40, 28,
|
||||
0x03, 80, e7, 7f, cf, 7f, e2, 7f, f0, 7f, ee, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, e6, 7f, c8, 7f, dc, 7f, ef, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x06, 80, ec, 7f, cc, 7f, e4, 7f, f2, 7f, f0, 7f, 6b, fe, 40, 28,
|
||||
0x06, 80, eb, 7f, c9, 7f, e8, 7f, f1, 7f, ec, 7f, 6b, fe, 40, 28,
|
||||
0x02, 80, e9, 7f, c6, 7f, e6, 7f, ed, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x03, 80, e1, 7f, c9, 7f, e2, 7f, e9, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0xff, 7f, e2, 7f, c8, 7f, de, 7f, ea, 7f, eb, 7f, 6b, fe, 40, 28,
|
||||
0x03, 80, e6, 7f, ca, 7f, df, 7f, f0, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x00, 80, e7, 7f, cb, 7f, e2, 7f, f0, 7f, ec, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, e7, 7f, d1, 7f, df, 7f, ef, 7f, f0, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, eb, 7f, d0, 7f, e5, 7f, ed, 7f, f0, 7f, 6b, fe, 40, 28,
|
||||
0x07, 80, e9, 7f, d3, 7f, ee, 7f, ef, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, eb, 7f, ca, 7f, e1, 7f, ef, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x06, 80, e9, 7f, d0, 7f, e6, 7f, f2, 7f, f3, 7f, 6b, fe, 40, 28,
|
||||
0x06, 80, e3, 7f, d2, 7f, e6, 7f, f2, 7f, f1, 7f, 6b, fe, 40, 28,
|
||||
0x05, 80, ed, 7f, cf, 7f, e9, 7f, ed, 7f, f5, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, ed, 7f, d0, 7f, e6, 7f, ed, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x06, 80, e8, 7f, cf, 7f, ec, 7f, ed, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x06, 80, ea, 7f, cc, 7f, e8, 7f, ec, 7f, ec, 7f, 6b, fe, 40, 28,
|
||||
0x00, 80, eb, 7f, c9, 7f, e5, 7f, ef, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x03, 80, de, 7f, ce, 7f, e7, 7f, eb, 7f, f1, 7f, 6b, fe, 40, 28,
|
||||
0x05, 80, e1, 7f, c6, 7f, e0, 7f, f0, 7f, ec, 7f, 6b, fe, 40, 28,
|
||||
0x01, 80, df, 7f, c7, 7f, df, 7f, e9, 7f, e9, 7f, 6b, fe, 40, 28,
|
||||
0x05, 80, e4, 7f, cd, 7f, e0, 7f, ea, 7f, eb, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, ea, 7f, ca, 7f, de, 7f, ed, 7f, ee, 7f, 6b, fe, 40, 28,
|
||||
0x03, 80, e7, 7f, c9, 7f, de, 7f, ef, 7f, ec, 7f, 6b, fe, 40, 28,
|
||||
0x05, 80, e5, 7f, c9, 7f, df, 7f, ed, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, e3, 7f, d0, 7f, e2, 7f, ed, 7f, f0, 7f, 6b, fe, 40, 28,
|
||||
0x02, 80, e3, 7f, ce, 7f, e0, 7f, ed, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x06, 80, f0, 7f, cc, 7f, e3, 7f, ee, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, ed, 7f, d0, 7f, e4, 7f, f3, 7f, ea, 7f, 6b, fe, 40, 28,
|
||||
0x06, 80, eb, 7f, c8, 7f, e6, 7f, ec, 7f, ea, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, e9, 7f, ce, 7f, e3, 7f, ee, 7f, f0, 7f, 6b, fe, 40, 28,
|
||||
0x09, 80, e9, 7f, d1, 7f, e5, 7f, ea, 7f, eb, 7f, 6b, fe, 40, 28,
|
||||
0x07, 80, eb, 7f, ce, 7f, e6, 7f, f0, 7f, ec, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, ea, 7f, ce, 7f, e4, 7f, eb, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x08, 80, ed, 7f, ce, 7f, e8, 7f, ef, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x08, 80, ee, 7f, ce, 7f, e7, 7f, ef, 7f, ee, 7f, 6b, fe, 40, 28,
|
||||
0x05, 80, e3, 7f, cb, 7f, e0, 7f, ed, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x02, 80, e4, 7f, d0, 7f, e0, 7f, ed, 7f, ee, 7f, 6b, fe, 40, 28,
|
||||
0x00, 80, e7, 7f, cb, 7f, e5, 7f, e9, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x02, 80, df, 7f, cb, 7f, e3, 7f, ed, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0xff, 7f, e3, 7f, cf, 7f, ea, 7f, f0, 7f, eb, 7f, 6b, fe, 40, 28,
|
||||
0x02, 80, e3, 7f, cc, 7f, e2, 7f, ef, 7f, f0, 7f, 6b, fe, 40, 28,
|
||||
0x03, 80, e5, 7f, d3, 7f, e4, 7f, f1, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x07, 80, e9, 7f, ce, 7f, e6, 7f, f2, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, ed, 7f, cf, 7f, e6, 7f, ec, 7f, f1, 7f, 6b, fe, 40, 28,
|
||||
0x05, 80, ef, 7f, d5, 7f, e6, 7f, ec, 7f, f1, 7f, 6b, fe, 40, 28,
|
||||
0x07, 80, e7, 7f, d1, 7f, e8, 7f, f1, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x06, 80, e7, 7f, cc, 7f, e1, 7f, ed, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x02, 80, e6, 7f, cb, 7f, e7, 7f, f1, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, e5, 7f, ce, 7f, e9, 7f, ed, 7f, ee, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, e3, 7f, cd, 7f, e6, 7f, ec, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x00, 80, ea, 7f, cd, 7f, e8, 7f, ed, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x03, 80, e7, 7f, c8, 7f, e9, 7f, f3, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x03, 80, e5, 7f, cb, 7f, e3, 7f, f1, 7f, f0, 7f, 6b, fe, 40, 28,
|
||||
0x02, 80, e3, 7f, ce, 7f, df, 7f, f0, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, e7, 7f, ca, 7f, e0, 7f, ef, 7f, ee, 7f, 6b, fe, 40, 28,
|
||||
0x06, 80, e7, 7f, d3, 7f, e5, 7f, f0, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x01, 80, e9, 7f, c9, 7f, e2, 7f, ef, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x02, 80, df, 7f, c8, 7f, e1, 7f, ed, 7f, eb, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, e7, 7f, ca, 7f, e4, 7f, ee, 7f, ea, 7f, 6b, fe, 40, 28,
|
||||
0x04, 80, e7, 7f, d1, 7f, e6, 7f, f0, 7f, ec, 7f, 6b, fe, 40, 28,
|
||||
0x02, 80, df, 7f, cc, 7f, e6, 7f, eb, 7f, ef, 7f, 6b, fe, 40, 28,
|
||||
0x05, 80, e7, 7f, d1, 7f, e4, 7f, ee, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x07, 80, e9, 7f, cf, 7f, e9, 7f, ec, 7f, ec, 7f, 6b, fe, 40, 28,
|
||||
0x03, 80, e7, 7f, cb, 7f, e7, 7f, ed, 7f, ed, 7f, 6b, fe, 40, 28,
|
||||
0x06, 80, e3, 7f, cf, 7f, e4, 7f, f1, 7f, ec, 7f, 6b, fe, 40, 28,
|
||||
0x07, 80, e8, 7f, cc, 7f, e9, 7f, f2, 7f, ed, 7f
|
||||
}*/
|
||||
//public AnalogDataFormat1Packet(byte[] bytes) : base(bytes)
|
||||
//{
|
||||
// var offset = IRIGCH10.PacketHeader.PACKET_HEADER_LENGTH;
|
||||
|
||||
// if (PacketHeader.SecondaryHeaderPresent)
|
||||
// {
|
||||
// var secondaryHeaderBytes = new byte[SecondaryTimeFormatHeader.SECONDARY_TIME_HEADER_LENGTH];
|
||||
// Buffer.BlockCopy(bytes, offset,
|
||||
// secondaryHeaderBytes, 0, SecondaryTimeFormatHeader.SECONDARY_TIME_HEADER_LENGTH);
|
||||
// var secondaryHeader = new SecondaryTimeFormatHeader(secondaryHeaderBytes);
|
||||
// LocalTimeOfFirstSample = secondaryHeader.LocalTime;
|
||||
// offset += SecondaryTimeFormatHeader.SECONDARY_TIME_HEADER_LENGTH;
|
||||
// }
|
||||
|
||||
// ChannelSpecificDataWord = BitConverter.ToUInt32(bytes, offset);
|
||||
// offset += sizeof(uint);
|
||||
// var numChannels = TotChan;
|
||||
// var sizeOf1SampleForAllChannels = sizeof(ushort) * numChannels;
|
||||
// //There's a CSDW in the data section, then all ADC data. CSDW is uint, 4 bytes
|
||||
// var numSamples = (PacketHeader.DataLength - 4) / sizeOf1SampleForAllChannels;
|
||||
|
||||
// Samples = new SampleData[numSamples];
|
||||
// for (var i = 0; i < Samples.Length; i++)
|
||||
// {
|
||||
// var channels = GetChannels(bytes, offset, numChannels);
|
||||
// Samples[i] = new SampleData(channels);
|
||||
// offset += sizeOf1SampleForAllChannels;
|
||||
// }
|
||||
//}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user