Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explicitly request pure dir mode #21

Merged
merged 3 commits into from
Oct 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 13 additions & 6 deletions docs/PRACTICALITIES.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ There seem to be 2 situations where zones have a fixed volume.
For the second case the zone still reports the VOL function which can be read and does _not_ give errors when trying to change the volume (I would have expected @RESTRICTED).
There are no response/updates on trying to change the volume (as it is fixed). It is unknown which setting causes the volume to become fixed.

For reference, the AV Control Android app also shows volume controls for zone2 which do not work.
For reference, the AV Control Android app also shows volume controls for Zone2 which do not work.
The webinterface on the receiver however shows the text "FIXED" for the volume on Zone2
This is based on observations on RX-A810 firmware 1.80/2.01.

Expand All @@ -32,8 +32,7 @@ See https://github.com/mvdwetering/yamaha_ynca/issues/19 for logs.
Currently known receivers that behave like this:
- RX-V475 1.34/2.06 (probably also RX-V575/HTR-4066/HTR-5066 as they share the same firmware

Potential workaround would be to send the remote codes for SCENE1 etc...
The remote codes works for my receiver, but I have not had feedback from an RX-V475 user.
As a workaround the remote codes for SCENE1 etc... can be sent. This works at least on RX-V475 based on user feedback.

## No Zone and Scene names

Expand Down Expand Up @@ -122,7 +121,7 @@ Some receivers have a single audio input and that input is called AUDIO. Receive

Seen on RX-V475 receiver in [issue #230](https://github.com/mvdwetering/yamaha_ynca/issues/230), but probably also applies to RX-V575/HTR-4066/HTR-5066 as they share the same firmware.

For some reason this input is _not_ reported when requesting the input names with `@SYS:INPNAME=?` (unlike AUDIO1, AUDIO2 inputs). This makes it impossible to automatically detect if the input is supported by the receiver. The receiver does respond with `@RESTRICTED` when requesting `@SYS:INPNAMEAUDIO1=?` or `@SYS:TRIG1INPAUDIO1=?` instead of `@UNDEFINED`. However these responses are currently not really handled by the library and building support for that will be hard as there is not a guarenteed request/response mechanism due to the asynchronous nature of the protocol.
For some reason this input is _not_ reported when requesting the input names with `@SYS:INPNAME=?` (unlike AUDIO1, AUDIO2 inputs). This makes it impossible to automatically detect if the input is supported by the receiver. The receiver does respond with `@RESTRICTED` when requesting `@SYS:INPNAMEAUDIO1=?` or `@SYS:TRIG1INPAUDIO1=?` instead of `@UNDEFINED`. However these responses are currently not really handled by the library. ~~Building support for that will be hard as there is not a guarenteed request/response mechanism due to the asynchronous nature of the protocol~~ (not true, a GET will result in a response or error).

## Zone A/B receivers

Expand All @@ -138,7 +137,7 @@ Zone A/B are just "speakersets" where A is the normal set of speakers and B is a

On the API, these are controlled with these functions `@MAIN:SPEAKERA` and `@MAIN:SPEAKERB`.

e.g. RX-V573
e.g. RX-V573?


### Subzone
Expand All @@ -148,7 +147,7 @@ This zone can be powered individually from the MAIN zone, but will always have t

Reason for calling it a subzone is that its functions are exposed on the MAIN subunit.

On the API, this subzone is controlled by the following functions. Note that Mute only supports On/Off
On the API, this subzone is controlled by the following functions. Note that Mute only supports On/Off, not the attenuated ones on the main Mute
```
@MAIN:PWRB
@MAIN:ZONEBAVAIL
Expand All @@ -158,3 +157,11 @@ On the API, this subzone is controlled by the following functions. Note that Mut
```

Note that this variant also has the `@MAIN:SPEAKERA/B` functions. But when controlling the SPEAKERB it will power on/off ZoneB (assumption is that it works the same for SPEAKERA/MAIN zone PWR). So when implementing a client these should probably be hidden/ignored.

## BASIC Response

The BASIC response returns a lot of values with 1 request which is nice to speed up things.
However the set of values that comes back is not stable between receivers.

Initially it was assumed that it would always respond with all supported features.
But at least for PUREDIRMODE this is not the case. It is supported on RX-V1067, but not part of BASIC response.
296 changes: 296 additions & 0 deletions logs/RX-V1067.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,296 @@
"communication": {
"initialization": [
"Send: @SYS:MODELNAME=?",
"Received: @SYS:MODELNAME=RX-V1067",
"Send: @SYS:MODELNAME=?",
"Received: @SYS:MODELNAME=RX-V1067",
"Send: @SYS:AVAIL=?",
"Received: @UNDEFINED",
"Send: @MAIN:AVAIL=?",
"Received: @MAIN:AVAIL=Ready",
"Send: @ZONE2:AVAIL=?",
"Received: @ZONE2:AVAIL=Not Ready",
"Send: @ZONE3:AVAIL=?",
"Received: @RESTRICTED",
"Send: @ZONE4:AVAIL=?",
"Received: @RESTRICTED",
"Send: @AIRPLAY:AVAIL=?",
"Received: @UNDEFINED",
"Send: @BT:AVAIL=?",
"Received: @BT:AVAIL=Not Connected",
"Send: @DAB:AVAIL=?",
"Received: @UNDEFINED",
"Send: @IPOD:AVAIL=?",
"Received: @IPOD:AVAIL=Not Connected",
"Send: @IPODUSB:AVAIL=?",
"Received: @UNDEFINED",
"Send: @NAPSTER:AVAIL=?",
"Received: @NAPSTER:AVAIL=Not Ready",
"Send: @NETRADIO:AVAIL=?",
"Received: @NETRADIO:AVAIL=Not Ready",
"Send: @PANDORA:AVAIL=?",
"Received: @RESTRICTED",
"Send: @PC:AVAIL=?",
"Received: @PC:AVAIL=Not Ready",
"Send: @RHAP:AVAIL=?",
"Received: @RESTRICTED",
"Send: @SIRIUS:AVAIL=?",
"Received: @RESTRICTED",
"Send: @SIRIUSIR:AVAIL=?",
"Received: @RESTRICTED",
"Send: @SIRIUSXM:AVAIL=?",
"Received: @UNDEFINED",
"Send: @SERVER:AVAIL=?",
"Received: @UNDEFINED",
"Send: @SPOTIFY:AVAIL=?",
"Received: @UNDEFINED",
"Send: @TUN:AVAIL=?",
"Received: @TUN:AVAIL=Not Ready",
"Send: @UAW:AVAIL=?",
"Received: @UAW:AVAIL=Not Connected",
"Send: @USB:AVAIL=?",
"Received: @USB:AVAIL=Not Connected",
"Send: @SYS:VERSION=?",
"Received: @SYS:VERSION=3.70/2.01",
"Send: @SYS:AVAIL=?",
"Received: @UNDEFINED",
"Send: @SYS:HDMIOUT1=?",
"Received: @UNDEFINED",
"Send: @SYS:HDMIOUT2=?",
"Received: @UNDEFINED",
"Send: @SYS:HDMIOUT3=?",
"Received: @UNDEFINED",
"Send: @SYS:INPNAME=?",
"Received: @SYS:INPNAMEMULTICH=MULTI CH",
"Received: @SYS:INPNAMEPHONO=PHONO",
"Received: @SYS:INPNAMEAV1=AV1",
"Received: @SYS:INPNAMEAV2=AV2",
"Received: @SYS:INPNAMEAV3=AV3",
"Received: @SYS:INPNAMEAV4=AV4",
"Received: @SYS:INPNAMEAV5=AV5",
"Received: @SYS:INPNAMEAV6=AV6",
"Received: @SYS:INPNAMEAV7=AV7",
"Received: @SYS:INPNAMEVAUX=V-AUX",
"Received: @SYS:INPNAMEAUDIO1=AUDIO1",
"Received: @SYS:INPNAMEAUDIO2=AUDIO2",
"Received: @SYS:INPNAMEAUDIO3=AUDIO3",
"Received: @SYS:INPNAMEAUDIO4=AUDIO4",
"Received: @SYS:INPNAMEDOCK=DOCK",
"Received: @SYS:INPNAMEUSB=USB",
"Send: @SYS:MODELNAME=?",
"Received: @SYS:MODELNAME=RX-V1067",
"Send: @SYS:PARTY=?",
"Received: @SYS:PARTY=Off",
"Send: @SYS:PARTYMUTE=?",
"Send: @SYS:PWR=?",
"Received: @SYS:PWR=On",
"Send: @SYS:VERSION=?",
"Received: @SYS:VERSION=3.70/2.01",
"Send: @BT:AVAIL=?",
"Received: @BT:AVAIL=Not Connected",
"Send: @SYS:VERSION=?",
"Received: @SYS:VERSION=3.70/2.01",
"Send: @IPOD:METAINFO=?",
"Received: @IPOD:ARTIST=",
"Received: @IPOD:ALBUM=",
"Received: @IPOD:SONG=",
"Send: @IPOD:AVAIL=?",
"Received: @IPOD:AVAIL=Not Connected",
"Send: @IPOD:PLAYBACKINFO=?",
"Received: @IPOD:PLAYBACKINFO=Stop",
"Send: @IPOD:REPEAT=?",
"Received: @IPOD:REPEAT=Off",
"Send: @IPOD:SHUFFLE=?",
"Received: @IPOD:SHUFFLE=Off",
"Send: @SYS:VERSION=?",
"Received: @SYS:VERSION=3.70/2.01",
"Send: @MAIN:ADAPTIVEDRC=?",
"Received: @MAIN:ADAPTIVEDRC=Off",
"Send: @MAIN:AVAIL=?",
"Received: @MAIN:AVAIL=Ready",
"Send: @MAIN:ENHANCER=?",
"Received: @MAIN:ENHANCER=Off",
"Send: @MAIN:HDMIOUT=?",
"Received: @MAIN:HDMIOUT=OUT1",
"Send: @MAIN:HPBASS=?",
"Received: @MAIN:HPBASS=0.0",
"Send: @MAIN:HPTREBLE=?",
"Received: @MAIN:HPTREBLE=0.0",
"Send: @MAIN:INITVOLLVL=?",
"Received: @MAIN:INITVOLLVL=-22.5",
"Send: @MAIN:INITVOLMODE=?",
"Received: @MAIN:INITVOLMODE=On",
"Send: @MAIN:BASIC=?",
"Received: @MAIN:PWR=On",
"Received: @MAIN:SLEEP=Off",
"Received: @MAIN:VOL=-23.5",
"Received: @MAIN:MUTE=Off",
"Received: @MAIN:INP=AV4",
"Received: @MAIN:STRAIGHT=On",
"Received: @MAIN:ENHANCER=Off",
"Received: @MAIN:SOUNDPRG=Surround Decoder",
"Send: @MAIN:LIPSYNCHDMIOUT1OFFSET=?",
"Received: @MAIN:LIPSYNCHDMIOUT1OFFSET=0",
"Send: @MAIN:LIPSYNCHDMIOUT2OFFSET=?",
"Received: @MAIN:LIPSYNCHDMIOUT2OFFSET=0",
"Send: @MAIN:MAXVOL=?",
"Received: @MAIN:MAXVOL=15.0",
"Send: @MAIN:SCENENAME=?",
"Received: @MAIN:SCENE1NAME=BD/DVD Movie Viewing",
"Received: @MAIN:SCENE2NAME=TV Viewing",
"Received: @MAIN:SCENE3NAME=CD Music Listening",
"Received: @MAIN:SCENE4NAME=Radio Listening",
"Received: @MAIN:SCENE5NAME=SCENE5",
"Received: @MAIN:SCENE6NAME=SCENE6",
"Received: @MAIN:SCENE7NAME=SCENE7",
"Received: @MAIN:SCENE8NAME=SCENE8",
"Received: @MAIN:SCENE9NAME=SCENE9",
"Received: @MAIN:SCENE10NAME=SCENE10",
"Received: @MAIN:SCENE11NAME=SCENE11",
"Received: @MAIN:SCENE12NAME=SCENE12",
"Send: @MAIN:SLEEP=?",
"Received: @MAIN:SLEEP=Off",
"Send: @MAIN:SPBASS=?",
"Received: @MAIN:SPBASS=4.0",
"Send: @MAIN:SPEAKERA=?",
"Received: @UNDEFINED",
"Send: @MAIN:SPEAKERB=?",
"Received: @UNDEFINED",
"Send: @MAIN:SPTREBLE=?",
"Received: @MAIN:SPTREBLE=0.0",
"Send: @MAIN:3DCINEMA=?",
"Received: @MAIN:3DCINEMA=Off",
"Send: @MAIN:2CHDECODER=?",
"Received: @MAIN:2CHDECODER=Dolby PLII Music",
"Send: @MAIN:ZONEBNAME=?",
"Received: @UNDEFINED",
"Send: @MAIN:ZONENAME=?",
"Received: @MAIN:ZONENAME=Main",
"Send: @SYS:VERSION=?",
"Received: @SYS:VERSION=3.70/2.01",
"Send: @NAPSTER:METAINFO=?",
"Received: @NAPSTER:ARTIST=",
"Received: @NAPSTER:ALBUM=",
"Received: @NAPSTER:SONG=",
"Send: @NAPSTER:AVAIL=?",
"Received: @NAPSTER:AVAIL=Not Ready",
"Send: @NAPSTER:PLAYBACKINFO=?",
"Received: @NAPSTER:PLAYBACKINFO=Stop",
"Send: @NAPSTER:PRESET=?",
"Send: @NAPSTER:REPEAT=?",
"Received: @NAPSTER:REPEAT=Off",
"Send: @NAPSTER:SHUFFLE=?",
"Received: @NAPSTER:SHUFFLE=Off",
"Send: @SYS:VERSION=?",
"Received: @SYS:VERSION=3.70/2.01",
"Send: @NETRADIO:METAINFO=?",
"Received: @NETRADIO:STATION=",
"Send: @NETRADIO:AVAIL=?",
"Received: @NETRADIO:AVAIL=Not Ready",
"Send: @NETRADIO:PLAYBACKINFO=?",
"Received: @NETRADIO:PLAYBACKINFO=Stop",
"Send: @NETRADIO:PRESET=?",
"Send: @NETRADIO:STATION=?",
"Received: @NETRADIO:STATION=",
"Send: @SYS:VERSION=?",
"Received: @SYS:VERSION=3.70/2.01",
"Send: @PC:METAINFO=?",
"Received: @PC:ARTIST=",
"Received: @PC:ALBUM=",
"Received: @PC:SONG=",
"Send: @PC:AVAIL=?",
"Received: @PC:AVAIL=Not Ready",
"Send: @PC:PLAYBACKINFO=?",
"Received: @PC:PLAYBACKINFO=Stop",
"Send: @PC:PRESET=?",
"Send: @PC:REPEAT=?",
"Received: @PC:REPEAT=Off",
"Send: @PC:SHUFFLE=?",
"Received: @PC:SHUFFLE=Off",
"Send: @SYS:VERSION=?",
"Received: @SYS:VERSION=3.70/2.01",
"Send: @TUN:AMFREQ=?",
"Received: @TUN:AMFREQ=1080",
"Send: @TUN:AVAIL=?",
"Received: @TUN:AVAIL=Not Ready",
"Send: @TUN:BAND=?",
"Received: @TUN:BAND=FM",
"Send: @TUN:FMFREQ=?",
"Received: @TUN:FMFREQ=98.10",
"Send: @TUN:PRESET=?",
"Send: @TUN:RDSINFO=?",
"Send: @SYS:VERSION=?",
"Received: @TUN:PRESET=No Preset",
"Received: @TUN:RDSPRGTYPE=",
"Received: @TUN:RDSPRGSERVICE=",
"Received: @TUN:RDSTXTA=",
"Received: @TUN:RDSTXTB=",
"Received: @TUN:RDSCLOCK=",
"Received: @SYS:VERSION=3.70/2.01",
"Send: @UAW:AVAIL=?",
"Received: @UAW:AVAIL=Not Connected",
"Send: @SYS:VERSION=?",
"Received: @SYS:VERSION=3.70/2.01",
"Send: @USB:METAINFO=?",
"Received: @USB:ARTIST=",
"Received: @USB:ALBUM=",
"Received: @USB:SONG=",
"Send: @USB:AVAIL=?",
"Received: @USB:AVAIL=Not Connected",
"Send: @USB:PLAYBACKINFO=?",
"Received: @USB:PLAYBACKINFO=Stop",
"Send: @USB:PRESET=?",
"Send: @USB:REPEAT=?",
"Received: @USB:REPEAT=Off",
"Send: @USB:SHUFFLE=?",
"Received: @USB:SHUFFLE=Off",
"Send: @SYS:VERSION=?",
"Received: @SYS:VERSION=3.70/2.01",
"Send: @ZONE2:ADAPTIVEDRC=?",
"Received: @UNDEFINED",
"Send: @ZONE2:AVAIL=?",
"Received: @ZONE2:AVAIL=Not Ready",
"Send: @ZONE2:ENHANCER=?",
"Received: @UNDEFINED",
"Send: @ZONE2:HDMIOUT=?",
"Received: @UNDEFINED",
"Send: @ZONE2:HPBASS=?",
"Received: @UNDEFINED",
"Send: @ZONE2:HPTREBLE=?",
"Received: @UNDEFINED",
"Send: @ZONE2:INITVOLLVL=?",
"Received: @ZONE2:INITVOLLVL=-40.0",
"Send: @ZONE2:INITVOLMODE=?",
"Received: @ZONE2:INITVOLMODE=Off",
"Send: @ZONE2:BASIC=?",
"Received: @ZONE2:PWR=Standby",
"Received: @ZONE2:SLEEP=Off",
"Received: @ZONE2:VOL=-40.0",
"Received: @ZONE2:MUTE=Off",
"Received: @ZONE2:INP=AV4",
"Send: @ZONE2:LIPSYNCHDMIOUT1OFFSET=?",
"Received: @UNDEFINED",
"Send: @ZONE2:LIPSYNCHDMIOUT2OFFSET=?",
"Received: @UNDEFINED",
"Send: @ZONE2:MAXVOL=?",
"Received: @ZONE2:MAXVOL=16.5",
"Send: @ZONE2:SCENENAME=?",
"Received: @ZONE2:SCENE1NAME=BD/DVD Movie Viewing",
"Received: @ZONE2:SCENE2NAME=TV Viewing",
"Received: @ZONE2:SCENE3NAME=CD Music Listening",
"Received: @ZONE2:SCENE4NAME=Radio Listening",
"Send: @ZONE2:SLEEP=?",
"Received: @ZONE2:SLEEP=Off",
"Send: @ZONE2:SPBASS=?",
"Received: @UNDEFINED",
"Send: @ZONE2:SPTREBLE=?",
"Received: @UNDEFINED",
"Send: @ZONE2:3DCINEMA=?",
"Received: @UNDEFINED",
"Send: @ZONE2:2CHDECODER=?",
"Received: @UNDEFINED",
"Send: @ZONE2:ZONENAME=?",
"Received: @ZONE2:ZONENAME=Zone2",
"Send: @SYS:VERSION=?",
"Received: @SYS:VERSION=3.70/2.01"
],
2 changes: 1 addition & 1 deletion ynca/subunits/zone.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ def lipsynchdmiout2offset_up(self):
),
)
mute = EnumFunctionMixin[Mute](Mute, init="BASIC")
puredirmode = EnumFunctionMixin[PureDirMode](PureDirMode, init="BASIC")
puredirmode = EnumFunctionMixin[PureDirMode](PureDirMode) # Not part of BASIC on RX-V1067
pwr = EnumFunctionMixin[Pwr](Pwr, init="BASIC")
scene1name = StrFunctionMixin(Cmd.GET, init="SCENENAME")
scene2name = StrFunctionMixin(Cmd.GET, init="SCENENAME")
Expand Down