private byte[] GetResponseData(byte[] data, byte cmd) { if (data == null || data.Length < 3) { return(null); } var na = GetNaPacket(); if (na[0] != data[0] || na[1] != data[1] || na[2] != data[2] || na[3] != data[3] || cmd != data[4]) { return(null); } var crc = new Crc16Modbus(); var crc16 = crc.Calculate(data, 0, data.Length - 2); if (crc16.CrcData.Length != 2) { return(null); } if (crc16.CrcData[0] != data[data.Length - 2] || crc16.CrcData[1] != data[data.Length - 1]) { return(null); } return(data.Take(data.Length - 2).Skip(5).ToArray()); }
private byte[] CreatePacket(byte cmd, byte[] data = null) { var result = new List <byte>(); result.AddRange(GetNaPacket()); result.Add(cmd); if (data != null) { result.AddRange(data); } var crc = new Crc16Modbus(); result.AddRange(crc.Calculate(result.ToArray(), 0, result.Count).CrcData); return(result.ToArray()); }
static Polynomials() { CRC8 = new Crc8Usual(); CRC8_CDMA2000 = new Crc8CDMA2000(); CRC8_DARC = new Crc8DARC(); CRC8_DVBS2 = new Crc8DVBS2(); CRC8_EBU = new Crc8EBU(); CRC8_ICODE = new Crc8ICODE(); CRC8_ITU = new Crc8ITU(); CRC8_MAXIM = new Crc8MAXIM(); CRC8_ROHC = new Crc8ROHC(); CRC8_WCDMA = new Crc8WCDMA(); CRC16_CCITT = new Crc16CCITT(); CRC16_ARC = new Crc16ARC(); CRC16_AUG_CCITT = new Crc16AugCCITT(); CRC16_BUYPASS = new Crc16BUYPASS(); CRC16_CDMA2000 = new Crc16CDMA2000(); CRC16_DDS110 = new Crc16DDS110(); CRC16_DECT_R = new Crc16DECT_R(); CRC16_DECT_X = new Crc16DECT_X(); CRC16_DNP = new Crc16DNP(); CRC16_EN13757 = new Crc16EN13757(); CRC16_GENIBUS = new Crc16GENIBUS(); CRC16_MAXIM = new Crc16Maxim(); CRC16_MCRF4XX = new Crc16MCRF4XX(); CRC16_RIELLO = new Crc16RIELLO(); CRC16_T10DIF = new Crc16T10DIF(); CRC16_TELEDISK = new Crc16Teledisk(); CRC16_TMS37157 = new Crc16TMS37157(); CRC16_USB = new Crc16USB(); CRC16_A = new Crc16A(); CRC16_KERMIT = new Crc16KERMIT(); CRC16_MODBUS = new Crc16Modbus(); CRC16_X25 = new Crc16X25(); CRC16_XMODEM = new Crc16Xmodem(); }
private byte[] MakePackage(byte cmd1, byte cmd2, byte index, byte[] data = null) { var result = new List <byte>(); result.AddRange(GetNaPacket()); result.Add(cmd1); if (cmd2 != 0xff) { result.Add(cmd2); } if (index != 0xff) { result.Add(index); } if (data != null) { result.AddRange(data); } var crc = new Crc16Modbus(); result.AddRange(crc.Calculate(result.ToArray(), 0, result.Count).CrcData); return(result.ToArray()); }