KrakenX Protocol¶
I want to give a special thanks to Jonas Malaco for his help with building out KrakenX support in NZXTSharp, and his work in reverse engineering the KrakenX protocol.
Table of Contents
This document describes the HID communication protocol for NZXT KrakenX (x42, x52, x62, x72) devices. The vendor ID for NZXT is 0x1e71, and the device id for KrakenX devices is 0x170e.
CAM receives device information about once/ second, I call these “status reports”. CAM also consistently sends packets to the Kraken device. The packets sent from CAM are meant to set the pump/ fan speeds based on whatever pump/ fan profile is currently set. Jonas Malaco
Handshakes¶
KrakenX devices have no hello or goodbye handshake process.
Status Reports¶
The Kraken device continuously sends status reports upstream to the PC. These reports are always 0x40 bytes long.
So far, information about how to get pump/ fan speeds, liquid temp, and firmware version. Here is how to get that information from a status report:
In the following examples, data
refers to the array of bytes last received from the device (zero-indexed).
Pump Speed: data[4] << 8 | data[5] - <<
is the bitwise left-shift operator, and |
is the bitwise OR operator.
Fan Speed: data[4] * 0x100 + data[5]
Liquid Temp: data[0] + (data[1] * 0.1) - The liquid temp value in degrees C, unrounded.
- Firmware Version:
- Major: data[10]
- Minor: (int)data[12].ToString() + data[13].ToString()
Overrides¶
If you want custom pump/ fan speeds to be set, the KrakenX device requires “overrides” at least once every 10 seconds, or the device will revert back to the CAM default “performance profile”. The override buffer schema is as follows:
Pump: 0x02, 0x4d, 0x40, 0x00, (byte)Speed - Speed is the desired speed as a percentage.
Fan: 0x02, 0x4d, 0x00, 0x00, (byte)Speed - Speed is the desired speed as a percentage.
Set Effect¶
The process of setting an RGB effect is similar to how it is with the Hue+. RGB Effect packets are always 65 bytes long. There are 5 settings bytes at the beginning, then 9 G, R, B color codes, then padding out to the 65 length with 0x00. The 9 GRB color codes are for the 8 LEDs in the ring, and the one in the logo. Even when effects are set on just the logo or ring, there are still 9 color codes. The first 8 seem to be for the ring, and the last is for the logo.
The settings bytes schema is as follows: 0x02, 0x4c, Param1, EffectByte, Param2
Below is a table outlining the settings packets for each effect. Bolded param values are defined below in the Param Schemas Section.
Effect Name | Packets/ Send | CB/ Param1 | EffectByte | Param2 | Compatible With | ||
Fixed | 1 | 0x02 | 0x4c | CB | 0x00 | 0x02 | Both |
Fading | 1/ Color | 0x02 | 0x4c | CB | 0x01 | CISS | Both |
SpectrumWave | 1 | 0x02 | 0x4c | DCB | 0x02 | Speed | Both |
Marquee | 1 | 0x02 | 0x4c | CB | 0x03 | LSS | Ring Only |
CoveringMarquee | 1/ Color | 0x02 | 0x4c | DCB | 0x04 | CISS | Both (at same time), or Ring Only |
Alternating | 1/ Color | 0x02 | 0x4c | DCBWM | 0x05 | CISS | Ring Only |
Breathing | 1/ Color | 0x02 | 0x4c | CB | 0x06 | CISS | Both |
Pulse | 1/ Color | 0x02 | 0x4c | CB | 0x07 | CISS | Both |
TaiChi | 2 | 0x02 | 0x4c | CB | 0x08 | CISS | Ring Only |
WaterColor | 1 | 0x02 | 0x4c | CB | 0x09 | Speed | Ring Only |
Loading | 1 | 0x02 | 0x4c | CB | 0x0a | Speed | Ring Only |
Wings | 1 | 0x02 | 0x4c | CB | 0x0c | Speed | Ring Only |
Speed refers to the speed the effect will display at: 0 - 4 where 0 is slowest, and 4 is fastest. 2 is normal.
Param Schemas¶
The KrakenX shares the CISS and LSS param with the Hue+. The KrakenX does have a couple of its own unique (for now) params:
DCB - Direction/ ChannelByte¶
- This param is a concatenation of two ints:
- First Byte: Direction – Forward: 0, Backward: 1
- Second Byte: ChannelByte – The ChannelByte of the channel the effect will be applied to.
DCBWM - Direction/ ChannelByte (With Movement)¶
This param is only used for the Alternating RGB effect. The desired value can be found with this table:
Direction v; With Movement > | True | False |
Forward | 0x0A | 0x02 |
Backward | 0x1A | 0x12 |
CIS/S - Color In Set/ Speed¶
CIS/S params are a composite of a couple values: The index of the current color in a set of colors, and the speed of the effect. Find the values individually, and concatenate them to get the btye to be passed as a param.
- First Digit: Color In Set. If there are multiple colors being applied, this digit denotes the index of the color.
- To Find: digit = x * 2
- x: The color number (Zero Indexed)
- To Find: digit = x * 2
- Second Digit: Speed
- 0 - 4 where 0 is slowest, and 4 is fastest. 2 is normal.
- IF Effect only uses one color, first digit is 0.
- Whole Byte: Concatenate Color In Set (IN HEX), and Speed.
- Ex: If the effect uses one color, and was at normal speed, the resulting byte would be 02.
- Ex: If the color is the third one in the set, and the speed is at fastest, the resulting byte would be 44.
LS/S - LED Size/ Speed¶
To find the desired byte composite, use the table below:
Speed v ; LED Size > | 3 | 4 | 5 | 6 |
---|---|---|---|---|
Slowest | 00 | 08 | 10 | 18 |
Slow | 01 | 09 | 11 | 19 |
Normal | 02 | 0a | 12 | 1a |
Fast | 03 | 0b | 13 | 1b |
Fastest | 04 | 0c | 14 | 1c |