Skip to content

Commit 4277858

Browse files
Update uart handling and version string Fixes #357
1 parent d9b433b commit 4277858

2 files changed

Lines changed: 14 additions & 3 deletions

File tree

src/openlifu/io/LIFUHVController.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,13 @@ def get_version(self) -> str:
133133
# r.print_packet()
134134
if r.data_len == 3:
135135
ver = f"v{r.data[0]}.{r.data[1]}.{r.data[2]}"
136-
else:
137-
ver = "v0.0.0"
136+
elif r.data_len and r.data:
137+
try:
138+
# Decode only the valid length, strip trailing NULs and whitespace
139+
ver_str = r.data[:r.data_len].decode('utf-8', errors='ignore').rstrip('\x00').strip()
140+
ver = ver_str if ver_str else 'v0.0.0'
141+
except Exception:
142+
ver = 'v0.0.0'
138143
logger.info(ver)
139144
return ver
140145

src/openlifu/io/LIFUUart.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ def disconnect(self):
228228
return
229229

230230
if self.read_thread:
231-
self.read_thread.join()
231+
self.read_thread.join(timeout=5)
232232
if self.serial and self.serial.is_open:
233233
self.serial.close()
234234
self.serial = None
@@ -367,8 +367,14 @@ def _read_data(self, timeout=20):
367367
else:
368368
time.sleep(0.05) # Brief sleep to avoid a busy loop
369369
except serial.SerialException as e:
370+
if "ClearCommError" in str(e):
371+
log.warning("Serial _read_data ClearCommError on %s (ignoring): %s", self.descriptor, e)
372+
time.sleep(0.1)
373+
continue
370374
log.error("Serial _read_data error on %s: %s", self.descriptor, e)
371375
self.running = False
376+
self.signal_disconnect.emit(self.descriptor, self.port)
377+
self.port = None
372378

373379
def _tx(self, data: bytes):
374380
"""Send data over UART."""

0 commit comments

Comments
 (0)