diff options
| author | Mirta <mirta@twine-s.com> | 2020-12-30 16:39:52 +0200 |
|---|---|---|
| committer | Mirta <mirta@twine-s.com> | 2020-12-30 16:39:52 +0200 |
| commit | 00a491d93733d4625ad329b2ba8237f445364b3f (patch) | |
| tree | 4b24c6fa78d7648f4bb7cefafa464bb0b063fec4 /Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs | |
| parent | 124ad4150f80c6846fdee41dbbda9848c105f6e5 (diff) | |
| download | Tango-00a491d9.tar.gz Tango-00a491d9.zip | |
merge
Diffstat (limited to 'Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs | 53 |
1 files changed, 12 insertions, 41 deletions
diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs b/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs index 4785e11c8..3b9ca7b55 100644 --- a/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs +++ b/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs @@ -19,7 +19,6 @@ namespace Tango.Transport.Adapters public class UsbTransportAdapter : TransportAdapterBase { private SerialPort _serialPort; //Serial port instance used to communicate over the serial port. - private const int MAX_EXPECTED_SIZE = 50000; /// <summary> /// Gets or sets the baud rate. @@ -33,7 +32,6 @@ namespace Tango.Transport.Adapters { BaudRate = UsbSerialBaudRates.BR_9600; Address = "COM1"; - ComponentName = $"USB Adapter {_component_counter++}"; } /// <summary> @@ -67,7 +65,7 @@ namespace Tango.Transport.Adapters if (State != TransportComponentState.Connected) { - ThreadFactory.StartNew(() => + Task.Factory.StartNew(() => { try { @@ -80,6 +78,7 @@ namespace Tango.Transport.Adapters _serialPort = new SerialPort(); _serialPort.BaudRate = BaudRate.ToInt32(); + _serialPort.DataReceived += OnSerialPortDataReceived; _serialPort.PortName = Address; _serialPort.ReadBufferSize = MAX_BUFFER_SIZE; _serialPort.WriteBufferSize = MAX_BUFFER_SIZE; @@ -87,11 +86,6 @@ namespace Tango.Transport.Adapters _serialPort.DiscardInBuffer(); _serialPort.DiscardOutBuffer(); - - _serialPort.DataReceived += OnSerialPortDataReceived; - - LogManager.Log($"USB adapter ({Address}) Connected..."); - State = TransportComponentState.Connected; if (!source.Task.IsCompleted) @@ -138,7 +132,7 @@ namespace Tango.Transport.Adapters if (State == TransportComponentState.Connected) { - ThreadFactory.StartNew(() => + Task.Factory.StartNew(() => { try { @@ -155,11 +149,9 @@ namespace Tango.Transport.Adapters //_serialPort.DiscardInBuffer(); _serialPort.Close(); _serialPort.Dispose(); - _serialPort.DataReceived -= OnSerialPortDataReceived; - - LogManager.Log("USB adapter disconnected."); State = TransportComponentState.Disconnected; + LogManager.Log("USB adapter disconnected."); } catch (Exception ex) { @@ -202,8 +194,7 @@ namespace Tango.Transport.Adapters /// Writes the specified data to the stream. /// </summary> /// <param name="data">The data.</param> - /// <param name="immidiate">Writes the data as soon as possible while ignoring any message queuing and batching.</param> - public override void Write(byte[] data, bool immidiate = false) + public override void Write(byte[] data) { ThrowIfDisposed(); @@ -214,7 +205,7 @@ namespace Tango.Transport.Adapters } catch (Exception ex) { - OnFailed(LogManager.Log(ex, $"Error writing to USB adapter ({Address}).")); + OnFailed(LogManager.Log(ex, "Error writing to the serial port.")); } } @@ -227,10 +218,7 @@ namespace Tango.Transport.Adapters { try { - if (e.EventType == SerialData.Eof) - { - return; - } + if (e.EventType == SerialData.Eof) return; if (_serialPort.BytesToRead > 4) { @@ -238,22 +226,6 @@ namespace Tango.Transport.Adapters _serialPort.Read(size, 0, size.Length); int expectedSize = BitConverter.ToInt32(size, 0); - if (expectedSize > MAX_EXPECTED_SIZE || expectedSize < 1) - { - LogManager.Log($"Invalid expected size received on USB adapter ({expectedSize} bytes). Discarding buffers...", LogCategory.Warning); - - byte[] falseData = new byte[_serialPort.BytesToRead]; - _serialPort.Read(falseData, 0, falseData.Length); - - try - { - _serialPort.DiscardInBuffer(); - _serialPort.DiscardOutBuffer(); - } - catch { } - return; - } - byte[] data = new byte[expectedSize]; int read = 0; @@ -261,13 +233,11 @@ namespace Tango.Transport.Adapters { read += _serialPort.Read(data, read, Math.Min(_serialPort.BytesToRead, expectedSize - read)); + //Thread.Sleep(2); + if (State != TransportComponentState.Connected) { - if (_serialPort != null) - { - _serialPort.DataReceived -= OnSerialPortDataReceived; - } - return; + break; } } @@ -277,7 +247,7 @@ namespace Tango.Transport.Adapters } catch (Exception ex) { - LogManager.Log(ex, $"Error occurred while trying to read from the serial port ({Address})."); + LogManager.Log(ex, "Error occurred while trying to read from the serial port."); } } @@ -290,6 +260,7 @@ namespace Tango.Transport.Adapters { try { + LogManager.Log("Finalizing USB transport adapter."); _serialPort.Close(); _serialPort.Dispose(); } |
