private static bool ProcessResponse(out bool moreIndices, bool keepKNxPacketResult = false, bool WriteToDevice = true) { while (knxMsgtoProcess == null) { //Todo add exit counter Thread.Sleep(5); } moreIndices = false; FahPayloadInterpeter.TryToInterpret(ref knxMsgtoProcess); if (knxMsgtoProcess.Payload.Apdu.apduType == KNXAdpu.ApduType.FunctionPropertyStateResponse) { knxMsgtoProcess.Payload.ReadablePayloadPacket = ((FAHFunctionPropertyStateResponse)knxMsgtoProcess.Payload.ReadablePayloadPacket).ProcessPayload(lastRequestedPropertyControl, ByteDataParm); FAHFunctionPropertyStateResponse fAHFunction = knxMsgtoProcess.Payload.ReadablePayloadPacket as FAHFunctionPropertyStateResponse; ConsoleWriteOnEmptyLine(string.Format("Processing {0} ", knxMsgtoProcess.HeaderAsString)); knxMsgtoProcess.Payload.ReadablePayloadPacket.PrintUnaccountedBytes(); if (keepKNxPacketResult) { knxLastMsgProcessed = knxMsgtoProcess; } if (fAHFunction.resultCode == KNXHelpers.knxPropertyReturnValues.MoreIndices || fAHFunction.resultCode == KNXHelpers.knxPropertyReturnValues.Success) { if (!WriteToDevice) { if (fAHFunction.resultCode == KNXHelpers.knxPropertyReturnValues.MoreIndices) { moreIndices = true; } else { moreIndices = false; } Thread.Sleep(100); knxMsgtoProcess = null; return(true); } if (fAHFunction.SaveToDevice(ref deviceToLearn, out moreIndices)) { if (fAHFunction.resultCode == KNXHelpers.knxPropertyReturnValues.MoreIndices) { moreIndices = true; } else { moreIndices = false; } Thread.Sleep(100); knxMsgtoProcess = null; return(true); } } knxMsgtoProcess = null; } return(false); }
private void KNXUart_OnKNXMessage(KNXNetworkLayerTemplate caller, KNXBaseTypes.KNXmessage Message, KNXNetworkLayerTemplate.KnxPacketEvents uartEvent) { if (Message.ControlField.RepeatFrame) { return; } if (Message.TargetAddress == knxGroupToMonitor) { FahPayloadInterpeter.TryToInterpret(ref Message); switch (Message.Payload.Apdu.apduType) { case KNXAdpu.ApduType.GroupValueWrite: FAHGroupValueWrite fAHGroupValueWrite = new FAHGroupValueWrite(Message.Payload); Console.Write("GroupMonitor: {0}; {1} ", Message.Timestamp.ToString(KNXHelpers.DateTimeFormat), Message.HeaderAsString); data = fAHGroupValueWrite.MessageData; OnGroupValueChange?.Invoke(this, data); Message.Payload.ReadablePayloadPacket.PrintUnaccountedBytes(false); break; case KNXAdpu.ApduType.GroupValueRead: FAHGroupValueRead fAHGroupValueRead = new FAHGroupValueRead(Message.Payload); Console.Write("GroupMonitor: {0}; {1} ", Message.Timestamp.ToString(KNXHelpers.DateTimeFormat), Message.HeaderAsString); Message.Payload.ReadablePayloadPacket.PrintUnaccountedBytes(false); break; case KNXAdpu.ApduType.GroupValueResponse: FAHGroupValueResponse fAHGroupValueReponse = new FAHGroupValueResponse(Message.Payload); Console.Write("GroupMonitor: {0}; {1} ", Message.Timestamp.ToString(KNXHelpers.DateTimeFormat), Message.HeaderAsString); data = fAHGroupValueReponse.MessageData; OnGroupValueChange?.Invoke(this, data); Message.Payload.ReadablePayloadPacket.PrintUnaccountedBytes(false); break; default: Console.WriteLine("???" + Message.Payload.Apdu.apduType); break; } } }
private static void KNXUart_OnKNXMessage(KNXNetworkLayerTemplate caller, KNXBaseTypes.KNXmessage Message, KNXNetworkLayerTemplate.KnxPacketEvents uartEvent) { stdOut.WriteOut(Message); try { FahPayloadInterpeter.TryToInterpret(ref Message); if (Message.Payload.Apdu.apduType == KNXAdpu.ApduType.FunctionPropertyStateResponse) { Message.Payload.ReadablePayloadPacket = ((FAHFunctionPropertyStateResponse)Message.Payload.ReadablePayloadPacket).ProcessPayload(lastRequestedPropertyControl, ByteDataParm); if (((FAHFunctionPropertyStateResponse)Message.Payload.ReadablePayloadPacket).resultCode != KNXHelpers.knxPropertyReturnValues.CommandNotSupported) { /* * bool more; * if (!((FAHFunctionPropertyStateResponse)Message.Payload.ReadablePayloadPacket).SaveToDevice(ref fahDevToLearn, out more)) * { * Console.BackgroundColor = ConsoleColor.Red; * Console.Write("Not saved: "); * Console.BackgroundColor = ConsoleColor.Black; * }*/ } } else if (Message.Payload.Apdu.apduType == KNXAdpu.ApduType.FunctionPropertyCommand) { ((FAHFunctionPropertyCommand)Message.Payload.ReadablePayloadPacket).GetPropertyControlForReply(ref ByteDataParm, ref lastRequestedPropertyControl); } string ret = string.Format("{0}; {1} ", Message.Timestamp.ToString(KNXHelpers.DateTimeFormat), Message.HeaderAsString); Console.Write(ret); Message.Payload.ReadablePayloadPacket.PrintUnaccountedBytes(false); switch (Message.Payload.Apdu.apduType) { case KNXAdpu.ApduType.IndividualAddressSerialNumberWrite: var fasnw = Message.Payload.ReadablePayloadPacket as FAHIndividualAddressSerialNumberWrite; /* * bool more; * fasnw.SaveToDevice(ref fahDevToReturn, out more); */ //Succes return; case KNXAdpu.ApduType.DeviceDescriptorRead: //LastCreatedMsg = FAHDeviceDescriptorResponse.CreateResponse(fahDevToReturn, Message.SourceAddress); return; case KNXAdpu.ApduType.GroupValueWrite: return; case KNXAdpu.ApduType.FunctionPropertyCommand: var fpc = Message.Payload.ReadablePayloadPacket as FAHFunctionPropertyCommand; /*KNXmessage k = fpc.ProcessAndCreateResponse(fahDevToReturn); * if (k != null) * { * LastCreatedMsg = k; * }*/ break; case KNXAdpu.ApduType.DeviceDescriptorResponse: FAHDeviceDescriptorResponse fAHDeviceDescriptorResponse = Message.Payload.ReadablePayloadPacket as FAHDeviceDescriptorResponse; /*bool mi; * fAHDeviceDescriptorResponse.SaveToDevice(ref fahDevToLearn, out mi); * * var z = fAHDeviceDescriptorResponse.FahDeviceAddress; * if (fAHDeviceDescriptorResponse.FahDeviceAddress == fahDevToReturn.FaHAddress) * { * if (LastCreatedMsg.ToHexString() != Message.ToHexString()) * { * Console.BackgroundColor = ConsoleColor.Blue; * Console.WriteLine("Gen: {0}", LastCreatedMsg.ToHexString()); * Console.BackgroundColor = ConsoleColor.Red; * Console.WriteLine("Err: {0}", Message.ToHexString()); * } * Console.BackgroundColor = ConsoleColor.Black; * Console.WriteLine("------------------------------------------------------------------------------------------------------------------------------------"); * LastCreatedMsg = new KNXmessage(knxControlField.KnxPacketType.KNX_PacketShort); * * } */ break; default: /*if (LastCreatedMsg.ToHexString() != Message.ToHexString()) * { * Console.BackgroundColor = ConsoleColor.Blue; * Console.WriteLine("Gen: {0}", LastCreatedMsg.ToHexString()); * Console.BackgroundColor = ConsoleColor.Red; * Console.WriteLine("Err: {0}", Message.ToHexString()); * }*/ Console.BackgroundColor = ConsoleColor.Black; Console.WriteLine("------------------------------------------------------------------------------------------------------------------------------------"); LastCreatedMsg = new KNXmessage(knxControlField.KnxPacketType.KNX_PacketShort); break; } } catch (Exception e) { Console.Write("Error parsing: " + e); } }