sync
This commit is contained in:
@@ -90,22 +90,27 @@ class BuzzerConnection:
|
||||
|
||||
with open(filepath, 'rb') as f:
|
||||
while bytes_sent < file_size:
|
||||
|
||||
# NEU: Prüfe, ob der Controller VORZEITIG abgebrochen hat (z.B. ERR)
|
||||
# 1. Nicht blockierende Fehlerprüfung vor jedem Chunk
|
||||
if self.serial.in_waiting > 0:
|
||||
line = self.serial.readline().decode('utf-8', errors='ignore').strip()
|
||||
if line.startswith("ERR"):
|
||||
raise BuzzerError(f"Controller hat Transfer abgebrochen: {line}")
|
||||
|
||||
# 2. Chunk lesen und schreiben
|
||||
chunk = f.read(chunk_size)
|
||||
if not chunk:
|
||||
break
|
||||
|
||||
self.serial.write(chunk)
|
||||
self.serial.flush()
|
||||
# WICHTIG: self.serial.flush() hier entfernen.
|
||||
# Dies verhindert den Deadlock mit dem OS-USB-Puffer.
|
||||
|
||||
bytes_sent += len(chunk)
|
||||
|
||||
# 3. Callback für UI
|
||||
if progress_callback:
|
||||
progress_callback(len(chunk))
|
||||
|
||||
# 3. Warte auf das finale OK (oder ERR bei CRC/Schreib-Fehlern)
|
||||
start_time = time.time()
|
||||
while (time.time() - start_time) < timeout:
|
||||
|
||||
Reference in New Issue
Block a user