# 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`
