Skip to content

Latest commit

 

History

History
134 lines (109 loc) · 4.13 KB

REFACTOR_PROGRESS.md

File metadata and controls

134 lines (109 loc) · 4.13 KB

Postęp Refaktoryzacji: Host i Miernik

✅ Zrealizowane

1. Biblioteka Host (scaleit-host)

  • ✅ connection.rs - Zarządzanie połączeniami TCP/Serial

    • Connection::tcp() - tworzenie połączenia TCP
    • Connection::serial() - tworzenie połączenia Serial
    • connect_tcp() - łączenie TCP z timeout
    • connect_serial() - łączenie Serial z konfiguracją
    • disconnect() - rozłączanie
    • is_connected() - sprawdzanie statusu
  • ✅ protocol.rs - Definicje protokołów

    • Protocol::Rincmd - protokół Rinstrum
    • Protocol::DiniAscii - protokół Dini Argeo
    • Protocol::Custom - protokół niestandardowy
    • command_terminator() - terminator komend dla protokołu
  • ✅ commands.rs - Wykonywanie komend

    • CommandExecutor - klasa do wykonywania komend
    • execute() - wysyłanie komendy i odbieranie odpowiedzi
    • send_tcp() - implementacja TCP
    • send_serial() - implementacja Serial
  • ✅ error.rs - Błędy Host

    • HostError::ConnectionError
    • HostError::Timeout
    • HostError::ProtocolError
    • HostError::IoError

2. Biblioteka Miernik (scaleit-miernik)

  • ✅ device.rs - Podstawowa implementacja Device

    • Device - główna klasa urządzenia
    • DeviceAdapter - trait dla urządzeń
    • execute_command() - wykonywanie komend
    • parse_response() - parsowanie odpowiedzi na podstawie protokołu
  • ✅ parsers.rs - Parsery odpowiedzi

    • parse_rincmd_response() - parser dla protokołu RINCMD
      • Pattern 1: 20050026+123.45kg
      • Pattern 2: : -23 kg G
      • Fallback: S 00000.000 kg
    • parse_dini_ascii_response() - parser dla protokołu Dini Argeo
  • ✅ devices.rs - Konkretne implementacje urządzeń

    • RinstrumC320 - implementacja dla Rinstrum C320
    • DiniArgeoDFW - implementacja dla Dini Argeo DFW
    • from_config() - tworzenie z konfiguracji
  • ✅ models.rs - Modele danych

    • WeightReading - odczyt wagi
    • DeviceConfig - konfiguracja urządzenia
  • ✅ error.rs - Błędy Miernik

    • MiernikError::DeviceError
    • MiernikError::InvalidCommand
    • MiernikError::ProtocolError
    • MiernikError::HostError

⏳ Do zrobienia

3. Aktualizacja głównej aplikacji

  • Aktualizacja DeviceManager do używania nowych bibliotek
  • Migracja z adapter_enum.rs do nowych bibliotek
  • Aktualizacja main.rs do używania nowych bibliotek
  • Aktualizacja testów

4. Integracja

  • Konwersja z Connection (stary) do scaleit_host::Connection
  • Konwersja z DeviceAdapter (stary) do scaleit_miernik::DeviceAdapter
  • Aktualizacja konfiguracji JSON

Struktura plików

src-rust/
├── host/                    # Biblioteka Host ✅
│   ├── src/
│   │   ├── lib.rs
│   │   ├── connection.rs    ✅
│   │   ├── protocol.rs      ✅
│   │   ├── commands.rs      ✅
│   │   └── error.rs         ✅
│   └── Cargo.toml
├── miernik/                 # Biblioteka Miernik ✅
│   ├── src/
│   │   ├── lib.rs
│   │   ├── device.rs        ✅
│   │   ├── models.rs        ✅
│   │   ├── parsers.rs       ✅
│   │   ├── devices.rs       ✅
│   │   └── error.rs         ✅
│   └── Cargo.toml
└── src/                     # Główna aplikacja ⏳
    └── ...

Przykład użycia (docelowy)

use scaleit_host::{Connection, Protocol};
use scaleit_miernik::{RinstrumC320, DeviceAdapter};
use std::sync::Arc;

// 1. Utworzenie połączenia (Host)
let connection = Arc::new(Connection::tcp(
    "192.168.1.254".to_string(),
    4001,
    5000
));

// 2. Utworzenie urządzenia (Miernik)
let mut commands = HashMap::new();
commands.insert("readGross".to_string(), "20050026".to_string());
commands.insert("zero".to_string(), "21120008:0B".to_string());

let device = RinstrumC320::new(
    "scale1".to_string(),
    connection,
    commands
);

// 3. Użycie
device.connect().await?;
let reading = device.execute_command("readGross").await?;

Status

Postęp: ~80%

Biblioteki Host i Miernik są gotowe. Pozostaje integracja z główną aplikacją.