here's the rx code: ```py rx_queue = asyncio.Queue() async def read_os(): while True: packet = filter_packet(await os_iface.recv()) self.logger.debug("os->usb packet=<%s>", dump_hex(packet)) await rx_queue.put(packet) async def write_usb(): buffer = [] while True: try: if not buffer: packet = await rx_queue.get() else: packet = rx_queue.get_nowait() buffer.append(struct.pack(">H", len(packet))) buffer.append(packet) except asyncio.QueueEmpty: await usb_iface.write(b"".join(buffer)) await usb_iface.flush() buffer.clear() ```