MessageTemplateLookup.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using Parser.BinaryParser;
  2. using Parser.BinaryParser.MessageEntity;
  3. using WayneChina_IcCardReader_SinoChem.MessageEntity.Incoming;
  4. namespace WayneChina_IcCardReader_SinoChem.MessageEntity
  5. {
  6. /// <summary>
  7. /// 数据包头: 1 byte,0xFA
  8. /// 源地址: 1 byte,0x#0 / 0x#1, 地址的高4位为帧序列号,1~F之间循环,主从方独立序列号,如接收方收到相同的序列号,只应答ACK,不执行该命令
  9. /// 有效数据长度 : 2 bytes,BCD,数值为N+1
  10. /// 命令字: 1 byte,BCD
  11. /// 参数: N bytes
  12. /// 数据校验: 2 bytes,CRC校验,校验数据为“源地址”到“参数”,低字节在前
  13. /// 总长度: 7+N bytes
  14. /// </summary>
  15. public class MessageTemplateLookup : IMessageTemplateLookup
  16. {
  17. public MessageTemplateBase GetMessageTemplateByRawBytes(byte[] bytes)
  18. {
  19. if (bytes.Length == 7 && bytes[4] == 0x00)
  20. return new HeartBeat();
  21. else if (bytes.Length == 7 && bytes[4] == 0x01)
  22. return new ACK();
  23. else if (bytes.Length == 8 && bytes[4] == 0x02)
  24. return new CardReaderStateEvent();
  25. else if (bytes.Length == 18 && bytes[4] == 0x03)
  26. return new SignDataResponse();
  27. else if (bytes.Length == 8 && bytes[4] == 0x05)
  28. return new CardExternalCheckErrorRequest();
  29. else if (bytes.Length == 39 && bytes[4] == 0x06)
  30. return new CardOnlineVerificationRequest();
  31. return null;
  32. }
  33. }
  34. }