Browse Source

support fractional volumes..

main
John-Mark Gurney 7 years ago
parent
commit
8f12a38930
1 changed files with 41 additions and 3 deletions
  1. +41
    -3
      yadenon.py

+ 41
- 3
yadenon.py View File

@@ -123,19 +123,36 @@ class DenonAVR(object,basic.LineReceiver):


@staticmethod @staticmethod
def _makevolarg(arg): def _makevolarg(arg):
arg = int(arg)
arg = float(arg)
if arg < 0 or arg > 99: if arg < 0 or arg > 99:
raise ValueError('Volume out of range.') raise ValueError('Volume out of range.')


arg -= 1 arg -= 1
arg %= 100 arg %= 100


return '%02d' % arg
# XXX - this rounding isn't even (going to closest .5)
# Force round to 5's
arg *= 2
arg = int(arg)
# Scale to 10x
arg *= 5
if arg % 10 != 0:
return '%03d' % arg
else:
return '%02d' % (arg / 10)


@staticmethod @staticmethod
def _parsevolarg(arg): def _parsevolarg(arg):
if len(arg) == 3:
fract = True
else:
fract = False

arg = int(arg) arg = int(arg)
if arg < 0 or arg > 99:
if fract:
arg /= 10.

if arg < 0 or arg > 99.5:
raise ValueError('Volume out of range.') raise ValueError('Volume out of range.')


arg += 1 arg += 1
@@ -365,12 +382,24 @@ class TestStaticMethods(unittest.TestCase):
self.assertRaises(ValueError, DenonAVR._makevolarg, 100) self.assertRaises(ValueError, DenonAVR._makevolarg, 100)


self.assertEqual(DenonAVR._makevolarg(0), '99') self.assertEqual(DenonAVR._makevolarg(0), '99')
self.assertEqual(DenonAVR._makevolarg(0.1), '99')
self.assertEqual(DenonAVR._makevolarg(0.4), '99')
self.assertEqual(DenonAVR._makevolarg(0.5), '995')
self.assertEqual(DenonAVR._makevolarg(0.6), '995')
self.assertEqual(DenonAVR._makevolarg(0.9), '995')
self.assertEqual(DenonAVR._makevolarg(1), '00') self.assertEqual(DenonAVR._makevolarg(1), '00')
self.assertEqual(DenonAVR._makevolarg(1.5), '005')
self.assertEqual(DenonAVR._makevolarg(7.5), '065')
self.assertEqual(DenonAVR._makevolarg(99), '98') self.assertEqual(DenonAVR._makevolarg(99), '98')


def test_parsevolarg(self): def test_parsevolarg(self):
self.assertEqual(DenonAVR._parsevolarg('99'), 0) self.assertEqual(DenonAVR._parsevolarg('99'), 0)
self.assertEqual(DenonAVR._parsevolarg('995'), 0.5)
self.assertEqual(DenonAVR._parsevolarg('00'), 1) self.assertEqual(DenonAVR._parsevolarg('00'), 1)
self.assertEqual(DenonAVR._parsevolarg('005'), 1.5)
self.assertEqual(DenonAVR._parsevolarg('075'), 8.5)
self.assertEqual(DenonAVR._parsevolarg('085'), 9.5)
self.assertEqual(DenonAVR._parsevolarg('80'), 81)
self.assertEqual(DenonAVR._parsevolarg('98'), 99) self.assertEqual(DenonAVR._parsevolarg('98'), 99)


self.assertRaises(ValueError, DenonAVR._parsevolarg, '-1') self.assertRaises(ValueError, DenonAVR._parsevolarg, '-1')
@@ -526,6 +555,12 @@ class TestMethods(unittest.TestCase):


self.assertEqual(self.tr.value(), 'MV19\r') self.assertEqual(self.tr.value(), 'MV19\r')


self.tr.clear()

avr.vol = 20.5

self.assertEqual(self.tr.value(), 'MV195\r')

def test_proc_events(self): def test_proc_events(self):
avr = self.avr avr = self.avr


@@ -642,6 +677,9 @@ class TestMethods(unittest.TestCase):
avr.proc_MV('MAX 80') avr.proc_MV('MAX 80')
self.assertEqual(avr.volmax, 81) self.assertEqual(avr.volmax, 81)


avr.proc_MV('085')
self.assertEqual(avr.vol, 9.5)

avr.proc_MV('99') avr.proc_MV('99')
self.assertEqual(avr.vol, 0) self.assertEqual(avr.vol, 0)




Loading…
Cancel
Save