Files

118 lines
3.8 KiB
Python
Raw Permalink Normal View History

2026-04-16 16:51:05 +08:00
from .rx import *
from .modules.dpcd.dpcd import DPCDRegisters
from .modules.link.dp.link_rx import LinkDisplayPortRx
from .modules.edid.edid import EdidSink
from .modules.hdcp import HdcpSink
from .modules.capturer.event.event_capturer import EventCapturer, EventFilterDpRx, EventFilterUsbc
from .modules.link.dp.private_link_rx_types import DPRXHWCaps
from UniTAP.libs.lib_tsi.tsi_types import TSI_DPRX_HDCP_CAPS_R, TSI_DPRX_HDCP_STATUS_R
from UniTAP.libs.lib_tsi.tsi_types import TSI_DPRX_DPCD_BASE_W, TSI_DPRX_DPCD_DATA
from UniTAP.libs.lib_tsi.tsi_types import TSI_PDC_LOG_CONTROL, TSI_DPRX_HW_CAPS_R
from UniTAP.libs.lib_tsi.tsi_io import PortProtocol
class DPRX(RX):
"""
Main class of `DPRX` object.
Inherited from class `RX`.
Class describes capabilities of 300th (3XX) series of DP and USB-C devices in Sink (RX - receiver) role.
Attributes:
__link (LinkDisplayPortRx): object of `LinkDisplayPortRx`.
__dpcd (DPCDRegisters): object of `DPCDRegisters`.
__edid (EdidSink): object of `EdidSink`.
__hdcp (HdcpSink): object of `HdcpSink`.
__event_capturer (EventCapturer): object of `EventCapturer`.
__video_capturer (VideoCapturer): object of `VideoCapturerDP`.
"""
__CHECK_EVENT_FILTER = {PortProtocol.DisplayPort: [EventFilterDpRx],
PortProtocol.DisplayPortThrowUSBC: [EventFilterDpRx, EventFilterUsbc]}
def __init__(self, port_io: PortIO, memory_manager: MemoryManager, capturer: Capturer):
super().__init__(port_io, memory_manager, capturer)
hw_caps = port_io.get(TSI_DPRX_HW_CAPS_R, DPRXHWCaps)[1]
self.__dpcd = DPCDRegisters(port_io, TSI_DPRX_DPCD_BASE_W, TSI_DPRX_DPCD_DATA)
self.__link = LinkDisplayPortRx(port_io, hw_caps, self.__dpcd)
self.__edid = EdidSink(port_io, self.__link.status.mst_stream_count)
self.__hdcp = HdcpSink(port_io, TSI_DPRX_HDCP_CAPS_R, TSI_DPRX_HDCP_STATUS_R)
self.__video_capturer = VideoCapturerDP(capturer, hw_caps.mst_stream_count)
event_filters = []
for item in self.__CHECK_EVENT_FILTER.get(port_io.protocol()):
if item == EventFilterDpRx:
event_filters.append(item(hw_caps))
else:
event_filters.append(item(None))
self.__event_capturer = EventCapturer(capturer, port_io.index(), event_filters)
@property
def link(self) -> LinkDisplayPortRx:
"""
Should be used to control link capabilities on Sink (RX - receiver) role.
Returns:
object of `LinkDisplayPortRx` type.
"""
return self.__link
@property
def dpcd(self) -> DPCDRegisters:
"""
Should be used to work with DPCD registers on Sink (RX - receiver) role.
Returns:
object of `DPCDRegisters` type.
"""
return self.__dpcd
@property
def edid(self) -> EdidSink:
"""
Should be used to work with EDID on Sink (RX - receiver) role.
Returns:
object of `EdidSink` type.
"""
return self.__edid
@property
def hdcp(self) -> HdcpSink:
"""
Should be used to work with HDCP on Sink (RX - receiver) role.
Returns:
object of `HdcpSink`.
"""
return self.__hdcp
@property
def event_capturer(self) -> EventCapturer:
"""
Should be used to control `EventCapturer` on Sink (RX - receiver) role.
Returns:
object of `EventCapturer` type.
"""
return self.__event_capturer
@property
def video_capturer(self) -> VideoCapturerDP:
"""
Should be used to control `VideoCapturerDP` on Sink (RX - receiver) role.
Returns:
object of `VideoCapturerDP` type.
"""
return self.__video_capturer