using Sick.SafetyScanners.Helpers; namespace Sick.SafetyScanners.Cola2.Commands; /// /// Command to read a variable from the sensor by index /// public sealed class VariableCommand : CommandBase { private readonly ushort _variableIndex; public VariableCommand(ushort variableIndex) : base(0x52, 0x49) // 'R' and 'I' in ASCII (Read by Index) { _variableIndex = variableIndex; } public ushort VariableIndex => _variableIndex; public override bool CanBeExecutedWithoutSessionId => false; protected override ReadOnlyMemory AddTelegramData() { var data = new byte[2]; var span = data.AsSpan(); // Variable index (2 bytes, little endian) ReadWriteHelper.WriteUint16LittleEndian(span, 0, _variableIndex); return data; } protected override bool ProcessReplyInternal(ReadOnlyMemory replyData, byte replyCommandType, byte replyCommandMode) { // Reply should be 'R' (0x52) and 'A' (0x41) for Acknowledge if ((replyCommandType == 0x52 && replyCommandMode == 0x41) || (replyCommandType == 'R' && replyCommandMode == 'A')) { return true; } return false; } }