mirror of
https://github.com/esiur/esiur-dotnet.git
synced 2025-09-13 12:43:17 +00:00
TDU
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
|
||||||
namespace Esiur.Data;
|
namespace Esiur.Data;
|
||||||
|
|
||||||
@@ -17,6 +18,8 @@ public struct TransmissionDataUnit
|
|||||||
public byte[] Data;
|
public byte[] Data;
|
||||||
public byte[] Metadata;
|
public byte[] Metadata;
|
||||||
|
|
||||||
|
public ulong Size;
|
||||||
|
|
||||||
public TransmissionDataUnit(TransmissionDataUnitIdentifier identifier,
|
public TransmissionDataUnit(TransmissionDataUnitIdentifier identifier,
|
||||||
byte[] data, uint offset,
|
byte[] data, uint offset,
|
||||||
ulong length, byte[] metadata = null,
|
ulong length, byte[] metadata = null,
|
||||||
@@ -30,6 +33,8 @@ public struct TransmissionDataUnit
|
|||||||
Exponent = exponent;
|
Exponent = exponent;
|
||||||
Data = data;
|
Data = data;
|
||||||
Metadata = metadata;
|
Metadata = metadata;
|
||||||
|
|
||||||
|
Size = Class == TransmissionDataUnitClass.Fixed ? 1 + length: 1 + length +
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] GetTypeMetadata()
|
public byte[] GetTypeMetadata()
|
||||||
@@ -277,7 +282,7 @@ public struct TransmissionDataUnit
|
|||||||
var exp = (h & 0x38) >> 3;
|
var exp = (h & 0x38) >> 3;
|
||||||
|
|
||||||
if (exp == 0)
|
if (exp == 0)
|
||||||
return (1, new TransmissionDataUnit(data, (TransmissionDataUnitIdentifier)h, cls, h & 0x7, 0, (byte)exp));
|
return (1, new TransmissionDataUnit((TransmissionDataUnitIdentifier)h, data, offset, 0));
|
||||||
|
|
||||||
ulong cl = (ulong)(1 << (exp - 1));
|
ulong cl = (ulong)(1 << (exp - 1));
|
||||||
|
|
||||||
@@ -286,9 +291,29 @@ public struct TransmissionDataUnit
|
|||||||
|
|
||||||
//offset += (uint)cl;
|
//offset += (uint)cl;
|
||||||
|
|
||||||
return (1 + cl, new TransmissionDataUnit(data, (TransmissionDataUnitIdentifier)h, cls, h & 0x7, offset, cl, (byte)exp));
|
return (1 + cl, new TransmissionDataUnit((TransmissionDataUnitIdentifier)h, data, offset, cl, null, (byte)exp));
|
||||||
}
|
}
|
||||||
else
|
else if (cls == TransmissionDataUnitClass.Typed)
|
||||||
|
{
|
||||||
|
ulong cll = (ulong)(h >> 3) & 0x7;
|
||||||
|
|
||||||
|
if (ends - offset < cll)
|
||||||
|
return (cll - (ends - offset), null);
|
||||||
|
|
||||||
|
ulong cl = 0;
|
||||||
|
|
||||||
|
for (uint i = 0; i < cll; i++)
|
||||||
|
cl = cl << 8 | data[offset++];
|
||||||
|
|
||||||
|
if (ends - offset < cl)
|
||||||
|
return (cl - (ends - offset), null);
|
||||||
|
|
||||||
|
var metaData = DC.Clip(data, offset + 1, data[offset]);
|
||||||
|
offset += data[offset];
|
||||||
|
|
||||||
|
return (1 + cl + cll, new TransmissionDataUnit((TransmissionDataUnitIdentifier)(h & 0xC7), data, offset, cl, metaData));
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
ulong cll = (ulong)(h >> 3) & 0x7;
|
ulong cll = (ulong)(h >> 3) & 0x7;
|
||||||
|
|
||||||
@@ -304,7 +329,8 @@ public struct TransmissionDataUnit
|
|||||||
return (cl - (ends - offset), null);
|
return (cl - (ends - offset), null);
|
||||||
|
|
||||||
|
|
||||||
return (1 + cl + cll, new TransmissionDataUnit(data, (TransmissionDataUnitIdentifier)(h & 0xC7), cls, h & 0x7, offset, cl));
|
return (1 + cl + cll, new TransmissionDataUnit((TransmissionDataUnitIdentifier)(h & 0xC7), data, offset, cl));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user