#!/usr/bin/env python3
import socket
s = socket.socket(); s.settimeout(10); s.connect(('127.0.0.1', 2331))

def gdb(cmd):
    cs = format(sum(ord(c) for c in cmd), '02x')
    s.send(b'$' + cmd.encode() + b'#' + cs.encode())
    while True:
        c = s.recv(1)
        if c == b'+': break
        if c == b'-': return 'NAK'
    resp = b''
    while True:
        c = s.recv(1)
        if c == b'$': resp = b''
        elif c == b'#': s.recv(2); s.send(b'+'); return resp.decode()
        else: resp += c

# Try 'monitor' commands via GDB
# GDB sends 'qRcmd,<hex>' for monitor commands
import binascii

def monitor(cmd):
    """Send monitor command via qRcmd"""
    hex_cmd = binascii.hexlify(cmd.encode()).decode()
    return gdb('qRcmd,' + hex_cmd)

# Test monitor connection
r = monitor('help')
print(f'Monitor help: {r[:200] if r else "None"}')

# Try reading memory via monitor
r = monitor('mem32 0x00000000 4')
print(f'mem32 0: {r}')

r = monitor('mem32 0x00019FAC 4')
print(f'mem32 MCU_UPGRADE: {r}')

r = monitor('regs')
print(f'Regs: {r[:300] if r else "None"}')

# Try halt
r = monitor('h')
print(f'h: {r}')

# Read vector table again
r = monitor('mem32 0x00000000 16')
print(f'vectors: {r}')

s.close()
