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

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

  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: 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():

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)