SXXXXXXX_PyBusMonitor1553/tests/test_messages_more.py

53 lines
1.4 KiB
Python

import ctypes
import pytest
from pybusmonitor1553.lib1553.messages.msg_a4 import MsgA4
from pybusmonitor1553.lib1553.messages.msg_b6 import MsgB6
from pybusmonitor1553.lib1553.messages.msg_b7 import MsgB7
from pybusmonitor1553.lib1553.constants import CursorMode, DTTEnable, SAREnable
def test_msg_a4_cursor_and_sar_enable():
m = MsgA4()
# Default enums
assert m.cursor_mode is not None
# Set cursor mode to SLAVE (value 1) and verify underlying storage
m.cursor_mode = CursorMode.SLAVE
assert m.cursor_mode == CursorMode.SLAVE
# Cursor mode sits in word 0; ensure data changed
assert m.data[0] != 0
# SAR enable test
m.sar_enable = SAREnable.SAR_ENABLED
assert m.sar_enable == SAREnable.SAR_ENABLED
def test_msg_b6_and_b7_basic_fields():
b6 = MsgB6()
b7 = MsgB7()
# set some values and read back
b6.target_history_tb = 2
assert int(b6.target_history_tb) == 2
b7.master_mode_tb = 3
assert int(b7.master_mode_tb) == 3
def test_ppos_lat_positive_value():
m = MsgA4()
# construct a small positive 25-bit raw value
raw_25 = 123456
msw = (raw_25 >> 9) & 0xFFFF
lsw_fragment = raw_25 & 0x1FF
lsw_word = (lsw_fragment << 7) & 0xFFFF
m._data[23] = msw
m._data[24] = lsw_word
expected = float(raw_25 * 5.9604644775e-8)
assert pytest.approx(m.ppos_lat, rel=1e-9) == expected