public static KNXmessage CreateResponse(FAHFunctionPropertyCommand MessageToRespondTo, FaHDevice atHomeDevice) { if (MessageToRespondTo.PropertyControl != FAHFunctionPropertyCommand.PropertyControlTypes.ReadDesc) { throw new InvalidCastException(); } bool moreIndices = false; int OIDindex = MessageToRespondTo.PropertyID; byte[] bData; byte indice = 0; if (MessageToRespondTo.FieldID != null) { indice = (byte)(MessageToRespondTo.FieldID); } if (!atHomeDevice.ReadOIDData(MessageToRespondTo.ObjectID, MessageToRespondTo.PropertyID, indice, out bData, out moreIndices)) { return(MessageToRespondTo.CreateInvalidIndexMessage()); } //OidChannel 5 needs ShortPkg! (currently based on packet payload lenght) KNXmessage kNXmessage; if (bData.Length < 5) { kNXmessage = new KNXmessage(knxControlField.KnxPacketType.KNX_PacketShort); } else { kNXmessage = new KNXmessage(knxControlField.KnxPacketType.KNX_PacketLong); } kNXmessage.DestinationAddressType = KNXmessage.DestinationAddressFieldType.Individual; const int HEADERSIZE = 5; //Todo, check lenght? uint payloadSize = (uint)(HEADERSIZE + bData.Length); kNXmessage.Payload.NewPayload(KNXAdpu.ApduType.FunctionPropertyStateResponse, payloadSize); kNXmessage.Payload.ReadablePayloadPacket = new FPSR_DeviceOIDData(kNXmessage.Payload); FPSR_DeviceOIDData newPkg = (FPSR_DeviceOIDData)kNXmessage.Payload.ReadablePayloadPacket; newPkg.UpdatePacketSettings(); newPkg.FPSRpayload = bData; newPkg.PropertyID = MessageToRespondTo.PropertyID; newPkg.ObjectID = MessageToRespondTo.ObjectID; if (moreIndices) { newPkg.resultCode = KNXHelpers.knxPropertyReturnValues.MoreIndices; } else { newPkg.resultCode = KNXHelpers.knxPropertyReturnValues.Success; } return(kNXmessage); }