Dark Project ALU87A Onionite V2 (wired TKL) -- HID
Device: 342D:E40F (Dark Project ALU87A Onionite V2 Gaming Keyboard).
Reverse-engineered from direct hidraw probing, Web Lab analysis, and USB packet capture analysis on real hardware.
USB interfaces
The keyboard exposes three USB interfaces under USB configuration 1:
Interface 0 (Boot Keyboard): Standard 8-byte boot keyboard endpoint + 3-bit LED output report.
Interface 1 (Consumer / NKRO / Mouse): Consumer media keys, NKRO bitmap, and mouse/macro report endpoints.
Interface 2 (Vendor Configuration): Vendor-defined HID collection (Usage Page
0xFF01/ Usage0x01). Carries 256-byte HID Feature Reports (Report ID0x07) used for all configuration reads and writes.
Command structure (HID Feature Reports, Report ID 0x07)
Communication is performed using Linux HIDIOCSFEATURE and HIDIOCGFEATURE ioctls on Interface 2.
All reports begin with Report ID byte 0x07 followed by a 255-byte payload (total 256 bytes).
Commands
0x07 0x82 <profile> -- Read profile configuration
0x07 0x82 <profile_num> [253 x 0x00]
Reads the 256-byte onboard profile payload from the keyboard for the specified profile (0x01 = Profile 1, 0x02 = Profile 2, 0x03 = Profile 3).
The returned report contains:
Byte 9: Active effect ID (
HidEffectID)Byte 10 + HidEffectID: Brightness level (
0x00..0x04= 0%, 25%, 50%, 75%, 100%)Byte 24 + HidEffectID: Speed level (
0x01..0x05)Byte 38 + HidEffectID: Multi-color mode flag (
0x00= static color,0x08= multi-color)Byte 59: Red component (0..255)
Byte 67: Green component (0..255)
Byte 75: Blue component (0..255)
Byte 8: Polling rate index (
0x01= 125 Hz,0x02= 250 Hz,0x03= 500 Hz,0x04= 1000 Hz)Byte 88: Debounce latency index (
0x00= 0ms,0x01= 2ms,0x02= 8ms,0x03= 12ms)
0x07 0x02 <profile_data...> -- Write profile / lighting configuration
0x07 0x02 [254-byte profile payload]
Writes the updated configuration directly to the keyboard and commits it to onboard flash memory.
Supported hardware effects (HidEffectID):
0-- Wave1-- Color Cycle2-- Random3-- Breathing4-- Footprint (reactive)5-- Solid (static 24-bit RGB color)6-- Spiral Wave7-- Star8-- River9-- Ripples (reactive)10-- Trigger (reactive)11-- Color Discharge (reactive)12-- Sine Wave13-- Rain
0x07 0x01 <profile> -- Switch active onboard profile
0x07 0x01 <profile_num> [253 x 0x00]
Switches the active onboard profile (1, 2, or 3).
0x07 0x09 <profile> <enabled> ... -- Configure Snap Tap (SOCD)
0x07 0x09 <profile_num> <enabled> [4 x 0x00] <mode> <key1> <key2> [245 x 0x00]
Configures hardware Snap Tap (SOCD / Null Bindings) counter-strafing in the keyboard MCU:
<enabled>:0x01= enabled,0x00= disabled<mode>:0x00= Last Input Priority,0x01= Absolute Key 1,0x02= Absolute Key 2,0x03= Neutral<key1>/<key2>: Standard USB HID Keycodes (defaults:0x04= 'A',0x07= 'D')
Hardware Event Notifications (Input Reports on Interface 2)
The keyboard sends asynchronous 8-byte input reports when state is toggled via onboard shortcuts:
0x05 0xA4 0xF0 ... <status>: Sent onFn + Right Shift(Snap Tap toggle). Byte 7 holds the new status (0x01= ON,0x00= OFF).0x05 0xA4 0xF1 <profile> ...: Sent on profile switch shortcuts. Byte 3 holds the active profile index (0x01..0x03).