using Sick.SafetyScanners.DataStructures; using Sick.SafetyScanners.Helpers; namespace Sick.SafetyScanners.DataProcessing; /// /// Parser for RequiredUserAction response from COLA2 variable command /// Thread-safe implementation /// public sealed class ParseRequiredUserAction { /// /// Parses the required user action from a TCP sequence (COLA2 response) /// Matches: ParseRequiredUserActionData::parseTCPSequence in C++ /// public RequiredUserAction ParseTcpSequence(PacketBuffer buffer) { var span = buffer.GetBufferSpan(); return ReadRequiredUserAction(span); } /// /// Matches: ParseRequiredUserActionData::readRequiredUserAction in C++ /// private RequiredUserAction ReadRequiredUserAction(ReadOnlySpan span) { ushort word = ReadWriteHelper.ReadUint16LittleEndian(span, 0); return new RequiredUserAction { ConfirmConfiguration = (word & (0x01 << 0)) != 0, CheckConfiguration = (word & (0x01 << 1)) != 0, CheckEnvironment = (word & (0x01 << 2)) != 0, CheckApplicationInterfaces = (word & (0x01 << 3)) != 0, CheckDevice = (word & (0x01 << 4)) != 0, RunSetupProcedure = (word & (0x01 << 5)) != 0, CheckFirmware = (word & (0x01 << 6)) != 0, Wait = (word & (0x01 << 7)) != 0 }; } }