54 lines
1.7 KiB
Python
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()
|