Extract reusable byte work panel with configurable terminal addressing

This commit is contained in:
2026-10-09 08:56:16 +03:00
parent fe9b5a246e
commit 86ece3ea90
6 changed files with 493 additions and 69 deletions

View File

@@ -66,7 +66,8 @@ class RawProtocol:
if self._loop is not None or self._callback is not None or (self.host and self.host._pending_address is not None):
callback(False, "Дождитесь завершения текущего обмена")
return
self._controller = self.host.address.value() if self.host else device_address
self._controller = (device_address if device_address is not None else
self.host.address.value() if self.host else 1)
self._command = memory.PEEK if value is None else memory.POKE
try:
request = memory.request(self._controller, address, value)
@@ -119,7 +120,8 @@ class RawProtocol:
return False, "Подключите COM-порт"
if self._loop is not None or self._callback is not None or (self.host and self.host._pending_address is not None):
return False, "Дождитесь завершения текущего обмена"
self._controller = self.host.address.value() if self.host else device_address
self._controller = (device_address if device_address is not None else
self.host.address.value() if self.host else 1)
self._command = memory.PEEK if value is None else memory.POKE
try:
request = memory.request(self._controller, address, value)
@@ -162,10 +164,10 @@ class RawProtocol:
self.host._pending_address = self.host._pending_kind = None
self.host.byte_page.setEnabled(True)
def poke(self, mem_address, data_value, device_address=1):
def poke(self, mem_address, data_value, device_address=None):
return self._exchange(mem_address, data_value, device_address)
def peek(self, mem_address, device_address=1):
def peek(self, mem_address, device_address=None):
return self._exchange(mem_address, None, device_address)
def send_raw(self, hex_data):
@@ -196,9 +198,10 @@ class RawProtocol:
class RawProtocolWidget(QWidget):
"""Виджет для отладки RAW протокола (всегда виден внизу окна)"""
def __init__(self, raw_protocol):
super().__init__()
def __init__(self, raw_protocol, parent=None, *, device_address=10):
super().__init__(parent)
self.raw_protocol = raw_protocol
self.device_address = device_address
self.init_ui()
def init_ui(self):
@@ -272,7 +275,7 @@ class RawProtocolWidget(QWidget):
def memory_write(self):
"""Запись в память (POKE)"""
try:
device_addr = 10
device_addr = self.device_address() if callable(self.device_address) else self.device_address
mem_addr = int(self.mem_addr_edit.text(), 16)
data = int(self.mem_data_edit.text(), 16)
@@ -290,7 +293,7 @@ class RawProtocolWidget(QWidget):
def memory_read(self):
"""Чтение из памяти (PEEK)"""
try:
device_addr = 10
device_addr = self.device_address() if callable(self.device_address) else self.device_address
mem_addr = int(self.mem_addr_edit.text(), 16)
success, result = self.raw_protocol.peek(mem_addr, device_addr)