示例#1
0
 /// <summary>
 /// Generated for faults that occur without a prior exception being generated.
 /// </summary>
 /// <param name="fatal">Set to true if the fault requires the serial port to be closed.</param>
 /// <param name="text">Reason for failure (human readable)</param>
 /// <param name="receiver">The Receiver object associated with the VEMCO hardware.</param>
 public ReceiverExceptions(Receiver receiver, string text, Boolean fatal)
 {
     this.fatal = fatal;
     this.text = text;
     this.receiver = receiver;
     this.originatingException = null;
 }
示例#2
0
        /// <summary>
        /// This is the primary service loop which executes in its own thread.  It is started by run()
        /// and is destroyed by shutdown().
        /// </summary>
        private void serialPortsService()
        {
            serviceTime = 1000;
            do
            {
                //check for new COM ports... if there's one that we don't have check to see if it is really a VR2C receiver attached or something else
                foreach (string c in System.IO.Ports.SerialPort.GetPortNames())
                {
                    bool r_contains = false;
                    foreach (Receiver x in receivers)
                    {
                        if (x.portName.Equals(c))
                        {
                            r_contains = true;
                        }
                    }
                    if (!r_contains)
                    {
                        //!!! We need the default values for the serial port.
                        SerialPort availableCOMPort = new SerialPort(c, 9600);
                        try
                        {
                            Receiver r = new Receiver(availableCOMPort, c, dispatcher);
                            receivers.Add(r);
                        }

                        catch (Exception e)
                        {
                            dispatcher.enqueueEvent(new RealTimeEvents.ServerException(e, false));
                        }

                    }
                }

                //check for COM ports that have disappeared or have TTL = 0

                foreach (Receiver r in receivers.ToArray<Receiver>())
                {
                    if (Array.IndexOf(SerialPort.GetPortNames(), r.portName) == -1)
                    {

                        dispatcher.enqueueEvent(new ReceiverSlice.RealTimeEvents.DelReceiver(
                            r, r.portName, null, null, null));

                        receivers.Remove(r);
                    }
                }

                //if TTL = 0, it means that this port has been misbehaving consistently
                //removing it now effectively restarts it during the next service loop

                foreach (Receiver r in receivers.ToList<Receiver>())
                {
                    if (r.TTL <= 0)
                    {
                        receivers.Remove(r);
                        dispatcher.enqueueEvent(new ReceiverSlice.RealTimeEvents.DelReceiver(
                                r, r.portName, null, null, null));
                    }
                }
                Thread.Sleep(serviceTime);
            } while (serviceTime > 0);

            foreach (Receiver r in receivers.ToList<Receiver>())
            {
                r.shutdown();
                receivers.Remove(r);
            }
            serviceTime = -1;
        }