first commit

This commit is contained in:
andrea
2025-12-17 21:52:28 +01:00
parent 487a38b906
commit 68f5916140
105 changed files with 3518 additions and 0 deletions

View File

@@ -0,0 +1,102 @@
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO.Ports;
using System.Runtime.CompilerServices;
using System.Windows.Input;
using Avalonia.Threading;
using OMControl.Services;
namespace OMControl.ViewModels;
public class MainWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;
void Raise([CallerMemberName] string? p = null) => PropertyChanged?.Invoke(this, new(p));
private readonly SerialPortService _serial = new();
public ObservableCollection<string> AvailablePorts { get; } = new();
private string? _selectedPort;
public string? SelectedPort { get => _selectedPort; set { _selectedPort = value; Raise(); } }
private string _receivedData = "";
public string ReceivedData { get => _receivedData; set { _receivedData = value; Raise(); } }
private string _sendData = "";
public string SendData { get => _sendData; set { _sendData = value; Raise(); } }
string _field01 = ""; public string Field01 { get => _field01; set { _field01 = value; Raise(); } }
string _field02 = ""; public string Field02 { get => _field02; set { _field02 = value; Raise(); } }
string _field03 = ""; public string Field03 { get => _field03; set { _field03 = value; Raise(); } }
public ICommand RefreshPortsCommand { get; }
public ICommand ConnectCommand { get; }
public ICommand DisconnectCommand { get; }
public ICommand SendCommand { get; }
public ICommand ClearCommand { get; }
public MainWindowViewModel()
{
RefreshPortsCommand = new RelayCommand(RefreshPorts);
ConnectCommand = new RelayCommand(Connect);
DisconnectCommand = new RelayCommand(Disconnect);
SendCommand = new RelayCommand(Send);
ClearCommand = new RelayCommand(ClearAll);
_serial.DataReceived += data =>
{
Dispatcher.UIThread.Post(() => ReceivedData += data + Environment.NewLine);
};
RefreshPorts();
}
private void RefreshPorts()
{
AvailablePorts.Clear();
foreach (var p in SerialPort.GetPortNames())
AvailablePorts.Add(p);
if (SelectedPort == null && AvailablePorts.Count > 0)
SelectedPort = AvailablePorts[0];
}
private void Connect()
{
if (SelectedPort is null) return;
_serial.Open(SelectedPort, 9600);
}
private void Disconnect() => _serial.Close();
private void Send()
{
if (!string.IsNullOrWhiteSpace(SendData))
_serial.Send(SendData);
}
private void ClearAll()
{
Field01 = Field02 = Field03 = "";
ReceivedData = "";
SendData = "";
}
}
public sealed class RelayCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool>? _canExecute;
public RelayCommand(Action execute, Func<bool>? canExecute = null)
{
_execute = execute;
_canExecute = canExecute;
}
public event EventHandler? CanExecuteChanged;
public bool CanExecute(object? parameter) => _canExecute?.Invoke() ?? true;
public void Execute(object? parameter) => _execute();
}

View File

@@ -0,0 +1,7 @@
using CommunityToolkit.Mvvm.ComponentModel;
namespace OMControl.ViewModels;
public abstract class ViewModelBase : ObservableObject
{
}