123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- 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,
- /// <summary>
- /// 通过 INT 引脚可以输出控制信号
- /// </summary>
- 通用命令_控制LED闪烁 = 0x14,
- /// <summary>
- /// 返回模块版本 ASCII 码信息
- /// </summary>
- 通用命令_读取模块信息 = 0x15,
- /// <summary>
- /// 此命令可以读取 A 型卡卡号
- /// </summary>
- 通用命令_A型卡激活 = 0x16,
- /// <summary>
- /// 此命令可以读取 B 型卡卡号(仅 CUT-200系列读卡模块支持)
- /// </summary>
- 通用命令_RC523_B型卡激活 = 0x17,
- /// <summary>
- /// 后续可以进行 APDU 命令操作
- /// </summary>
- 通用命令_激活卡片到ISO1443_4 = 0x18,
- /// <summary>
- /// 数据透传命令,支持自定义开发 CPU 卡
- /// </summary>
- 通用命令_CPU卡数据透传APDU = 0x19,
- /// <summary>
- /// 通过验证根密钥重建卡片文件结构
- /// </summary>
- DesFireEV1操作命令_格式化卡片 = 0xB0,
- /// <summary>
- /// 验证对应的密钥读取应用文件数据
- /// </summary>
- DesFireEV1操作命令_写数据_高级命令 = 0xB1,
- DesFireEV1操作命令_读数据_高级命令 = 0xB2,
- DesFireEV1操作命令_更改密钥 = 0xB3,
- DesFireEV1操作命令_增加应用 = 0xB4,
- DesFireEV1操作命令_写应用目录下的文件数据 = 0xB5,
- DesFireEV1操作命令_读应用目录下的文件数据 = 0xB6,
- DesFireEV1操作命令_修改指定应用目录下指定密钥ID的密钥值 = 0xB7,
- DesFireEV1操作命令_获取卡片应用目录信息 = 0xB8,
- /// <summary>
- /// 单步指令-选择应用目录
- /// </summary>
- DesFireEV1操作命令_选择应用目录 = 0xB9,
- /// <summary>
- /// 单步指令-密钥验证
- /// </summary>
- DesFireEV1操作命令_验证密钥 = 0xBA,
- /// <summary>
- /// 单步指令-读指定的文件数据
- /// </summary>
- DesFireEV1操作命令_读数据_基本命令 = 0xBB,
- /// <summary>
- /// 单步指令-写指定的文件数据
- /// </summary>
- DesFireEV1操作命令_写数据_基本命令 = 0xBC,
- }
- public abstract class MessageBase : MessageTemplateBase
- {
- /// <summary>
- /// 整个数据帧的长度,包含 LEN 本身及帧最后的校验值
- /// </summary>
- [Format(1, EncodingType.BIN, -9999)]
- [Range(4, 0x32, "数据长度 must be range from {1} to {2}, but actual is {0}")]
- public byte Length { get; set; }
- /// <summary>
- /// 读卡模块的地址,485 通信会校验此地址,地址错误模块不响应命令
- /// </summary>
- [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; }
- /// <summary>
- /// 数据区+校验值(除了 CHECK 以外的所有数据累加和取反后取最低字节)
- /// </summary>
- [EnumerableFormat("%cascade", 0)]
- public List<byte> 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();
- //}
- }
- }
|