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

344 lines
7.1 KiB
Python

from enum import IntEnum, unique
@unique
class Subaddress(IntEnum):
"""
MIL-STD-1553 Subaddresses for GRIFO-F/TH (Ref. Tab. 3.11-1 & 3.11-2).
"""
# RX Messages (BC -> RT)
RX_SETTINGS = 1 # Msg A1
RX_COMMAND = 2 # Msg A2
RX_GRAPHIC = 3 # Msg A3
RX_NAV_DATA = 4 # Msg A4
RX_INU_HS = 5 # Msg A5
RX_NOT_USED = 6 # Msg A6
RX_DATALINK_1 = 7 # Msg A7
RX_DATALINK_2 = 8 # Msg A8
RX_RESERVED = 9 # Msg A9
# Mode Codes
MODE_CODE_RX = 0 # 00000
MODE_CODE_TX = 31 # 11111
# TX Messages (RT -> BC)
TX_TWS_1_2 = 11 # Msg B1
TX_TWS_3_4_5 = 12 # Msg B2
TX_TWS_6_7_8 = 13 # Msg B3
TX_SPT = 14 # Msg B4
TX_TRACKED = 15 # Msg B5
TX_SETTING_TB = 16 # Msg B6 (Tell-Back)
TX_STATUS_TB = 17 # Msg B7 (Tell-Back)
TX_BIT_REPORT = 18 # Msg B8
TX_RES_SEARCH = 19 # Msg B9
TX_RES_MODE = 20 # Msg B10
TX_RES_DEBUG = 21 # Msg B11
TX_WRAPAROUND = 30 # Data Wraparound
# --- A1: Radar Operational Setting Enums ---
class TargetHistory(IntEnum):
"""Ref. Tab. A1/01-A"""
LEVEL_1 = 0
LEVEL_2 = 1
LEVEL_3 = 2
LEVEL_4 = 3
class AltitudeBlock(IntEnum):
"""Ref. Tab. A1/01-F"""
BTBK = 0 # Bottom Block
TPBK = 1 # Top Block
NORMAL = 2
SPARE = 3
class FrequencyAgility(IntEnum):
"""Ref. Tab. A1/02-A"""
FIXED = 0
RANDOM = 1
ADAPTIVE = 2
SPARE = 3
# --- A2: Radar Operation Command Enums ---
class RadarMode(IntEnum):
"""Ref. Tab. A2/01-A and B7/01 (Master Mode)"""
RWS = 0 # Range While Search
VS = 1 # Velocity Search
ACM = 2 # Air Combat Mode
TWS = 3 # Track While Scan
SPARE_04 = 4
GM = 5 # Ground Map
SEA1 = 6 # Sea Mode 1
SEA2 = 7 # Sea Mode 2
GMTI = 8 # Ground Moving Target Indicator
BCN = 9 # Beacon
AGR = 10 # Air to Ground Ranging
TA = 11 # Terrain Avoidance
WA = 12 # Weather Avoidance
# 13-15 Spare/Reserved
class DesignationControl(IntEnum):
"""Ref. Tab. A2/01-B"""
LOCK_ON_ENABLE = 0
LOCK_ON_DTT = 1
TRANSFER_HPT = 2
REJECT = 3
LOCK_ON_STT = 4
DESIGNATE_TRACK = 5
SPARE_06 = 6
EXEC_SAR_SPOI = 7
EXEC_SAR_CURSOR = 8
NOT_VALID = 15
class RWSSubmode(IntEnum):
"""Ref. Tab. A2/02-A"""
NAM = 0 # Normal Air Mode
ASM = 1 # Adaptive Search Mode
class ACMSubmode(IntEnum):
"""Ref. Tab. A2/02-C"""
BORESIGHT = 0
NARROW = 1
HUD = 2
WIDE = 3
VERTICAL = 4
SLEWABLE = 5
class GMSubmode(IntEnum):
"""Ref. Tab. A2/02-D"""
RBM = 0 # Real Beam Map
DBS = 1 # Doppler Beam Sharpening
class RangeScale(IntEnum):
"""Ref. Tab. A2/02-G"""
NM_80 = 0
NM_40 = 1
NM_20 = 2
NM_10 = 3
class BarScan(IntEnum):
"""Ref. Tab. A2/02-G (Elevation Bars)"""
BAR_1 = 0
BAR_2 = 1
SPARE = 2
BAR_4 = 3
class AzimuthScan(IntEnum):
"""Ref. Tab. A2/02-I"""
DEG_60 = 0 # +/- 60 (or 45)
DEG_30 = 1 # +/- 30
DEG_25 = 2 # +/- 25
DEG_15 = 3 # +/- 15
class VelocityScale(IntEnum):
"""Ref. Tab. A2/02-I (VS Mode)"""
KTS_2400 = 0
KTS_1200 = 1
class IntBitStatus(IntEnum):
"""Ref. Tab. A2/01-C"""
NORMAL = 0
REQUEST = 1
class StandbyStatus(IntEnum):
"""Ref. Tab. A2/01-D"""
OFF = 0
ON = 1
class FreezeStatus(IntEnum):
"""Ref. Tab. A2/01-E"""
NORMAL = 0
FREEZE = 1
class SpotFunction(IntEnum):
"""Ref. Tab. A2/02-B"""
NORMAL = 0
SPOT = 1
class ExpandFunction(IntEnum):
"""Ref. Tab. A2/02-E"""
NORMAL = 0
EXPAND = 1
# 2-3 Spare
class ZoomCommand(IntEnum):
"""Ref. Tab. A2/03-B"""
NOT_ACTIVE = 0
ZOOM_IN = 1
ZOOM_OUT = 2
SPARE = 3
class MapOrientation(IntEnum):
"""Ref. Tab. A2/03-C"""
AC_NOSE = 0
SLANT_CROSS_RANGE = 1
# 2-3 Not Used
class BullsEyeSelect(IntEnum):
"""Ref. Tab. A3/01-B"""
NONE = 0
WAYPOINT_1 = 1
WAYPOINT_2 = 2
WAYPOINT_3 = 3
class WaypointType(IntEnum):
"""Ref. Tab. A3/04-B"""
WAYPOINT = 0
FLY_TO = 1
class WaypointQualifier(IntEnum):
"""Ref. Tab. A3/04-D"""
LEFT = 0
RIGHT = 1
DTK = 2 # Desired Track
MARK = 3
class InterceptMode(IntEnum):
"""Ref. Tab. A3/15-B"""
REAR = 0
ALL = 1
class LineStyle(IntEnum):
"""Ref. Tab. A3/15-C (Normal/Dashed)"""
NORMAL = 0
DASHED = 1
class SymbolState(IntEnum):
"""Ref. Tab. A3/21-B (Normal/Blink)"""
NORMAL = 0
BLINK = 1
class Identity(IntEnum):
"""Ref. Tab. A3/24-C/F"""
FRIEND = 0
FOE = 1
class CursorMode(IntEnum):
"""Ref. Tab. A4/01-M"""
NORMAL = 0
SLAVE = 1
class CursorSnowplough(IntEnum):
"""Ref. Tab. A4/01-O"""
NORMAL = 0
SNOWPLOUGH = 1
class CursorGhost(IntEnum):
"""Ref. Tab. A4/19-B"""
NORMAL = 0
GHOST = 1
class DTTEnable(IntEnum):
"""Ref. Tab. A4/19-C"""
NORMAL = 0
DTT_ENABLED = 1
class SAREnable(IntEnum):
"""SAR Enable flag (Ref. A4-related)"""
NORMAL = 0
SAR_ENABLED = 1
class DLTargetType(IntEnum):
"""Ref. Tab. A7/05-A"""
TARGET = 0
HIGH_PRIORITY_TARGET = 1
MEMBER = 2
HIGH_PRIORITY_MEMBER = 3
class TwsValidity(IntEnum):
"""Ref. Tab. B1/01-A"""
INVALID = 0
VALID = 1
class HptIdentifier(IntEnum):
"""Ref. Tab. B1/01-B"""
TARGET_01 = 0
TARGET_02 = 1
TARGET_03 = 2
TARGET_04 = 3
TARGET_05 = 4
TARGET_06 = 5
TARGET_07 = 6
TARGET_08 = 7
NO_HPT = 15
class TrackPriority(IntEnum):
"""Ref. Tab. B1/02-A"""
LEVEL_1 = 0 # Highest
LEVEL_2 = 1
LEVEL_3 = 2
LEVEL_4 = 3
LEVEL_5 = 4
LEVEL_6 = 5
LEVEL_7 = 6
LEVEL_8 = 7 # Lowest
class TrackAccuracy(IntEnum):
"""Ref. Tab. B1/04-A"""
LEVEL_0 = 0
LEVEL_1 = 1
LEVEL_2 = 2
LEVEL_3 = 3
class NormFactorXY(IntEnum):
"""Ref. Tab. B4/02-E/F"""
FACTOR_0 = 0 # Multiplier 0.5 ft
FACTOR_1 = 1 # Multiplier 1 ft
FACTOR_2 = 2 # Multiplier 2 ft
FACTOR_3 = 3 # Multiplier 4 ft
FACTOR_4 = 4 # Multiplier 8 ft
FACTOR_5 = 5 # Multiplier 16 ft
class NormFactorZ(IntEnum):
"""Ref. Tab. B4/02-G"""
FACTOR_0 = 0 # Multiplier 0.5 ft
FACTOR_1 = 1 # Multiplier 1 ft
FACTOR_2 = 2 # Multiplier 2 ft
FACTOR_3 = 3 # Multiplier 4 ft
class RadarDesignationStatus(IntEnum):
"""Ref. Tab. B7/01-B"""
STT = 0
DTT = 1
SAM = 2
TWS_WITH_HPT = 3
AGR_LOCK_ON = 4
ACQUISITION_IN_PROGRESS = 5
SAR = 7
NOT_VALID = 15
class DegradedStatus(IntEnum):
"""Ref. Tab. B7/01-F"""
NORMAL = 0
DEGRADED = 1
class RfRadiationStatus(IntEnum):
"""Ref. Tab. B7/01-H"""
ON = 0
OFF = 1
class TransitionStatus(IntEnum):
"""Ref. Tab. B7/01-I"""
NO_TRANSITION = 0
IN_PROGRESS = 1
class AcquisitionResult(IntEnum):
"""Ref. Tab. B7/01-J"""
UNSUCCESSFUL = 0
SUCCESSFUL = 1
class SarFeasibility(IntEnum):
"""Ref. Tab. B7/03-D/E"""
NOT_FEASIBLE = 0
FEASIBLE = 1
class BitReportLabel(IntEnum):
"""Ref. Tab. B8/01-A"""
POWER_UP_BIT = 0
FAST_POWER_UP_BIT = 1
INT_BIT = 2
SWITCH_OFF = 3
FAIL_ONSET = 4
FAIL_STOP = 5
# 6-7 Spare