parent
fabead4e65
commit
3835123208
|
@ -7,6 +7,8 @@ internal class MaiTouchComConnector(MaiTouchSensorButtonStateManager buttonState
|
||||||
private static SerialPort? serialPort;
|
private static SerialPort? serialPort;
|
||||||
private bool isActiveMode;
|
private bool isActiveMode;
|
||||||
private bool _connected;
|
private bool _connected;
|
||||||
|
private CancellationTokenSource? _tokenSource;
|
||||||
|
private Thread? _pollThread;
|
||||||
private bool _shouldReconnect = true;
|
private bool _shouldReconnect = true;
|
||||||
private readonly MaiTouchSensorButtonStateManager _buttonState = buttonState;
|
private readonly MaiTouchSensorButtonStateManager _buttonState = buttonState;
|
||||||
|
|
||||||
|
@ -50,18 +52,10 @@ internal class MaiTouchComConnector(MaiTouchSensorButtonStateManager buttonState
|
||||||
OnConnectStatusChange?.Invoke("Connected to port");
|
OnConnectStatusChange?.Invoke("Connected to port");
|
||||||
_connected = true;
|
_connected = true;
|
||||||
|
|
||||||
while (true)
|
_tokenSource = new CancellationTokenSource(); // Create a token source.
|
||||||
{
|
_pollThread = new Thread(() => PollingThread(_tokenSource.Token)); // Pass the token to the thread you want to stop.
|
||||||
if (isActiveMode)
|
_pollThread.Priority = ThreadPriority.Highest;
|
||||||
{
|
_pollThread.Start();
|
||||||
SendTouchscreenState();
|
|
||||||
await Task.Delay(1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
await Task.Delay(100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (TimeoutException) { }
|
catch (TimeoutException) { }
|
||||||
|
@ -73,9 +67,6 @@ internal class MaiTouchComConnector(MaiTouchSensorButtonStateManager buttonState
|
||||||
MessageBox.Show(ex.Message, "Error connecting to COM port", MessageBoxButton.OK, MessageBoxImage.Error);
|
MessageBox.Show(ex.Message, "Error connecting to COM port", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
Logger.Info("Disconnecting from COM port");
|
Logger.Info("Disconnecting from COM port");
|
||||||
_connected = false;
|
_connected = false;
|
||||||
OnConnectStatusChange?.Invoke("Not Connected");
|
OnConnectStatusChange?.Invoke("Not Connected");
|
||||||
|
@ -85,6 +76,23 @@ internal class MaiTouchComConnector(MaiTouchSensorButtonStateManager buttonState
|
||||||
serialPort.DiscardOutBuffer();
|
serialPort.DiscardOutBuffer();
|
||||||
serialPort.Close();
|
serialPort.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PollingThread(CancellationToken token)
|
||||||
|
{
|
||||||
|
while (!token.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
if (isActiveMode)
|
||||||
|
{
|
||||||
|
SendTouchscreenState();
|
||||||
|
Thread.Sleep(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Thread.Sleep(100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,13 +104,22 @@ internal class MaiTouchComConnector(MaiTouchSensorButtonStateManager buttonState
|
||||||
_connected = false;
|
_connected = false;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (_tokenSource != null && !_tokenSource.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
_tokenSource.Cancel();
|
||||||
|
_pollThread?.Join();
|
||||||
|
_tokenSource.Dispose();
|
||||||
|
_tokenSource = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (serialPort != null)
|
if (serialPort != null)
|
||||||
{
|
{
|
||||||
serialPort.DtrEnable = false;
|
serialPort.DtrEnable = false;
|
||||||
serialPort.RtsEnable = false;
|
serialPort.RtsEnable = false;
|
||||||
serialPort.DataReceived -= SerialPort_DataReceived;
|
serialPort.DataReceived -= SerialPort_DataReceived;
|
||||||
await Task.Delay(200);
|
await Task.Delay(200);
|
||||||
if (serialPort.IsOpen == true)
|
if (serialPort.IsOpen)
|
||||||
{
|
{
|
||||||
serialPort.DiscardInBuffer();
|
serialPort.DiscardInBuffer();
|
||||||
serialPort.DiscardOutBuffer();
|
serialPort.DiscardOutBuffer();
|
||||||
|
@ -165,7 +182,16 @@ internal class MaiTouchComConnector(MaiTouchSensorButtonStateManager buttonState
|
||||||
if (_connected)
|
if (_connected)
|
||||||
{
|
{
|
||||||
var currentState = _buttonState.GetCurrentState();
|
var currentState = _buttonState.GetCurrentState();
|
||||||
serialPort?.Write(currentState, 0, currentState.Length);
|
try
|
||||||
|
{
|
||||||
|
serialPort?.Write(currentState, 0, currentState.Length);
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
if (Properties.Settings.Default.IsDebugEnabled)
|
||||||
|
{
|
||||||
|
Logger.Error("Error when writing to serial port on button update", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,17 +51,21 @@ internal class MaiTouchSensorButtonStateManager
|
||||||
{
|
{
|
||||||
this.buttonStateValue = buttonStateValue;
|
this.buttonStateValue = buttonStateValue;
|
||||||
SetupUpdateLoop();
|
SetupUpdateLoop();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void SetupUpdateLoop()
|
private async Task SetupUpdateLoop()
|
||||||
{
|
{
|
||||||
|
string? lastButtonState = null;
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Application.Current.Dispatcher.Invoke(() =>
|
if (lastButtonState != buttonState.ToString())
|
||||||
{
|
{
|
||||||
buttonStateValue.Content = buttonState.ToString();
|
lastButtonState = buttonState.ToString();
|
||||||
});
|
Application.Current.Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
buttonStateValue.Content = lastButtonState;
|
||||||
|
});
|
||||||
|
}
|
||||||
await Task.Delay(16);
|
await Task.Delay(16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,12 +87,6 @@ internal class MaiTouchSensorButtonStateManager
|
||||||
|
|
||||||
public byte[] GetCurrentState()
|
public byte[] GetCurrentState()
|
||||||
{
|
{
|
||||||
Application.Current.Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
buttonStateValue.Content = buttonState.ToString();
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
return
|
return
|
||||||
[
|
[
|
||||||
0x28,
|
0x28,
|
||||||
|
|
Loading…
Reference in New Issue