From 186512f79ab8328bcffcb180dd7312d197f563d4 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Sun, 26 Jul 2026 21:42:53 -0400 Subject: [PATCH] Another try for lag. --- .../speechDriver/dectalkUsbDriver.py | 6 ++++++ tests/unit/test_dectalk_usb_driver.py | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/fenrirscreenreader/speechDriver/dectalkUsbDriver.py b/src/fenrirscreenreader/speechDriver/dectalkUsbDriver.py index fa95c42c..c0a57d6c 100644 --- a/src/fenrirscreenreader/speechDriver/dectalkUsbDriver.py +++ b/src/fenrirscreenreader/speechDriver/dectalkUsbDriver.py @@ -18,6 +18,7 @@ class driver(dectalkDriver.driver): immediate_endpoint = 0x04 packet_size = 64 write_timeout = 1000 + buffer_timeout_command = b"[:timeout 1]" def __init__(self): super().__init__() @@ -90,6 +91,11 @@ class driver(dectalkDriver.driver): raise RuntimeError(f"DECtalk USB open failed: {error}") from error self.usb_device = usb_device + self._write_endpoint( + self.speech_endpoint, + self.buffer_timeout_command, + "buffer timeout", + ) self._is_initialized = True self._stop_worker = False self.worker_thread = threading.Thread( diff --git a/tests/unit/test_dectalk_usb_driver.py b/tests/unit/test_dectalk_usb_driver.py index 3fb60ea9..ec6ee256 100644 --- a/tests/unit/test_dectalk_usb_driver.py +++ b/tests/unit/test_dectalk_usb_driver.py @@ -107,7 +107,7 @@ def build_environment(): } -def initialized_driver(monkeypatch): +def initialized_driver(monkeypatch, clear_startup_writes=True): device = FakeUsbDevice() usb_core = FakeUsbCore(device) usb_util = FakeUsbUtil() @@ -118,6 +118,8 @@ def initialized_driver(monkeypatch): lambda: (usb_core, usb_util), ) speech_driver.initialize(build_environment()) + if clear_startup_writes: + device.writes.clear() return speech_driver, device, usb_core, usb_util @@ -142,6 +144,17 @@ def test_dectalk_usb_driver_finds_and_claims_native_device(monkeypatch): assert usb_util.disposed == [device] +def test_dectalk_usb_driver_sets_low_buffer_timeout_on_initialize(monkeypatch): + speech_driver, device, _, _ = initialized_driver( + monkeypatch, + clear_startup_writes=False, + ) + try: + assert device.writes[0] == (0x02, b"[:timeout 1]", 1000) + finally: + speech_driver.shutdown() + + def test_dectalk_usb_driver_writes_commands_and_speech(monkeypatch): speech_driver, device, _, _ = initialized_driver(monkeypatch) try: @@ -212,6 +225,7 @@ def test_dectalk_usb_cancel_bypasses_blocked_normal_write(monkeypatch): lambda: (usb_core, usb_util), ) speech_driver.initialize(build_environment()) + device.writes.clear() normal_thread = threading.Thread( target=speech_driver._write_bytes, args=(b"normal speech", "speech"), @@ -240,6 +254,8 @@ def test_dectalk_usb_cancel_stops_current_speech_upload(monkeypatch): lambda: (usb_core, usb_util), ) speech_driver.initialize(build_environment()) + device.writes.clear() + device.first_normal_write_started.clear() normal_thread = threading.Thread( target=speech_driver._write_bytes, args=(b"x" * 192, "speech"),