using System.Collections.Generic; using DTS.Common.Enums.DASFactory; using DTS.Common.Interface.DASFactory; namespace DTS.DASLib.Command.SLICE.DownloadCommands { /// /// retrieves Ethernet data from an EthernetRecorder /// public class QueryEthernetEventData : EventDataCommands { private ushort _eventID = 0; public ushort EventID { get => _eventID; set { _eventID = value; command.SetParameter(0, _eventID); } } protected override Commands Command => Commands.QueryEthernetEventData; private uint _requestByteCount = 0; public uint RequestByteCount { get => _requestByteCount; set { _requestByteCount = value; command.SetParameter(2, _requestByteCount); } } private ulong _StartDataOffsetBytes = 0UL; public ulong StartDataOffsetBytes { get => _StartDataOffsetBytes; set { _StartDataOffsetBytes = value; command.SetParameter(6, _StartDataOffsetBytes); } } private byte[] _data; public byte[] Data { get => _data; set { if (null == value) { return; } _data = value; } } private const int PARAMETER_BYTE_COUNT = 14; public QueryEthernetEventData(ICommunication sock) : base(sock) { command.Parameter = new byte[PARAMETER_BYTE_COUNT]; /* Byte [1:0] U16 Event ID Byte [5:2] U32 Request byte count. Byte [13:6] U64 Start data offset in byte counter. */ } public QueryEthernetEventData(ICommunication sock, int timeoutMS) : base(sock, timeoutMS) { command.Parameter = new byte[PARAMETER_BYTE_COUNT]; /* Byte [1:0] U16 Event ID Byte [5:2] U32 Request byte count. Byte [13:6] U64 Start data offset in byte counter. */ } protected override CommandReceiveAction WholePackage() { /* Byte [1:0]: U16 Event ID Byte [5:2]: U32 Payload length in byte count. Byte [13:6]: U64 data offset start. Byte [payloadLength]: Data byte stream with payload length firmware can fit to a response payload size or that of request whichever less. */ if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError) { if (response.ParameterLength > 0) { response.GetParameter(0, out _eventID); response.GetParameter(2, out uint payloadLength); response.GetParameter(6, out _StartDataOffsetBytes); _data = new byte[payloadLength]; for (var i = 0; i < payloadLength; i++) { response.GetParameter(PARAMETER_BYTE_COUNT + i, out _data[i]); } } else { _eventID = 0; } } return CommandReceiveAction.StopReceiving; } public override void CommandToString(ref List> lines) { base.CommandToString(ref lines); lines.Add(new List() { $"Event ID: {EventID}", $"StartDataOffset: {StartDataOffsetBytes}", $"RequestByteCount: {RequestByteCount}" }); } public override void ResponseToString(ref List> lines) { base.ResponseToString(ref lines); lines.Add(new List() { $"Event ID: {EventID}", $"Payload(bytes): {_data.Length}", $"StartDataOffsetBytes: {StartDataOffsetBytes}" }); } } }