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
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