public static KNXmessage CreateReadResponse(FAHFunctionPropertyCommand MessageToRespondTo, FaHDevice atHomeDevice) { try { if (MessageToRespondTo.PropertyControl != FAHFunctionPropertyCommand.PropertyControlTypes.ReadBasicInfo) { throw new InvalidCastException(); } int ChannelIndex = MessageToRespondTo.ObjectID; int propIndex = MessageToRespondTo.PropertyID; int fieldID = (int)MessageToRespondTo.FieldID; byte[] bData;//= atHomeDevice.Channels[ChannelIndex].Properties[propIndex].FieldData[fieldID].data; bool moreIndices; if (!atHomeDevice.ReadPropertyValue(ChannelIndex, propIndex, fieldID, out bData, out moreIndices)) { return(MessageToRespondTo.CreateCommandNotSupportedMessage()); } KNXmessage kNXmessage = new KNXmessage(knxControlField.KnxPacketType.KNX_PacketShort) { 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_PropertyValueRead(kNXmessage.Payload); FPSR_PropertyValueRead newPkg = (FPSR_PropertyValueRead)kNXmessage.Payload.ReadablePayloadPacket; newPkg.UpdatePacketSettings(); newPkg.FPSRpayload = bData; newPkg.PropertyID = MessageToRespondTo.PropertyID; newPkg.ObjectID = MessageToRespondTo.ObjectID; newPkg.FieldID = (byte)MessageToRespondTo.FieldID; if (moreIndices) { newPkg.resultCode = KNXHelpers.knxPropertyReturnValues.MoreIndices; } else { newPkg.resultCode = KNXHelpers.knxPropertyReturnValues.Success; } return(kNXmessage); } catch { return(MessageToRespondTo.CreateCommandNotSupportedMessage()); } }
public static KNXmessage CreateReadResponse(FAHFunctionPropertyCommand MessageToRespondTo, FaHDevice atHomeDevice) { try { if (MessageToRespondTo.PropertyControl != FAHFunctionPropertyCommand.PropertyControlTypes.ReadDevHealth) { throw new InvalidCastException(); } byte[] bData = atHomeDevice.DeviceHealthStatus.ByteData; KNXmessage kNXmessage = new KNXmessage(knxControlField.KnxPacketType.KNX_PacketLong) { 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_ReadDeviceHealth(kNXmessage.Payload); FPSR_ReadDeviceHealth newPkg = (FPSR_ReadDeviceHealth)kNXmessage.Payload.ReadablePayloadPacket; newPkg.UpdatePacketSettings(); newPkg.FPSRpayload = bData; newPkg.PropertyID = MessageToRespondTo.PropertyID; newPkg.ObjectID = MessageToRespondTo.ObjectID; return(kNXmessage); } catch { return(MessageToRespondTo.CreateCommandNotSupportedMessage()); } }
/* * FunctionPropertyStateResponse KNX_PRIORITY_NORMAL H:6, Single, FF:0x00 [0x6F-0x01] [0x00-0x01] Ch007:1->Success * 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 * 0x02 0xC9 0x07 0x01 0x00 0x01 0x00 0x12 0x00 0xEC 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x01 * * * * * FlID */ public static KNXmessage CreateResponse(FAHFunctionPropertyCommand MessageToRespondTo, FaHDevice atHomeDevice) { if (MessageToRespondTo.PropertyControl != FAHFunctionPropertyCommand.PropertyControlTypes.ReadFuncList) { throw new InvalidCastException(); } //TODO, add as actual param to device! //FahDeviceParametersNew p = new FahDeviceParametersNew(); //p.dataType = FahDeviceParametersNew.ParameterType.deviceInfo; //p.Response = KNXHelpers.knxPropertyReturnValues.Success; /* * if (atHomeDevice.FunctionList == null) * { * atHomeDevice.FunctionList = new byte[] { 0x01, 0x00, 0x12, 0x00, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01 }; * atHomeDevice.Serialize("input. * "); * }*/ KNXmessage kNXmessage = new KNXmessage(knxControlField.KnxPacketType.KNX_PacketLong); kNXmessage.DestinationAddressType = KNXmessage.DestinationAddressFieldType.Individual; const int HEADERSIZE = 5; bool moreIndices; byte[] bData; // atHomeDevice.Channels[MessageToRespondTo.ObjectID].Properties[MessageToRespondTo.PropertyID].FunctionList[(byte)MessageToRespondTo.FieldID].data; if (!atHomeDevice.ReadFunctionList(MessageToRespondTo.ObjectID, MessageToRespondTo.PropertyID, (int)MessageToRespondTo.FieldID, out bData, out moreIndices)) { return(MessageToRespondTo.CreateCommandNotSupportedMessage()); } //Todo, check lenght? uint payloadSize = (uint)(HEADERSIZE + bData.Length); kNXmessage.Payload.NewPayload(KNXAdpu.ApduType.FunctionPropertyStateResponse, payloadSize); kNXmessage.Payload.ReadablePayloadPacket = new FPSR_FunctionList(kNXmessage.Payload); FPSR_FunctionList newPkg = (FPSR_FunctionList)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); }
public static KNXmessage CreateResponse(FAHFunctionPropertyCommand MessageToRespondTo, FaHDevice atHomeDevice) { if (MessageToRespondTo.PropertyControl != FAHFunctionPropertyCommand.PropertyControlTypes.ReadConns) { throw new InvalidCastException(); } int ChannelIndex = MessageToRespondTo.ObjectID; int propIndex = MessageToRespondTo.PropertyID; byte requestedIndice; byte propertyInfo; bool moreIndices; KNXAddress[] GroupValueAddress; //byte[] additionalData = null; uint payloadSize = (uint)(FPSRHEADERSIZE + 2); if (MessageToRespondTo.FPCpayload == null) { requestedIndice = 0; //There is no field requested; default to 0 } else { requestedIndice = MessageToRespondTo.FPCpayload[0]; } if (!atHomeDevice.ReadConnectionValue(ChannelIndex, propIndex, requestedIndice, out propertyInfo, out GroupValueAddress, out moreIndices)) { return(MessageToRespondTo.CreateCommandNotSupportedMessage()); } KNXmessage kNXmessage = new KNXmessage(knxControlField.KnxPacketType.KNX_PacketShort) { DestinationAddressType = KNXmessage.DestinationAddressFieldType.Individual }; if (GroupValueAddress != null) { payloadSize += (uint)GroupValueAddress.Length * 2; //Address is not empty, add space to store it. /*if (additionalData != null) * { * payloadSize += (uint)additionalData.Length; * }*/ } kNXmessage.Payload.NewPayload(KNXAdpu.ApduType.FunctionPropertyStateResponse, payloadSize); kNXmessage.Payload.ReadablePayloadPacket = new FPSR_ConnectionInfo(kNXmessage.Payload); FPSR_ConnectionInfo newPkg = (FPSR_ConnectionInfo)kNXmessage.Payload.ReadablePayloadPacket; newPkg.UpdatePacketSettings(); newPkg.ConnectionID = requestedIndice; newPkg.ConnectionSubIndexID = propertyInfo; if (GroupValueAddress != null) { newPkg.GroupValueAddress = GroupValueAddress; /*if(additionalData!=null) * { * * }*/ } newPkg.PropertyID = MessageToRespondTo.PropertyID; newPkg.ObjectID = MessageToRespondTo.ObjectID; if (moreIndices && requestedIndice != 0) //for 0 (no params) there are no more indices to report { newPkg.resultCode = KNXHelpers.knxPropertyReturnValues.MoreIndices; } else { newPkg.resultCode = KNXHelpers.knxPropertyReturnValues.Success; } return(kNXmessage); }
public static KNXmessage CreateResponse(FAHFunctionPropertyCommand MessageToRespondTo, FaHDevice atHomeDevice) { if (MessageToRespondTo.PropertyControl != FAHFunctionPropertyCommand.PropertyControlTypes.ReadBasicInfo && MessageToRespondTo.PropertyControl != FAHFunctionPropertyCommand.PropertyControlTypes.ReadDesc) { throw new InvalidCastException(); } int ChannelIndex = MessageToRespondTo.ObjectID; //TODO, add as actual param to device and index! //FahDeviceParametersNew p = new FahDeviceParametersNew(); //p.dataType = FahDeviceParametersNew.ParameterType.deviceInfo; //p.Response = KNXHelpers.knxPropertyReturnValues.Success; /* * if (atHomeDevice.Channels[ChannelIndex].DeviceChannelInfo == null) * { * if(ChannelIndex==0) * atHomeDevice.Channels[ChannelIndex].DeviceChannelInfo = new byte[] { 0x00, 0x80, 0x00, 0x43, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x55 }; * else if (ChannelIndex == 1) * atHomeDevice.Channels[ChannelIndex].DeviceChannelInfo = new byte[] { 0x00, 0x40, 0x00, 0x45, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x2A }; * else if (ChannelIndex == 2) * atHomeDevice.Channels[ChannelIndex].DeviceChannelInfo = new byte[] { 0x00, 0x60, 0x00, 0x46, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x2A }; * else if (ChannelIndex == 3) * atHomeDevice.Channels[ChannelIndex].DeviceChannelInfo = new byte[] { 0x00, 0x80, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x55 }; * else if (ChannelIndex == 4) * atHomeDevice.Channels[ChannelIndex].DeviceChannelInfo = new byte[] { 0x00, 0x40, 0x00, 0x47, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x2A }; * else if (ChannelIndex == 5) * atHomeDevice.Channels[ChannelIndex].DeviceChannelInfo = new byte[] { 0x00, 0x60, 0x00, 0x48, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x2A }; * else if (ChannelIndex == 6) * atHomeDevice.Channels[ChannelIndex].DeviceChannelInfo = new byte[] { 0x02, 0x60, 0x00, 0x4F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xAA }; * else * atHomeDevice.Channels[ChannelIndex].DeviceChannelInfo = new byte[] { 0x00}; * atHomeDevice.Serialize("input.json"); * }*/ KNXmessage kNXmessage = new KNXmessage(knxControlField.KnxPacketType.KNX_PacketLong) { DestinationAddressType = KNXmessage.DestinationAddressFieldType.Individual }; const int HEADERSIZE = 5; byte[] bData; if (!atHomeDevice.ReadChannelInfo(ChannelIndex, out bData)) { return(MessageToRespondTo.CreateCommandNotSupportedMessage()); } //Todo, check lenght? uint payloadSize = (uint)(HEADERSIZE + bData.Length); kNXmessage.Payload.NewPayload(KNXAdpu.ApduType.FunctionPropertyStateResponse, payloadSize); kNXmessage.Payload.ReadablePayloadPacket = new FPSR_DeviceChannelInfo(kNXmessage.Payload); FPSR_DeviceChannelInfo newPkg = (FPSR_DeviceChannelInfo)kNXmessage.Payload.ReadablePayloadPacket; newPkg.UpdatePacketSettings(); newPkg.FPSRpayload = bData; newPkg.PropertyID = MessageToRespondTo.PropertyID; newPkg.ObjectID = MessageToRespondTo.ObjectID; newPkg.resultCode = KNXHelpers.knxPropertyReturnValues.Success; return(kNXmessage); }