using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.BL;
using Tango.BL.Entities;
using Tango.Integration.Operation;
using Tango.PMR.Integration;
using Tango.Settings;
using Tango.Transport.Adapters;
using Tango.Transport.Transporters;
namespace Tango.Integration.ExternalBridge
{
/// <summary>
/// Represents an external bridge USB client.
/// </summary>
/// <remarks>
/// This isn't really an external bridge client, but merely a transporter for communicating with a Tango machine embedded device.
/// </remarks>
/// <seealso cref="Tango.Transport.Transporters.BasicTransporter" />
/// <seealso cref="Tango.Integration.ExternalBridge.IExternalBridgeClient" />
public class ExternalBridgeUsbClient : MachineOperator, IExternalBridgeClient
{
private String _serialNumber;
/// <summary>
/// Gets the machine serial number.
/// </summary>
public String SerialNumber
{
get { return _serialNumber; }
set
{
_serialNumber = value;
RaisePropertyChangedAuto();
}
}
private String _comPort;
/// <summary>
/// Gets or sets the serial COM port.
/// </summary>
public String ComPort
{
get { return _comPort; }
set { _comPort = value; RaisePropertyChangedAuto(); }
}
private UsbSerialBaudRates _baudRate;
/// <summary>
/// Gets or sets the baud rate.
/// </summary>
public UsbSerialBaudRates BaudRate
{
get { return _baudRate; }
set { _baudRate = value; RaisePropertyChangedAuto(); }
}
private String _Device;
/// <summary>
/// Gets or sets the USB device name.
/// </summary>
public String Device
{
get { return _Device; }
set { _Device = value; RaisePropertyChangedAuto(); }
}
/// <summary>
/// Gets or sets a value indicating whether transport compression is required by the remote machine.
/// </summary>
public bool CompressionEnabled { get; set; }
/// <summary>
/// Connects the transport component.
/// </summary>
/// <returns></returns>
public override async Task Connect()
{
if (Status != MachineStatuses.Upgrading)
{
await Disconnect();
Adapter = new UsbTransportAdapter(ComPort) { BaudRate = BaudRate };
}
await base.Connect();
}
/// <summary>
/// Gets a value indicating whether this client requires authentication.
/// </summary>
public bool RequiresAuthentication => false;
/// <summary>
/// Initializes a new instance of the <see cref="ExternalBridgeUsbClient"/> class.
/// </summary>
/// <param name="comPort">The COM port.</param>
/// <param name="device">The device.</param>
public ExternalBridgeUsbClient(String comPort, String device,UsbSerialBaudRates baudRate = UsbSerialBaudRates.BR_115200)
{
ComponentName = $"External Bridge USB Client {_component_counter++}";
ComPort = comPort;
Device = device;
BaudRate = baudRate;
UseKeepAlive = false;
EnableDiagnostics = true;
}
/// <summary>
/// Returns a <see cref="System.String" /> that represents this instance.
/// </summary>
/// <returns>
/// A <see cref="System.String" /> that represents this instance.
/// </returns>
public override string ToString()
{
return Device;
}
/// <summary>
/// Gets the database machine associated with this client.
/// </summary>
public Machine Machine { get; private set; }
/// <summary>
/// Sets the database machine.
/// </summary>
/// <param name="machine">The machine.</param>
public void SetMachine(Machine machine)
{
Machine = machine;
}
}
}