Fixes with the dectalk driver with rate, etc.
This commit is contained in:
@@ -17,13 +17,21 @@ class driver(hardware_serial_driver):
|
|||||||
return self._clean_text(text).encode("ascii", errors="replace") + b"\x0b"
|
return self._clean_text(text).encode("ascii", errors="replace") + b"\x0b"
|
||||||
|
|
||||||
def _rate_command(self, rate):
|
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):
|
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):
|
def _volume_command(self, volume):
|
||||||
return self._setting_command("dv g5", self._scale(volume, 60, 86))
|
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):
|
def _setting_command(self, command, value):
|
||||||
return f"[:{command} {value}]".encode("ascii")
|
return f"[:{command} {value}]".encode("ascii")
|
||||||
|
|||||||
@@ -83,6 +83,17 @@ def test_dectalk_driver_writes_settings_and_cancel(serial_pair):
|
|||||||
speech_driver.shutdown()
|
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):
|
def test_dectalk_driver_enables_xon_xoff_flow_control(serial_pair):
|
||||||
speech_driver, _ = initialized_driver(dectalkDriver, serial_pair)
|
speech_driver, _ = initialized_driver(dectalkDriver, serial_pair)
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user