3.2 KiB
Aggiornamento Sistema di Gestione Profili
Modifiche Effettuate
Il sistema di gestione dei profili è stato completamente ristrutturato per supportare la configurazione gerarchica del file targets.ini.
File Modificati
- pydownloadfwviasrio/profiles.py - Modulo principale completamente riscritto
- Aggiunta classe
GlobalConfigper configurazione globale - Aggiunta classe
FlashModelper definizioni riutilizzabili dei modelli FPGA - Aggiunta classe
FlashTargetper target specifici - Classe
FlashProfilemantenuta per retrocompatibilità (deprecata) ProfileManagercompletamente rinnovato con supporto INI e JSON
- Aggiunta classe
File Generati
-
flash_profiles.json - Configurazione completa generata da targets.ini
- 1 configurazione globale (IP, port, SRIO base, ecc.)
- 3 modelli FPGA (xcku040, xcku060, rfif)
- 9 target (EIF_FPGA1/2, XIF1_FPGA1/2, XIF2_FPGA1/2, DFE_FPGA1/2, AESA_RFIF)
-
tools/convert_ini_to_json.py - Script di conversione INI → JSON
-
tools/example_profile_usage.py - Esempio completo di utilizzo
-
tools/test_conversion.py - Test conversione bidirezionale
-
doc/profiles_guide.md - Documentazione completa del sistema
Struttura Dati
GlobalConfig
├─ ip, port (connessione)
├─ srio_base, fpga_base, fpga_sector
└─ default_target
FlashModel (riutilizzabile)
├─ id_model (0, 1, 2, ...)
├─ model (xcku040, xcku060, rfif)
├─ num_sectors, flash_type
├─ is_4byte_addressing
└─ golden/user memory areas
FlashTarget (istanza specifica)
├─ id_target (EIF_FPGA1, AESA_RFIF, ...)
├─ slot_address (0x13, 0x16, ...)
├─ architecture (Xilinx, RFIF)
└─ id_model (→ riferimento a FlashModel)
Vantaggi
- DRY: Modelli definiti una volta, riutilizzati dai target
- Manutenibilità: Modifiche al modello si propagano a tutti i target
- Compatibilità: Supporto sia JSON che INI
- Type Safety: Dataclass con type hints completi
- Estensibilità: Facile aggiungere nuovi target/modelli
Utilizzo Base
from pydownloadfwviasrio.profiles import ProfileManager
from pathlib import Path
# Carica configurazione
manager = ProfileManager(Path("flash_profiles.json"))
# Accedi a target + modello
result = manager.get_target_with_model("AESA_RFIF")
if result:
target, model = result
print(f"Slot: 0x{target.slot_address:02X}")
print(f"Model: {model.model}")
print(f"Sectors: {model.num_sectors}")
Test Eseguiti
✓ Conversione INI → JSON
✓ Caricamento da JSON
✓ Esportazione JSON → INI
✓ Verifica integrità dati
✓ Accesso a target e modelli
✓ Iterazione su collezioni
Tutti i test completati con successo.
Retrocompatibilità
La vecchia classe FlashProfile è ancora disponibile ma deprecata.
Il codice esistente continuerà a funzionare, ma nuovo codice dovrebbe usare
FlashTarget + FlashModel.
Prossimi Passi
- Integrare il nuovo sistema nel modulo GUI
- Aggiornare la logica di download firmware per usare i nuovi profili
- Implementare validazione dei profili prima del download
- Aggiungere supporto per percorsi firmware automatici basati su
file_prefix