first commit
This commit is contained in:
53
Services/SerialPortService.cs
Normal file
53
Services/SerialPortService.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
using System;
|
||||
using System.IO.Ports;
|
||||
|
||||
namespace OMControl.Services;
|
||||
|
||||
public class SerialPortService : IDisposable
|
||||
{
|
||||
private SerialPort? _serialPort;
|
||||
public bool IsOpen => _serialPort?.IsOpen == true;
|
||||
public event Action<string>? DataReceived;
|
||||
|
||||
public void Open(string portName, int baudRate = 9600)
|
||||
{
|
||||
if (IsOpen) return;
|
||||
|
||||
_serialPort = new SerialPort(portName, baudRate)
|
||||
{
|
||||
NewLine = "\n",
|
||||
ReadTimeout = 1000,
|
||||
WriteTimeout = 1000
|
||||
};
|
||||
|
||||
_serialPort.DataReceived += OnDataReceived;
|
||||
_serialPort.Open();
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
if (_serialPort == null) return;
|
||||
_serialPort.DataReceived -= OnDataReceived;
|
||||
_serialPort.Close();
|
||||
_serialPort.Dispose();
|
||||
_serialPort = null;
|
||||
}
|
||||
|
||||
public void Send(string data)
|
||||
{
|
||||
if (!IsOpen || _serialPort == null) return;
|
||||
_serialPort.WriteLine(data);
|
||||
}
|
||||
|
||||
private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
var data = _serialPort?.ReadLine();
|
||||
if (data != null) DataReceived?.Invoke(data);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
public void Dispose() => Close();
|
||||
}
|
||||
Reference in New Issue
Block a user