Skip to content

[BUG]Saitek Multi Panel: multi_display only refreshes the first line when multiple lines reference the same dataref; display (unconditioned) never refreshes at all #124

Description

@ribeiradascabras

Environment

XPanel version: 1.10 (built Aug 12 2026)
X-Plane 12, Linux
Aircraft: default Laminar Research Cessna 172SP
Device: Saitek Multi Panel (vid 06a3, pid 0d06)

Summary

Two related issues found while configuring the Multi Panel's upper 7-segment display (MULTI_DISPLAY_UP), which on real hardware always shows the heading bug independently of the rotary selector switch position.

Issue 1 — [display:id="..."] (generic, unconditioned) never refreshes

ini
[display:id="MULTI_DISPLAY_UP"]
line="dataref:sim/cockpit2/autopilot/heading_dial_deg_mag_pilot"

The underlying dataref changes correctly (confirmed via TRACE log showing action: change float value X by Y -> new value Z on every knob turn), but the physical display always shows 00000 and never updates, from plugin startup onward.

Issue 2 — [multi_display:id="..."] with multiple lines referencing the same dataref only keeps the first-listed line "live"

ini
[multi_display:id="MULTI_DISPLAY_UP"]
line="on_select:SW_HDG,dataref:sim/cockpit2/autopilot/heading_dial_deg_mag_pilot"
line="on_select:SW_CRS,dataref:sim/cockpit2/autopilot/heading_dial_deg_mag_pilot"
line="on_select:SW_ALT,dataref:sim/cockpit2/autopilot/heading_dial_deg_mag_pilot"
line="on_select:SW_VS,dataref:sim/cockpit2/autopilot/heading_dial_deg_mag_pilot"
line="on_select:SW_IAS,dataref:sim/cockpit2/autopilot/heading_dial_deg_mag_pilot"

With this config, the display only updates in real time while the selector is on SW_HDG (the first line listed in the file). With the selector on any other position (ALT/VS/IAS/CRS), the display does not refresh with the live heading value — it stays frozen or blank, even though the underlying dataref is actively changing.

For comparison, MULTI_DISPLAY_DOWN in the same config — where every line references a distinct dataref — refreshes correctly in real time for every selector position:

ini
[multi_display:id="MULTI_DISPLAY_DOWN"]
line="on_select:SW_ALT,dataref:sim/cockpit2/autopilot/altitude_dial_ft"
line="on_select:SW_VS,dataref:sim/cockpit2/autopilot/vvi_dial_fpm"
line="on_select:SW_IAS,dataref:sim/cockpit2/autopilot/airspeed_dial_kts_mach"
line="on_select:SW_HDG,dataref:sim/cockpit2/autopilot/heading_dial_deg_mag_pilot"
line="on_select:SW_CRS,dataref:sim/cockpit2/radios/actuators/nav1_obs_deg_mag_pilot"

This isolates the problem to duplicate dataref references within the same display object, not to the dataref itself or to writing HID output in general.

I also tried wrapping each of the 5 duplicate MULTI_DISPLAY_UP lines in a distinct Lua function (get_heading_hdg(), get_heading_crs(), etc., each just calling get_dataref("sim/cockpit2/autopilot/heading_dial_deg_mag_pilot")) to check whether the issue was string-based deduplication of the raw config value. Same result — only the first line stayed live — so the deduplication appears to happen at the resolved dataref level, not the config text/string level.

Expected behavior

Either:

A display (generic/unconditioned) should refresh continuously, the same way a multi_display with a single line does, or
A multi_display should support multiple lines referencing the identical dataref under different on_select conditions, and refresh whichever line's condition is currently active rather than only the first one registered.

Steps to reproduce

Use the "Issue 2" config above with a Saitek Multi Panel on the default C172SP.
Set log_level="TRACE".
With the selector on SW_HDG, turn the knob — MULTI_DISPLAY_UP updates live. Good.
Move the selector to SW_ALT (or any other position) and turn the knob — MULTI_DISPLAY_DOWN's corresponding line updates correctly (proving the dataref really changes and the general HID write path works), but MULTI_DISPLAY_UP does not reflect the change.

Additional evidence

Happy to attach the full Log.txt (TRACE level) and xpanel.ini on request.

Log.txt

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions