C'è un modo per commutare RTS dopo un tempo preciso dall'invio dell'ultimo byte in trasmissione?
Dipende Handshake dispositivo e non tutti i dispositivi utilizzano il segnale RTS.
public static void Main()
{
string name;
string message;
StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
Thread readThread = new Thread(Read);
// Create a new SerialPort object with default settings.
_serialPort = new SerialPort();
// Allow the user to set the appropriate properties.
_serialPort.PortName = SetPortName("COM1");
_serialPort.BaudRate = SetPortBaudRate(9600);
_serialPort.Parity = SetPortParity(Parity.None);
_serialPort.DataBits = SetPortDataBits(8);
_serialPort.StopBits = SetPortStopBits(StopBits.One);
/*
Viene usato il controllo di flusso hardware RTS (Request-to-Send).
RTS segnala la disponibilità dei dati per la trasmissione.
Se il buffer di input risulta pieno, la riga RTS verrà impostata su false.
La riga RTS verrà impostata su true quando sarà disponibile una maggiore quantità di spazio nel buffer di input.
*/
_serialPort.Handshake = SetPortHandshake(Handshake.RequestToSend);
// Set the read/write timeouts
_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
_serialPort.Open();
_continue = true;
readThread.Start();
Console.Write("Name: ");
name = Console.ReadLine();
Console.WriteLine("Type QUIT to exit");
while (_continue)
{
message = Console.ReadLine();
if (stringComparer.Equals("quit", message))
{
_continue = false;
}
else
{
_serialPort.WriteLine(
String.Format("<{0}>: {1}", name, message));
}
}
readThread.Join();
_serialPort.Close();
}
public static void Read()
{
while (_continue)
{
try
{
string message = _serialPort.ReadLine();
Console.WriteLine(message);
}
catch (TimeoutException) { }
}
}