How should Toggles work on Companion

So, the current functionality of the buttons in companion is a little limited.

It’s fine and works well if the device you’re controlling doesn’t have it’s own controls. Then companion and the device don’t get out of sync.

However, if you’re connecting to a device that has local control, like a Yamaha mixer, then the feedback and device state can get out of sync.

e.g.
Button 1.1 is a Channel On/Off button.
ON action on the button is channel on.
OFF action on the button is channel off.
Set the button to toggle.
Now add feedback so that when the channel on the console is on, the button background is Green. When the channel is off, the background is black.

Using the SD, the button lights up correctly and all is well in the world.
However, if you change the channel state on the console, the color of the button on the SD changes properly, but the button is still in it’s last “state”, i.e ON or OFF.
To get the button back in sync, you’ll have to press it twice. Not ideal.

Some have suggested that the module keep track of the state of the device and in setting all buttons to momentary (not latching), the module determines the state of the device and turns the channel ON or OFF alternating between states on each button press. Now no matter whether you control the channel via the SD or the console, the button will be in sync, since the button is always in the OFF state when you’re not pressing it.

All well and good for binary commands like on/off and mute/unmute, but what about commands that set a fader level? or one that starts playback? How would the module know what you’d like the OFF state to be? You now can’t set it in the OFF action like you could before. You might want ON to be 0db on a fader, and OFF to be -10db. No way to set that if you can’t use ON/OFF actions and toggle.
How about if you have a play button, and if you press it a 2nd time, you don’t want anything to happen, just for safety. Or maybe you want a 2nd press to be pause? or Stop? Lots of situations where the “module keeps track” are not ideal.

So… What would be the best way to fix this?

Should a button be able to have it’s state (ON or OFF) changed by feedback? Should it have momentary as well as Latching actions? (and maybe long-press actions too?)

What would be a good way to solve this?

That seems the obvious answer, if implementable.

No. As the folks at companion said, that could cause an infinite loop as the pressing of the button requests the feedback, the feedback presses the button, etc. etc.
Even though there would be ways around that, I believe they designed it so that this wouldn’t be possible.

I found this thread when looking for this exact feature. I’d love to be able to use Companion as a quick select for DCA assignments on the selected channel. Of course, to do that I’d need to toggle that parameter.

I think I understand the problem. Unfortunately, I think the only way for this to work the way we want is for Companion to maintain its own database of parameter states and constantly query the console for those parameters. There are 1000’s of parameters and it would chew up resources to keep them all updated. Perhaps let the user selectively choose the parameters to keep sync’d?