private bool IsValid(byte[] buff) { if (buff == null || buff.Length <= InfoSize) { ErrorCode = (int)Errors.ERR_INVALID_DATA; ErrorMsg = string.Format("Invalid msg: null or too short: {0}", buff != null ? buff.Length : 0); Log.Debug(ErrorMsg + ":" + ValueHelper.BytesToHexStr(buff)); return(false); } if (buff[0] != ByteHead || buff[buff.Length - 1] != ByteTail) { ErrorCode = (int)Errors.ERR_INVALID_DATA; ErrorMsg = string.Format("Invalid TranMsg format: HEAD/TAIL error: len={0}, H={1},T={2}", buff.Length, buff[0], buff[buff.Length - 1]); Log.DebugFormat(ErrorMsg); return(false); } byte crc8 = ValueHelper.CheckCRC8(buff, 0, buff.Length - 3); if (crc8 != buff[buff.Length - 2]) { ErrorCode = (int)Errors.ERR_INVALID_DATA; ErrorMsg = string.Format("CRC Error: {0}!={1}", crc8, buff[buff.Length - 2]); Log.DebugFormat(ErrorMsg); return(false); } ErrorCode = (int)Errors.SUCCESS; return(true); }
private const int IDX_FRAMEL = 31; // 去:0xCF,回:0xDF /// <summary> /// 编码: PC -> Sensor /// </summary> /// <param name="sensor"></param> /// <returns></returns> public void Request(ref SensorAcqResult sensorAcq) { try { if (sensorAcq.Sensor.ModuleNo > ushort.MaxValue) { sensorAcq.ErrorCode = (int)Errors.ERR_INVALID_MODULE; sensorAcq.Request = null; return; } byte[] buff = new byte[32]; buff[IDX_FrameH] = 0xFC; buff[IDX_DevType] = 0x01; ValueHelper.WriteUShort_BE(buff, IDX_DevId, (ushort)sensorAcq.Sensor.ModuleNo); buff[IDX_ORDER] = 0x01; buff[IDX_CRC8] = ValueHelper.CheckCRC8(buff, 1, 29); buff[IDX_FRAMEL] = 0xCF; sensorAcq.ErrorCode = (int)Errors.SUCCESS; sensorAcq.Request = buff; } catch { sensorAcq.Request = null; sensorAcq.ErrorCode = (int)Errors.ERR_UNKNOW; } }
public int IsValid(byte[] data) { if (data == null || data.Length != 32) { return((int)Errors.ERR_INVALID_DATA); } if (@data[IDX_FrameH] != 0xFD || @data[IDX_DevType] != 0x01 || @data[IDX_FRAMEL] != 0xDF) { return((int)Errors.ERR_INVALID_DATA); } if (data[IDX_CRC8] == ValueHelper.CheckCRC8(data, 1, 29)) { return((int)Errors.SUCCESS); } return((int)Errors.ERR_CRC); }
public byte[] Marshall() { int size = Data.Length + InfoSize; byte[] buff = new byte[size]; buff[0] = ByteHead; buff[1] = ID; buff[2] = (byte)Type; buff[3] = PackageIndex; buff[4] = PackageCount; ValueHelper.WriteShort(buff, 5, (short)LoadSize); // 5,6 buff[7] = 0xFF; Array.Copy(Data, 0, buff, LoadOffset, Data.Length); // XOR buff[size - 2] = ValueHelper.CheckCRC8(buff, 0, size - 3); buff[size - 1] = ByteTail; return(buff); }
public void TestParseTempHumidityResponse() { DbAccessorHelper.Init(new MsDbAccessor(connstr)); // 配置 TempHumiditySensorAdapter ci = new TempHumiditySensorAdapter(); string bs = "FD0100230000"; //0-5 bs += "01"; // 命令号 6=01 bs += "000055"; // Hum: 7-9: 01 H L = 85 bs += "41CC0000"; // Temp 10-13,float, = 25.5 bs += "000000000000000000000000000000005EDF"; byte[] buff = ValueHelper.ToBytes(bs); byte crc = ValueHelper.CheckCRC8(buff, 1, 29); buff[30] = crc; SensorAcqResult r = new SensorAcqResult { Response = buff, Sensor = new Sensor() { ModuleNo = 35, ChannelNo = 1, TableColums = "Humidity,Temperature" } }; ci.ParseResult(ref r); var data = r.Data; Assert.IsNotNull(data); Assert.AreEqual(25.50, data.RawValues[0]); Assert.AreEqual(0.85, data.RawValues[1]); bs = "Fc0100230000"; //0-5 bs += "01"; // 命令号 6=01 bs += "000055"; // Hum: 7-9: 01 H L = 85 bs += "41CC0000"; // Temp 10-13,float, = 25.5 bs += "000000000000000000000000000000005EDF"; buff = ValueHelper.ToBytes(bs); crc = ValueHelper.CheckCRC8(buff, 1, 29); buff[30] = crc; r.Response = buff; ci.ParseResult(ref r); Assert.AreEqual((int)Errors.ERR_INVALID_DATA, r.ErrorCode); }