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