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