修改UCD连接需要重启错误

This commit is contained in:
xinzhu.yin
2026-06-16 14:31:00 +08:00
parent dc096a9805
commit 3dd383b982
5 changed files with 81 additions and 22 deletions

View File

@@ -111,6 +111,12 @@ class _UcdSdkBackend:
def search_device(self):
"""搜索可用设备"""
self._ensure_tsi_lib()
try:
self.lUniTAP.rescan_devices()
except Exception:
log.exception("UcdSdk.search_device rescan failed; reinitializing TsiLib")
self._reinit_tsi_lib()
available_devices = self.lUniTAP.get_list_of_available_devices()
return available_devices if available_devices else []
@@ -122,6 +128,13 @@ class _UcdSdkBackend:
if self.dev is not None or self.status:
self._force_cleanup()
self._ensure_tsi_lib()
try:
self.lUniTAP.rescan_devices()
except Exception:
log.exception("UcdSdk.open rescan failed; reinitializing TsiLib")
self._reinit_tsi_lib()
device_id = int(device_name.split(":")[0])
temp_dev = self.lUniTAP.open(device_id)
@@ -144,6 +157,7 @@ class _UcdSdkBackend:
except Exception as e:
self._force_cleanup()
self._reinit_tsi_lib()
return False
def close(self):
@@ -157,30 +171,29 @@ class _UcdSdkBackend:
self._close_device_object(self.dev)
self._reset_state()
self.lUniTAP = None
for i in range(3):
gc.collect()
time.sleep(2.0)
self.lUniTAP = UniTAP.TsiLib()
self._reinit_tsi_lib()
return True
except Exception as e:
self._reset_state()
try:
self.lUniTAP = None
gc.collect()
time.sleep(2.0)
self.lUniTAP = UniTAP.TsiLib()
except Exception as init_error:
self._reinit_tsi_lib()
except Exception:
pass
return False
def _ensure_tsi_lib(self) -> None:
if self.lUniTAP is None:
self.lUniTAP = UniTAP.TsiLib()
def _reinit_tsi_lib(self) -> None:
"""Destroy and recreate TsiLib so the native driver rescans USB devices."""
self.lUniTAP = None
for _ in range(3):
gc.collect()
time.sleep(2.0)
self.lUniTAP = UniTAP.TsiLib()
def _reset_state(self):
"""重置所有运行时状态(不关闭设备句柄)"""
self.dev = None