Ensure thread-safety on serialport IO. And fixed logging
This commit is contained in:
parent
b980941172
commit
cd5c2ed883
@ -1,35 +1,39 @@
|
|||||||
import logging
|
import logging
|
||||||
|
from threading import Lock
|
||||||
|
|
||||||
from serial import Serial
|
from serial import Serial
|
||||||
|
|
||||||
from mopidy.mixers import BaseMixer
|
from mopidy.mixers import BaseMixer
|
||||||
from mopidy.settings import MIXER_PORT
|
from mopidy.settings import MIXER_PORT
|
||||||
|
|
||||||
logger = logging.get_logger(u'mopidy.mixers.denon')
|
logger = logging.getLogger(u'mopidy.mixers.denon')
|
||||||
|
|
||||||
class DenonMixer(BaseMixer):
|
class DenonMixer(BaseMixer):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._device = Serial(port=MIXER_PORT, timeout=0.2)
|
self._device = Serial(port=MIXER_PORT, timeout=0.2)
|
||||||
self._levels = ['99']+["%(#)02d"% {'#': v} for v in range(0,99)]
|
self._levels = ['99']+["%(#)02d"% {'#': v} for v in range(0,99)]
|
||||||
self._volume = 0
|
self._volume = 0
|
||||||
|
self._lock = Lock()
|
||||||
|
|
||||||
def _get_volume(self):
|
def _get_volume(self):
|
||||||
|
self._lock.acquire();
|
||||||
self.ensure_open_device()
|
self.ensure_open_device()
|
||||||
self._device.write('MV?\r')
|
self._device.write('MV?\r')
|
||||||
vol = self._device.read(20)[2:4]
|
vol = self._device.readline()[2:4]
|
||||||
logger.debug(u'Volume: %s' % self._levels.index(vol))
|
self._lock.release()
|
||||||
|
logger.debug(u'_get_volume() = %s' % vol)
|
||||||
return self._levels.index(vol)
|
return self._levels.index(vol)
|
||||||
|
|
||||||
def _set_volume(self, volume):
|
def _set_volume(self, volume):
|
||||||
# Clamp according to Denon-spec
|
# Clamp according to Denon-spec
|
||||||
if volume > 99:
|
if volume > 99:
|
||||||
volume = 99
|
volume = 99
|
||||||
|
self._lock.acquire()
|
||||||
self.ensure_open_device()
|
self.ensure_open_device()
|
||||||
self._device.write('MV%s\r'% self._levels[volume])
|
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)
|
self._volume = self._levels.index(vol)
|
||||||
logger.debug(u'Volume: %s' % self._volume)
|
|
||||||
|
|
||||||
def ensure_open_device(self):
|
def ensure_open_device(self):
|
||||||
if not self._device.isOpen():
|
if not self._device.isOpen():
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user