import serial import struct import sys import time #dest = 0xac21_0000 dest = 0xac02_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 = 16 while i < len(b): if i % 128 == 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(b[i:i+chunk_size]) i += chunk_size time.sleep(0.1) res = ser.read(ser.in_waiting) l.extend(res) return bytes(l) def do(ser, b): _ = ser.read(ser.in_waiting) ser.flush() ser.flushInput() ser.flushOutput() _ = ser.read(ser.in_waiting) ret = sync(ser, b'DATA') #print(ret) size = len(b) args = struct.pack("