From cd5c2ed8837fbd05998664e2f0fe31008b6a2fcf Mon Sep 17 00:00:00 2001 From: Kristian Date: Wed, 10 Mar 2010 22:38:10 +0100 Subject: [PATCH] Ensure thread-safety on serialport IO. And fixed logging --- mopidy/mixers/denon.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/mopidy/mixers/denon.py b/mopidy/mixers/denon.py index 895ae36b..0537609a 100644 --- a/mopidy/mixers/denon.py +++ b/mopidy/mixers/denon.py @@ -1,35 +1,39 @@ import logging +from threading import Lock from serial import Serial from mopidy.mixers import BaseMixer from mopidy.settings import MIXER_PORT -logger = logging.get_logger(u'mopidy.mixers.denon') +logger = logging.getLogger(u'mopidy.mixers.denon') class DenonMixer(BaseMixer): def __init__(self): self._device = Serial(port=MIXER_PORT, timeout=0.2) self._levels = ['99']+["%(#)02d"% {'#': v} for v in range(0,99)] self._volume = 0 + self._lock = Lock() def _get_volume(self): + self._lock.acquire(); self.ensure_open_device() self._device.write('MV?\r') - vol = self._device.read(20)[2:4] - logger.debug(u'Volume: %s' % self._levels.index(vol)) + vol = self._device.readline()[2:4] + self._lock.release() + logger.debug(u'_get_volume() = %s' % vol) return self._levels.index(vol) def _set_volume(self, volume): # Clamp according to Denon-spec if volume > 99: volume = 99 - + self._lock.acquire() self.ensure_open_device() self._device.write('MV%s\r'% self._levels[volume]) - vol = self._device.read(20)[2:4] + vol = self._device.readline()[2:4] + self._lock.release() self._volume = self._levels.index(vol) - logger.debug(u'Volume: %s' % self._volume) def ensure_open_device(self): if not self._device.isOpen():