MessageBase.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using Edge.Core.Parser.BinaryParser.MessageEntity;
  2. using Edge.Core.Parser.BinaryParser.Attributes;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using Edge.Core.Parser.BinaryParser.Util;
  9. namespace ShengJu_CUT100_DES.MessageEntity
  10. {
  11. public enum CommandType
  12. {
  13. 保留0x11 = 0x11,
  14. 保留0x12 = 0x12,
  15. 保留0x13 = 0x13,
  16. /// <summary>
  17. /// 通过 INT 引脚可以输出控制信号
  18. /// </summary>
  19. 通用命令_控制LED闪烁 = 0x14,
  20. /// <summary>
  21. /// 返回模块版本 ASCII 码信息
  22. /// </summary>
  23. 通用命令_读取模块信息 = 0x15,
  24. /// <summary>
  25. /// 此命令可以读取 A 型卡卡号
  26. /// </summary>
  27. 通用命令_A型卡激活 = 0x16,
  28. /// <summary>
  29. /// 此命令可以读取 B 型卡卡号(仅 CUT-200系列读卡模块支持)
  30. /// </summary>
  31. 通用命令_RC523_B型卡激活 = 0x17,
  32. /// <summary>
  33. /// 后续可以进行 APDU 命令操作
  34. /// </summary>
  35. 通用命令_激活卡片到ISO1443_4 = 0x18,
  36. /// <summary>
  37. /// 数据透传命令,支持自定义开发 CPU 卡
  38. /// </summary>
  39. 通用命令_CPU卡数据透传APDU = 0x19,
  40. /// <summary>
  41. /// 通过验证根密钥重建卡片文件结构
  42. /// </summary>
  43. DesFireEV1操作命令_格式化卡片 = 0xB0,
  44. /// <summary>
  45. /// 验证对应的密钥读取应用文件数据
  46. /// </summary>
  47. DesFireEV1操作命令_写数据_高级命令 = 0xB1,
  48. DesFireEV1操作命令_读数据_高级命令 = 0xB2,
  49. DesFireEV1操作命令_更改密钥 = 0xB3,
  50. DesFireEV1操作命令_增加应用 = 0xB4,
  51. DesFireEV1操作命令_写应用目录下的文件数据 = 0xB5,
  52. DesFireEV1操作命令_读应用目录下的文件数据 = 0xB6,
  53. DesFireEV1操作命令_修改指定应用目录下指定密钥ID的密钥值 = 0xB7,
  54. DesFireEV1操作命令_获取卡片应用目录信息 = 0xB8,
  55. /// <summary>
  56. /// 单步指令-选择应用目录
  57. /// </summary>
  58. DesFireEV1操作命令_选择应用目录 = 0xB9,
  59. /// <summary>
  60. /// 单步指令-密钥验证
  61. /// </summary>
  62. DesFireEV1操作命令_验证密钥 = 0xBA,
  63. /// <summary>
  64. /// 单步指令-读指定的文件数据
  65. /// </summary>
  66. DesFireEV1操作命令_读数据_基本命令 = 0xBB,
  67. /// <summary>
  68. /// 单步指令-写指定的文件数据
  69. /// </summary>
  70. DesFireEV1操作命令_写数据_基本命令 = 0xBC,
  71. }
  72. public abstract class MessageBase : MessageTemplateBase
  73. {
  74. /// <summary>
  75. /// 整个数据帧的长度,包含 LEN 本身及帧最后的校验值
  76. /// </summary>
  77. [Format(1, EncodingType.BIN, -9999)]
  78. [Range(4, 0x32, "数据长度 must be range from {1} to {2}, but actual is {0}")]
  79. public byte Length { get; set; }
  80. /// <summary>
  81. /// 读卡模块的地址,485 通信会校验此地址,地址错误模块不响应命令
  82. /// </summary>
  83. [Format(1, EncodingType.BIN, -9950)]
  84. [Range(0, 255, "模块地址 must be range from {1} to {2}, but actual is {0}")]
  85. public byte ModulePhysicalAddress { get; set; } = 1;
  86. [Format(1, EncodingType.BIN, -9930)]
  87. public CommandType 命令代码 { get; set; }
  88. /// <summary>
  89. /// 数据区+校验值(除了 CHECK 以外的所有数据累加和取反后取最低字节)
  90. /// </summary>
  91. [EnumerableFormat("%cascade", 0)]
  92. public List<byte> RawDataAndCheck { get; set; }
  93. //public override string ToLogString()
  94. //{
  95. // if (this.ControlCharacter == ControlCharacter.EOT)
  96. // return "EOT(Adrs: 0x" + this.Adrs.ToString("X").PadLeft(2, '0') + ", SeqNo: 0x" + this.BlockSeqNumber.ToString("X").PadLeft(2, '0') + ")";
  97. // else if (this.ControlCharacter == ControlCharacter.ACK)
  98. // return "ACK(Adrs: 0x" + this.Adrs.ToString("X").PadLeft(2, '0') + ", SeqNo: 0x" + this.BlockSeqNumber.ToString("X").PadLeft(2, '0') + ")";
  99. // else
  100. // return base.ToLogString();
  101. //}
  102. }
  103. }