aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs
diff options
context:
space:
mode:
authorMirta <mirta@twine-s.com>2020-12-30 16:39:52 +0200
committerMirta <mirta@twine-s.com>2020-12-30 16:39:52 +0200
commit00a491d93733d4625ad329b2ba8237f445364b3f (patch)
tree4b24c6fa78d7648f4bb7cefafa464bb0b063fec4 /Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs
parent124ad4150f80c6846fdee41dbbda9848c105f6e5 (diff)
downloadTango-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.cs53
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();
}