Note: Remote Button Protocol

Some OpenLCB nodes can be programmed (configured) via buttons and LEDs on the boards. But sometimes, the board is in an inconvenient location, so you'd like to program it remotely. This note is about a standard way to get access to those buttons and LEDs to work from another location. Note that the configuration protocol (link) can also be used for remote configuration, and that provides the top-end capabilities in this area; this is meant to provide botten-end capabilities to compliment that.

This note is an early draft of a proposal in this area.

Environment of Proposal



Design Points

Use Cases


Should work with identify and ident to locate a board without having to know the node ID number. Though ident involves pushing a button on the node, it's still only one button. Identify can be used to pick one of N, too.

Buttons and LEDs are entirely under the control of one end of the conversation, so it makes sense to send them all every time. In turn, that implies a datagram so that we can carry enough of those.

Datagrams are variable length, so there's no need for a lot of context information to be sent: Just sent the bits as a vector.

Should this be a session-based protocol or not? E.g. should there there be a start and end (so that the far end knows to set updates), or should noes accept buttons commands and requests for the current LED state? Requesting state requires a lot of bandwidth, because lights blink. And there needs to be a way to say “inputs restored to default” when you're done.

Is it buttons? Or inputs in general? Matters when the physical inputs might be inputing while the remote is working.

Intended for indicators, e.g. LEDs, that change at visible rates of up to 10Hz, not at 100's of Hertz.

Is there a need for multiple nodes accessing a single one target at the same time? If not, is there a need for reservation? c.f. Configuration reserveration protocol. (should that be made more light-weight and pulled out?)

It would be nice to have a way to enquire about “labels” for buttons and LEDs, so e.g. an iPhone app can make a nicer display of the node. Position info too, so you can show where they are on the node board? Getting a little heavy-weight here, but neither end really needs to use/provide those.

Base Protocol Proposal

Remote node sends “start” datagram to provider node.

Remote node can then send “set button” datagrams, and provider node will send “set indicator” datagrams.

Either node can send “end” datagram to end the interaction.

Datagram format:

Type byte: (0x21)

Command byte: start/button/indicator/end

N data bytes, each bit significant, LSB is “first” one.

CAN protocol proposal

Basically the same.



Site hosted by

This is SVN $Revision: 807 $