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
- ✅ Strutture Corrette: I messaggi ora utilizzano le strutture
ctypes gerarchiche corrette con bitfield
- ✅ Mapping Completo: Creato sistema di mappatura tra nomi flat legacy e percorsi nested reali
- ✅ Compatibilità Retroattiva: L'API legacy (
get_value_for_field, set_value_for_field) funziona senza modifiche alla GUI
- ✅ Verifica Funzionale: Tutti i test di integrazione passano
📁 File Modificati/Creati
File Principali
-
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à
-
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)
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)
# 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
# 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
- test_new_messages.py: Verifica struttura nested e accesso campi
- test_integration.py: Verifica integrazione con GUI e command_registry
- Tutti i test passano ✓
🚀 Prossimi Passi
- Avviare la GUI:
python -m pymsc
- Verificare i widget: Controllare che checkbox, combobox, ecc. rispondano correttamente
- Test con hardware: Verificare comunicazione 1553 reale con le nuove strutture
- 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