Example: Blue/Gold User Interface

Entry-level OpenLCB users should be able to buy two OpenLCB nodes and configure them to do something useful with only the pushbutton(s) and LED(s) on them, without requiring a separate configuration tool, computer, etc. One way to do that is presented here. It's not the only way, and there is no requirement for a standard for user interaction in this area.

Underlying Protocol

The basic configuration operation is to set producers and/or consumers into “learn” mode, and then send a “LearnEvent” message carrying an EventID that will be configured into those producers and/or consumers. The producers and/or consumers then leave learn mode. For more information, see the asdasd documentation.

Blue/Gold Configuration Method

There is no standard for how users interact with boards to make this happen, but in this section we describe a way to do this with two buttons and optionally LEDs. This provides a basic method that allows users to configure boards without any additional tools, and manufacturers are strongly encouraged to include it or something similar.

Each board has a blue button that is used to select an individual producer or consumer on the board, and a gold button to tell the board to send the LearnEvent message. These buttons can also be used for other purposes, e.g. pushing both buttons for three seconds could reset the board to factory defaults. Blue and gold are suggested instead of e.g. red and green to make them very distinctive, even for color blind or vision challenged users.

To configure a connection between a producer on one board and a consumer on another, you:

Since each producer and consumer starts with a unique default EventID configured in, this will always create a unique connection that doesn't interfere with others. Note that you could also do it in the other direction, configuring the producer board to listen to the consumer board. Also, you can add a new consumer or producer to an existing connection between producers and consumers using this same technique.

The optional LEDs can be used to help the user through the process. For example, the LED associated with the blue button could flash N times so that the user didn't need to keep count. A LED associated with the gold button could flash on all participating boards to assure the user that the process worked.

A manufacturer might improve on this in several ways. For example, on an input board with 16 inputs that drive producers, you select a producer for programming with 1-16 pushes of the blue button. The manufacturer could make this easier by also allowing you to press the blue button once to light the blue light, then press the button you want to select. For another example, a turnout driver board with four turnout outputs might move the outputs as you select the corresponding consumers: One blue button push sets the 1st turnout one way, the 2nd sets the 1st turnout the other way, the 3rd sets the next turnout, etc. This makes it clearer which consumer is being selected. If there are local inputs to control the turnouts, pressing those could also select a consumer. The important point is that the basic blue/gold method is also present, even if there are also enhancements, so that simple programming is always possible.

Configuring An Event in Multiple Producers and Consumers

One advantage of P/C is that it's easy to have multiple causes of an event, and multiple actions in response to that event. For example, the user might want two separate pushbuttons to set the turnouts at each end of a siding; that's implemented as two producers for a specific event (the two pushbuttons), and two consumers (the two turnout drivers).

Using the buttons to configure two consumers to action on a single P/C Event ID (PCER message) is straightforward: You select the consumer(s) that need to be programmed with the blue button, then on another node select a producer or consumer that already knows the right EventID and press the gold button.

Configuring two producers to use the same P/C Event ID uses the same ideas.


Site hosted by

This is SVN $Revision: 827 $