mirror of
https://github.com/gnh1201/welsonjs.git
synced 2025-11-27 18:11:20 +00:00
Make serial buffer resets optional and improve receive loop
This commit is contained in:
parent
3ce8d12628
commit
9f4219e971
|
|
@ -28,7 +28,8 @@ namespace WelsonJS.Launcher
|
||||||
Handshake handshake = Handshake.None,
|
Handshake handshake = Handshake.None,
|
||||||
int readTimeout = 500,
|
int readTimeout = 500,
|
||||||
int writeTimeout = 500,
|
int writeTimeout = 500,
|
||||||
int readBufferSize = 1024)
|
int readBufferSize = 1024,
|
||||||
|
bool resetBuffersBeforeRequest = false)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(portName)) throw new ArgumentNullException(nameof(portName));
|
if (string.IsNullOrWhiteSpace(portName)) throw new ArgumentNullException(nameof(portName));
|
||||||
|
|
||||||
|
|
@ -41,6 +42,7 @@ namespace WelsonJS.Launcher
|
||||||
ReadTimeout = readTimeout;
|
ReadTimeout = readTimeout;
|
||||||
WriteTimeout = writeTimeout;
|
WriteTimeout = writeTimeout;
|
||||||
ReadBufferSize = readBufferSize > 0 ? readBufferSize : 1024;
|
ReadBufferSize = readBufferSize > 0 ? readBufferSize : 1024;
|
||||||
|
ResetBuffersBeforeRequest = resetBuffersBeforeRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string PortName { get; }
|
public string PortName { get; }
|
||||||
|
|
@ -52,6 +54,7 @@ namespace WelsonJS.Launcher
|
||||||
public int ReadTimeout { get; }
|
public int ReadTimeout { get; }
|
||||||
public int WriteTimeout { get; }
|
public int WriteTimeout { get; }
|
||||||
public int ReadBufferSize { get; }
|
public int ReadBufferSize { get; }
|
||||||
|
public bool ResetBuffersBeforeRequest { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public SerialPortManager()
|
public SerialPortManager()
|
||||||
|
|
@ -140,7 +143,13 @@ namespace WelsonJS.Launcher
|
||||||
|
|
||||||
return await ExecuteWithRetryAsync(
|
return await ExecuteWithRetryAsync(
|
||||||
parameters,
|
parameters,
|
||||||
(port, token) => SendAndReceiveInternalAsync(port, parameters.ReadBufferSize, payload, encoding, token),
|
(port, token) => SendAndReceiveInternalAsync(
|
||||||
|
port,
|
||||||
|
parameters.ReadBufferSize,
|
||||||
|
payload,
|
||||||
|
encoding,
|
||||||
|
parameters.ResetBuffersBeforeRequest,
|
||||||
|
token),
|
||||||
2,
|
2,
|
||||||
cancellationToken).ConfigureAwait(false);
|
cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
@ -186,10 +195,14 @@ namespace WelsonJS.Launcher
|
||||||
int bufferSize,
|
int bufferSize,
|
||||||
byte[] payload,
|
byte[] payload,
|
||||||
Encoding encoding,
|
Encoding encoding,
|
||||||
|
bool resetBuffers,
|
||||||
CancellationToken token)
|
CancellationToken token)
|
||||||
{
|
{
|
||||||
port.DiscardInBuffer();
|
if (resetBuffers)
|
||||||
port.DiscardOutBuffer();
|
{
|
||||||
|
port.DiscardInBuffer();
|
||||||
|
port.DiscardOutBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
if (payload.Length > 0)
|
if (payload.Length > 0)
|
||||||
{
|
{
|
||||||
|
|
@ -208,14 +221,17 @@ namespace WelsonJS.Launcher
|
||||||
if (read > 0)
|
if (read > 0)
|
||||||
{
|
{
|
||||||
stream.Write(buffer, 0, read);
|
stream.Write(buffer, 0, read);
|
||||||
if (read < buffer.Length)
|
if (port.BytesToRead == 0)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
break;
|
if (port.BytesToRead == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (TimeoutException)
|
catch (TimeoutException)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user