Vero4K+ strange CEC behaviour

I believe the setting is actually named in less than completely clear way. From what I have gathered (and I could be completely wrong here) is that “normal” devices all start out with the same physical address and then after a handshake that physical address gets converted to a logical one, and that logical one dictates what they are. This setting sets a non-default physical address so it forces what the logical address is after the handshake process.

(AVR is also 5, not 1. Read his post again and check the chart I posted)

CEC is a single peripheral bus and you cannot exceed quotas for each unit on the bus.

What other devices do you have connected to the AVR?

Sam

Sorry if it was unclear from my post, I only changed the Physical Address setting on the Vero - exactly where @darwindesign described - not on my AVR.

No other source devices on my AVR since I got the Vero, except when I tested CEC on my previous libreelec box, and two days ago I plugged my PS4 into another input port on the AVR.

From libCEC FAQ - Pulse-Eight - Ultra HD Distribution and Control Products

Connected to HDMI device: the logical address of the HDMI device that you connected the CEC adapter to. 0 for TV, 5 for an AVR.
Default: 0.

I believe this is what is currently called “Physical address (overrules HDMI port)” in the libCEC settings menu.

In simple terms I am thinking the following is what is happening. For some reason my AVR thinks its address must be “1”. My display (projector which does not support CEC) has no CEC address or support. Vero using libCEC by default wants to send CEC frames to address “0” which is typically the address for the TV. In case a CEC display is available at address “0” it will pass the volume commands to the AVR.

When I replaced my projector with a CEC TV the TV CEC menu showed:
HDMI5-Kodi
HDMI1-AV Receiver
HDMI1-AUDIO

Hence AVR=“1” and the TV picked it up correctly. In this scenario when I controlled the volume using the Vero remote, the TV showed volume changes on its own GUI overlay, and the AVR volume was controlled, so the Vero must have sent CEC commands to the TV and the TV passed them on to the AVR at address “1”, knowing that that is where the audio device is located.

So back to my scenario with my projector connected, libCEC must have not detected the AVR at address “1” and sent commands to “0” (if at all). When changing the libCEC physical address setting to “1” it now knows to send the CEC frames to that address, and because it is my AVR address, volume control is working as expected.

This is my take on it even though I know very little about CEC, I’m open for correction.

Thanks to everyone’s input so far.

Sort of. Physical addresses should be unequivocal, so it shouldn’t need an option to override them. It doesn’t help that the actual address (which should not be a single number but a quartet of numbers) isn’t displayed here. In the absence of a CEC-enabled TV at address 0.0.0.0 devices can’t work out where they are in the chain so I suppose that option is there for exactly this case.

A device should come on the CEC bus and say ‘I’m a player/recorder/AVR/etc’ and find out which logical address (a single number) is not already in use by some other device. So eg I have a Vero and a Pi plugged into my TV, Vero is 4 and Pi is 8.

But here’s the thing: once those logical addresses have been sorted out, they are used to send messages and afaict the physical addresses are irrelevant. So a volume mute/+/- will be sent to logical address 5 and that device should respond, wherever it is in the system.

What’s not clear to me yet from my crash course in CEC is when you push the volume button, what decides whether that button press is dealt with by the device the remote is connected to or whether it is passed on to the audio device through CEC?

What is clear is that CEC and ARC are a mess. Anyone with time on their hands could watch the lecture linked from Kodi’s page on CEC. TLDR: as of 3 years ago this guy hadn’t found one device that actually complies fully with the HDMI-CEC specification.

I was under the impression that this was a multicast system and the commands for volume were more a ‘vol up’ than a ‘hey this device do that’ thing. On the CEC side of things all devices are only responsible for themselves so when you have an AVR it tells everyone ‘I got the audio covered’ and other devices like a TV are on their own to respect they are not doing that work anymore and ignoring relevant commands. I think this is where a lot of the trouble comes in, that one device cannot dictate what another does.

I assume you are talking specifically about Kodi and a remote that is sending vol commands to it? I have done a lot of searching to try to answer that question and have not come up with an answer. My best guess is that if Kodi is seeing a CEC 0 or 5 device it is redirecting the keymap internally. I have not seen any documented way to override this behavior, or an acknowledgement that this is in fact how it works though.

I watched that some time back. It is a good lecture, but not the easiest topic to ingest.

Well, yes, in that there is no routing done. All devices can see all messages. But a message from Vero (say logical address 4) to an AVR (5) starts with ‘45’, which is important when sending requests for functions that all devices support (eg standby and wakeup). Each device has to decide for itself what to do with remote button presses. There’s nothing in the standard that says ‘if there’s an amp on the bus then devices must route all volume commands there’.

Also, one might expect the TV remote volume to control an attached AVR, whether or not ARC is is use. For example, if I click the ‘VIERA Link’ button the TV either displays ‘Feature not available’ :frowning: or I get to choose volume controls TV or Home cinema. Panasonic, then, give the user the choice (if it works) but we don’t have a corresponding option in the CEC Adapter settings.