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); }
/// <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); } }