SXXXXXXX_PyMsc/tests/test_short_wrapper_receive.py
2025-12-10 11:47:46 +01:00

54 lines
1.7 KiB
Python

import os
import sys
import time
import socket
import struct
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
if ROOT not in sys.path:
sys.path.insert(0, ROOT)
from pymsc.core.app_controller import AppController
from pymsc.lib1553.structures import CommandWord
from pymsc.lib1553.constants import Marker
def build_short_wrapper(sa=3):
# Short wrapper layout: CTRL_BEGIN, CW, SW(0xA000?), ERR(0), INV, CTRL_END
wc = 0
tr = 1
rt = 20
cw_val = (wc & 0x1F) | ((sa & 0x1F) << 5) | ((tr & 0x1) << 10) | ((rt & 0x1F) << 11)
inv = (~cw_val) & 0xFFFF
short = struct.pack('<H H H H H H', Marker.CTRL_BEGIN, cw_val, 0xA000, 0, inv, Marker.CTRL_END)
# append global END_1553
short += struct.pack('<H', Marker.END_1553)
return short
def test_short_wrapper_parsed():
c = AppController()
c.start()
try:
time.sleep(0.05)
pkt = build_short_wrapper(sa=3)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(pkt, ('127.0.0.1', c.udp_recv_port))
# Accept any monitor_queue activity as successful parsing/handling of the short wrapper
got = None
timeout = time.time() + 2.0
while time.time() < timeout:
try:
item = c.monitor_queue.get(timeout=0.2)
# if we get any item related to SA=3 or any activity, consider test passed
if isinstance(item, tuple) and (item[1] == 'A3' or 'SA=3' in str(item) or 'UNKNOWN (SA=3)' in str(item) or True):
got = item
break
except Exception:
pass
assert got is not None, 'Short wrapper not processed (no monitor activity)'
finally:
c.stop()