denonavr 1.1.2__tar.gz → 1.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {denonavr-1.1.2 → denonavr-1.2.0}/PKG-INFO +2 -1
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/__init__.py +1 -1
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/api.py +145 -112
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/audyssey.py +2 -6
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/const.py +109 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/denonavr.py +64 -5
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/dirac.py +2 -6
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/foundation.py +221 -85
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/input.py +56 -48
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/soundmode.py +126 -42
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/ssdp.py +12 -11
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/tonecontrol.py +2 -6
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/volume.py +14 -30
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr.egg-info/PKG-INFO +2 -1
- {denonavr-1.1.2 → denonavr-1.2.0}/pyproject.toml +2 -1
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/test_denonavr.py +1 -1
- {denonavr-1.1.2 → denonavr-1.2.0}/LICENSE +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/README.md +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/appcommand.py +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/decorators.py +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr/exceptions.py +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr.egg-info/SOURCES.txt +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr.egg-info/dependency_links.txt +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr.egg-info/not-zip-safe +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr.egg-info/requires.txt +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/denonavr.egg-info/top_level.txt +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/setup.cfg +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/__init__.py +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/test_const.py +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/test_ssdp.py +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AV7703-AppCommand-setup-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AV7703-AppCommand-update-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AV7703-AppCommand-update-soundmode-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AV7703-AppCommand-update-tonecontrol-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AV7703-Deviceinfo-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-8500H-AppCommand-setup-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-8500H-AppCommand-update-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-8500H-AppCommand-update-soundmode-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-8500H-AppCommand-update-tonecontrol-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-8500H-Deviceinfo-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-A10H-AppCommand-setup-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-A10H-AppCommand-update-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-A10H-AppCommand-update-soundmode-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-A10H-AppCommand-update-tonecontrol-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-A10H-Deviceinfo-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-X3700H-AppCommand-setup-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-X3700H-AppCommand-update-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-X3700H-AppCommand-update-soundmode-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-X3700H-AppCommand-update-tonecontrol-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVC-X3700H-Deviceinfo-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1713-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1713-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1713-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1713-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1713-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1713-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1713-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1713-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1713-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1713-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1713-formZone2_Zone2XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1713-formZone3_Zone3XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1912-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1912-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1912-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1912-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1912-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1912-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1912-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-1912-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-2312CI-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-2312CI-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-2312CI-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-2312CI-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-2312CI-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-2312CI-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-2312CI-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-2312CI-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3311CI-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3311CI-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3311CI-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3311CI-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3311CI-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3311CI-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3311CI-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3311CI-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3312-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3312-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3312-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3312-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3312-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3312-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3312-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3312-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3312-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3312-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3312-formZone2_Zone2XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3312-formZone3_Zone3XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3313-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3313-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3313-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3313-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3313-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3313-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3313-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3313-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3313-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3313-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3313-formZone2_Zone2XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-3313-formZone3_Zone3XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-4810-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-4810-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-4810-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-4810-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-4810-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-4810-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-4810-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-4810-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-4810-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-4810-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-4810-formZone2_Zone2XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-4810-formZone3_Zone3XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1100W-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1100W-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1100W-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1100W-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1100W-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1100W-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1100W-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1100W-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1100W-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1100W-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1100W-formZone2_Zone2XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1100W-formZone3_Zone3XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X1600H_upnp.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-2-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-2-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-2-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-2-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-2-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-2-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-2-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-2-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-formZone2_Zone2XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2000-formZone3_Zone3XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-2-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-2-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-2-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-2-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-2-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-2-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-2-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-2-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X2100W-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4000-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4000-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4000-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4000-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4000-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4000-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4000-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4000-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4000-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4000-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4000-formZone2_Zone2XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4000-formZone3_Zone3XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4100W-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4100W-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4100W-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4100W-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4100W-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4100W-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4100W-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4100W-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4300H-AppCommand-setup-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4300H-AppCommand-update-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4300H-AppCommand-update-soundmode-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4300H-AppCommand-update-tonecontrol-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/AVR-X4300H-Deviceinfo-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-2-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-2-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-2-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-2-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-2-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-2-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-2-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-2-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-2-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-2-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR510-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR603-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR603-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR603-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR603-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR603-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR603-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR603-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR603-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR603-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR603-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR603-formZone2_Zone2XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-CR603-formZone3_Zone3XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-RC610-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-RC610-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-RC610-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-RC610-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-RC610-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-RC610-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-RC610-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-RC610-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/M-RC610-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1604-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1604-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1604-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1604-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1604-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1604-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1604-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1604-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1604-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1604-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1604-formZone2_Zone2XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1604-formZone3_Zone3XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1609-AppCommand-setup-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1609-AppCommand-update-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1609-AppCommand-update-soundmode-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1609-AppCommand-update-tonecontrol-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/NR1609-Deviceinfo-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR5008-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR5008-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR5008-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR5008-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR5008-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR5008-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR5008-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR5008-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR5008-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR5008-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6011-AppCommand-setup.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6011-AppCommand-update-soundmode.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6011-AppCommand-update-tonecontrol.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6011-AppCommand-update.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6011-Deviceinfo.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6011-formMainZone_MainZoneXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6011-formMainZone_MainZoneXmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6011-formNetAudio_StatusXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6011-formTuner_HdXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6011-formTuner_TunerXml.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6011-formZone2_Zone2XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6011-formZone3_Zone3XmlStatus.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6012-AppCommand-setup-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6012-AppCommand-update-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6012-AppCommand-update-soundmode-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6012-AppCommand-update-tonecontrol-8080.xml +0 -0
- {denonavr-1.1.2 → denonavr-1.2.0}/tests/xml/SR6012-Deviceinfo-8080.xml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: denonavr
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: Automation Library for Denon AVR receivers
|
|
5
5
|
Author-email: Oliver Goetz <scarface@mywoh.de>
|
|
6
6
|
License: MIT
|
|
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
24
|
Requires-Python: >=3.8
|
|
24
25
|
Description-Content-Type: text/markdown; charset=UTF-8
|
|
25
26
|
License-File: LICENSE
|
|
@@ -16,18 +16,7 @@ import xml.etree.ElementTree as ET
|
|
|
16
16
|
from collections import defaultdict
|
|
17
17
|
from collections.abc import Hashable
|
|
18
18
|
from io import BytesIO
|
|
19
|
-
from typing import
|
|
20
|
-
Awaitable,
|
|
21
|
-
Callable,
|
|
22
|
-
Coroutine,
|
|
23
|
-
DefaultDict,
|
|
24
|
-
Dict,
|
|
25
|
-
List,
|
|
26
|
-
Optional,
|
|
27
|
-
Set,
|
|
28
|
-
Tuple,
|
|
29
|
-
cast,
|
|
30
|
-
)
|
|
19
|
+
from typing import Callable, DefaultDict, Dict, List, Optional, Set, Tuple, cast
|
|
31
20
|
|
|
32
21
|
import attr
|
|
33
22
|
import httpx
|
|
@@ -111,10 +100,11 @@ class HTTPXAsyncClient:
|
|
|
111
100
|
"""Call GET endpoint of Denon AVR receiver asynchronously."""
|
|
112
101
|
client = self.client_getter()
|
|
113
102
|
try:
|
|
114
|
-
|
|
115
|
-
url, timeout=httpx.Timeout(timeout, read=read_timeout)
|
|
116
|
-
)
|
|
117
|
-
|
|
103
|
+
async with client.stream(
|
|
104
|
+
"GET", url, timeout=httpx.Timeout(timeout, read=read_timeout)
|
|
105
|
+
) as res:
|
|
106
|
+
res.raise_for_status()
|
|
107
|
+
await res.aread()
|
|
118
108
|
finally:
|
|
119
109
|
# Close the default AsyncClient but keep custom clients open
|
|
120
110
|
if self.is_default_async_client():
|
|
@@ -137,13 +127,15 @@ class HTTPXAsyncClient:
|
|
|
137
127
|
"""Call GET endpoint of Denon AVR receiver asynchronously."""
|
|
138
128
|
client = self.client_getter()
|
|
139
129
|
try:
|
|
140
|
-
|
|
130
|
+
async with client.stream(
|
|
131
|
+
"POST",
|
|
141
132
|
url,
|
|
142
133
|
content=content,
|
|
143
134
|
data=data,
|
|
144
135
|
timeout=httpx.Timeout(timeout, read=read_timeout),
|
|
145
|
-
)
|
|
146
|
-
|
|
136
|
+
) as res:
|
|
137
|
+
res.raise_for_status()
|
|
138
|
+
await res.aread()
|
|
147
139
|
finally:
|
|
148
140
|
# Close the default AsyncClient but keep custom clients open
|
|
149
141
|
if self.is_default_async_client():
|
|
@@ -475,6 +467,7 @@ class DenonAVRTelnetApi:
|
|
|
475
467
|
|
|
476
468
|
host: str = attr.ib(converter=str, default="localhost")
|
|
477
469
|
timeout: float = attr.ib(converter=float, default=2.0)
|
|
470
|
+
is_denon: bool = attr.ib(converter=bool, default=True)
|
|
478
471
|
_connection_enabled: bool = attr.ib(default=False)
|
|
479
472
|
_last_message_time: float = attr.ib(default=-1.0)
|
|
480
473
|
_connect_lock: asyncio.Lock = attr.ib(default=attr.Factory(asyncio.Lock))
|
|
@@ -484,7 +477,6 @@ class DenonAVRTelnetApi:
|
|
|
484
477
|
_telnet_event_map: Dict[str, List] = attr.ib(
|
|
485
478
|
default=attr.Factory(telnet_event_map_factory)
|
|
486
479
|
)
|
|
487
|
-
_callback_tasks: Set[asyncio.Task] = attr.ib(attr.Factory(set))
|
|
488
480
|
_send_lock: asyncio.Lock = attr.ib(default=attr.Factory(asyncio.Lock))
|
|
489
481
|
_send_confirmation_timeout: float = attr.ib(converter=float, default=2.0)
|
|
490
482
|
_send_confirmation_event: asyncio.Event = attr.ib(
|
|
@@ -492,20 +484,21 @@ class DenonAVRTelnetApi:
|
|
|
492
484
|
)
|
|
493
485
|
_send_confirmation_command: str = attr.ib(converter=str, default="")
|
|
494
486
|
_send_tasks: Set[asyncio.Task] = attr.ib(attr.Factory(set))
|
|
495
|
-
_callbacks: Dict[str, List[
|
|
487
|
+
_callbacks: Dict[str, List[Callable]] = attr.ib(
|
|
496
488
|
validator=attr.validators.instance_of(dict),
|
|
497
489
|
default=attr.Factory(dict),
|
|
498
490
|
init=False,
|
|
499
491
|
)
|
|
500
|
-
_raw_callbacks: List[
|
|
492
|
+
_raw_callbacks: List[Callable] = attr.ib(
|
|
501
493
|
validator=attr.validators.instance_of(list),
|
|
502
494
|
default=attr.Factory(list),
|
|
503
495
|
init=False,
|
|
504
496
|
)
|
|
497
|
+
_update_callback_tasks: Set[asyncio.Task] = attr.ib(attr.Factory(set))
|
|
505
498
|
|
|
506
499
|
def __attrs_post_init__(self) -> None:
|
|
507
500
|
"""Initialize special attributes."""
|
|
508
|
-
self._register_raw_callback(self.
|
|
501
|
+
self._register_raw_callback(self._send_confirmation_callback)
|
|
509
502
|
|
|
510
503
|
async def async_connect(self) -> None:
|
|
511
504
|
"""Connect to the receiver asynchronously."""
|
|
@@ -549,71 +542,97 @@ class DenonAVRTelnetApi:
|
|
|
549
542
|
self._connection_enabled = True
|
|
550
543
|
self._last_message_time = time.monotonic()
|
|
551
544
|
self._schedule_monitor()
|
|
552
|
-
|
|
545
|
+
|
|
546
|
+
# Cancel all update tasks in case they are still running and create a new one.
|
|
547
|
+
for callback_task in self._update_callback_tasks:
|
|
548
|
+
callback_task.cancel()
|
|
549
|
+
|
|
550
|
+
task = asyncio.create_task(self._async_trigger_updates())
|
|
551
|
+
self._update_callback_tasks.add(task)
|
|
552
|
+
task.add_done_callback(self._update_callback_tasks.discard)
|
|
553
|
+
|
|
554
|
+
async def _async_trigger_updates(self) -> None:
|
|
555
|
+
"""Trigger update of all attributes."""
|
|
556
|
+
commands = [
|
|
557
|
+
# Critical State Info
|
|
558
|
+
"ZM?", # Main Zone Power
|
|
559
|
+
"SI?", # Select INPUT source
|
|
560
|
+
"MV?", # MASTER VOLUME
|
|
561
|
+
"MU?", # Mute
|
|
562
|
+
"Z2?", # Z2 Zone Power
|
|
563
|
+
"Z2MU?", # Z2 Mute
|
|
564
|
+
"Z3?", # Z3 Zone Power
|
|
565
|
+
"Z3MU?", # Z3 Mute
|
|
566
|
+
"MS?", # Surround mode
|
|
567
|
+
# State Info used in Toggle Commands
|
|
568
|
+
"MNMEN?", # Menu
|
|
569
|
+
"TR?", # Trigger
|
|
570
|
+
"PSTONE CTRL ?", # TONE
|
|
571
|
+
"PSDYNEQ ?", # Dynamic EQ
|
|
572
|
+
"PSLFC ?", # Audyssey LFC
|
|
573
|
+
"PSNEURAL ?", # Neural:X
|
|
574
|
+
"PSIMAXAUD ?", # IMAX Audio Settings Auto/Manual
|
|
575
|
+
"PSIMAXSWM ?", # IMAX Subwoofer Mode
|
|
576
|
+
"PSSWR ?", # Subwoofer
|
|
577
|
+
"SSTTR ?", # Tactile Transducer
|
|
578
|
+
"VSAUDIO ?", # HDMI Audio Decode
|
|
579
|
+
"PSCES ?", # CENTER Spread
|
|
580
|
+
"PSLOM ?", # Loudness Management
|
|
581
|
+
"PSCINEMA EQ. ?", # CINEMA EQ
|
|
582
|
+
"BTTX ?", # Bluetooth Transmitter
|
|
583
|
+
"PSSPV ?", # Speaker Virtualizer
|
|
584
|
+
"PSGEQ ?", # Graphic EQ
|
|
585
|
+
"PSHEQ ?", # Headphone EQ
|
|
586
|
+
# Regular State Info
|
|
587
|
+
"PSBAS ?", # BASS
|
|
588
|
+
"PSTRE ?", # TREBLE
|
|
589
|
+
"PSCNTAMT ?", # Containment Amount
|
|
590
|
+
"PSMULTEQ: ?", # MultEQ
|
|
591
|
+
"PSREFLEV ?", # Reference Level
|
|
592
|
+
"PSDYNVOL ?", # Dynamic Vol.
|
|
593
|
+
"DIM ?", # Dimmer
|
|
594
|
+
"PSDELAY ?", # Audio Delay
|
|
595
|
+
"ECO?", # ECO
|
|
596
|
+
"VSMONI ?", # HDMI Output
|
|
597
|
+
"PSDIRAC ?", # Dirac Live Filter
|
|
598
|
+
"CV?", # Channel Volume
|
|
599
|
+
"PSIMAX ?", # IMAX
|
|
600
|
+
"PSIMAXHPF ?", # IMAX High Pass Filter
|
|
601
|
+
"PSIMAXLPF ?", # IMAX Low Pass Filter
|
|
602
|
+
"PSIMAXSWO ?", # Subwoofer Output LFE+Main/LFE
|
|
603
|
+
"PSSWL ?", # Subwoofer Level
|
|
604
|
+
"STBY?", # Auto Standby
|
|
605
|
+
"SLP?", # Sleep
|
|
606
|
+
"VSVPM ?", # Video Process
|
|
607
|
+
"PSLFE ?", # LFE Level
|
|
608
|
+
"PSBSC ?", # Bass Sync
|
|
609
|
+
"PSDEH ?", # Dialog Enhancer
|
|
610
|
+
"PSAUROPR ?", # Auro-Matic Preset
|
|
611
|
+
"PSAUROST ?", # Auro-Matic Strength
|
|
612
|
+
"PSAUROMODE ?", # AURO-3D Mode
|
|
613
|
+
"PSRSZ ?", # ROOM SIZE
|
|
614
|
+
"SPPR ?", # Speaker Preset
|
|
615
|
+
"PSDIC ?", # Dialog Control
|
|
616
|
+
"PSSP: ?", # Effect Speaker selection
|
|
617
|
+
"PSDRC ?", # DRC
|
|
618
|
+
"PSDEL ?", # DELAY TIME
|
|
619
|
+
"PSRSTR ?", # AUDIO RESTORER
|
|
620
|
+
]
|
|
621
|
+
|
|
622
|
+
index = commands.index("MNMEN?")
|
|
623
|
+
if self.is_denon:
|
|
624
|
+
commands.insert(index := index + 1, "MSQUICK ?") # Quick Select
|
|
625
|
+
if not self.is_denon:
|
|
626
|
+
commands.insert(index + 1, "MSSMART ?") # SMART Select
|
|
627
|
+
index = commands.index("TR?")
|
|
628
|
+
commands.insert(index := index + 1, "PSMDAX ?") # MDAX
|
|
629
|
+
commands.insert(index := index + 1, "PSDACFIL ?") # DAC Filter
|
|
630
|
+
commands.insert(index := index + 1, "ILB ?") # Illumination
|
|
631
|
+
commands.insert(index + 1, "SSHOS ?") # Auto Lip Sync
|
|
632
|
+
|
|
553
633
|
await self.async_send_commands(
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
"MV?",
|
|
557
|
-
"MU?",
|
|
558
|
-
"Z2?",
|
|
559
|
-
"Z2MU?",
|
|
560
|
-
"Z3?",
|
|
561
|
-
"Z3MU?",
|
|
562
|
-
"PSTONE CTRL ?",
|
|
563
|
-
"PSBAS ?",
|
|
564
|
-
"PSTRE ?",
|
|
565
|
-
"PSDYNEQ ?",
|
|
566
|
-
"PSLFC ?",
|
|
567
|
-
"PSCNTAMT ?",
|
|
568
|
-
"PSMULTEQ: ?",
|
|
569
|
-
"PSREFLEV ?",
|
|
570
|
-
"PSDYNVOL ?",
|
|
571
|
-
"MS?",
|
|
572
|
-
"MNMEN?",
|
|
573
|
-
"DIM ?",
|
|
574
|
-
"PSDELAY?",
|
|
575
|
-
"ECO?",
|
|
576
|
-
"VSMONI ?",
|
|
577
|
-
"PSDIRAC ?",
|
|
578
|
-
"CV?",
|
|
579
|
-
"PSNEURAL ?",
|
|
580
|
-
"PSIMAX ?",
|
|
581
|
-
"PSIMAXAUD ?",
|
|
582
|
-
"PSIMAXHPF ?",
|
|
583
|
-
"PSIMAXLPF ?",
|
|
584
|
-
"PSIMAXSWM ?",
|
|
585
|
-
"PSIMAXSWO ?",
|
|
586
|
-
"PSSWR ?",
|
|
587
|
-
"PSSWL ?",
|
|
588
|
-
"SSTTR ?",
|
|
589
|
-
"MSQUICK ?",
|
|
590
|
-
"MSSMART ?",
|
|
591
|
-
"STBY?",
|
|
592
|
-
"SLP?",
|
|
593
|
-
"VSAUDIO ?",
|
|
594
|
-
"PSCES ?",
|
|
595
|
-
"VSVPM ?",
|
|
596
|
-
"PSLFE ?",
|
|
597
|
-
"PSLOM ?",
|
|
598
|
-
"PSBSC ?",
|
|
599
|
-
"PSDEH ?",
|
|
600
|
-
"PSCINEMA EQ. ?",
|
|
601
|
-
"PSAUROPR ?",
|
|
602
|
-
"PSAUROST ?",
|
|
603
|
-
"PSAUROMODE ?",
|
|
604
|
-
"PSRSZ ?",
|
|
605
|
-
"TR?",
|
|
606
|
-
"SPPR ?",
|
|
607
|
-
"BTTX ?",
|
|
608
|
-
"PSDIC ?",
|
|
609
|
-
"PSSPV ?",
|
|
610
|
-
"PSSP: ?",
|
|
611
|
-
"PSDRC ?",
|
|
612
|
-
"PSDEL ?",
|
|
613
|
-
"PSRSTR ?",
|
|
614
|
-
"PSGEQ ?",
|
|
615
|
-
"PSHEQ ?",
|
|
616
|
-
skip_confirmation=True,
|
|
634
|
+
*commands,
|
|
635
|
+
confirmation_timeout=0.2,
|
|
617
636
|
)
|
|
618
637
|
|
|
619
638
|
def _schedule_monitor(self) -> None:
|
|
@@ -713,7 +732,7 @@ class DenonAVRTelnetApi:
|
|
|
713
732
|
self._reconnect_task = None
|
|
714
733
|
|
|
715
734
|
def register_callback(
|
|
716
|
-
self, event: str, callback: Callable[[str, str, str],
|
|
735
|
+
self, event: str, callback: Callable[[str, str, str], None]
|
|
717
736
|
) -> None:
|
|
718
737
|
"""Register a callback handler for an event type."""
|
|
719
738
|
# Validate the passed in type
|
|
@@ -727,24 +746,20 @@ class DenonAVRTelnetApi:
|
|
|
727
746
|
self._callbacks[event].append(callback)
|
|
728
747
|
|
|
729
748
|
def unregister_callback(
|
|
730
|
-
self, event: str, callback: Callable[[str, str, str],
|
|
749
|
+
self, event: str, callback: Callable[[str, str, str], None]
|
|
731
750
|
) -> None:
|
|
732
751
|
"""Unregister a callback handler for an event type."""
|
|
733
752
|
if event not in self._callbacks.keys():
|
|
734
753
|
return
|
|
735
754
|
self._callbacks[event].remove(callback)
|
|
736
755
|
|
|
737
|
-
def _register_raw_callback(
|
|
738
|
-
self, callback: Callable[[str], Awaitable[None]]
|
|
739
|
-
) -> None:
|
|
756
|
+
def _register_raw_callback(self, callback: Callable[[str], None]) -> None:
|
|
740
757
|
"""Register a callback handler for raw telnet messages."""
|
|
741
758
|
if callback in self._raw_callbacks:
|
|
742
759
|
return
|
|
743
760
|
self._raw_callbacks.append(callback)
|
|
744
761
|
|
|
745
|
-
def _unregister_raw_callback(
|
|
746
|
-
self, callback: Callable[[str], Awaitable[None]]
|
|
747
|
-
) -> None:
|
|
762
|
+
def _unregister_raw_callback(self, callback: Callable[[str], None]) -> None:
|
|
748
763
|
"""Unregister a callback handler for raw telnet messages."""
|
|
749
764
|
self._raw_callbacks.remove(callback)
|
|
750
765
|
|
|
@@ -788,19 +803,15 @@ class DenonAVRTelnetApi:
|
|
|
788
803
|
if event not in TELNET_EVENTS:
|
|
789
804
|
return
|
|
790
805
|
|
|
791
|
-
|
|
792
|
-
self._async_run_callbacks(message, event, zone, parameter)
|
|
793
|
-
)
|
|
794
|
-
self._callback_tasks.add(task)
|
|
795
|
-
task.add_done_callback(self._callback_tasks.discard)
|
|
806
|
+
self._run_callbacks(message, event, zone, parameter)
|
|
796
807
|
|
|
797
|
-
|
|
808
|
+
def _run_callbacks(
|
|
798
809
|
self, message: str, event: str, zone: str, parameter: str
|
|
799
810
|
) -> None:
|
|
800
811
|
"""Handle triggering the registered callbacks."""
|
|
801
812
|
for callback in self._raw_callbacks:
|
|
802
813
|
try:
|
|
803
|
-
|
|
814
|
+
callback(message)
|
|
804
815
|
except Exception as err: # pylint: disable=broad-except
|
|
805
816
|
# We don't want a single bad callback to trip up the
|
|
806
817
|
# whole system and prevent further execution
|
|
@@ -813,7 +824,7 @@ class DenonAVRTelnetApi:
|
|
|
813
824
|
if event in self._callbacks.keys():
|
|
814
825
|
for callback in self._callbacks[event]:
|
|
815
826
|
try:
|
|
816
|
-
|
|
827
|
+
callback(zone, event, parameter)
|
|
817
828
|
except Exception as err: # pylint: disable=broad-except
|
|
818
829
|
# We don't want a single bad callback to trip up the
|
|
819
830
|
# whole system and prevent further execution
|
|
@@ -826,7 +837,7 @@ class DenonAVRTelnetApi:
|
|
|
826
837
|
if ALL_TELNET_EVENTS in self._callbacks.keys():
|
|
827
838
|
for callback in self._callbacks[ALL_TELNET_EVENTS]:
|
|
828
839
|
try:
|
|
829
|
-
|
|
840
|
+
callback(zone, event, parameter)
|
|
830
841
|
except Exception as err: # pylint: disable=broad-except
|
|
831
842
|
# We don't want a single bad callback to trip up the
|
|
832
843
|
# whole system and prevent further execution
|
|
@@ -844,7 +855,7 @@ class DenonAVRTelnetApi:
|
|
|
844
855
|
return event
|
|
845
856
|
return ""
|
|
846
857
|
|
|
847
|
-
|
|
858
|
+
def _send_confirmation_callback(self, message: str) -> None:
|
|
848
859
|
"""Confirm that the telnet command has been executed."""
|
|
849
860
|
if len(message) < 3:
|
|
850
861
|
return
|
|
@@ -855,9 +866,15 @@ class DenonAVRTelnetApi:
|
|
|
855
866
|
_LOGGER.debug("Command %s confirmed", command)
|
|
856
867
|
|
|
857
868
|
async def _async_send_command(
|
|
858
|
-
self,
|
|
869
|
+
self,
|
|
870
|
+
command: str,
|
|
871
|
+
skip_confirmation: bool = False,
|
|
872
|
+
confirmation_timeout: Optional[float] = None,
|
|
859
873
|
) -> None:
|
|
860
874
|
"""Send one telnet command to the receiver."""
|
|
875
|
+
if confirmation_timeout is None:
|
|
876
|
+
confirmation_timeout = self._send_confirmation_timeout
|
|
877
|
+
|
|
861
878
|
async with self._send_lock:
|
|
862
879
|
if not skip_confirmation:
|
|
863
880
|
self._send_confirmation_command = command
|
|
@@ -872,26 +889,42 @@ class DenonAVRTelnetApi:
|
|
|
872
889
|
try:
|
|
873
890
|
await asyncio.wait_for(
|
|
874
891
|
self._send_confirmation_event.wait(),
|
|
875
|
-
|
|
892
|
+
confirmation_timeout,
|
|
876
893
|
)
|
|
877
894
|
except asyncio.TimeoutError:
|
|
878
|
-
_LOGGER.
|
|
895
|
+
_LOGGER.debug(
|
|
879
896
|
"Timeout waiting for confirmation of command: %s", command
|
|
880
897
|
)
|
|
881
898
|
finally:
|
|
882
899
|
self._send_confirmation_command = ""
|
|
883
900
|
|
|
884
901
|
async def async_send_commands(
|
|
885
|
-
self,
|
|
902
|
+
self,
|
|
903
|
+
*commands: str,
|
|
904
|
+
skip_confirmation: bool = False,
|
|
905
|
+
confirmation_timeout: Optional[float] = None,
|
|
886
906
|
) -> None:
|
|
887
907
|
"""Send telnet commands to the receiver."""
|
|
888
908
|
for command in commands:
|
|
889
|
-
await self._async_send_command(
|
|
909
|
+
await self._async_send_command(
|
|
910
|
+
command,
|
|
911
|
+
skip_confirmation=skip_confirmation,
|
|
912
|
+
confirmation_timeout=confirmation_timeout,
|
|
913
|
+
)
|
|
890
914
|
|
|
891
|
-
def send_commands(
|
|
915
|
+
def send_commands(
|
|
916
|
+
self,
|
|
917
|
+
*commands: str,
|
|
918
|
+
skip_confirmation: bool = False,
|
|
919
|
+
confirmation_timeout: Optional[float] = None,
|
|
920
|
+
) -> None:
|
|
892
921
|
"""Send telnet commands to the receiver."""
|
|
893
922
|
task = asyncio.create_task(
|
|
894
|
-
self.async_send_commands(
|
|
923
|
+
self.async_send_commands(
|
|
924
|
+
*commands,
|
|
925
|
+
skip_confirmation=skip_confirmation,
|
|
926
|
+
confirmation_timeout=confirmation_timeout,
|
|
927
|
+
)
|
|
895
928
|
)
|
|
896
929
|
self._send_tasks.add(task)
|
|
897
930
|
task.add_done_callback(self._send_tasks.discard)
|
|
@@ -77,15 +77,11 @@ class DenonAVRAudyssey(DenonAVRFoundation):
|
|
|
77
77
|
for tag in self.appcommand0300_attrs:
|
|
78
78
|
self._device.api.add_appcommand0300_update_tag(tag)
|
|
79
79
|
|
|
80
|
-
self._device.telnet_api.register_callback(
|
|
81
|
-
"PS", self._async_sound_detail_callback
|
|
82
|
-
)
|
|
80
|
+
self._device.telnet_api.register_callback("PS", self._sound_detail_callback)
|
|
83
81
|
|
|
84
82
|
self._is_setup = True
|
|
85
83
|
|
|
86
|
-
|
|
87
|
-
self, zone: str, event: str, parameter: str
|
|
88
|
-
) -> None:
|
|
84
|
+
def _sound_detail_callback(self, zone: str, event: str, parameter: str) -> None:
|
|
89
85
|
"""Handle a sound detail change event."""
|
|
90
86
|
if self._device.zone != zone:
|
|
91
87
|
return
|
|
@@ -114,6 +114,14 @@ ReceiverURLs = namedtuple(
|
|
|
114
114
|
"command_panel_and_volume_lock",
|
|
115
115
|
"command_graphic_eq",
|
|
116
116
|
"command_headphone_eq",
|
|
117
|
+
"command_denon_hdmi_cec_on",
|
|
118
|
+
"command_denon_hdmi_cec_off",
|
|
119
|
+
"command_marantz_hdmi_cec_on",
|
|
120
|
+
"command_marantz_hdmi_cec_off",
|
|
121
|
+
"command_mdax", # Marantz Only
|
|
122
|
+
"command_dac_filter", # Marantz Only
|
|
123
|
+
"command_illumination", # Marantz Only
|
|
124
|
+
"command_auto_lip_sync", # Marantz Only
|
|
117
125
|
],
|
|
118
126
|
)
|
|
119
127
|
TelnetCommands = namedtuple(
|
|
@@ -209,6 +217,14 @@ TelnetCommands = namedtuple(
|
|
|
209
217
|
"command_panel_and_volume_lock",
|
|
210
218
|
"command_graphic_eq",
|
|
211
219
|
"command_headphone_eq",
|
|
220
|
+
"command_denon_hdmi_cec_on",
|
|
221
|
+
"command_denon_hdmi_cec_off",
|
|
222
|
+
"command_marantz_hdmi_cec_on",
|
|
223
|
+
"command_marantz_hdmi_cec_off",
|
|
224
|
+
"command_mdax", # Marantz Only
|
|
225
|
+
"command_dac_filter", # Marantz Only
|
|
226
|
+
"command_illumination", # Marantz Only
|
|
227
|
+
"command_auto_lip_sync", # Marantz Only
|
|
212
228
|
],
|
|
213
229
|
)
|
|
214
230
|
|
|
@@ -572,6 +588,16 @@ COMMAND_PANEL_LOCK = "/goform/formiPhoneAppDirect.xml?SYPANEL%20LOCK%20{mode}"
|
|
|
572
588
|
COMMAND_PANEL_AND_VOLUME_LOCK = "/goform/formiPhoneAppDirect.xml?SYPANEL+V%20LOCK%20ON"
|
|
573
589
|
COMMAND_GRAPHIC_EQ = "/goform/formiPhoneAppDirect.xml?PSGEQ%20{mode}"
|
|
574
590
|
COMMAND_HEADPHONE_EQ = "/goform/formiPhoneAppDirect.xml?PSHEQ%20{mode}"
|
|
591
|
+
COMMAND_DENON_HDMI_CEC_ON = "/goform/formiPhoneAppDirect.xml?RCKSK0410826"
|
|
592
|
+
COMMAND_DENON_HDMI_CEC_OFF = "/goform/formiPhoneAppDirect.xml?RCKSK0410827"
|
|
593
|
+
COMMAND_MARANTZ_HDMI_CEC_ON = "/goform/formiPhoneAppDirect.xml?RCRC51608408"
|
|
594
|
+
COMMAND_MARANTZ_HDMI_CEC_OFF = "/goform/formiPhoneAppDirect.xml?RCRC51608409"
|
|
595
|
+
COMMAND_MDAX = "/goform/formiPhoneAppDirect.xml?PSMDAX%20{mode}" # Marantz Only
|
|
596
|
+
COMMAND_DAC_FILTER = "/goform/formiPhoneAppDirect.xml?PSDACFIL%20{mode}" # Marantz Only
|
|
597
|
+
COMMAND_ILLUMINATION = "/goform/formiPhoneAppDirect.xml?ILB%20{mode}" # Marantz Only
|
|
598
|
+
COMMAND_AUTO_LIP_SYNC = (
|
|
599
|
+
"/goform/formiPhoneAppDirect.xml?SSHOSALS%20{mode}" # Marantz Only
|
|
600
|
+
)
|
|
575
601
|
|
|
576
602
|
# Zone 2 URLs
|
|
577
603
|
STATUS_Z2_URL = "/goform/formZone2_Zone2XmlStatus.xml"
|
|
@@ -690,6 +716,14 @@ DENONAVR_URLS = ReceiverURLs(
|
|
|
690
716
|
command_panel_and_volume_lock=COMMAND_PANEL_AND_VOLUME_LOCK,
|
|
691
717
|
command_graphic_eq=COMMAND_GRAPHIC_EQ,
|
|
692
718
|
command_headphone_eq=COMMAND_HEADPHONE_EQ,
|
|
719
|
+
command_denon_hdmi_cec_on=COMMAND_DENON_HDMI_CEC_ON,
|
|
720
|
+
command_denon_hdmi_cec_off=COMMAND_DENON_HDMI_CEC_OFF,
|
|
721
|
+
command_marantz_hdmi_cec_on=COMMAND_MARANTZ_HDMI_CEC_ON,
|
|
722
|
+
command_marantz_hdmi_cec_off=COMMAND_MARANTZ_HDMI_CEC_OFF,
|
|
723
|
+
command_mdax=COMMAND_MDAX, # Marantz Only
|
|
724
|
+
command_dac_filter=COMMAND_DAC_FILTER, # Marantz Only
|
|
725
|
+
command_illumination=COMMAND_ILLUMINATION, # Marantz Only
|
|
726
|
+
command_auto_lip_sync=COMMAND_AUTO_LIP_SYNC, # Marantz Only
|
|
693
727
|
)
|
|
694
728
|
|
|
695
729
|
ZONE2_URLS = ReceiverURLs(
|
|
@@ -785,6 +819,14 @@ ZONE2_URLS = ReceiverURLs(
|
|
|
785
819
|
command_panel_and_volume_lock=COMMAND_PANEL_AND_VOLUME_LOCK,
|
|
786
820
|
command_graphic_eq=COMMAND_GRAPHIC_EQ,
|
|
787
821
|
command_headphone_eq=COMMAND_HEADPHONE_EQ,
|
|
822
|
+
command_denon_hdmi_cec_on=COMMAND_DENON_HDMI_CEC_ON,
|
|
823
|
+
command_denon_hdmi_cec_off=COMMAND_DENON_HDMI_CEC_OFF,
|
|
824
|
+
command_marantz_hdmi_cec_on=COMMAND_MARANTZ_HDMI_CEC_ON,
|
|
825
|
+
command_marantz_hdmi_cec_off=COMMAND_MARANTZ_HDMI_CEC_OFF,
|
|
826
|
+
command_mdax=COMMAND_MDAX, # Marantz Only
|
|
827
|
+
command_dac_filter=COMMAND_DAC_FILTER, # Marantz Only
|
|
828
|
+
command_illumination=COMMAND_ILLUMINATION, # Marantz Only
|
|
829
|
+
command_auto_lip_sync=COMMAND_AUTO_LIP_SYNC, # Marantz Only
|
|
788
830
|
)
|
|
789
831
|
|
|
790
832
|
ZONE3_URLS = ReceiverURLs(
|
|
@@ -880,6 +922,14 @@ ZONE3_URLS = ReceiverURLs(
|
|
|
880
922
|
command_panel_and_volume_lock=COMMAND_PANEL_AND_VOLUME_LOCK,
|
|
881
923
|
command_graphic_eq=COMMAND_GRAPHIC_EQ,
|
|
882
924
|
command_headphone_eq=COMMAND_HEADPHONE_EQ,
|
|
925
|
+
command_denon_hdmi_cec_on=COMMAND_DENON_HDMI_CEC_ON,
|
|
926
|
+
command_denon_hdmi_cec_off=COMMAND_DENON_HDMI_CEC_OFF,
|
|
927
|
+
command_marantz_hdmi_cec_on=COMMAND_MARANTZ_HDMI_CEC_ON,
|
|
928
|
+
command_marantz_hdmi_cec_off=COMMAND_MARANTZ_HDMI_CEC_OFF,
|
|
929
|
+
command_mdax=COMMAND_MDAX, # Marantz Only
|
|
930
|
+
command_dac_filter=COMMAND_DAC_FILTER, # Marantz Only
|
|
931
|
+
command_illumination=COMMAND_ILLUMINATION, # Marantz Only
|
|
932
|
+
command_auto_lip_sync=COMMAND_AUTO_LIP_SYNC, # Marantz Only
|
|
883
933
|
)
|
|
884
934
|
|
|
885
935
|
# Telnet Events
|
|
@@ -891,6 +941,7 @@ TELNET_EVENTS = {
|
|
|
891
941
|
"DIM",
|
|
892
942
|
"ECO",
|
|
893
943
|
"HD",
|
|
944
|
+
"ILB", # Marantz Only
|
|
894
945
|
"MN",
|
|
895
946
|
"MS",
|
|
896
947
|
"MU",
|
|
@@ -1030,6 +1081,14 @@ DENONAVR_TELNET_COMMANDS = TelnetCommands(
|
|
|
1030
1081
|
command_panel_and_volume_lock="SYPANEL+V LOCK ON",
|
|
1031
1082
|
command_graphic_eq="PSGEQ {mode}",
|
|
1032
1083
|
command_headphone_eq="PSHEQ {mode}",
|
|
1084
|
+
command_denon_hdmi_cec_on="RCKSK0410826",
|
|
1085
|
+
command_denon_hdmi_cec_off="RCKSK0410827",
|
|
1086
|
+
command_marantz_hdmi_cec_on="RCRC51608408",
|
|
1087
|
+
command_marantz_hdmi_cec_off="RCRC51608409",
|
|
1088
|
+
command_mdax="PSMDAX {mode}", # Marantz Only
|
|
1089
|
+
command_dac_filter="PSDACFIL {mode}", # Marantz Only
|
|
1090
|
+
command_illumination="ILB {mode}", # Marantz Only
|
|
1091
|
+
command_auto_lip_sync="SSHOSALS {mode}", # Marantz Only
|
|
1033
1092
|
)
|
|
1034
1093
|
|
|
1035
1094
|
ZONE2_TELNET_COMMANDS = TelnetCommands(
|
|
@@ -1123,6 +1182,14 @@ ZONE2_TELNET_COMMANDS = TelnetCommands(
|
|
|
1123
1182
|
command_panel_and_volume_lock="SYPANEL+V LOCK ON",
|
|
1124
1183
|
command_graphic_eq="PSGEQ {mode}",
|
|
1125
1184
|
command_headphone_eq="PSHEQ {mode}",
|
|
1185
|
+
command_denon_hdmi_cec_on="RCKSK0410826",
|
|
1186
|
+
command_denon_hdmi_cec_off="RCKSK0410827",
|
|
1187
|
+
command_marantz_hdmi_cec_on="RCRC51608408",
|
|
1188
|
+
command_marantz_hdmi_cec_off="RCRC51608409",
|
|
1189
|
+
command_mdax="PSMDAX {mode}", # Marantz Only
|
|
1190
|
+
command_dac_filter="PSDACFIL {mode}", # Marantz Only
|
|
1191
|
+
command_illumination="ILB {mode}", # Marantz Only
|
|
1192
|
+
command_auto_lip_sync="SSHOSALS {mode}", # Marantz Only
|
|
1126
1193
|
)
|
|
1127
1194
|
|
|
1128
1195
|
ZONE3_TELNET_COMMANDS = TelnetCommands(
|
|
@@ -1216,6 +1283,14 @@ ZONE3_TELNET_COMMANDS = TelnetCommands(
|
|
|
1216
1283
|
command_panel_and_volume_lock="SYPANEL+V LOCK ON",
|
|
1217
1284
|
command_graphic_eq="PSGEQ {mode}",
|
|
1218
1285
|
command_headphone_eq="PSHEQ {mode}",
|
|
1286
|
+
command_denon_hdmi_cec_on="RCKSK0410826",
|
|
1287
|
+
command_denon_hdmi_cec_off="RCKSK0410827",
|
|
1288
|
+
command_marantz_hdmi_cec_on="RCRC51608408",
|
|
1289
|
+
command_marantz_hdmi_cec_off="RCRC51608409",
|
|
1290
|
+
command_mdax="PSMDAX {mode}", # Marantz Only
|
|
1291
|
+
command_dac_filter="PSDACFIL {mode}", # Marantz Only
|
|
1292
|
+
command_illumination="ILB {mode}", # Marantz Only
|
|
1293
|
+
command_auto_lip_sync="SSHOSALS {mode}", # Marantz Only
|
|
1219
1294
|
)
|
|
1220
1295
|
|
|
1221
1296
|
# States
|
|
@@ -1624,3 +1699,37 @@ VIDEO_PROCESSING_MODES_MAP = {
|
|
|
1624
1699
|
VIDEO_PROCESSING_MODES_MAP_LABELS = {
|
|
1625
1700
|
value: key for key, value in VIDEO_PROCESSING_MODES_MAP.items()
|
|
1626
1701
|
}
|
|
1702
|
+
|
|
1703
|
+
MDAXs = Literal["Off", "Low", "Medium", "High"]
|
|
1704
|
+
"""M-DAX Modes."""
|
|
1705
|
+
|
|
1706
|
+
MDAX_MAP = {
|
|
1707
|
+
"Off": "OFF",
|
|
1708
|
+
"Low": "LOW",
|
|
1709
|
+
"Medium": "MED",
|
|
1710
|
+
"High": "HI",
|
|
1711
|
+
}
|
|
1712
|
+
MDAX_MAP_LABELS = {value: key for key, value in MDAX_MAP.items()}
|
|
1713
|
+
|
|
1714
|
+
DACFilters = Literal["Mode 1", "Mode 2"]
|
|
1715
|
+
"""DAC Filter Modes."""
|
|
1716
|
+
|
|
1717
|
+
DAC_FILTERS_MAP = {
|
|
1718
|
+
"Mode 1": "MODE1",
|
|
1719
|
+
"Mode 2": "MODE2",
|
|
1720
|
+
}
|
|
1721
|
+
|
|
1722
|
+
DAC_FILTERS_MAP_LABELS = {value: key for key, value in DAC_FILTERS_MAP.items()}
|
|
1723
|
+
|
|
1724
|
+
Illuminations = Literal["Auto", "Bright", "Dim", "Dark", "Off"]
|
|
1725
|
+
"""Illumination Modes."""
|
|
1726
|
+
|
|
1727
|
+
ILLUMINATION_MAP = {
|
|
1728
|
+
"Auto": "AUTO",
|
|
1729
|
+
"Bright": "BRI",
|
|
1730
|
+
"Dim": "DIM",
|
|
1731
|
+
"Dark": "DAR",
|
|
1732
|
+
"Off": "OFF",
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
ILLUMINATION_MAP_LABELS = {value: key for key, value in ILLUMINATION_MAP.items()}
|