118 lines
3.8 KiB
Python
118 lines
3.8 KiB
Python
|
|
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
|