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 = 384 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("