Added Denon mixer support

This commit is contained in:
Kristian 2010-03-10 12:43:11 +01:00
parent baa10f7c91
commit e96751aa46
4 changed files with 75 additions and 0 deletions

27
mopidy/mixers/denon.py Normal file
View File

@ -0,0 +1,27 @@
from serial import Serial
from mopidy.mixers import BaseMixer
from mopidy.settings import MIXER_PORT
class DenonMixer(BaseMixer):
def __init__(self):
self._device = Serial(port=MIXER_PORT)
self._levels = ['99']+["%(#)02d"% {'#': v} for v in range(0,99)]
self._volume = None
def _get_volume(self):
# The Denon spec doesnt seem to document
# how to query the volume, so we keep the
# state internally
return self._volume
def _set_volume(self, volume):
# Clamp according to Denon-spec
if not volume:
volume = 0
elif volume > 99:
volume = 99
self._volume = volume
self._device.write('MV%s\r'% self._levels[volume])

View File

@ -38,12 +38,28 @@ CONSOLE_LOG_FORMAT = u'%(levelname)-8s %(asctime)s [%(threadName)s] %(name)s\n
#: Default on other operating systems::
#:
#: MIXER = u'mopidy.mixers.dummy.DummyMixer'
#:
#: *Using external mixers*
#:
#: Using external mixers depends on the pyserial-library,
#: so make sure you have it installed. It also adds one
#: more setting, MIXER_PORT. This must point to the device
#: port like /dev/tty1 or similar.
#:
#: Available external Mixers::
#:
#:
#: MIXER = u'mopidy.mixers.denon.DenonMixer'
#: MIXER_PORT = u'/dev/tty0' # Verify this manually
#:
MIXER = u'mopidy.mixers.dummy.DummyMixer'
if sys.platform == 'linux2':
MIXER = u'mopidy.mixers.alsa.AlsaMixer'
elif sys.platform == 'darwin':
MIXER = u'mopidy.mixers.osa.OsaMixer'
MIXER_PORT=None
#: Which address Mopidy should bind to. Examples:
#:
#: ``localhost``

View File

@ -10,6 +10,7 @@ def main():
os.path.abspath(os.path.join(os.path.dirname(__file__), '../')))
r = CoverageTestRunner()
r.add_pair('mopidy/mixers/dummy.py', 'tests/mixers/dummytest.py')
r.add_pair('mopidy/mixers/denon.py', 'tests/mixers/denontest.py')
r.add_pair('mopidy/models.py', 'tests/modelstest.py')
r.add_pair('mopidy/mpd/handler.py', 'tests/mpd/handlertest.py')
r.run()

31
tests/mixers/denontest.py Normal file
View File

@ -0,0 +1,31 @@
import unittest
import os
from mopidy.mixers.denon import DenonMixer
class DenonMixerTest(unittest.TestCase):
def setUp(self):
self.m = DenonMixer()
self.m._device = os.tmpfile() # "Mock" :-)
def tearDown(self):
self.m._device.close()
def test_volume_is_None_initially(self):
self.assertEqual(self.m.volume, None)
def test_volume_set_to_min(self):
self.m.volume = 0
self.assertEqual(self.m.volume, 0)
def test_volume_set_to_max(self):
self.m.volume = 100
self.assertEqual(self.m.volume, 99)
def test_volume_set_to_below_min_results_in_min(self):
self.m.volume = -10
self.assertEqual(self.m.volume, 0)
def test_volume_set_to_above_max_results_in_max(self):
self.m.volume = 110
self.assertEqual(self.m.volume, 99)