HARUMI
Back

2026-07 / 05

Reverse-engineering a server's front-panel display

Engineering experimentSole developer and operator

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

USB CDC-ACM to ENQ handshake to Host metrics to Front panelUSB CDC-ACMENQ handshakeHost metricsFront panel

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 response

Users 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

Next project

Harumi Platform — retiring three admin tools into one