Source code for pyrtma.header
import ctypes
from typing import Type
from .message_base import MessageBase, MessageMeta
from .validators import Int16, Double, Int32, Uint32
# Type Aliases
MODULE_ID = ctypes.c_short
HOST_ID = ctypes.c_short
MSG_TYPE = ctypes.c_int
MSG_COUNT = ctypes.c_int
[docs]
class MessageHeader(MessageBase, metaclass=MessageMeta):
"""RTMA Message Header class"""
msg_type: Int32 = Int32()
msg_count: Int32 = Int32()
send_time: Double = Double()
recv_time: Double = Double()
src_host_id: Int16 = Int16()
src_mod_id: Int16 = Int16()
dest_host_id: Int16 = Int16()
dest_mod_id: Int16 = Int16()
num_data_bytes: Int32 = Int32()
remaining_bytes: Int32 = Int32()
is_dynamic: Int32 = Int32()
reserved: Uint32 = Uint32()
@property
def version(self) -> int:
return self.reserved
@version.setter
def version(self, value: int):
self.reserved = value
[docs]
class TimeCodeMessageHeader(MessageHeader, metaclass=MessageMeta):
"""Variant of MessageHeader with additional Timecode fields"""
utc_seconds: Uint32 = Uint32()
utc_fraction: Uint32 = Uint32()
[docs]
def get_header_cls(timecode: bool = False) -> Type[MessageHeader]:
"""Get the correct header class depending on whether timecode is used
Args:
timecode (bool, optional): Flag indicating if timecode fields are needed. Defaults to False.
Returns:
Type[MessageHeader]: MessageHeader class
"""
if timecode:
return TimeCodeMessageHeader
else:
return MessageHeader