Ensure thread-safety on serialport IO. And fixed logging

This commit is contained in:
Kristian 2010-03-10 22:38:10 +01:00
parent b980941172
commit cd5c2ed883

View File

@ -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():