예제 #1
0
        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);
        }
예제 #2
0
        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;
                }
            }
        }
예제 #3
0
        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);
            }
        }