83 lines
2.4 KiB
Python
83 lines
2.4 KiB
Python
from ctypes import c_ubyte
|
|
|
|
from UniTAP.dev.ports.modules.ag.earc import AudioGeneratorEARC
|
|
from UniTAP.dev.modules.memory_manager import MemoryManager
|
|
from UniTAP.libs.lib_tsi.tsi_io import PortIO
|
|
|
|
import UniTAP.libs.lib_tsi.tsi_private_types as p_ci
|
|
import UniTAP.libs.lib_tsi.tsi_types as ci
|
|
|
|
from .earc_types import EarcControl, EarcMode, EarcStatus, EarcState, EarcHearthbeatState, EarcRxStatus
|
|
|
|
class EarcTx:
|
|
__MAX_EARC_EDID_SIZE = 128
|
|
|
|
def __init__(self, port_io: PortIO, memory_manager: MemoryManager) -> None:
|
|
self.__io = port_io
|
|
self.__earc_ag = AudioGeneratorEARC(port_io, memory_manager)
|
|
self.__control = self.__io.get(ci.TSI_HDRX_EARC_CTRL, EarcControl)[1]
|
|
|
|
def configure(self, mode: EarcMode, latency: int, bypass: bool = False) -> None:
|
|
self.__control.mode = mode
|
|
self.__control.bypass = bypass
|
|
self.__apply_control()
|
|
self.__set_audio_latency(latency)
|
|
|
|
def get_status(self) -> EarcStatus:
|
|
"""
|
|
Get eARC transmitter status.
|
|
|
|
Returns:
|
|
object of `EarcStatus` type.
|
|
"""
|
|
return self.__io.get(ci.TSI_HDRX_EARC_STS_R, EarcStatus)[1]
|
|
|
|
def get_latency(self) -> int:
|
|
"""
|
|
Get current audio latency for eARC transmitter.
|
|
|
|
Returns:
|
|
object of `int` type.
|
|
"""
|
|
return self.__io.get(ci.TSI_HDRX_EARC_LATENCY, int)[1]
|
|
|
|
def get_edid(self) -> bytearray:
|
|
"""
|
|
Get EDID data from eARC receiver.
|
|
|
|
Returns:
|
|
object of `bytearray` type.
|
|
"""
|
|
result, edid_data, size = self.__io.get(ci.TSI_HDRX_EARC_EDID_DATA, c_ubyte, self.__MAX_EARC_EDID_SIZE)
|
|
if result > 0:
|
|
return bytearray(edid_data[:result])
|
|
else:
|
|
return bytearray()
|
|
|
|
@property
|
|
def ag(self) -> AudioGeneratorEARC:
|
|
"""
|
|
Get audio generator for eARC transmitter.
|
|
|
|
Returns:
|
|
object of `AudioGeneratorEARC` type.
|
|
"""
|
|
return self.__earc_ag
|
|
|
|
def __apply_control(self):
|
|
"""
|
|
Apply eARC control settings.
|
|
"""
|
|
self.__io.set(ci.TSI_HDRX_EARC_CTRL, self.__control)
|
|
|
|
def __set_audio_latency(self, latency: int):
|
|
"""
|
|
Set audio latency request for eARC transmitter.
|
|
|
|
Args:
|
|
latency (int) - latency value to set
|
|
"""
|
|
self.__io.set(ci.TSI_HDRX_EARC_LATENCY_REQ, latency)
|
|
|
|
|
|
|