更新UCD-API库及文档

This commit is contained in:
xinzhu.yin
2026-07-02 17:16:18 +08:00
parent a500751d85
commit 9fa811a9eb
290 changed files with 9558 additions and 2306 deletions

View File

@@ -0,0 +1 @@
from .packet_generator import PacketGenerator

View File

@@ -0,0 +1,92 @@
from ctypes import c_byte
from typing import Union, List, Optional
from UniTAP.libs.lib_tsi import ci, p_ci
from UniTAP.libs.lib_tsi.tsi_io import PortIO
from UniTAP.dev.modules import MemoryManager
class PacketGenerator:
class Status:
def __init__(self, value: int):
self.enabled = bool(value & 0x1)
self.active = bool(value & 0x2)
self.error = bool(value & 0x4)
self.overflow = bool(value & 0x8)
def __str__(self):
return f"Packet Generator Status: Enabled: {self.enabled}; Active: {self.active}; Error: {self.error}; Overflow: {self.overflow};"
"""
Main class `PacketGenerator` allows working with PG functionality on the device: set different types of pattern
`set_pattern`, set different video modes `set_vm`, set additional parameters for some patterns `set_pattern_params`,
get information about current video mode on stream `get_stream_video_mode`, `apply` all transferred setting,
`reset` settings and read pattern generator `status`.
"""
def __init__(self, port_io: PortIO, memory_manager: MemoryManager):
self.__io = port_io
self.__memory_manager = memory_manager
self.__packets = []
def reset(self):
"""
Reset static packet generator settings to default values.
"""
self.stop()
self.__packets = []
def start(self):
"""
Start packet generator with current settings.
"""
self.stop()
self.__upload_data()
if self.__io.set(ci.TSI_PACKETGEN_CONTROL_W, 1) < ci.TSI_SUCCESS:
raise Exception("Failed to start packet generator")
def stop(self):
"""
Stop packet generator.
"""
self.__io.set(ci.TSI_PACKETGEN_CONTROL_W, 2)
def status(self) -> Status:
"""
Get current status of packet generator.
Returns:
Status - current status of packet generator
"""
return PacketGenerator.Status(self.__io.get(ci.TSI_PACKETGEN_STATUS_R)[1])
def add_packet(self, raw_packet_data: bytearray):
self.__packets.append(raw_packet_data)
def load_packet(self, file_path: str):
with open(file_path, "rb") as f:
packet_data = f.read()
self.__packets.append(bytearray(packet_data))
def __upload_data(self):
mem_layout = self.__memory_manager.get_memory_layout()
if len(mem_layout) <= MemoryManager.MemoryOwner.MO_Events.value or mem_layout[MemoryManager.MemoryOwner.MO_Events.value] == 0:
self.__memory_manager.make_default()
if self.__io.set(ci.TSI_PACKETGEN_PACKETS_NUMBER, len(self.__packets)) < ci.TSI_SUCCESS:
raise Exception("Failed to set packets number for packet generator")
for index, packet in enumerate(self.__packets):
if self.__io.set(ci.TSI_PACKETGEN_PACKET_DATA, packet, data_type=c_byte, data_count=len(packet)) < ci.TSI_SUCCESS:
raise Exception(f"Failed to set packet data for packet {index} in packet generator")
if self.__io.set(ci.TSI_PACKETGEN_MEM_BLOCK, int(MemoryManager.MemoryOwner.MO_Events)) < ci.TSI_SUCCESS:
raise Exception("Failed to set memory block for packet generator")