public MessageDirectedType CheckIsMessageIntendedForMe(KNXAddress IndividualAddres, KNXAddress[] GroupAdresses) { if (this.DestinationAddressType == DestinationAddressFieldType.Individual) { if (this.TargetAddress.knxAddress == IndividualAddres.knxAddress) { //directed to address return(MessageDirectedType.IndividualAdressed); } } if (this.TargetAddress.knxAddress == 0) { return(MessageDirectedType.Broadcast); } else { if (GroupAdresses != null) { foreach (KNXAddress k in GroupAdresses) { if (k == this.TargetAddress) { return(MessageDirectedType.GroupValueAdressed); } } } } return(MessageDirectedType.NotAddressedToDevice); }
public void ProcessKNXMessage(byte[] stagedPacket) { try { int dataIndex = 0; //Control Field ControlField = new knxControlField(stagedPacket[dataIndex++]); switch (ControlField.PacketType) { case knxControlField.KnxPacketType.KNX_PacketLong: //Extended Control Field, only for long packet ExtendedControlField = new KnxExtendedControlField(stagedPacket[dataIndex++]); break; case knxControlField.KnxPacketType.KNX_PacketShort: break; default: throw new InvalidDataException(); } //Source address field SourceAddress = KNXAddress.FromReversedBytes(stagedPacket[dataIndex++], stagedPacket[dataIndex++]); //Target address field TargetAddress = KNXAddress.FromReversedBytes(stagedPacket[dataIndex++], stagedPacket[dataIndex++]); switch (ControlField.PacketType) { case knxControlField.KnxPacketType.KNX_PacketLong: //Payload Lenght, for long Packet LongPacketDatalenght = (stagedPacket[dataIndex++]); //Payload Payload = new KNXPayload(stagedPacket, dataIndex++, this); break; case knxControlField.KnxPacketType.KNX_PacketShort: //DafSuLen for short Packet dafLSDU = new KNXDafLSDU(stagedPacket[dataIndex++]); //Payload Payload = new KNXPayload(stagedPacket, dataIndex++, this); //Page https://support.knx.org/hc/en-us/articles/115003188529-Payload not totally clear on how this is formatted //This implementation seems to work for F@H /*if (PayloadLenght == 0) * Console.WriteLine("No payload\\Apci"); * else if (PayloadLenght == 1) * { * Console.WriteLine("Short payload with Apci"); * Apci = new KNXApci(stagedPacket[dataIndex], stagedPacket[dataIndex++]); * } * else * { * Console.WriteLine("Long payload with Apci"); * Apci = new KNXApci(stagedPacket[dataIndex++], stagedPacket[dataIndex++]); * }*/ break; default: throw new InvalidDataException(); } } catch (Exception e) { throw new Exception("Unable to process bytedata to KNXMessage", e); } }