Concept
RailCommand talks to your command station and your detection bus directly, through a native driver per
protocol rather than through a single bridge. The public page at /hardware lists every driver that
ships, and it rates each one by evidence, not by how finished the code is. Five tiers, used the same
way in every row:
- Field-tested: run on a real layout by us or by a beta partner, with the connection, detection, track power, and occupancy path all exercised.
- Implemented, awaiting a layout: the driver is complete and tested against protocol captures and conformance vectors; nobody has run it on the physical system yet. We say so, and we ask owners of that system to test with us.
- Train control only: the driver runs trains but does not yet read or drive layout devices over that bus.
- Built in: ships inside RailCommand and needs no hardware; for learning the app and testing without a layout.
- Accepted, not yet built: designed and approved for a later release; not in the shipped app. A row carrying this tier says what RailCommand will do, never what it does today.
The bare word "supported" is never used for a system nobody has run on a layout. A row moves from "implemented, awaiting a layout" to "field-tested" only when a layout run happens and is recorded here with its date and its layout; the page never promotes a row on its own.
The driver list itself is not prose. It is generated from RcDriverTypes.Canonical
(src/RailScanPro.Domain/RailCommand/Hardware/RcDriverTypes.cs), the 20 canonical DriverType tokens the
database CHECK constraint accepts, through SupportedHardwareCatalog. A unit test asserts every canonical
token appears exactly once in the catalog and that the catalog names no token outside it, so a new driver
cannot ship without a row and a retired one cannot linger. Driver status evidence is section 15 of
docs/features/railcommand/world-and-environment/ue-runtime/HARDWARE-DRIVER-REQUIREMENTS.md.
What RailCommand runs today
| System | Connects over | Tier today | Notes |
|---|---|---|---|
| Digitrax LocoNet (PR3, PR4, LocoBuffer) | USB | Field-tested | Museum and owner layouts. BDL168 occupancy shows as flat LocoNet addresses (board 109 input 3 is 1731). |
| Digitrax BDL168 standalone detection | USB | Implemented, awaiting a layout | Detection-only bus for layouts without a LocoNet command station. Museum and owner layouts read BDL168 through the full LocoNet driver above. |
| NCE (Power Pro, Power Cab binary protocol) | USB | Implemented, awaiting a layout | AIU feedback. |
| Roco/Fleischmann Z21, Digikeijs DR5000 | Ethernet or WiFi | Implemented, awaiting a layout | CV programming, RailCom reporting. |
| Lenz XpressNet (LI101F, LIUSB) | USB | Implemented, awaiting a layout | Feedback modules, loco info. |
| ESU ECoS | Ethernet | Implemented, awaiting a layout | S88 feedback, loco discovery. |
| Märklin CS2/CS3 (CAN over Ethernet) | Ethernet | Implemented, awaiting a layout | mfx enumeration, S88. |
| DCC-EX | USB or TCP | Implemented, awaiting a layout | Native command set. |
| CVP EasyDCC | USB | Implemented, awaiting a layout | |
| MERG CBUS | TCP (CAN via GridConnect) | Implemented, awaiting a layout | |
| Selectrix SX1 | USB | Implemented, awaiting a layout | |
| SPROG (programming track) | USB | Implemented, awaiting a layout | Programming only. It writes CVs on the programming track. It does not run trains, throw turnouts, or read sensors. |
| BiDiB (Fichtelbahn) and BiDiB feedback | USB or TCP | Implemented, awaiting a layout | Detector modules. |
| NMRA LCC / OpenLCB (TCS CS-105, RR-CirKits nodes) | Ethernet (GridConnect), CAN via adapter | Train control only | Train search, controller assign and release, CV programming over LCC. Layout events (turnouts, sensors, signals as LCC events) are designed and accepted for a later release, and not yet built. |
| JMRI (bridge) | WebSocket | Implemented, awaiting a layout | For layouts that keep JMRI as the hardware layer. |
| WiThrottle phone throttles (Engine Driver, WiThrottle) | WiFi | Implemented, awaiting a layout | RailCommand hosts phone throttles directly (Engine Driver, WiThrottle) on port 12090; nobody has run it on a layout yet. |
| Littfinski HSI-88 (S88) | USB | Implemented, awaiting a layout | Detection-only bus. |
| MQTT sensor nodes (ESP32) | WiFi | Implemented, awaiting a layout | Detection-only bus. |
| Simulator | none | Built in | For learning the app and testing without hardware. |
The BiDiB row covers two canonical tokens, BIDIB (the command-station driver) and BIDIB_FEEDBACK (the
detector-module bus), because an owner buys and installs them as one system. Every other row is one token.
Hardware is detected automatically wherever the protocol allows it: USB vendor and product ids, an LCC port probe, a Z21 UDP probe, TCP probes for ECoS, Märklin and JMRI, and serial probes on an opened port. Anything the app cannot name is set by hand. One RailCommand can also run more than one connection at once, so a command station for the trains plus a separate detection bus for occupancy is an ordinary setup rather than a special case.
How To
Read the tiers before the table: the tier is the promise, and the row is the detail.
- Open
/hardwareon the public site, or reach it from the Resources menu or from the Downloads page. - Find your command station in the System column. If it is not there, RailCommand has no driver for it and no page row will appear for it.
- Read the Tier today badge against the definitions at the top of the page.
- If the row reads Implemented, awaiting a layout, the driver is written and vetted against protocol captures, and yours would be the first physical system it has met. Get in touch and we will do the bring-up with you.
- If the row reads Train control only, expect the driver to run trains over that bus and expect to wire layout devices (turnouts, sensors, signals) through another connection.
- Install the desktop app from
/downloads, then configure the connection in the desktop's Hardware Setup. The picker covers 20 of the 20 systems: every driver on this page has a row, because the picker is built from the same canonical driver list this page is. Phone throttles are the one row that is not a command station: pick "WiThrottle server (phone throttles)", which offers0.0.0.0:12090as the interface and the port RailCommand should listen on (0.0.0.0accepts phones on every network this machine is on), change it if you want one interface only, then point Engine Driver or WiThrottle at this computer.
To offer a layout for testing, use the feedback form or write to support@railscanpro.com and say which system you run, which interface, and what the layout has for detection.
Troubleshooting
- My command station is not on the page. RailCommand has no driver for it. The page is generated from the shipped driver list, so an absent system is genuinely absent rather than an omission in the copy. Massoth DiMAX is the known case: no published serial protocol, so it has no native driver.
- My system says "Implemented, awaiting a layout" and I have it working. Tell us. That is exactly the run that promotes the row, and we record the date and the layout with it.
- I run LCC and my turnouts and sensors are not seen. Expected today. LCC is train control only: train search, controller assign and release, and CV programming over LCC work; layout events (turnouts, sensors, signals as LCC events) are designed and accepted for a later release, and not yet built.
- I bought a SPROG and my trains will not move. Expected. SPROG is a programming-track device: RailCommand writes CVs to it and nothing else. Run the layout from a command station and keep the SPROG for programming.
- My Digikeijs DR5000 is not listed separately. It speaks the Z21 protocol and runs on the Z21 row. It was never a distinct driver.
- My system is on the page but not in the desktop's Hardware Setup picker. No longer a state any system is in. Five used to be: SPROG, BiDiB, the BiDiB feedback bus, MQTT sensor nodes and the simulator shipped a driver the setup screen had no row for. The picker is now built from the canonical driver list rather than a hand-kept one, so a driver cannot reach this page without reaching the picker. If a system on this page is genuinely missing from your picker, that is a defect and not a gap: write to support@railscanpro.com with your desktop version.
- Detection did not find my interface. Automatic detection covers the probes listed above. Where a device shares a generic USB chip with other hardware, or sits behind a transport with no probe, set the connection by hand in Hardware Setup.
- I want to run trains from my phone. RailCommand hosts phone throttles itself, the way JMRI and DCC-EX do: it listens on port 12090 and Engine Driver, WiThrottle and other compatible apps connect to it. Add the "WiThrottle server (phone throttles)" connection in Hardware Setup, give it the interface and port to listen on, and point the phone at this computer. That row reads "implemented, awaiting a layout", so yours may be the first physical railroad it meets.
- The phone throttle connection will not save. That connection takes two things, an interface and a
port, written as
0.0.0.0:12090. Picking "WiThrottle server (phone throttles)" puts that default into the field for you, where you can read it and change it:0.0.0.0accepts phones on every network the computer is on, and naming one interface instead accepts them on that network only. The interface is an IP address, either an IPv4 address like192.168.1.50or an IPv6 address in square brackets like[::]. A name such aslocalhostis refused, because a name is looked up later and can answer with a different address each time, and this field has to say exactly which interface the computer binds. What is never filled in for you is the SAVE: a port on its own is refused, so is a port outside 1 to 65535, and so is an interface that is not an IP address. The message says which of the three is wrong, because which interface the listener binds decides who on the network can reach it and that is your decision to make. - The phone throttle connection cannot be the primary command station. That checkbox is not offered for it, and the role is cleared if a connection that had it is changed to this one. A phone throttle carries your instructions in and drives nothing on the railroad, so it is never the connection the layout falls back to; give the role to the command station instead.
- I need two systems at once. Supported by design: a command station and a separate detection bus can run as two connections on the same RailCommand.
Safety Notes
The tier is a statement about evidence, not a safety certification. A field-tested row means the connection, detection, track power, and occupancy path were exercised on a layout; it does not remove the operator's responsibility for the physical railroad. A row in implemented, awaiting a layout has never met the physical system at all, so treat a first run as a bring-up: keep track power under your hand, watch the first movement, and be ready to cut power.
Neither the public site nor the desktop app drives hardware or moves trains. The local runtime owns all safety-critical execution (occupancy enforcement, interlocking, movement authority). Reading a row on this page tells you what RailCommand can talk to; it never tells you a movement is authorized.