SXXXXXXX_PyMsc/doc/REFACTOR_SUMMARY.md

5.4 KiB

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)

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

  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