private void ParseReadoutReply(GXPacket packet, GXMBusCategory category) { List<byte> dataBuff = new List<byte>(); dataBuff.Add((byte)packet.Bop); dataBuff.AddRange((byte[])packet.ExtractData(typeof(byte[]), 0, -1)); dataBuff.Add((byte)packet.Checksum); dataBuff.Add((byte)packet.Eop); List<MBusRegister> registers = MBus.ParseReadReply(dataBuff.ToArray()); for (int pos = 0; pos < registers.Count; ++pos) { foreach (GXMBusProperty it in category.Properties) { if (it.Ordinal == pos) { it.SetValue(registers[pos].Value, false, PropertyStates.ValueChangedByDevice); break; } } } }
/// <summary> /// Create a copy of the GXPacket. /// </summary> public void Copy(GXPacket source) { Clear(); lock (source.SyncRoot) { AppendData(source.ExtractData(typeof(byte[]), 0, -1)); this.Bop = source.Bop; this.Eop = source.Eop; this.ChecksumSettings.Copy(source.ChecksumSettings); this.Sender = source.Sender; } }
private bool IsReadoutComplete(object sender, GXPacket packet) { byte cField = (byte)packet.ExtractData(typeof(System.Byte), 3, 1); byte fcv = (byte) (cField & MASK_FCV); byte fcb = (byte) (cField & MASK_FCB); if (sender is GXMBusCategory) { ParseReadoutReply(packet, sender as GXMBusCategory); } else { //This should never happen throw new Exception("Unknown parameter \"sender\" in IsReadoutComplete."); } packet.Clear(); if (fcv == 0) { return true; } else { m_PreviousFCB = fcb; return false; } }