Adding a Device to SimLinkHub
SimLinkHub keeps a small local database that maps CAN messages to simulator variables and events. Every device — one of ours, or a custom one you've built yourself — gets wired in through that database, not through a firmware change or a software update. This page walks through how.
Open it from Settings → Manage Database… inside SimLinkHub.
1. Register the device
Every physical board on the CAN bus needs one entry in the device list:
| Field | What it means |
|---|---|
| Friendly Name | Whatever you want to call it in the UI |
| CAN Node ID | The device's own address on the bus (each device picks a unique one) |
| Base CAN ID | The starting CAN message ID this device uses — SimLinkHub computes individual message IDs from this |
| Enabled | Turn a device off without deleting its configuration |
Once wired up and powered, a device shows a green dot in the device list when SimLinkHub has seen recent traffic from it, and grey if it's gone quiet.
2. Map its outputs (sim → hardware)
An Output takes a value from the simulator and sends it to the device — a servo angle, an LED brightness, anything the hardware needs to display or move to.
| Field | What it means |
|---|---|
| SimConnect Variable | The sim value to watch, e.g. TRAILING EDGE FLAPS LEFT PERCENT |
| CAN Prefix | A short tag the device's firmware recognizes for this specific value |
| Device Type | Whether SimLinkHub or the device itself does the range mapping (Generic vs. Servo) |
| Sim Min / Max, Hardware Min / Max | The scaling range — e.g. 0–100% maps to 0–90° |
| RPN Formula | An optional formula applied before sending, e.g. {VAL} 0.9 * |
| Update Threshold | How much a value has to change before a new message is sent, to avoid flooding the bus |
3. Map its inputs (hardware → sim)
An Input takes a button press, switch, or axis movement from the device and turns it into a simulator action.
| Field | What it means |
|---|---|
| Input ID | The short tag the device sends over CAN for this control |
| Input Type | Button/event, or a continuous axis |
| SimConnect Event | What to trigger — a discrete event (e.g. FLAPS_UP) for a button, or an AXIS_*_SET event for a continuous control |
| Multiplier / Offset | For axes, how the device's raw 0–1 range maps onto the sim event's expected range |
Discrete controls (buttons, detented levers) usually map to their own named event per position rather than a single continuous value — it's more precise, and it means the sim decides exactly where each position lands rather than hoping a raw number rounds to the right spot.
Calibration, not reflashing
Getting a servo's travel right, or fixing a reversed axis, is almost always a matter of adjusting the numbers above rather than touching firmware — change the Hardware Min/Max, or swap Raw Min and Raw Max if a lever moves the wrong way. Reload the config from SimLinkHub's Hardware menu afterward to push the change out.
Building a fully custom device
If you're building something of your own rather than one of ours, the only requirement on the firmware side is that it speaks the same CAN message conventions everything else on the bus does. Stage 2 of this site will cover that in more depth, alongside the hardware build guides.