init
This commit is contained in:
321
DataPRO/ICommand/CommandPacketBase.cs
Normal file
321
DataPRO/ICommand/CommandPacketBase.cs
Normal file
@@ -0,0 +1,321 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using DTS.Common.DASResource;
|
||||
using DTS.Common.Enums.DASFactory;
|
||||
|
||||
namespace DTS.DASLib.Command
|
||||
{
|
||||
/// <summary>
|
||||
/// this is an abstraction of the common functions and behaviors of the CommandPackets
|
||||
/// 6/14/2010 - dtm
|
||||
/// </summary>
|
||||
public abstract class CommandPacketBase
|
||||
{
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// the state of command packet
|
||||
/// </summary>
|
||||
public enum PacketState
|
||||
{
|
||||
#pragma warning disable 1591
|
||||
OK,
|
||||
TooShort,
|
||||
Unknown
|
||||
#pragma warning restore 1591
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// corresponding strings for CommandStatus enum
|
||||
/// </summary>
|
||||
public static String[] StatusLabels =
|
||||
{
|
||||
#pragma warning disable 1591
|
||||
// 0x00
|
||||
Strings.CmdStatusNoErr,
|
||||
// 0x01
|
||||
Strings.CmdStatusInvalidParam,
|
||||
// 0x02
|
||||
Strings.CmdStatusInvalidParamLen,
|
||||
// 0x03
|
||||
Strings.CmdStatusInvalidCmdType,
|
||||
// 0x04
|
||||
Strings.CmdStatusInvalidCmd,
|
||||
// 0x05
|
||||
Strings.CmdStatusInvalidCRC,
|
||||
// 0x06
|
||||
Strings.CmdStatusInvalidCmdMode,
|
||||
// 0x07
|
||||
Strings.CmdStatusUnimplemented,
|
||||
// 0x08
|
||||
Strings.CmdStatusInvalidRecCRC,
|
||||
// 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
|
||||
Strings.CmdStatusInvalidDevID,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0x10
|
||||
Strings.CmdStatusFlashErase,
|
||||
// 0x11
|
||||
Strings.CmdStatusFlashWrite,
|
||||
// 0x12
|
||||
Strings.CmdStatusFlashBlockCRC,
|
||||
// 0x13
|
||||
Strings.CmdStatusFlashImageCRC,
|
||||
// 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0x20
|
||||
Strings.CmdStatusInvalidAttrib,
|
||||
// 0x21
|
||||
Strings.CmdStatusAttribSet,
|
||||
// 0x22
|
||||
Strings.CmdStatusAttribBackup,
|
||||
// 0x23
|
||||
Strings.CmdStatusAttribBuffer,
|
||||
// 0x24 - 0x2F
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0x30 - 0x3F
|
||||
Strings.CmdStatusSampleRate,
|
||||
Strings.CmdStatusEventLen,
|
||||
Strings.CmdStatusArmMode,
|
||||
Strings.CmdStatusUnimplArmMode,
|
||||
Strings.CmdStatusEventTooLarge,
|
||||
Strings.CmdStatusMemFull,
|
||||
Strings.CmdStatusInvalidSliceCount,
|
||||
Strings.CmdStatusShortedStart,
|
||||
Strings.CmdStatusShortedTrigger,
|
||||
Strings.CmdStatusInvalidPreTrig,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0x40 - 0x4F
|
||||
Strings.CmdStatusStartSDWrite,
|
||||
Strings.CmdStatusFlushSDBlock,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0x50 - 0x5F
|
||||
Strings.CmdStatusSwitchReq,
|
||||
Strings.CmdStatusSwitchSetting,
|
||||
Strings.CmdStatusSwitchChannel,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0x60 - 0x6F
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0x70 - 0x7F
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0x80 - 0x8F
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0x90 - 0x9F
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0xA0 - 0xAF
|
||||
Strings.CmdStatusSlicebusInvalidHeaderCRC,
|
||||
Strings.CmdStatusSlicebusInvalidDataCRC,
|
||||
Strings.CmdStatusSlicebusNullDescriptor,
|
||||
Strings.CmdStatusSlicebusNotImplemented,
|
||||
Strings.CmdStatusSlicebusNoResponse,
|
||||
Strings.CmdStatusSlicebusNullCommandBuffer,
|
||||
Strings.CmdStatusSlicebusCommandBufferTooShort,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0xB0 - 0xBF
|
||||
Strings.CmdStatusSetupRequestedSensorRangeTooSmall,
|
||||
Strings.CmdStatusSetupInvalidStackChannel,
|
||||
Strings.CmdStatusSetupInvalidChannelRequested,
|
||||
Strings.CmdStatusSetupInconsistentChannelCountFound,
|
||||
Strings.CmdStatusSetupNoShuntTargetsSet,
|
||||
Strings.CmdStatusSetupNoBridgeResistancesSet,
|
||||
Strings.CmdStatusSetupChannelDoesNotSupportShunt,
|
||||
Strings.CmdStatusSetupShuntDACOutputExceeded,
|
||||
Strings.CmdStatusSetupRequestedSensorRangeTooLarge,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0xC0 - 0xCF
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0xD0 - 0xDF
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0xE0 - 0xEF
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
|
||||
// 0xF0 - 0xFF
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
Strings.CmdStatusUnknown, Strings.CmdStatusUnknown,
|
||||
#pragma warning restore 1591
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// the status of the packet
|
||||
/// </summary>
|
||||
public DFConstantsAndEnums.CommandStatus Status;
|
||||
|
||||
/// <summary>
|
||||
/// the command, use SetCommand to assign
|
||||
/// </summary>
|
||||
private byte _Command;
|
||||
/// <summary>
|
||||
/// string description of the command, for logging
|
||||
/// </summary>
|
||||
private string _CommandDescription;
|
||||
|
||||
/// <summary>
|
||||
/// assigns a command to the packet structure
|
||||
/// </summary>
|
||||
/// <param name="command">byte command information</param>
|
||||
/// <param name="commandDescription">string describing command</param>
|
||||
public void SetCommand(byte command, string commandDescription)
|
||||
{
|
||||
_Command = command;
|
||||
_CommandDescription = commandDescription;
|
||||
}
|
||||
/// <summary>
|
||||
/// returns command (byte) information
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public byte GetCommand() { return _Command; }
|
||||
/// <summary>
|
||||
/// returns a string description of command
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public string GetCommandDescription() { return _CommandDescription; }
|
||||
|
||||
/// <summary>
|
||||
/// wether or not to log
|
||||
/// </summary>
|
||||
public bool ShouldLog;
|
||||
public bool AlreadyRun { get; set; }
|
||||
|
||||
public byte[] OriginalBytes;
|
||||
|
||||
/// <summary>
|
||||
/// the command put into byte array form, for executing to hardware
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public abstract byte[] ToBytes();
|
||||
|
||||
/// <summary>
|
||||
/// this is an enum CommandType, inheritting classes implement CommandType themselves, so
|
||||
/// the we don't know the possible values of the enum in the base class,
|
||||
/// however we do know we'll need to store and use the enum value
|
||||
/// </summary>
|
||||
public object Type;
|
||||
|
||||
/// <summary>
|
||||
/// produce a string representing the command
|
||||
/// </summary>
|
||||
/// <returns>formatted string</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return GetCommand().ToString();
|
||||
//return this.Command.ToString();
|
||||
}
|
||||
|
||||
public UInt16 SequenceNumber;
|
||||
/// <summary>
|
||||
/// each CommandPacket can have it's own enum of commandtypes
|
||||
/// so, we just let the inheritting classes define them on their own
|
||||
/// and just request a method of getting the resulting object post
|
||||
/// conversion back
|
||||
/// </summary>
|
||||
/// <param name="b">byte to be converted</param>
|
||||
/// <returns>CommandType, an enum contained in inheritting classes</returns>
|
||||
public abstract object ConvertByteToCommandType(byte b);
|
||||
|
||||
/// <summary>
|
||||
/// verify if the packet is valid or not
|
||||
/// </summary>
|
||||
/// <param name="Bytes"></param>
|
||||
/// <returns></returns>
|
||||
public abstract PacketState VerifyPacket(byte[] Bytes);
|
||||
/// <summary>
|
||||
/// get the next sequence number.
|
||||
/// note sliceDB, slice, and ribeye all have different counters for
|
||||
/// packets, so they could all have a sequence #1 independently
|
||||
/// </summary>
|
||||
public abstract void GetNextSequenceNumber();
|
||||
/// <summary>
|
||||
/// triggers the packet's logic to compute a checksum or CRC
|
||||
/// different packets may use different methods (slice-crc, ribeye-checksum)
|
||||
/// </summary>
|
||||
public abstract void ComputeCRCs();
|
||||
|
||||
/// <summary>
|
||||
/// formats a header for the log entry for the response packet
|
||||
/// incoming (response) packets may have less information, so the
|
||||
/// associated outgoing packet is also passed in
|
||||
/// </summary>
|
||||
/// <param name="commandPacket">outgoing command packet</param>
|
||||
/// <param name="lines">two dimensional array of string log data</param>
|
||||
public void GetPacketLogHeader(CommandPacketBase commandPacket, ref List<List<string>> lines, DateTime executeTime)
|
||||
{
|
||||
lines.Add(new List<string>());
|
||||
string type = null != Type ? Type.ToString() : "";
|
||||
ushort sequence = SequenceNumber;
|
||||
if (0 == sequence && null != commandPacket) { sequence = commandPacket.SequenceNumber; }
|
||||
|
||||
var sSequence = $"[{sequence.ToString("00000000")}]\\[{SequenceNumber.ToString("00000000")}]";
|
||||
|
||||
lines[0].Add(string.Format("{0} - {1} {2} - ({3}ms)", type, commandPacket.GetCommandDescription(), sSequence, DateTime.Now.Subtract(executeTime).TotalMilliseconds));
|
||||
if (Status != DFConstantsAndEnums.CommandStatus.StatusNoError)
|
||||
{
|
||||
lines.Add(new List<string>() { Status.ToString() });
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// returns a header for the log entry for a command packet
|
||||
/// </summary>
|
||||
/// <param name="lines">two dimensional array of string log data</param>
|
||||
public void GetPacketLogHeader(ref List<List<string>> lines)
|
||||
{
|
||||
lines.Add(new List<string>());
|
||||
lines[0].Add(string.Format("{0} - {1} [{2:00000000}]", Type.ToString(), GetCommandDescription(), SequenceNumber));
|
||||
if (Status != DFConstantsAndEnums.CommandStatus.StatusNoError)
|
||||
{
|
||||
lines.Add(new List<string>() { Status.ToString() });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user