Ejemplo n.º 1
0
        public WcaInterfaceCommandResult SendCommandSync(WcaInterfaceAddress destination, byte cmd, byte[] data, out byte[] receivedData)
        {
            //  byte result = 0;
            receivedData = null;
            WcaInterfaceCommandResult result = WcaInterfaceCommandResult.ExecutionTimeout;

            if (m_Initilized)
            {
                GeneralCommand gcmd = new GeneralCommand(m_SerialInterface, 0x01, cmd, data, "");
                m_Target.Queue(gcmd);
                m_Target.Wait();

                if (gcmd.Result == WcaInterfaceCommandResult.PosAck)
                {
                    receivedData = gcmd.ReveivedData;
                }/*
                  * else if (gcmd.Result == WcaInterfaceCommandResult.NegAck)
                  * {
                  * result = 2;
                  * // receivedData = gcmd.ReveivedData;
                  * }
                  * else
                  * {
                  * result = 3;
                  * }*/
                result = gcmd.Result;
            }
            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// This method is called by the Target in a separate thread
        /// </summary>
        public virtual void Execute(resend myRerun)
        {
            m_TransmitTelegram = new ProtocolFrame(m_DestinationAddress, m_Command, m_Data);
            {
                m_Latch.Reset();
                IsTimeout = false;
                m_Interface.RegisterListener(this);
                m_CommandResult = WcaInterfaceCommandResult.InProgress;

                m_Interface.Send(m_TransmitTelegram.Telegram);
                try
                {
                    if (!m_Latch.WaitOne(Timeout))
                    {
                        //timeout
                        IsTimeout       = true;
                        m_CommandResult = WcaInterfaceCommandResult.ExecutionTimeout;

                        if (myRerun != null)
                        {
                            myRerun(m_Interface.GetName(), m_Command, m_Data, m_Name);
                        }
                    }
                    else if (Validate(m_ReceivedTelegrams))
                    {
                        m_CommandResult = WcaInterfaceCommandResult.PosAck;
                    }
                    else
                    {
                        m_CommandResult = WcaInterfaceCommandResult.NegAck;
                        if (myRerun != null)
                        {
                            myRerun(m_Interface.GetName(), m_Command, m_Data, m_Name);
                        }
                    }

                    m_Latch.Reset();
                }
                catch (System.Exception ex)
                {
                    Debug.WriteLine(ex);
                }
                m_Interface.UnregisterListener(this);

                NotifyListener(this);
            }
        }