Add driver for Enermax Liqtech XTR pump-head LCD (USB 2e3c:0a12)#903
Open
sungwookson wants to merge 1 commit into
Open
Add driver for Enermax Liqtech XTR pump-head LCD (USB 2e3c:0a12)#903sungwookson wants to merge 1 commit into
sungwookson wants to merge 1 commit into
Conversation
The Enermax Liqtech XTR AIO cooler has a numeric LCD on the pump head that accepts live data over USB HID. No vendor documentation or prior Linux/liquidctl support existed; the protocol was fully reverse-engineered by iterative black-box probing of the HID interface on a Proxmox Linux host (the Windows companion app could not be used as a reference because GPU temperatures were passed through to a VM, leaving the screen blank). Protocol: HID report ID 0x20, 64 data bytes, values 16-bit big-endian, displayed verbatim. Three writable fields: CPU temp (cmd 0x01, @bytes 5-6), GPU temp (cmd 0x04, @8-9, 4-digit), pump RPM (cmd 0x10, @11-12). Screen blanks if any field is not refreshed within ~2 s. No sensor data is readable from the device over USB. Exposes three channels via set_screen: cpu, gpu, pump. The gpu field supports an id*1000+temp_c encoding to identify which GPU is shown while cycling multiple GPUs. Adds 30 unit tests covering all channels, report structure, byte offsets, boundary values, and unsupported-method errors.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The Enermax Liqtech XTR AIO cooler has a numeric LCD on the pump head that accepts live data over USB HID. No vendor documentation or prior Linux/liquidctl support existed; the protocol was fully reverse-engineered by iterative black-box probing of the HID interface on a Proxmox Linux host (the Windows companion app could not be used as a reference because GPU temperatures were passed through to a VM, leaving the screen blank).
Protocol (reverse-engineered):
HID report ID
0x20, 64 data bytesValues are 16-bit big-endian, displayed verbatim (no unit conversion by device)
Three writable display fields:
0x010x040x10A secondary CPU field (
0x02@6–7) exists but its hardware renders only ~2 digits; the driver mirrors the primary CPU value there silently.Screen blanks if any field is not refreshed within ~2 seconds.
No sensor data is readable from the device over USB (
get_statusreturns[]).New file:
liquidctl/driver/enermax_liqtech_xtr.pyExposes three channels via
set_screen:The
id × 1000 + temp_cconvention for the GPU field encodes which GPU is currently shown in the leading digit, enabling multiple-GPU cycling from a daemon without needing a separate field.set_color,set_fixed_speed, andset_speed_profileraiseNotSupportedByDriver— the device has no USB-controlled LEDs and pump speed is PWM-controlled via the motherboard header.New file:
tests/test_enermax_liqtech_xtr.py30 unit tests covering all channels, byte offsets, report length, boundary values, validation errors, and unsupported-method errors.
Tested on
2e3c:0a12)