using Sick.SafetyScanners.DataStructures; using Sick.SafetyScanners.Helpers; using System.Text; namespace Sick.SafetyScanners.DataProcessing; /// /// Parser for DeviceName response from COLA2 variable command /// Thread-safe implementation /// public sealed class ParseDeviceName { /// /// Parses the device name from a TCP sequence (COLA2 response) /// Matches: ParseDeviceName::parseTCPSequence in C++ /// public DeviceName ParseTcpSequence(PacketBuffer buffer) { var span = buffer.GetBufferSpan(); return new DeviceName { Name = ReadDeviceName(span) }; } /// /// Reads device name from buffer /// Matches: ParseDeviceName::readDeviceName in C++ /// private string ReadDeviceName(ReadOnlySpan span) { ushort stringLength = ReadWriteHelper.ReadUint16LittleEndian(span, 0); var nameBuilder = new StringBuilder(stringLength); for (ushort i = 0; i < stringLength; i++) { byte ch = ReadWriteHelper.ReadUint8(span, 2 + i); nameBuilder.Append((char)ch); } return nameBuilder.ToString(); } }