43 lines
2.3 KiB
Markdown
43 lines
2.3 KiB
Markdown
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
|