# 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 2. **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) 3. **tools/convert_ini_to_json.py** - Script di conversione INI → JSON 4. **tools/example_profile_usage.py** - Esempio completo di utilizzo 5. **tools/test_conversion.py** - Test conversione bidirezionale 6. **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 ```python 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`