using Sick.SafetyScanners.DataStructures; using Sick.SafetyScanners.Helpers; namespace Sick.SafetyScanners.DataProcessing; /// /// Parser for StatusOverview response from COLA2 variable command /// Thread-safe implementation /// public sealed class ParseStatusOverview { /// /// Parses the status overview from a TCP sequence (COLA2 response) /// Matches: ParseStatusOverviewData::parseTCPSequence in C++ /// 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) }; } /// /// Matches: ParseStatusOverviewData::readVersionIndicator in C++ /// private string ReadVersionIndicator(ReadOnlySpan span) { byte ch = ReadWriteHelper.ReadUint8(span, 0); return ((char)ch).ToString(); } /// /// Matches: ParseStatusOverviewData::readMajorNumber in C++ /// private byte ReadMajorNumber(ReadOnlySpan span) { return ReadWriteHelper.ReadUint8(span, 1); } /// /// Matches: ParseStatusOverviewData::readMinorNumber in C++ /// private byte ReadMinorNumber(ReadOnlySpan span) { return ReadWriteHelper.ReadUint8(span, 2); } /// /// Matches: ParseStatusOverviewData::readReleaseNumber in C++ /// private byte ReadReleaseNumber(ReadOnlySpan span) { return ReadWriteHelper.ReadUint8(span, 3); } /// /// Matches: ParseStatusOverviewData::readDeviceState in C++ /// private byte ReadDeviceState(ReadOnlySpan span) { return ReadWriteHelper.ReadUint8(span, 4); } /// /// Matches: ParseStatusOverviewData::readConfigState in C++ /// private byte ReadConfigState(ReadOnlySpan span) { return ReadWriteHelper.ReadUint8(span, 5); } /// /// Matches: ParseStatusOverviewData::readApplicationState in C++ /// private byte ReadApplicationState(ReadOnlySpan span) { return ReadWriteHelper.ReadUint8(span, 6); } private uint ReadPowerOnCount(ReadOnlySpan span) { return ReadWriteHelper.ReadUint32LittleEndian(span, 12); } private uint ReadCurrentTime(ReadOnlySpan span) { return ReadWriteHelper.ReadUint32LittleEndian(span, 16); } private ushort ReadCurrentDate(ReadOnlySpan span) { return ReadWriteHelper.ReadUint16LittleEndian(span, 20); } private uint ReadErrorInfoCode(ReadOnlySpan span) { return ReadWriteHelper.ReadUint32LittleEndian(span, 24); } private uint ReadErrorInfoTime(ReadOnlySpan span) { return ReadWriteHelper.ReadUint32LittleEndian(span, 52); } private ushort ReadErrorInfoDate(ReadOnlySpan span) { return ReadWriteHelper.ReadUint16LittleEndian(span, 56); } }