using Edge.Core.Parser.BinaryParser.MessageEntity; using Edge.Core.Parser.BinaryParser.Attributes; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Edge.Core.Parser.BinaryParser.Util; namespace ShengJu_CUT100_DES.MessageEntity { public enum CommandType { 保留0x11 = 0x11, 保留0x12 = 0x12, 保留0x13 = 0x13, /// /// 通过 INT 引脚可以输出控制信号 /// 通用命令_控制LED闪烁 = 0x14, /// /// 返回模块版本 ASCII 码信息 /// 通用命令_读取模块信息 = 0x15, /// /// 此命令可以读取 A 型卡卡号 /// 通用命令_A型卡激活 = 0x16, /// /// 此命令可以读取 B 型卡卡号(仅 CUT-200系列读卡模块支持) /// 通用命令_RC523_B型卡激活 = 0x17, /// /// 后续可以进行 APDU 命令操作 /// 通用命令_激活卡片到ISO1443_4 = 0x18, /// /// 数据透传命令,支持自定义开发 CPU 卡 /// 通用命令_CPU卡数据透传APDU = 0x19, /// /// 通过验证根密钥重建卡片文件结构 /// DesFireEV1操作命令_格式化卡片 = 0xB0, /// /// 验证对应的密钥读取应用文件数据 /// DesFireEV1操作命令_写数据_高级命令 = 0xB1, DesFireEV1操作命令_读数据_高级命令 = 0xB2, DesFireEV1操作命令_更改密钥 = 0xB3, DesFireEV1操作命令_增加应用 = 0xB4, DesFireEV1操作命令_写应用目录下的文件数据 = 0xB5, DesFireEV1操作命令_读应用目录下的文件数据 = 0xB6, DesFireEV1操作命令_修改指定应用目录下指定密钥ID的密钥值 = 0xB7, DesFireEV1操作命令_获取卡片应用目录信息 = 0xB8, /// /// 单步指令-选择应用目录 /// DesFireEV1操作命令_选择应用目录 = 0xB9, /// /// 单步指令-密钥验证 /// DesFireEV1操作命令_验证密钥 = 0xBA, /// /// 单步指令-读指定的文件数据 /// DesFireEV1操作命令_读数据_基本命令 = 0xBB, /// /// 单步指令-写指定的文件数据 /// DesFireEV1操作命令_写数据_基本命令 = 0xBC, } public abstract class MessageBase : MessageTemplateBase { /// /// 整个数据帧的长度,包含 LEN 本身及帧最后的校验值 /// [Format(1, EncodingType.BIN, -9999)] [Range(4, 0x32, "数据长度 must be range from {1} to {2}, but actual is {0}")] public byte Length { get; set; } /// /// 读卡模块的地址,485 通信会校验此地址,地址错误模块不响应命令 /// [Format(1, EncodingType.BIN, -9950)] [Range(0, 255, "模块地址 must be range from {1} to {2}, but actual is {0}")] public byte ModulePhysicalAddress { get; set; } = 1; [Format(1, EncodingType.BIN, -9930)] public CommandType 命令代码 { get; set; } /// /// 数据区+校验值(除了 CHECK 以外的所有数据累加和取反后取最低字节) /// [EnumerableFormat("%cascade", 0)] public List RawDataAndCheck { get; set; } //public override string ToLogString() //{ // if (this.ControlCharacter == ControlCharacter.EOT) // return "EOT(Adrs: 0x" + this.Adrs.ToString("X").PadLeft(2, '0') + ", SeqNo: 0x" + this.BlockSeqNumber.ToString("X").PadLeft(2, '0') + ")"; // else if (this.ControlCharacter == ControlCharacter.ACK) // return "ACK(Adrs: 0x" + this.Adrs.ToString("X").PadLeft(2, '0') + ", SeqNo: 0x" + this.BlockSeqNumber.ToString("X").PadLeft(2, '0') + ")"; // else // return base.ToLogString(); //} } }