Browse Source

add support for switching inputs..

main
John-Mark Gurney 7 years ago
parent
commit
1091fa7f69
1 changed files with 51 additions and 1 deletions
  1. +51
    -1
      yadenon.py

+ 51
- 1
yadenon.py View File

@@ -64,6 +64,7 @@ class DenonAVR(object,basic.LineReceiver):
self._speakera = None
self._speakerb = None
self._z2mute = None
self._input = None
self._zm = None
self._ms = None

@@ -97,7 +98,10 @@ class DenonAVR(object,basic.LineReceiver):
def setter(self, arg):
arg = settrans(arg)
if arg != getattr(self, attrname):
self._sendcmd(cmd, args[arg])
try:
self._sendcmd(cmd, args[arg])
except KeyError:
raise ValueError(arg)

return property(getter, setter, doc=doc)

@@ -108,6 +112,7 @@ class DenonAVR(object,basic.LineReceiver):
return self._ms

power = _magic('PW', '_power', bool, { True: 'ON', False: 'STANDBY' }, 'Power status, True if on')
input = _magic('SI', '_input', str, { x:x for x in ('PHONO', 'TUNER', 'CD', 'V.AUX', 'DVD', 'TV', 'SAT/CBL', 'DVR', ) }, 'Power status, True if on')
mute = _magic('MU', '_mute', bool, { True: 'ON', False: 'OFF' }, 'Mute speakers, True speakers are muted (no sound)')
zm = _magic('ZM', '_zm', bool, { True: 'ON', False: 'OFF' }, 'Main Zone On, True if on')
z2mute = _magic('Z2MU', '_z2mute', bool, { True: 'ON', False: 'OFF' }, 'Mute Zone 2 speakers, True speakers are muted (no sound)')
@@ -199,6 +204,10 @@ class DenonAVR(object,basic.LineReceiver):
def proc_MS(self, arg):
self._ms = arg

def proc_SI(self, arg):
self._input = arg
self._notify('input')

def proc_PS(self, arg):
if arg == 'FRONT A':
self._speakera = True
@@ -440,6 +449,11 @@ class TestMethods(unittest.TestCase):
efun.assert_called_once_with('zm')
efun.reset_mock()

avr.proc_SI('TUNER')

efun.assert_called_once_with('input')
efun.reset_mock()

avr.unregister(efun)
avr.proc_PW('ON')

@@ -586,3 +600,39 @@ class TestMethods(unittest.TestCase):
avr.vol = 0

self.assertRaises(ValueError, setattr, avr, 'vol', 82)

def test_proc_SI(self):
avr = self.avr
avr.proc_SI('PHONO')
self.assertEqual(avr.input, 'PHONO')

avr.proc_SI('TUNER')
self.assertEqual(avr.input, 'TUNER')

@mock.patch('yadenon.DenonAVR.sendLine')
def test_input(self, sendline):
avr = self.avr

avr.input = 'PHONO'
sendline.assert_any_call('SIPHONO')

# Verify the transition doesn't happen
self.assertIsNone(avr.input)

# till we get notification
avr.proc_SI('PHONO')
self.assertEqual(avr.input, 'PHONO')

avr.input = 'TUNER'
sendline.assert_any_call('SITUNER')

avr.input = 'CD'
avr.input = 'V.AUX'
avr.input = 'DVD'
avr.input = 'TV'
avr.input = 'SAT/CBL'
avr.input = 'DVR'

self.assertRaises(ValueError, setattr, avr, 'input', 'bogus')
self.assertRaises(ValueError, setattr, avr, 'input', True)
self.assertRaises(ValueError, setattr, avr, 'input', 34)

Loading…
Cancel
Save