public void Close() { // // Time to go... // runFlag = false; while (tncChannelList.Count > 0) { TNCChannel tmpC = tncChannelList[0]; tmpC.Close(); Thread.Sleep(200); // Give Close a chance to finish. W4PHS 23-Jan-2015 tncChannelList.Remove(tmpC); } // // Close down any outbound queues. Any threads waiting on those queues will be signaled // for (Int32 i = 0; i < 16; i++) { if (recvQs[i] != null) { recvQs[i].enabled = false; recvQs[i] = null; } } if (!loopBackMode && !TCPMode) // We don't use the serial port in loopback mode { // Remove the event handler port.DataReceived -= comHandler; } receivePortDataQueue.enabled = false; sendQ.enabled = false; if (TCPMode && client != null) // (JNW Feb15) { // Close TCP Connection netStream.Dispose(); client.Close(); Thread.Sleep(200); } if (!loopBackMode && !TCPMode) // We don't use the serial port in loopback mode { Thread.Sleep(200); port.DiscardInBuffer(); port.DiscardOutBuffer(); port.Close(); Thread.Sleep(200); // Give Close a chance to finish. W4PHS 23-Jan-2015 port.Dispose(); Thread.Sleep(200); // Give Close a chance to finish. W4PHS 23-Jan-2015 } }
// // Constructor // public TNCChannelInterface(COMPort kissComPort, Int32 tncChannelNumber) { // // Create the object for communicating to the TNC via the specified TNC channel // channel = new TNCChannel(kissComPort, tncChannelNumber); LinkRecvThread = new Thread(RecvFromPort); LinkRecvThread.Start(); }
public TNCChannel CreateChannel(Int32 channelNumber) { TNCChannel tmpChannel; // // Create a TNC channel on top of this com port // if (channelNumber < 0 || channelNumber > 15) { throw new Exception("Channel number must be between 0 and 15 inclusive"); } tmpChannel = new TNCChannel(this, channelNumber); tncChannelList.Add(tmpChannel); recvQs[channelNumber] = new BlockingQueue(MAXQUEUESIZE); // One receive queue for each channel return(tmpChannel); }
// // Constructor // public DataLinkProvider(String callSign, TNCChannel channel) { _localTncChannel = channel; _localStationAddress = new StationAddress(callSign); timerSegmenterHandler = new ElapsedEventHandler(timerSegmenter_Elapsed); timerSegmenter = new Timer(timerSegmenterHandler, "UI Segmenter - " + _localStationAddress.stationIDString); timerSegmenter.SetTime(1000 * 60 * 10); // 10 munite segmenter timeout timerTestCommandTimeoutHandler = new ElapsedEventHandler(timerTestCommandTimeout_Elapsed); timerTestCommandTimeout = new Timer(timerTestCommandTimeoutHandler, "TestCommandTimeout - " + _localStationAddress.stationIDString); timerBeaconHandler = new ElapsedEventHandler(timerBeacon_Elapsed); timerBeacon = new Timer(timerBeaconHandler, "Beacon for - " + _localStationAddress.stationIDString); // // Start processing // DataLinkThread = new Thread(ProcessDLPackets); DataLinkThread.Name = "DataLinkProvider Packet Processing Thread for Station: " + _localStationAddress.stationIDString; DataLinkThread.Start(); }