1.1.0版本
This commit is contained in:
121
UniTAP/dev/ports/modules/link/dp/link_rx.py
Normal file
121
UniTAP/dev/ports/modules/link/dp/link_rx.py
Normal file
@@ -0,0 +1,121 @@
|
||||
from .link_rx_caps import LinkDisplayPortCaps
|
||||
from .link_rx_status import *
|
||||
from UniTAP.libs.lib_tsi.tsi_io import PortIO
|
||||
from .dp_cable_info import DpCableInfo, CableCapabilitiesEnum
|
||||
from .link_rx_aux_controller import DisplayPortAUXController
|
||||
from UniTAP.dev.ports.modules.dpcd import DPCDRegisters
|
||||
|
||||
|
||||
class LinkDisplayPortRx:
|
||||
"""
|
||||
Class `LinkDisplayPortRx` contains information about DP link.
|
||||
- Read link status `status`.
|
||||
- Configure and read link capabilities `capabilities`.
|
||||
- Make `hpd_pulse`.
|
||||
- Assert/Deassert HPD state `set_assert_state`.
|
||||
- Read and write scrambler seed value `scrambler_seed`.
|
||||
"""
|
||||
def __init__(self, port_io: PortIO, hw_caps: DPRXHWCaps, dpcd: DPCDRegisters):
|
||||
self.__io = port_io
|
||||
self.__HW_CAPS = hw_caps
|
||||
self.__status = LinkDisplayPortStatusSink(port_io, self.__HW_CAPS)
|
||||
self.__capabilities = LinkDisplayPortCaps(port_io, self.__HW_CAPS)
|
||||
self.__cable_info = DpCableInfo(port_io, TSI_DPRX_CABLE_ATTRIBUTES_R)
|
||||
self.__aux_controller = DisplayPortAUXController(port_io, dpcd)
|
||||
|
||||
@property
|
||||
def status(self) -> LinkDisplayPortStatusSink:
|
||||
"""
|
||||
Returns object of class `LinkDisplayPortStatusSink` for working with link status.
|
||||
|
||||
Returns:
|
||||
object of `LinkDisplayPortStatusSink` type
|
||||
"""
|
||||
return self.__status
|
||||
|
||||
@property
|
||||
def capabilities(self) -> LinkDisplayPortCaps:
|
||||
"""
|
||||
Returns object of class `LinkDisplayPortCaps` for working with link capabilities.
|
||||
|
||||
Returns:
|
||||
object of `LinkDisplayPortStatusSink` type
|
||||
"""
|
||||
return self.__capabilities
|
||||
|
||||
@property
|
||||
def aux_controller(self) -> DisplayPortAUXController:
|
||||
"""
|
||||
Returns object of class `DisplayPortAUXController` for working with DP AUX Controller.
|
||||
|
||||
Returns:
|
||||
object of `DisplayPortAUXController` type
|
||||
"""
|
||||
return self.__aux_controller
|
||||
|
||||
def hpd_pulse(self, duration_us: int = 500000):
|
||||
"""
|
||||
Start HPD pulse.
|
||||
|
||||
Args:
|
||||
duration_us (int)
|
||||
"""
|
||||
self.__io.set(TSI_DPRX_HPD_PULSE_W, duration_us, c_int)
|
||||
|
||||
def set_assert_state(self, state: bool):
|
||||
"""
|
||||
Assert/Deassert HPD state.
|
||||
|
||||
Args:
|
||||
state (bool)
|
||||
"""
|
||||
val = 0x1 if state else 0x0
|
||||
self.__io.set(TSI_FORCE_HOT_PLUG_STATE_W, val)
|
||||
|
||||
@property
|
||||
def scrambler_seed(self) -> int:
|
||||
"""
|
||||
Returns scrambler seed value.
|
||||
|
||||
Returns:
|
||||
object of `int` type
|
||||
"""
|
||||
if not self.__HW_CAPS.scrambler_seed:
|
||||
warnings.warn("Scrambler Seed is not supported.")
|
||||
return 0
|
||||
|
||||
return self.__io.get(TSI_DPRX_SCR_SEED, c_uint32)[1]
|
||||
|
||||
@scrambler_seed.setter
|
||||
def scrambler_seed(self, value: int = 0):
|
||||
"""
|
||||
Write new value to scrambler seed
|
||||
|
||||
Args:
|
||||
value (int) - new scrambler seed value
|
||||
"""
|
||||
if value < 0 or value > 65535:
|
||||
raise ValueError(f"Scrambler seed {value} is not available.")
|
||||
|
||||
if self.__HW_CAPS.scrambler_seed:
|
||||
self.__io.set(TSI_DPRX_SCR_SEED, value)
|
||||
else:
|
||||
warnings.warn("Scrambler Seed is not supported.")
|
||||
|
||||
def cable_rx_type(self) -> CableCapabilitiesEnum:
|
||||
"""
|
||||
Get cable type from the RX side.
|
||||
|
||||
Returns:
|
||||
object of `CableCapabilitiesEnum` type
|
||||
"""
|
||||
return self.__cable_info.get_current_port_cable_type()
|
||||
|
||||
def cable_tx_type(self) -> CableCapabilitiesEnum:
|
||||
"""
|
||||
Get cable type from the TX side.
|
||||
|
||||
Returns:
|
||||
object of `CableCapabilitiesEnum` type
|
||||
"""
|
||||
return self.__cable_info.get_another_port_cable_type()
|
||||
Reference in New Issue
Block a user