Initial commit

This commit is contained in:
2026-07-13 09:25:40 +07:00
parent c08ff54676
commit bccfb156d7
1938 changed files with 641646 additions and 0 deletions

View File

@@ -0,0 +1,124 @@
using Sick.SafetyScanners.DataStructures;
using Sick.SafetyScanners.Helpers;
namespace Sick.SafetyScanners.DataProcessing;
/// <summary>
/// Parser for StatusOverview response from COLA2 variable command
/// Thread-safe implementation
/// </summary>
public sealed class ParseStatusOverview
{
/// <summary>
/// Parses the status overview from a TCP sequence (COLA2 response)
/// Matches: ParseStatusOverviewData::parseTCPSequence in C++
/// </summary>
public StatusOverview ParseTcpSequence(PacketBuffer buffer)
{
var span = buffer.GetBufferSpan();
return new StatusOverview
{
VersionCVersion = ReadVersionIndicator(span),
VersionMajorVersionNumber = ReadMajorNumber(span),
VersionMinorVersionNumber = ReadMinorNumber(span),
VersionReleaseNumber = ReadReleaseNumber(span),
DeviceState = (DeviceState)ReadDeviceState(span),
ConfigState = (ConfigState)ReadConfigState(span),
ApplicationState = (ApplicationState)ReadApplicationState(span),
CurrentTimePowerOnCount = ReadPowerOnCount(span),
CurrentTimeTime = ReadCurrentTime(span),
CurrentTimeDate = ReadCurrentDate(span),
ErrorInfoCode = ReadErrorInfoCode(span),
ErrorInfoTime = ReadErrorInfoTime(span),
ErrorInfoDate = ReadErrorInfoDate(span)
};
}
/// <summary>
/// Matches: ParseStatusOverviewData::readVersionIndicator in C++
/// </summary>
private string ReadVersionIndicator(ReadOnlySpan<byte> span)
{
byte ch = ReadWriteHelper.ReadUint8(span, 0);
return ((char)ch).ToString();
}
/// <summary>
/// Matches: ParseStatusOverviewData::readMajorNumber in C++
/// </summary>
private byte ReadMajorNumber(ReadOnlySpan<byte> span)
{
return ReadWriteHelper.ReadUint8(span, 1);
}
/// <summary>
/// Matches: ParseStatusOverviewData::readMinorNumber in C++
/// </summary>
private byte ReadMinorNumber(ReadOnlySpan<byte> span)
{
return ReadWriteHelper.ReadUint8(span, 2);
}
/// <summary>
/// Matches: ParseStatusOverviewData::readReleaseNumber in C++
/// </summary>
private byte ReadReleaseNumber(ReadOnlySpan<byte> span)
{
return ReadWriteHelper.ReadUint8(span, 3);
}
/// <summary>
/// Matches: ParseStatusOverviewData::readDeviceState in C++
/// </summary>
private byte ReadDeviceState(ReadOnlySpan<byte> span)
{
return ReadWriteHelper.ReadUint8(span, 4);
}
/// <summary>
/// Matches: ParseStatusOverviewData::readConfigState in C++
/// </summary>
private byte ReadConfigState(ReadOnlySpan<byte> span)
{
return ReadWriteHelper.ReadUint8(span, 5);
}
/// <summary>
/// Matches: ParseStatusOverviewData::readApplicationState in C++
/// </summary>
private byte ReadApplicationState(ReadOnlySpan<byte> span)
{
return ReadWriteHelper.ReadUint8(span, 6);
}
private uint ReadPowerOnCount(ReadOnlySpan<byte> span)
{
return ReadWriteHelper.ReadUint32LittleEndian(span, 12);
}
private uint ReadCurrentTime(ReadOnlySpan<byte> span)
{
return ReadWriteHelper.ReadUint32LittleEndian(span, 16);
}
private ushort ReadCurrentDate(ReadOnlySpan<byte> span)
{
return ReadWriteHelper.ReadUint16LittleEndian(span, 20);
}
private uint ReadErrorInfoCode(ReadOnlySpan<byte> span)
{
return ReadWriteHelper.ReadUint32LittleEndian(span, 24);
}
private uint ReadErrorInfoTime(ReadOnlySpan<byte> span)
{
return ReadWriteHelper.ReadUint32LittleEndian(span, 52);
}
private ushort ReadErrorInfoDate(ReadOnlySpan<byte> span)
{
return ReadWriteHelper.ReadUint16LittleEndian(span, 56);
}
}