"""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