SXXXXXXX_PyBusMonitor1553/doc/UDP1553_parity_report.md
2025-12-17 07:59:30 +01:00

2.3 KiB

Report di parità UDP1553 — GrifoScope C++ vs Python BusMonitor

Scopo

  • Documentare le differenze rilevanti e le azioni applicate per rendere il parser Python compatibile con l'implementazione C++ (GrifoScope).

Riferimenti C++ analizzati

  • cpp/GrifoScope/GrifoSdkEif/pub/TH/udp1553_types.h
    • costanti: k_marker_1553=0x1553, k_marker_end_1553=0x5315, k_ctrl_marker_begin=0x3C3C, k_ctrl_marker_end=0x3E3E
  • cpp/GrifoScope/GrifoSdkEif/dev/Portable/ext/b1553_udp.cpp
    • funzione: processMessages(...) — logica di parsing dei blocchi messaggio
    • comportamento reply builder e validazioni (~CW, 0x3E3E)

Correzioni principali applicate in Python

  1. Word-count (wc) handling

    • C++: se wc==0 -> wc=32; poi se SA==0 o SA==31 -> wc=0 (mode codes)
    • Python: replicato esattamente (wc==0 -> 32; SA 0|31 -> wc=0)
  2. TR bit semantics e presenza dati

    • C++: tr==1 indica che il RT è il trasmettitore (RT->BC). Per i pacchetti BC (OTYPE_BC): wcin = tr ? 0 : wc (cioè se tr==1 non ci sono dati nel blocco BC)
    • Per i pacchetti di reply (OTYPE_RT) il reply include i dati quando tr==1.
    • Python: implementata la stessa logica; il numero di parole dati presenti (wcin) dipende da udp_header.otype e dal tr_bit.
  3. Validazione terminatori

    • C++ controlla che dopo i dati vi siano ~(cw.raw) e il marker k_ctrl_marker_end (0x3E3E).
    • Python: ora legge e confronta inv_cw e ctrl_marker, logga mismatch in logger.debug se non corrispondono.
  4. Creazione oggetti Message

    • Python ora istanzia gli oggetti messaggio solo quando è presente il payload dati effettivo. Questo rispetta il fatto che le richieste BC->RT (tr==1) non contengono payload nel frame iniziale.

File modificati

  • pybusmonitor1553/core/dispatcher.py
    • parse_packet() aggiornato per rispecchiare la logica C++ (wc, wcin, tr semantics, validate ~CW+0x3E3E)

Prossimi passi

  • Eseguire tools/verify_all_messages.py per validare che i messaggi A/B vengono impacchettati/parsi come GrifoScope.
  • Se emergono discrepanze residue, applicare patch mirate a: lib1553/MessageBase.pack() o tools/network_sniffer.py.

Note

  • Ho mantenuto endianness e uso di ctypes già presenti nel progetto.
  • I log di debug mostrano mismatch di marker/CW ma non interrompono il parsing; possiamo rendere il comportamento più rigido se necessario.

Creato automaticamente il: 2025-12-15