From 9f4219e971462a393c34b3ad2c16200bd9c7b259 Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Tue, 28 Oct 2025 14:12:44 +0900 Subject: [PATCH] Make serial buffer resets optional and improve receive loop --- .../WelsonJS.Launcher/SerialPortManager.cs | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/SerialPortManager.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/SerialPortManager.cs index fa2db4f..21d94e8 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/SerialPortManager.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/SerialPortManager.cs @@ -28,7 +28,8 @@ namespace WelsonJS.Launcher Handshake handshake = Handshake.None, int readTimeout = 500, int writeTimeout = 500, - int readBufferSize = 1024) + int readBufferSize = 1024, + bool resetBuffersBeforeRequest = false) { if (string.IsNullOrWhiteSpace(portName)) throw new ArgumentNullException(nameof(portName)); @@ -41,6 +42,7 @@ namespace WelsonJS.Launcher ReadTimeout = readTimeout; WriteTimeout = writeTimeout; ReadBufferSize = readBufferSize > 0 ? readBufferSize : 1024; + ResetBuffersBeforeRequest = resetBuffersBeforeRequest; } public string PortName { get; } @@ -52,6 +54,7 @@ namespace WelsonJS.Launcher public int ReadTimeout { get; } public int WriteTimeout { get; } public int ReadBufferSize { get; } + public bool ResetBuffersBeforeRequest { get; } } public SerialPortManager() @@ -140,7 +143,13 @@ namespace WelsonJS.Launcher return await ExecuteWithRetryAsync( parameters, - (port, token) => SendAndReceiveInternalAsync(port, parameters.ReadBufferSize, payload, encoding, token), + (port, token) => SendAndReceiveInternalAsync( + port, + parameters.ReadBufferSize, + payload, + encoding, + parameters.ResetBuffersBeforeRequest, + token), 2, cancellationToken).ConfigureAwait(false); } @@ -186,10 +195,14 @@ namespace WelsonJS.Launcher int bufferSize, byte[] payload, Encoding encoding, + bool resetBuffers, CancellationToken token) { - port.DiscardInBuffer(); - port.DiscardOutBuffer(); + if (resetBuffers) + { + port.DiscardInBuffer(); + port.DiscardOutBuffer(); + } if (payload.Length > 0) { @@ -208,14 +221,17 @@ namespace WelsonJS.Launcher if (read > 0) { stream.Write(buffer, 0, read); - if (read < buffer.Length) + if (port.BytesToRead == 0) { break; } } else { - break; + if (port.BytesToRead == 0) + { + break; + } } } catch (TimeoutException)