Fixes with the dectalk driver with rate, etc.

This commit is contained in:
Storm Dragon
2026-07-26 21:10:39 -04:00
parent 11a4244cc3
commit e93aba109a
2 changed files with 21 additions and 2 deletions
@@ -17,13 +17,21 @@ class driver(hardware_serial_driver):
return self._clean_text(text).encode("ascii", errors="replace") + b"\x0b"
def _rate_command(self, rate):
return self._setting_command("ra", self._scale(rate, 75, 650))
value = self._scale_around_default(rate, 75, 180, 650)
return self._setting_command("ra", value)
def _pitch_command(self, pitch):
return self._setting_command("dv ap", self._scale(pitch, 50, 350))
value = self._scale_around_default(pitch, 50, 122, 350)
return self._setting_command("dv ap", value)
def _volume_command(self, volume):
return self._setting_command("dv g5", self._scale(volume, 60, 86))
def _scale_around_default(self, value, minimum, default, maximum):
value = max(0.0, min(1.0, value))
if value <= 0.5:
return self._scale(value * 2, minimum, default)
return self._scale((value - 0.5) * 2, default, maximum)
def _setting_command(self, command, value):
return f"[:{command} {value}]".encode("ascii")
@@ -83,6 +83,17 @@ def test_dectalk_driver_writes_settings_and_cancel(serial_pair):
speech_driver.shutdown()
def test_dectalk_driver_uses_native_defaults_at_fenrir_midpoint(serial_pair):
speech_driver, master_fd = initialized_driver(dectalkDriver, serial_pair)
try:
speech_driver.set_rate(0.5)
speech_driver.set_pitch(0.5)
expected = b"[:ra 180][:dv ap 122]"
assert read_available(master_fd, len(expected)) == expected
finally:
speech_driver.shutdown()
def test_dectalk_driver_enables_xon_xoff_flow_control(serial_pair):
speech_driver, _ = initialized_driver(dectalkDriver, serial_pair)
try: