99 lines
3.2 KiB
Markdown
99 lines
3.2 KiB
Markdown
# 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`
|