private static int Serialize(LongFrame frame, BinaryWriter writer) { writer.Write(frame.Start); writer.Write((byte)(frame.Data.Length + 3)); writer.Write((byte)(frame.Data.Length + 3)); writer.Write(frame.Start); writer.Write((byte)frame.Control); writer.Write(frame.Address); writer.Write((byte)frame.ControlInformation); writer.Write(frame.Data, 0, frame.Data.Length); writer.Write(frame.Crc); writer.Write(frame.Stop); return(9 + frame.Data.Length); }
internal static IReadOnlyCollection <DatapointValue> ParseDatapointValues(LongFrame frame) { if (frame == null) { throw new ArgumentException($"{nameof(frame)} cannot be null"); } var list = new List <DatapointValue>(); var responseData = frame.UserData; var numberOfDps = BitConverter.ToInt16(responseData.Slice(4, 2).ToArray().Reverse().ToArray()); if (numberOfDps == 0) { throw new RequestException((ErrorCodes)responseData.ToArray()[6]); } var pos = 6; for (int i = 0; i < numberOfDps; i++) { var dpId = BitConverter.ToUInt16(ReverseSpan(responseData.Slice(pos, 2))); var dpState = IndexOfSpan(responseData, pos + 2); var dpLength = IndexOfSpan(responseData, pos + 3); var dpValue = responseData.Slice(pos + 4, dpLength); pos += 4 + dpLength; var dp = new DatapointValue { Data = dpValue, DatapointId = dpId, Length = dpLength, State = dpState }; list.Add(dp); } return(list); }