using Sick.SafetyScanners.DataStructures; using Sick.SafetyScanners.Helpers; using System.Text; namespace Sick.SafetyScanners.DataProcessing; /// /// Parser for SerialNumber response from COLA2 variable command /// Thread-safe implementation /// public sealed class ParseSerialNumber { /// /// Parses the serial number from a TCP sequence (COLA2 response) /// Matches: ParseSerialNumber::parseTCPSequence in C++ /// public static SerialNumber ParseTcpSequence(PacketBuffer buffer) { var span = buffer.GetBufferSpan(); return new SerialNumber { Number = ReadSerialNumber(span) }; } /// /// Reads serial number from buffer /// Matches: ParseSerialNumber::readSerialNumber in C++ /// private static string ReadSerialNumber(ReadOnlySpan span) { ushort stringLength = ReadWriteHelper.ReadUint16LittleEndian(span, 0); var numberBuilder = new StringBuilder(stringLength); for (ushort i = 0; i < stringLength; i++) { ushort ch = ReadWriteHelper.ReadUint8(span, 2 + i); numberBuilder.Append((char)ch); } return numberBuilder.ToString(); } }