internal static ShortFrame CreateResetFrame() { var frame = new ShortFrame(); frame.ControlField = 0x40; return(frame); }
internal async Task <BaosFrame> SendResetFrame() { await WriteFrame(ShortFrame.CreateResetFrame()); ControlValueIndicator = true; return(await ReadFrame()); }
private static int Serialize(ShortFrame frame, BinaryWriter writer) { writer.Write(frame.Start); writer.Write((byte)frame.Control); writer.Write(frame.Address); writer.Write(frame.Crc); writer.Write(frame.Stop); return(5); }
public INetworkPacket Deserialize(BinaryReader reader) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } INetworkPacket packet = null; var start1 = reader.ReadByte(); switch (start1) { case Constants.MBUS_FRAME_ACK_START: { packet = new AckFrame(); } break; case Constants.MBUS_FRAME_SHORT_START: { //if (stream.Length != 5) // return false; if (start1 != Constants.MBUS_FRAME_SHORT_START) { return(packet); } var control = reader.ReadByte(); var address = reader.ReadByte(); var crc = reader.ReadByte(); if (crc != new byte[] { control, address }.CheckSum()) { return(packet); } var stop = reader.ReadByte(); if (stop != Constants.MBUS_FRAME_STOP) { return(packet); } packet = new ShortFrame(control, address); } break; case Constants.MBUS_FRAME_LONG_START: { const int MBUS_FRAME_FIXED_SIZE_LONG = 6; var length1 = reader.ReadByte(); var length2 = reader.ReadByte(); if (length1 < 3) { return(packet); } if (length1 != length2) { return(packet); } //if (stream.Length < length1 + MBUS_FRAME_FIXED_SIZE_LONG) // return false; var start2 = reader.ReadByte(); if (start2 != Constants.MBUS_FRAME_LONG_START) { return(packet); } var control = reader.ReadByte(); var address = reader.ReadByte(); var controlInformation = reader.ReadByte(); var data = reader.ReadBytes(length1 - 3); if (data.Length != length1 - 3) { return(packet); } var crc = reader.ReadByte(); var stop = reader.ReadByte(); if (crc != new byte[] { control, address, controlInformation }.Merge(data).CheckSum()) { return(packet); } if (length1 - 3 == 0) { packet = new ControlFrame(control, controlInformation, address); } else if ((ControlInformation)controlInformation == ControlInformation.RESP_VARIABLE) { packet = new VariableDataLongFrame(control, controlInformation, address, data, length1); } else if ((ControlInformation)controlInformation == ControlInformation.RESP_FIXED) { packet = new FixedDataLongFrame(control, controlInformation, address, data, length1); } else { throw new NotImplementedException(); } } break; } return(packet); }