2026-07 / 05
Reverse-engineering a server's front-panel display
OutcomeReverse-engineered an undocumented serial protocol, shipped a custom layer, then reverted it when it proved unreadable at a glance.
Overview
The cluster's master node has a small front-panel display meant for a Windows-only vendor app. On Linux it just showed a static logo — until its serial protocol got reverse-engineered and repointed at live cluster data.
Context
A Windows-oriented front panel exposed only a serial protocol and eight firmware-defined tiles.
System
Problem
No driver, no docs, no vendor Linux support — just a USB virtual COM port enumerating with a generic bridge-chip ID and nothing on the other end talking to it.
Investigation
Initial hypothesis
Unused numeric tiles could communicate cluster state clearly.
Built on a published community reverse-engineering of the protocol (a handshake ENQ from the panel, an ASCII key-value reply per tile to "unlock" it) and mapped live cluster signals onto it. The panel firmware has exactly 8 hardware-baked tile types with fixed fields — no free-draw canvas — so "custom content" meant repurposing physically-meaningless tiles (a headless server has no GPU, speaker, or battery) to carry cluster health and node metrics instead.
Evidence
0x05 # ENQ from panel
KEY=VALUE # ASCII tile responseUsers saw numbers without meaningful labels because fixed tile icons could not describe the remapped values.
Rejected fix
The first version repurposed the GPU, Volume and Battery tiles to carry cluster health and NAS usage. It worked technically, but those tiles have fixed icons and no text field, so at a glance it read as a number with no label. Shipping it would have traded a static logo for a confusing one.
Decision
Revert the custom layer and keep honest single-host readings.
Result
The first version — repurposing the GPU/Volume/Battery tiles for cluster health and NAS usage — technically worked but read as "a number with no label" at a glance, since those tiles have fixed icons and no text field. Reverted rather than shipped, with the lesson written down: a legible multi-host rotation needs a text-carrying tile changing in lockstep with the numeric ones, which these tiles can't do alone. The panel now runs unmodified, honest single-host stats instead of a confusing custom layer.
What I would change
Current limitation: The firmware offers no free-draw surface or synchronized text label for arbitrary metrics.
Next step: Only revisit multi-host display if a text-bearing tile can change in lockstep.
Stack
Python · pyserial · USB CDC-ACM · systemd