# Refactor dei Messaggi 1553 - Documentazione

## 📋 Sommario delle Modifiche

È stato completato un refactor completo del sistema di messaggi 1553 per utilizzare le definizioni corrette e verificate da `pybusmonitor1553`.

## 🎯 Obiettivi Raggiunti

1. ✅ **Strutture Corrette**: I messaggi ora utilizzano le strutture `ctypes` gerarchiche corrette con bitfield
2. ✅ **Mapping Completo**: Creato sistema di mappatura tra nomi flat legacy e percorsi nested reali
3. ✅ **Compatibilità Retroattiva**: L'API legacy (`get_value_for_field`, `set_value_for_field`) funziona senza modifiche alla GUI
4. ✅ **Verifica Funzionale**: Tutti i test di integrazione passano

## 📁 File Modificati/Creati

### File Principali

1. **`pymsc/core/message_definitions.py`** (sostituito)
   - Usa strutture da `PyBusMonitor1553/Grifo_E_1553lib/messages/`
   - Implementa classe base `Msg1553Base` con supporto campi nested
   - Mantiene API legacy per compatibilità

2. **`pymsc/core/field_mappings.py`** (nuovo)
   - Dizionari di mappatura per tutti i messaggi (A1-A5, B6-B7, B9-B10)
   - Funzione `get_field_path(message_id, legacy_name)` per conversione automatica
   - Singola fonte di verità per i percorsi dei campi

### File di Backup

- **`pymsc/core/message_definitions_old_backup.py`**: backup della versione precedente

## 🔑 Mappature Chiave

### Messaggio A2 (Radar Operation Command)

| Nome Legacy | Percorso Reale |
|-------------|----------------|
| `stby` | `rdr_mode_command.stby` |
| `freeze` | `rdr_mode_command.freeze` |
| `silence` | `rdr_mode_command.silence` |
| `IBIT` | `rdr_mode_command.ibit` |
| `rdr_mode_command` | `rdr_mode_command.master_mode` |
| `des_ctrl` | `rdr_mode_command.des_ctrl` |
| `range_scale` | `param1.range_scale` |
| `velocity_scale` | `param1.velocity_scale` |
| `scan_width` | `param1.scan_width` |
| `bars` | `param1.bars_num` |
| `rws_submode_command` | `param1.rws_submode` |
| `acm_submode_command` | `param1.acm_submode` |
| `gm_submode_command` | `param1.gm_submode` |

### Messaggio A1 (Radar Settings and Parameters)

| Nome Legacy | Percorso Reale |
|-------------|----------------|
| `tgt_history` | `settings.history_level` |
| `alt_block` | `settings.altitude_block` |
| `ALE_BLANKING` | `settings.ale_blanking_disable` |
| `FREQ_AGILITY` | `frequency.frequency_agility_type` |
| `channel` | `frequency.channel_selection` |
| `beacon_code` | `beacon.beacon_code` |
| `beacon_delay` | `beacon.beacon_delay` |
| `video_intensity` | `settings.sym_intensity` |
| `if_gain` | `frequency.if_gain` |
| `GND_TGT_REJ_RAD_VEL` | `settings.ground_reject_vel_high` |
| `MIN_DET_GND_TGT_RAD_VEL` | `settings.min_detect_ground_radial_vel_high` |
| `LPRF_THRESHOLD` | `settings.prf_lookup_selection` |

### Messaggio B7 (Radar Status Tellback)

| Nome Legacy | Percorso Reale |
|-------------|----------------|
| `stby_tellback` | `rdr_mode_tellback.stby` |
| `freeze_tellback` | `rdr_mode_tellback.freeze` |
| `rf_status` | `rdr_mode_tellback.rf_radiation` |
| `rdr_mode_tellback` | `rdr_mode_tellback.master_mode` |
| `lock_sts` | `rdr_mode_tellback.des_ctrl` |
| `range_scale_tellback` | `param1_tellback.range_scale` |
| `scan_width_tellback` | `param1_tellback.scan_width` |

## 🔧 Come Funziona

### 1. Accesso ai Campi (Nested)

```python
from pymsc.core.message_definitions import msg_a2

# Accesso diretto con percorso nested
value = msg_a2.get_field_value('rdr_mode_command.stby')

# Set con percorso nested
msg_a2.set_field_value('rdr_mode_command.stby', 1)
```

### 2. API Legacy (per GUI)

```python
# La GUI usa ancora nomi flat
value = msg_a2.get_value_for_field('stby')  # Automaticamente mappato a 'rdr_mode_command.stby'
msg_a2.set_value_for_field('stby', 1)       # Funziona come prima!
```

### 3. Struttura Interna

```python
# Accesso diretto alla struttura ctypes
internal_structure = msg_a2._internal  # tipo: MsgRdrOperationCommand
rdr_mode = internal_structure.rdr_mode_command  # tipo: RdrModeCommandWord (Union)

# I campi bitfield hanno getter/setter
stby_value = rdr_mode.get_stby()
rdr_mode.set_stby(1)
```

## ✅ Test Eseguiti

1. **test_new_messages.py**: Verifica struttura nested e accesso campi
2. **test_integration.py**: Verifica integrazione con GUI e command_registry
3. Tutti i test passano ✓

## 🚀 Prossimi Passi

1. **Avviare la GUI**: `python -m pymsc`
2. **Verificare i widget**: Controllare che checkbox, combobox, ecc. rispondano correttamente
3. **Test con hardware**: Verificare comunicazione 1553 reale con le nuove strutture
4. **Messaggi B9 e B10**: Implementare strutture complete quando disponibili in pybusmonitor1553

## ⚠️ Note Importanti

- Le strutture ora rispettano **esattamente** le specifiche ICD 1553
- I bitfield sono gestiti correttamente (non più `c_int` flat)
- L'allineamento è `_pack_ = 1` per corrispondere al protocollo hardware
- I warning "Lib Loaded!" e "SIZEOFFFFFFFF" sono normali (da pybusmonitor1553)
- **Campi non implementati**: Alcuni campi (es. `emergency`, `SAR_ENABLED`, `DEGRADED_PERF_STATUS`, `velocity_scale_tellback`) non esistono nelle strutture attuali e sono mappati su campi `spare` o rimossi
- I widget gestiscono correttamente i valori `None` restituiti da campi non implementati mostrando `---` o `ERR`

## 📚 Riferimenti

- Strutture originali: `_external/pybusmonitor1553/Grifo_E_1553lib/`
- Strutture copiate in: `pymsc/PyBusMonitor1553/Grifo_E_1553lib/`
- ICD Document: `doc/ICD_DECD_FTH - GRIFO-F_TH, Data Exchange Control Document for, rev -A, Draft 2.md`
