OpenLCB™ To Do: Remaining Questions

This page is a place to record OpenLCB™ issues that are still to be resolved. This is not a place for recording the discussion or decisions; once a decision is made, it should be implemented in the documents it affects. In particular, please don't make this a list of answered questions, those live in the docs we're writing. The numbering is historical-order; please delete an item that's done, not renumber below it, so SVN can track progress. If you want to tag something as high-priority, please use color. Currently, “blue 8” is high-priority documentation tasks, and “light green” is high-priority implementation tasks. (Feel free to modify those color chooses, they were picked by a color-challenged person)

12. First definition and implementation of “train control”, e.g. throttles, etc; define initial protocol. See separate document. DCC, of course, but also allowing for other/future systems. Note that this is separate from e.g. connections to LocoNet, XpressNet, etc. On MERG hardware?

17. Still need to think more about "interface Event" conventions for e.g. large modular layouts. Via XML naming? Via EventID conventions? Goal is to link next-neighbor modules easily. Node and Event spaces for modular clubs? [task done] Let them allocate it using ownership mechanism. Write some examples. See examples/ModularClubs.html note.

18. How to get well-known Event IDs when doing in e.g. Blue/Gold configuration?

20. Write an XML-based representation, e.g. as a separate wire protocol for web services.

22. Signaling (Signalling) – see initial Signaling design note, which is currently just a placeholder.

23. Layout Sound Control

    Alex: (maybe just an adaptation to P/C Events but maybe should be identified at least) DPH: I think this is quite straight-forward. It includes complex nodes that can send and receive streams, or store the sounds, whether in real-time or not. The control of these should be straight-forward with events. Things like volume could use Events with data to set absolute levels, or increment and decrement Events. (Need example doc for this application! - BobJ)

24. Layout and Room Lighting Control DPH: Bob can probably fill us in on this one ;-) as he has some experience with X10 and JMRI. Do we need to do more than suggest some approaches? Maybe an application note, showing how it could be done? (Define some recommended events for room intensity, e.g. how to code intensity in event space; want a mechanism for events to drive specific pre-selected intensity; study Insteon solution - BobJ)

47. Eventually, write some words about a recommended common log format (mechanism is being developed in Logging note, but not format of log records)

54. Need a CAN boot-loader/IPL process definition. May serve as a good streaming, datagram example, but it's also possible that full OpenLCB implementation is too much to include in a bootloader program. “Dumbest possible node” to receive a bootload? Have a “bootload me” standard event? “00-00” as special case. Bootload as CAN-specific, very simple protocol? Delay is a problem, probably has to be driven from program source, if programming more than one device at a time. Microchip has one, see AN247; could use that? There's an Amtel bootloader for their processors with built-in CAN, check that protocol. Build it into same boot-loader as Arduino? (Don GW has written a bootloader based on the Atmel CAN loader)

59. [Task Done] Complete the “Display Protocol” note and a sample implementation for a display, e.g. of RF or throttle info.

61. Clean up the CBUS-hardware PIC demo. Will this require reimplementing the C/C++ prototype in C? Very little is actually class based, struct+function might be just fine anyway.

71. The examples/CrossingGateExample.html file is a funny hybrid of general use case, and OpenLCB-specific documentation. It should probably have the general use case aspects moved to UseCases.html, with the specifics left in the examples/CrossingGateExample.html file.

72. David Harris expressed an interest in an early email in some standard x,y,z mapping for nodes, detectors, etc. Global and/or local (module specific) reference frame? Make it easy to find a node in space from it's NodeID? Is this more than just one aspect of a general system for storing node-specific info? Is it just the position of the node (hardware) or also items “within” the node, e.g. the things it's connected to? Start a note....

75. Blue/Gold and “Event Configuration” have been split into two documents (examples/BlueGoldConfig.html, EventConfigurationProtocol.html). These need to be rationalized; at least one probably needs to be a note or even in main document area.

78. Add definition of flags (error, etc) in [done], stream message documents.

83. Fast clock prototype using events to display. (Shown several times, needs to be in SVN and documented)(see 139)

84. Add examples to the [done] and Stream protocol docs with numerical CAN frames, to make the entire layout clear.

86. “Ident” protocol (item done) Prototype as part of BG class, needs to have implementation finished up.

