import serial import struct import sys import time #dest = 0xac21_0000 dest = 0xac02_0000 #dest = 0xac01_0000 ret = [] def sync(ser, b, wait=0.1): l = [] for i, c in enumerate(b): if i % 32 == 0 and i != 0: print(i, end=' ') sys.stdout.flush() ser.write(bytes([c])) time.sleep(1000 / 1000000) if ser.in_waiting == 0: time.sleep(0.001) while ser.in_waiting > 0: res = ser.read(ser.in_waiting) l.extend(res) time.sleep(0.001) time.sleep(wait) res = ser.read(ser.in_waiting) l.extend(res) return bytes(l) def symmetric(ser, b): l = [] mem = memoryview(b) i = 0 chunk_size = 128 while i < len(b): if i % 1024 == 0: print(i, end=' ') sys.stdout.flush() while True: if ser.in_waiting: res = ser.read(ser.in_waiting) l.extend(res) if len(l) + chunk_size >= i: break chunk_size = min(chunk_size, len(b) - i) assert chunk_size > 0, chunk_size ser.write(mem[i:i+chunk_size]) i += chunk_size orig_count = 1000 count = orig_count while count > 0: if len(l) >= len(b): break time.sleep(1 / orig_count) if ser.in_waiting: res = ser.read(ser.in_waiting) l.extend(res) count -= 1 return bytes(l) def start_data(ser, b): _ = ser.read(ser.in_waiting) size = len(b) args = struct.pack(">", seen, seen_ix): sys.stderr.write("\nMATCH\n") sys.stderr.flush() framebuffer_mode = True framebuffer = [] if compare_str(b"<>", seen, seen_ix): framebuffer_mode = False sys.stderr.write("<>\n") sys.stderr.flush() with open('framebuffer.bin', 'wb') as f: f.write(bytes(framebuffer[:-16])) with open(sys.argv[1], 'rb') as f: b = f.read() def baudrate_from_scbrr2(n): return 1562500 / (n+1) def change_rate(old_rate, new_rate): with serial.Serial(port='/dev/ttyUSB0', baudrate=baudrate_from_scbrr2(old_rate), bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1, xonxoff=False, #rtscts=False, rtscts=True, ) as ser: buf = b'\x00\x00\x00\x00' start_data(ser, buf) ret = symmetric(ser, buf) print('ret', ret) print("change rate", int(baudrate_from_scbrr2(new_rate))) args = struct.pack("