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

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

  1. pydownloadfwviasrio/profiles.py - Modulo principale completamente riscritto
    • Aggiunta classe GlobalConfig per configurazione globale
    • Aggiunta classe FlashModel per definizioni riutilizzabili dei modelli FPGA
    • Aggiunta classe FlashTarget per target specifici
    • Classe FlashProfile mantenuta per retrocompatibilità (deprecata)
    • ProfileManager completamente rinnovato con supporto INI e JSON

File Generati

  1. 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)
  2. tools/convert_ini_to_json.py - Script di conversione INI → JSON

  3. tools/example_profile_usage.py - Esempio completo di utilizzo

  4. tools/test_conversion.py - Test conversione bidirezionale

  5. 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

  1. DRY: Modelli definiti una volta, riutilizzati dai target
  2. Manutenibilità: Modifiche al modello si propagano a tutti i target
  3. Compatibilità: Supporto sia JSON che INI
  4. Type Safety: Dataclass con type hints completi
  5. 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