59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
|
|
import time
|
||
|
|
from UniTAP.libs.lib_tsi.tsi_io import DeviceIO
|
||
|
|
from UniTAP.libs.lib_tsi.tsi import TSI_TERMINAL_RW
|
||
|
|
from ctypes import c_char
|
||
|
|
|
||
|
|
|
||
|
|
class Terminal:
|
||
|
|
|
||
|
|
def __init__(self, device_io: DeviceIO):
|
||
|
|
self.__io = device_io
|
||
|
|
|
||
|
|
def write_vr(self, register: int, value: int):
|
||
|
|
self.__execute(f"vw {hex(register)} {value}")
|
||
|
|
|
||
|
|
def read_vr(self, register: int) -> str:
|
||
|
|
self.__execute(f"vr {hex(register)}")
|
||
|
|
return self.__get_logs()
|
||
|
|
|
||
|
|
def write_fifo_vr(self, register: int, value: int):
|
||
|
|
self.__execute(f"vfw {hex(register)} {value}")
|
||
|
|
|
||
|
|
def read_fifo_vr(self, register: int) -> str:
|
||
|
|
self.__execute(f"vfr {hex(register)}")
|
||
|
|
return self.__get_logs()
|
||
|
|
|
||
|
|
def run_command(self, command: str) -> str:
|
||
|
|
self.__execute(command)
|
||
|
|
return self.__get_logs()
|
||
|
|
|
||
|
|
def __execute(self, command):
|
||
|
|
command += '\r'
|
||
|
|
str_len = (len(command) / 4 + (1 if len(command) % 4 else 0)) * 4
|
||
|
|
self.__io.set(config_id=TSI_TERMINAL_RW,
|
||
|
|
data=command,
|
||
|
|
data_type=c_char,
|
||
|
|
data_count=len(command),
|
||
|
|
data_size=int(str_len))
|
||
|
|
|
||
|
|
def __get_logs(self, timeout: int = 5) -> str:
|
||
|
|
try:
|
||
|
|
start = time.time()
|
||
|
|
result = []
|
||
|
|
while time.time() - start < timeout:
|
||
|
|
result = self.__io.get(TSI_TERMINAL_RW, c_char, 1024)[1]
|
||
|
|
if result[0] != b'\x00':
|
||
|
|
break
|
||
|
|
|
||
|
|
output = ""
|
||
|
|
for i in result:
|
||
|
|
if i != b'\x00':
|
||
|
|
output += i.decode()
|
||
|
|
|
||
|
|
if output == "":
|
||
|
|
print("No output message")
|
||
|
|
return output
|
||
|
|
except BaseException:
|
||
|
|
print("No output message")
|
||
|
|
return ""
|