Rozdzielenie odpowiedzialności na dwie biblioteki:
- Host - Connection, Protocol, Commands (wspólne dla wszystkich wag)
- Miernik - Device definitions (definicje konkretnych wag)
src-rust/
├── Cargo.toml (workspace)
├── host/ # Biblioteka Host
│ ├── Cargo.toml
│ └── src/
│ ├── lib.rs
│ ├── connection.rs # TCP/Serial connections
│ ├── protocol.rs # Protocol definitions (RINCMD, DINI_ASCII)
│ ├── commands.rs # Command execution
│ └── error.rs # Host errors
├── miernik/ # Biblioteka Miernik (Device)
│ ├── Cargo.toml
│ └── src/
│ ├── lib.rs
│ ├── device.rs # Device adapter trait
│ ├── models.rs # WeightReading, DeviceConfig
│ └── error.rs # Device errors
└── src/ # Główna aplikacja (scaleit-bridge)
└── ...
- Connection: Zarządzanie połączeniami TCP/Serial
- Protocol: Definicje protokołów (RINCMD, DINI_ASCII)
- Commands: Wykonywanie komend i odbieranie odpowiedzi
- Error: Błędy związane z połączeniem i komunikacją
- Device: Definicje konkretnych wag (Rinstrum C320, Dini Argeo DFW)
- Models: Modele danych (WeightReading, DeviceConfig)
- Error: Błędy związane z urządzeniami
- ✅ Utworzenie struktury workspace
- ✅ Utworzenie podstawowych modułów
- ⏳ Migracja kodu z adapterów do Host
- ⏳ Migracja definicji urządzeń do Miernik
- ⏳ Aktualizacja głównej aplikacji do używania nowych bibliotek
- ⏳ Testy i weryfikacja
use scaleit_host::{Connection, Protocol, CommandExecutor};
use scaleit_miernik::{Device, DeviceAdapter};
// 1. Utworzenie połączenia (Host)
let connection = Arc::new(Connection::tcp(
"192.168.1.254".to_string(),
4001,
5000
));
// 2. Utworzenie protokołu (Host)
let protocol = Protocol::Rincmd;
// 3. 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 = Device::new(
"scale1".to_string(),
connection,
protocol,
commands
);
// 4. Użycie
device.connect().await?;
let reading = device.execute_command("readGross").await?;