7.0 KiB
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
- Eliminazione duplicazioni: La vecchia struttura
FlashProfileduplicava informazioni (IP, port, size) per ogni target - Allineamento con targets.ini: Conformità totale con il file di configurazione della vecchia applicazione C++/Qt
- Gestione centralizzata: Configurazione globale in un unico punto
- Riusabilità: I modelli FPGA sono definiti una volta e riutilizzati da più target
- 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
GUIProfileAdapterper 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:
- Cerca
flash_profiles.json - Se vuoto/mancante, cerca
_OLD/Vecchia_app/FpgaBeamMeUp/targets.ini - Carica automaticamente tutti i modelli e target dal
.ini - Salva in formato JSON per usi futuri
- 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: Riscrittura completa
- Eliminati:
GUIProfileAdapter,ProfileManagerDialog,ProfileEditDialog - Aggiunti:
ConfigManagerDialog,ModelEditDialog,TargetEditDialog - Modificato:
FlasherGUIper uso diretto diProfileManager
- Eliminati:
Compatibilità con FirmwareFlasher
Problema temporaneo: FirmwareFlasher accetta ancora FlashProfile come parametro.
Soluzione attuale: Creazione di un FlashProfile temporaneo in _on_target_selected():
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
- Zero duplicazioni: IP, port, memory maps definiti una volta
- Manutenibilità: Modifiche centralizzate e propagate automaticamente
- Usabilità: Interfaccia a tab intuitiva e completa
- Conformità: 100% allineato con
targets.inioriginale - Estensibilità: Facile aggiungere nuovi modelli e target
- Validazione: Controlli completi su input e dipendenze
Prossimi Passi
- Refactoring
FirmwareFlasherper eliminare dipendenza daFlashProfile - 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)