89. Finish up the RFID note. Prototype. David will work on this.

91. Get CAN shields made so hobbyists can use their existing Arduino hardware? John Plocher has laid out the Railroad Shield board. Document use of CAN shields available commercially? [task done] LEDuino production? (Task done).

93. Movies to tell a story!

94. Document the use of new-unique EventIDs during “factory reset” and as a way of “deleting” an even in a producer or consumer. (See also 103)
We need to discuss this. I think we should implement a Purge which replaces any native events in use with new native events – I am not sure this is what is happening now. (DPH?)

97. Servo example: People are starting to like servos, they're cheap and small, so good support for them is distinguishing. Seems to be well suited to Arduino-style hardware, P/C and our configuration code. DPH: Lets try to get a real semaphore working – does anyone have one?

99. Figure out how to do “Train Forwarding”, an application described by Reinhard Muller at the NMRA 75 (Milwaukee) meeting.
DPH: I think this is an application layer problem. It interacts with auto-topology. Nodes would report loco# on being occupied, and record it from adjacent blocks' loco-reports. Display is outside our purview.

100. Need tool in C++ prototype for sending arbitrary events cleanly. Perhaps in PCE? Also Java, needed for JMRI.

101. Refactor BG to use e.g. NM for reset and PCE to send ident.

102. C++ prototype Configuration.cpp should use NM to reset node number, all but node number, etc

103. Configuration needs a discussion of “Setting/resetting node numbers”; also needed in Event protocol document. (See also 94)
DPH: must redo discussion about originated-events vs non-originated-events. When moving a node to a new location, the node should be purged of event#s so as not to spread them into the wild. I think this needs to be a user controlled operation. Starting all events#=0, and generating a new event# ( as required for teaching, sounds the easiest way to handle this. Purging is then just zeroing out the event#s. This does not waste untaught event#s. Working though use-cases is useful: taking several nodes to the work-bench for set up, and reinstalling them to the layout; selling a node; lending a node; etc. The term “purging' seems to be useful, rather than “reset”. BobJ: The existing spec requires that a reset of the board assign new default EventIDs. This is about the best you can do: If you clear the board, you get new ones. You can't build a mechanisms that knows whether an EventID has been used or not, because it's possible for another node to enquire about what EventIDs the node has and starting using them without out telling the node. “EventID == 0” doesn't work for default eventIDs, because teach/learn need isn't the only way that you can learn about the EventIDs in a node.

105. [done] so we can institute a “daily build” process to check for broken compiles (makefile done, daily build not; get somebody to do Hudson/Jenkins?) Consider using the Unity+CMock or (better) the CppUTest+CppUMock test framework for C/C++ code (Boost no longer favored for C; see “Test-driven Development for Embedded C”, James Grenning, for discussion) (see 160) Consider the “GoogleTest” suite of tools for C/C++.

107. Port to mbed.

109. A note regarding use of TCP/IP, UDP, etc on Ethernet, possibly based on,,, and (Mike J is working on this)

111. Explore whether raw Ethernet packets is a viable option, possibly only for a one-segment OpenLCB-node only network for meets, with other Ethernet connections through another separate Ethernet. (low priority). (Exploration shows large drop rate) (Ed Richards suggests investigating multicast enhancements, e.g. – separate item?)

112. Consider adding “remote button push” and “remote LED display” to make it easy to push the buttons on a node from elsewhere. Combine with e.g. ident protocol to select the node? Makes a simple remote programmer. See AlanHR email to OpenLCB group August 11, 2010 message 386.

116. Should “identify” be pulled from the full configuration protocol and made into something light-weight? It's a separate item in PIP now.

118. We have a discussion in place about developers being able to assign node ID numbers based on whatever mechanism CBUS uses, which removes an objection that some CBUS developers had. But this doesn't cover the case of assigning Event ID numbers entirely, as CBUS has multiple “event” spaces with overlapping numbering. Briefly, they've got separate 32-bit and 16-bit event ID address spaces, with mixed semantics, and on top of that there are modifiers for “off” and “on”, etc. At the present time, there's little incentive for OpenLCB to define an interface to this, but there may be in the future.

