Ejemplo n.º 1
0
        public string Receive(bool ignoreErrors)
        {
            if (!IsOpened && !IsOpening)
            {
                return("NOT CONNECTED");
            }

            /* reset failure flag if requested */
            if (ignoreErrors)
            {
                TransferFailure = false;
            }

            if (TransferFailure)
            {
                return(TransferString);
            }

            try
            {
                lock (TransferLock)
                {
                    TransferDirection = eTransferDirection.Receive;
                    Monitor.Pulse(TransferLock);

                    while (TransferDirection == eTransferDirection.Receive)
                    {
                        Monitor.Wait(TransferLock, 5);
                    }

                    if (TransferFailure && !ignoreErrors)
                    {
                        RX_FFT.Components.GDI.Log.AddMessage("SerialPortTuner TransferFailure -> DeviceLost");
                        if (DeviceDisappeared != null)
                        {
                            DeviceDisappeared(this, null);
                        }
                    }
                }
            }
            catch (Exception e)
            {
            }

            /* reset failure flag if requested */
            if (ignoreErrors)
            {
                TransferFailure = false;
            }

            return(TransferString);
        }
Ejemplo n.º 2
0
        public void Send(string cmd)
        {
            if (!IsOpened && !IsOpening)
            {
                return;
            }

            if (TransferFailure)
            {
                return;
            }

            try
            {
                lock (TransferLock)
                {
                    TransferDirection = eTransferDirection.Send;
                    TransferString    = cmd;
                    Monitor.Pulse(TransferLock);

                    while (TransferDirection == eTransferDirection.Send)
                    {
                        Monitor.Wait(TransferLock, 5);
                    }
                }

                if (TransferFailure && DeviceDisappeared != null)
                {
                    DeviceDisappeared(this, null);
                }
            }
            catch (Exception e)
            {
            }

            return;
        }
Ejemplo n.º 3
0
        private void TransferThreadMain()
        {
            string lastSendString = "";

            try
            {
                lock (TransferLock)
                {
                    while (true)
                    {
                        Monitor.Wait(TransferLock);
                        bool retry = true;

                        for (int tries = 5; retry && (tries > 0); tries--)
                        {
                            /* default: do not retry transmission */
                            retry = false;
                            try
                            {
                                switch (TransferDirection)
                                {
                                case eTransferDirection.Receive:
                                    TransferString = ReceiveInternal();
                                    TransmitDelay.Stop();
                                    TransmitDuration = TransmitDelay.Duration;
                                    lastSendString   = "";
                                    break;

                                case eTransferDirection.Send:
                                    TransmitDelay.Start();
                                    SendInternal(TransferString);
                                    lastSendString = TransferString;
                                    break;

                                case eTransferDirection.None:
                                    break;
                                }
                            }
                            catch (TimeoutException e)
                            {
                                RX_FFT.Components.GDI.Log.AddMessage("[SerialPortTuner] Failure: TIMEOUT");
                                if (tries == 0 || lastSendString == "")
                                {
                                    TransferString  = "TIMEOUT";
                                    TransferFailure = true;
                                }
                                else
                                {
                                    retry = true;
                                    SendInternal(lastSendString);
                                }
                            }
                            catch (Exception e)
                            {
                                RX_FFT.Components.GDI.Log.AddMessage("[SerialPortTuner] Failure: TRANSFER FAILURE (" + e.ToString() + ")");
                                if (tries == 0 || lastSendString == "")
                                {
                                    TransferString  = "TRANSFER FAILURE";
                                    TransferFailure = true;
                                }
                                else
                                {
                                    retry = true;
                                    SendInternal(lastSendString);
                                }
                            }
                        }
                        TransferDirection = eTransferDirection.None;
                        Monitor.Pulse(TransferLock);
                    }
                }
            }
            catch (ThreadAbortException)
            {
            }
            catch (Exception e)
            {
                Log.AddMessage("Exception: " + e.ToString());
            }
        }