SXXXXXXX_ControlPanel/VideoReceiverSFP/core/sfp_structures.py
2026-01-13 14:21:21 +01:00

45 lines
1.4 KiB
Python

"""Local SFP structures for VideoReceiverSFP module (ctypes-based).
Copied/adapted minimal subset from main project to remain self-contained.
"""
import ctypes
class SFPHeader(ctypes.Structure):
_pack_ = 1
_fields_ = [
("SFP_MARKER", ctypes.c_uint8),
("SFP_DIRECTION", ctypes.c_uint8),
("SFP_PROT_VER", ctypes.c_uint8),
("SFP_PT_SPARE", ctypes.c_uint8),
("SFP_TAG", ctypes.c_uint8),
("SFP_SRC", ctypes.c_uint8),
("SFP_FLOW", ctypes.c_uint8),
("SFP_TID", ctypes.c_uint8),
("SFP_FLAGS", ctypes.c_uint8),
("SFP_WIN", ctypes.c_uint8),
("SFP_ERR", ctypes.c_uint8),
("SFP_ERR_INFO", ctypes.c_uint8),
("SFP_TOTFRGAS", ctypes.c_uint16),
("SFP_FRAG", ctypes.c_uint16),
("SFP_RECTYPE", ctypes.c_uint8),
("SFP_RECSPARE", ctypes.c_uint8),
("SFP_PLDAP", ctypes.c_uint8),
("SFP_PLEXT", ctypes.c_uint8),
("SFP_RECCOUNTER", ctypes.c_uint16),
("SFP_PLSIZE", ctypes.c_uint16),
("SFP_TOTSIZE", ctypes.c_uint32),
("SFP_PLOFFSET", ctypes.c_uint32),
]
@classmethod
def size(cls):
return ctypes.sizeof(cls)
@staticmethod
def get_field_offset(field_name: str) -> int:
try:
return getattr(SFPHeader, field_name).offset
except AttributeError:
return -1