SXXXXXXX_PyDownloadFwViaSRIO/doc/GUI_complete_refactoring.md
2026-01-22 17:10:05 +01:00

243 lines
7.0 KiB
Markdown

# GUI Refactoring - Sistema Completamente Rinnovato
## Panoramica delle Modifiche
Il sistema GUI è stato **completamente ristrutturato** per eliminare la vecchia architettura basata su `FlashProfile` e utilizzare esclusivamente il nuovo sistema gerarchico basato su `GlobalConfig`, `FlashModel` e `FlashTarget` derivato da `targets.ini`.
## Motivazioni
1. **Eliminazione duplicazioni**: La vecchia struttura `FlashProfile` duplicava informazioni (IP, port, size) per ogni target
2. **Allineamento con targets.ini**: Conformità totale con il file di configurazione della vecchia applicazione C++/Qt
3. **Gestione centralizzata**: Configurazione globale in un unico punto
4. **Riusabilità**: I modelli FPGA sono definiti una volta e riutilizzati da più target
5. **Facilità di manutenzione**: Modifiche ai modelli si propagano automaticamente
## Architettura Nuova vs Vecchia
### Vecchia Architettura (Eliminata)
```
FlashProfile (per ogni target)
├─ name
├─ ip, port (duplicati)
├─ slot_address
├─ base_address, size (duplicati per stesso modello)
└─ binary_path
ProfileManager
└─ profiles: List[FlashProfile]
```
### Nuova Architettura
```
GlobalConfig (unica istanza)
├─ ip, port (centralizzati)
├─ srio_base, fpga_base, fpga_sector
└─ default_target
FlashModel (riutilizzabili)
├─ id_model
├─ model, description
├─ flash_type, is_4byte_addressing
├─ num_sectors
└─ golden/user memory areas
FlashTarget (istanze)
├─ id_target
├─ slot_address
├─ architecture
├─ id_model (→ riferimento a FlashModel)
└─ binary_path
ProfileManager
├─ global_config: GlobalConfig
├─ models: Dict[int, FlashModel]
└─ targets: Dict[str, FlashTarget]
```
## Modifiche al GUI
### FlasherGUI (Finestra Principale)
**Prima:**
- Combo di selezione "Flash Profile"
- Info panel minimale (IP, slot, base address, size)
- Adapter layer `GUIProfileAdapter` per compatibilità
**Dopo:**
- Combo di selezione "Target FPGA" (nomi target da `targets.ini`)
- Info panel completo con:
- Descrizione target
- IP:Port dalla configurazione globale
- Slot SRIO
- Architettura (Xilinx/RFIF)
- Modello FPGA e descrizione
- Tipo flash e indirizzamento
- Numero di settori
- Aree Golden e User con indirizzi completi
- Nessun adapter: uso diretto di `ProfileManager`
### ConfigManagerDialog (Nuovo)
Dialog a **3 tab** per gestione completa:
#### Tab 1: Global Config
- IP Address
- Port
- SRIO Base (hex)
- FPGA Base (hex)
- Sector Size (hex)
- Default Target (combobox con tutti i target)
- Pulsante "Apply Global Settings"
#### Tab 2: Flash Models
- Lista modelli: `[ID] model - description`
- Pulsanti: New Model, Edit Model, Delete Model
- Panel dettagli:
- ID, Model, Description
- Flash Type, Addressing
- Sectors
- Golden Area (start, stop, size MB)
- User Area (start, stop, size MB)
- Test Address (opzionale)
#### Tab 3: Targets
- Lista target: `id_target - description`
- Pulsanti: New Target, Edit Target, Delete Target
- Panel dettagli:
- ID, Description
- Slot Address (hex)
- Architecture
- Model (nome)
- File Prefix
- Binary Path
### ModelEditDialog (Nuovo)
Form completo per editing modelli:
- Model ID (readonly se editing)
- Model Name
- Description
- Flash Type
- 4-byte Addressing (checkbox)
- Number of Sectors
- Golden Start/Stop (hex)
- User Start/Stop (hex)
- Test Address (hex, optional)
**Validazione:**
- ID univoco per nuovi modelli
- Tutti i campi richiesti
- Indirizzi hex validi
### TargetEditDialog (Nuovo)
Form completo per editing target:
- Target ID (readonly se editing)
- Description
- Slot Address (hex)
- Architecture (combobox: Xilinx, RFIF, Other)
- Name
- File Prefix
- Flash Model (combobox con lista modelli)
- Binary File (optional, con browse)
**Validazione:**
- ID univoco per nuovi target
- Modello obbligatorio
- Slot address hex valido
## Funzionalità Nuove
### 1. Gestione Modelli Completa
- Creazione, modifica, eliminazione modelli
- Visualizzazione dettagli completi (aree memoria, settori, ecc.)
- Controllo dipendenze (non si può eliminare un modello in uso)
### 2. Gestione Target Completa
- Creazione, modifica, eliminazione target
- Selezione modello da lista
- Associazione binario opzionale
### 3. Configurazione Globale
- Modifica IP e porta centralizzata
- Configurazione SRIO e FPGA base
- Selezione default target
### 4. Sincronizzazione Automatica
- Refresh target combo dopo modifiche
- Aggiornamento configurazione globale dopo edit
- Salvataggio persistente in JSON
## Caricamento Iniziale
All'avvio, l'applicazione:
1. Cerca `flash_profiles.json`
2. Se vuoto/mancante, cerca `_OLD/Vecchia_app/FpgaBeamMeUp/targets.ini`
3. Carica automaticamente tutti i modelli e target dal `.ini`
4. Salva in formato JSON per usi futuri
5. Seleziona il target di default dalla configurazione globale
**Output all'avvio:**
```
Loading configuration from _OLD/Vecchia_app/FpgaBeamMeUp/targets.ini...
Loaded 9 targets, 3 models
Target selected: AESA_RFIF
Model: rfif, Slot: 0x16
User area: 0x00400000 - 0x007FFFFF
```
## File Modificati
- [pydownloadfwviasrio/gui/gui.py](../pydownloadfwviasrio/gui/gui.py): Riscrittura completa
- Eliminati: `GUIProfileAdapter`, `ProfileManagerDialog`, `ProfileEditDialog`
- Aggiunti: `ConfigManagerDialog`, `ModelEditDialog`, `TargetEditDialog`
- Modificato: `FlasherGUI` per uso diretto di `ProfileManager`
## Compatibilità con FirmwareFlasher
**Problema temporaneo:** `FirmwareFlasher` accetta ancora `FlashProfile` come parametro.
**Soluzione attuale:** Creazione di un `FlashProfile` temporaneo in `_on_target_selected()`:
```python
temp_profile = FlashProfile(
name=target.id_target,
slot_address=f"0x{target.slot_address:02X}",
ip=global_config.ip,
port=global_config.port,
base_address=model.user_start,
size=(model.user_stop - model.user_start + 1),
binary_path=target.binary_path,
)
```
**TODO futuro:** Refactoring di `FirmwareFlasher` per accettare `(FlashTarget, FlashModel, GlobalConfig)` direttamente.
## Test Eseguiti
✅ Avvio applicazione
✅ Caricamento automatico da `targets.ini`
✅ Visualizzazione 9 target
✅ Selezione target dalla combo
✅ Visualizzazione info dettagliate target
✅ Apertura dialog configurazione
✅ Navigazione tra tab (Global, Models, Targets)
✅ Nessun errore di tipo o runtime
## Benefici Ottenuti
1. **Zero duplicazioni**: IP, port, memory maps definiti una volta
2. **Manutenibilità**: Modifiche centralizzate e propagate automaticamente
3. **Usabilità**: Interfaccia a tab intuitiva e completa
4. **Conformità**: 100% allineato con `targets.ini` originale
5. **Estensibilità**: Facile aggiungere nuovi modelli e target
6. **Validazione**: Controlli completi su input e dipendenze
## Prossimi Passi
- [ ] Refactoring `FirmwareFlasher` per eliminare dipendenza da `FlashProfile`
- [ ] Aggiungere import/export INI nel dialog configurazione
- [ ] Implementare ricerca/filtro nella lista target
- [ ] Aggiungere wizard per creazione target rapida
- [ ] Validazione avanzata indirizzi memoria (overlap check)