119. Do a timing study on how to implement OpenLCB given the PIC 18F2480 requirement of 2msec of frozen CPU on each EEPROM write. Is there enough buffering to keep CAN alive through that, perhaps with a backup RAM buffer?

120. C/C++ prototype has some Doxygen comments, but Doxygen isn't generating them entirely. Also, some comments are still in the older form, particularly c.f. prototypes/Arduino/libraries/OpenLCB/OpenLcbCanInterface.h (is that the current file location, or a left over? Was referred to via the Arduino web page) – This item might go away if Doxygen support is either deprecated or moved to Netbeans support.

122. Should reservation be pulled from Configuration protocol and made into a separate mix-in? (Proposal done, discussion needed)

123. Mike Johnson and Paul Bender have expressed interest in a bridge to XpressNet (Lenz) protocol. JimK also working on it.

129. Monitor app for Android

135. John Plocher is thinking through the consequences of “NAT” for UniqueIDs, notably node IDs, but also event IDs. (Consensus seems to be that this would require some form of “DNS” to be able to find the new/changes ID numbers for things, with all the undesirable complexity that involves, but John is a smart guy and it's an important question)

136. Where can a global name for a specific EventID be stashed? This is a “find a global place from lots of local places, while keeping it consistent” problem. Maybe stash it on each node as “here's what I think it means”?

137. More fully develop the “left-both-right switch in the middle of the CAN bus” proposal for semi-automated configuration of a large modular layout. Can modern processors with two CAN buses help here?

139. Fast clock app for iPhone (in SVN, failed App Store approval, figure out how to do ad-hoc?)

141. Prompted by NMRA 2011 question, discussion of bidirectional RF for locomotive control. Want to get info back (static and dynamic). Standard RF technologies, but perhaps more than one? IEEE 802.14.4? Use of built in addressing?

142. Discussion of sizes in non-CAN implementations. (See also 145) E.g. RF that might have 128 byte (or likely smaller) frames. How to use generic OpenLCB form, but with some limitation on length? 128 bytes allows original MTI+ID sizes (2+6+6) even for datagram in a single frame. But what to say about other messages, particularly in the future? Does this put constraints on general messages sizes, e.g. guarantees for future expansion?

143. Simple/lightweight tools in various languages to track alias to full node to new alias changes when a node needs to keep long term access to an off-board node IDs. [Done], C++, iOS

144. The Technical Introduction doc (TechnicalIntroduction.pdf) needs an update. It's from 2010, and footnotes are in some cases dead links.

147. Arduino stream prototype needs to be completed, experiment with buffer management approaches for small nodes.

149. Write a Tech Note for gateway implementors. (See 140, 145, 146) (Skeleton in specs/drafts/GenGatewayTN.odt )

150. Write a C++ bit of code to track alias ↔ node ID mapping & demonstrate method. (See 143)

157. Should documents move to e.g. MediaWiki? Problem: Offline consultation. Is there a way to e.g. PDF the entire wiki? An easy offline browser? See extensions for Offline extension, PdfWriter, PdfBook. Alex Shepherd also suggested WordPress.

160. Revisit the makefile build process in prototypes/C to clean it up, separate test & build. Note there are multiple independent libraries (OpenLCB is one, Olcb* is the other) (see 105)

163. Update to CAN2Ethernet sketch for performance

166. Don G-W's point that having turnout controllers send “no longer thrown” is a good way to turn off indicators on a mimic panel. Need something like that, because lots of events can cause the points to move away from thrown, and teaching them all to a yard-throat panel is hard.

167. Define Internationalization (I8N) of CDI XML content.

168. Check that CDI XML is MicroXML compliant as a way to reduce the parsing load.. See e.g. See also and (linked from a comment at Jclark) and finally

169. Image support in ACDI.

170. MikeJ raised some ACDI/SNII issues to address in OpenLCB email 6/1/2012. 0x52/0x53 should be able to read just part of the data? Memory access protocol able to find specific parts? Presence of ACDI allows omitting that part from CDI (to save space) or with a predefined element <acdi>?

171. Consider approach for licensing from developers. Signing the CLA might be how you get access to SVN, or how perhaps how you get to call yourself a “member” or “developer”.

172. JSON instead of / beside XML?




Site hosted by

This is SVN $Revision: 2949 $