# -*- coding: utf-8 -*- import os import sys from io import RawIOBase from typing import List sys.path.insert(1, os.path.dirname(os.path.dirname(sys.argv[0]))) from draw_memory_map import memory_table # noqa: E402 from srnemqtt.config import get_config, get_interface # noqa: E402 from srnemqtt.protocol import readMemory # noqa: E402 def get_device_name(iface: RawIOBase) -> str | None: data = readMemory(iface, 0x0C, 8) if data is None: return None return data.decode("utf-8").strip() def get_device_version(iface: RawIOBase) -> str | None: data = readMemory(iface, 0x14, 4) if data is None: return None major = (data[0] << 8) + data[1] minor = data[2] patch = data[3] return f"{major}.{minor}.{patch}" def get_device_serial(iface: RawIOBase) -> str | None: data = readMemory(iface, 0x18, 3) if data is None: return None p1 = data[0] p2 = data[1] p3 = (data[2] << 8) + data[3] return f"{p1}-{p2}-{p3}" if __name__ == "__main__": conf = get_config() iface = get_interface(conf) print(get_device_name(iface)) print(get_device_version(iface)) print(get_device_serial(iface)) data: List[int] = [] for i in range(0, 0xFFFF, 16): newdata = readMemory(iface, i, 16) if newdata: data.extend(newdata) # !!! FIXME: Naively assumes all queries return the exact words requested print( memory_table( data, wordsize=2, skip_nullrows=True, ) )