using Edge.Core.Parser.BinaryParser; using Edge.Core.Parser.BinaryParser.MessageEntity; using WayneChina_IcCardReader_SinoChem.MessageEntity.Incoming; namespace WayneChina_IcCardReader_SinoChem.MessageEntity { /// /// 数据包头: 1 byte,0xFA /// 源地址: 1 byte,0x#0 / 0x#1, 地址的高4位为帧序列号,1~F之间循环,主从方独立序列号,如接收方收到相同的序列号,只应答ACK,不执行该命令 /// 有效数据长度 : 2 bytes,BCD,数值为N+1 /// 命令字: 1 byte,BCD /// 参数: N bytes /// 数据校验: 2 bytes,CRC校验,校验数据为“源地址”到“参数”,低字节在前 /// 总长度: 7+N bytes /// public class MessageTemplateLookup : IMessageTemplateLookup { public MessageTemplateBase GetMessageTemplateByRawBytes(byte[] bytes) { if (bytes.Length == 7 && bytes[4] == 0x00) return new HeartBeat(); else if (bytes.Length == 7 && bytes[4] == 0x01) return new ACK(); else if (bytes.Length == 8 && bytes[4] == 0x02) return new CardReaderStateEvent(); else if (bytes.Length == 18 && bytes[4] == 0x03) return new SignDataResponse(); else if (bytes.Length == 8 && bytes[4] == 0x05) return new CardExternalCheckErrorRequest(); else if (bytes.Length == 39 && bytes[4] == 0x06) return new CardOnlineVerificationRequest(); return null; } } }