SXXXXXXX_PyBusMonitor1553/pybusmonitor1553/lib1553/messages/msg_b8.py
2025-12-09 15:52:18 +01:00

97 lines
4.4 KiB
Python

from ..message_base import MessageBase
from ..constants import Subaddress, BitReportLabel
from ..fields import BitField, EnumField, ScaledField
class MsgB8(MessageBase):
"""
Message B8: BIT Report Message
ID: B8
Direction: RT -> BC (Transmit)
Subaddress: 18
Rate: 1.5625 Hz
Document Ref: 7.2.8
Contains detailed Built-In Test results, failure locations,
and degradation flags.
"""
SUBADDRESS = Subaddress.TX_BIT_REPORT
IS_TRANSMIT = True
# --- Word 01: BIT Report Label (Ref 7.2.8.1) ---
report_label = EnumField(word_index=0, start_bit=0, width=3, enum_cls=BitReportLabel)
# --- Word 02: BIT Report Date (Ref 7.2.8.2) ---
# Format matches A1/06
report_year = BitField(word_index=1, start_bit=0, width=6)
report_month = BitField(word_index=1, start_bit=6, width=4)
report_day = BitField(word_index=1, start_bit=10, width=5)
# --- Word 03: BIT Report Time Tag (Ref 7.2.8.3) ---
# Format matches A1/07. LSB = 2 sec
report_time = ScaledField(word_index=2, start_bit=0, width=15, lsb_value=2.0)
# --- Word 04: Degradation Conditions 1 (Ref 7.2.8.4) ---
deg_msg_01 = BitField(word_index=3, start_bit=0, width=1)
deg_msg_02 = BitField(word_index=3, start_bit=1, width=1)
deg_msg_03 = BitField(word_index=3, start_bit=2, width=1)
# ... mapping all 16 bits as individual flags
deg_msg_16 = BitField(word_index=3, start_bit=15, width=1)
# --- Word 05: Degradation Conditions 2 (Ref 7.2.8.5) ---
# Currently spares/reserved in standard mapping, but placeholder structure
deg_word_2_raw = BitField(word_index=4, start_bit=0, width=16)
# --- Word 06: Failure Location - Pedestal (Ref 7.2.8.6) ---
fail_sru_gimbal = BitField(word_index=5, start_bit=0, width=1)
fail_sru_waveguide = BitField(word_index=5, start_bit=1, width=1)
# ... (other bits are spares or specific waveguides)
# --- Word 07: Failure Location - Servoloop (Ref 7.2.8.7) ---
fail_sru_chassis = BitField(word_index=6, start_bit=0, width=1)
fail_sru_pwr_supply = BitField(word_index=6, start_bit=1, width=1)
fail_sru_dig_ctrl = BitField(word_index=6, start_bit=2, width=1)
# --- Word 08: Failure Location - RX Front End (Ref 7.2.8.8) ---
fail_rxfe_chassis = BitField(word_index=7, start_bit=0, width=1)
fail_rxfe_lna = BitField(word_index=7, start_bit=1, width=1)
fail_rxfe_sum_prot = BitField(word_index=7, start_bit=2, width=1)
# ...
# --- Word 09: Failure Location - Receiver (Ref 7.2.8.9) ---
fail_rx_chassis = BitField(word_index=8, start_bit=0, width=1)
fail_rx_uhf_assy = BitField(word_index=8, start_bit=1, width=1)
fail_rx_synth = BitField(word_index=8, start_bit=2, width=1)
# ...
# --- Word 10: Failure Location - Transmitter (Ref 7.2.8.10) ---
fail_tx_chassis = BitField(word_index=9, start_bit=0, width=1)
fail_tx_rex = BitField(word_index=9, start_bit=1, width=1)
fail_tx_pwr_supply = BitField(word_index=9, start_bit=2, width=1)
fail_tx_twt = BitField(word_index=9, start_bit=3, width=1)
# ...
# --- Word 11: Failure Location - Processor (Ref 7.2.8.11) ---
fail_proc_motherboard = BitField(word_index=10, start_bit=0, width=1)
fail_proc_pulse_comp = BitField(word_index=10, start_bit=1, width=1)
fail_proc_mti_fft = BitField(word_index=10, start_bit=2, width=1)
# ...
# --- Word 12: Signal Processor Test Results (Ref 7.2.8.12) ---
test_sp1_timer1 = BitField(word_index=11, start_bit=0, width=1)
test_sp2_timer_timing = BitField(word_index=11, start_bit=1, width=1)
# ... mapping specific tests ...
test_sp16_bcn = BitField(word_index=11, start_bit=15, width=1)
# --- Word 13-22: Other Test Results ---
# Providing raw access for detailed analysis if needed
test_res_rx_module = BitField(word_index=12, start_bit=0, width=16)
test_res_data_proc = BitField(word_index=13, start_bit=0, width=16)
test_res_post_proc = BitField(word_index=14, start_bit=0, width=16)
test_res_agc = BitField(word_index=15, start_bit=0, width=16)
test_res_pwr_supply = BitField(word_index=16, start_bit=0, width=16)
test_res_servoloop = BitField(word_index=17, start_bit=0, width=16)
test_res_tx_1 = BitField(word_index=18, start_bit=0, width=16)
test_res_tx_2 = BitField(word_index=19, start_bit=0, width=16)
test_res_rx_fe = BitField(word_index=20, start_bit=0, width=16)
test_res_integrated = BitField(word_index=21, start_bit=0, width=16)