View Single Post
Old 09-09-2013, 11:37 PM
Thatualle1970's Avatar
Thatualle1970 Thatualle1970 is offline
Registered User
Thatualle1970's PC Specs
Join Date: Sep 2013
Location: Dorchester, ON
Posts: 17
POST ID # = 673781
Thatualle1970 Reputation: 13

Originally Posted by CFSworks View Post
Hey all!
Hey CFSworks; great job so far....
Some additional information to keep this thread moving in the positive direction.

Corsair Link protocol overview

As mentioned, the USB device uses a simple 64-byte HID "raw" report; the rawhid source code can be a useful starting point to establish low-level communication if a device isn't "just available" (e.g., on Windows).

The ReportID is always zero and is length-prefixed with a number of SMBus-like packets within the HID packet. Each packet has an index (which should be from 20~255), SMBus sub-packet type followed by any write data, if the sub-packet is writing data. Block types also have a length, and it appears the "quick" and "byte" modes are unsupported (only CmdByte, CmdWord and CmdBlock appear to be used).

H80i/H100i Register set:

__Number__R/W__Length__ Description
00 R 1 byte Device ID - (H80 0x37, Cooling node 0x38, Lighting node 0x39, H100 0x3A, 80i 0x3B, 100i 0x3c -- this field as well as the version are common on all C-Link devices; but the rest aren't
01 R 2 bytes Firmware Version in BCD (for example 1.0.5 is 0x1005, or 0x05, 0x10 in little endianess)
02 R 8 bytes Product name, zero-terminated - only present on the H80i and H100i
03 R 1 Status, 0 okay, 0xFF bad
04 RW 1 byte Select current LED
05 R 1 byte Number of LEDs
06 RW 1 byte LED mode - 0x00 for static color, 0x40 for 2-color cycle, 0x80 for 4-color, 0xC0 for temperature mode; low nibble defines cycle speed or the temperature channel to use (0 internal sensor, 7 manual)
07 R 3 bytes LED current color, RGB color of the selected LED
08 RW 2 bytes In temperature controlled mode (0xC0) this defines the colour to use to with the below gradients
09 RW 6 bytes LED temperature-mode temperatures: 3 temperatures; used when cycle mode is 0xc0
0a RW 9 bytes LED temperature-mode colors: RGBx3 colors, corresponding to temperatures in register above
0b RW 12 bytes LED cycle colors: RGBx4 colors (only first color used if cycle mode set to 00, first two if 4b, ignored if c0)
0c RW 1 byte Select active temperature sensor
0d R 1 byte Number of temperature sensors
0e R 2 bytes Temperature as measured by selected sensor
0f RW 2 bytes Temperature limit (when the temperature goes over this, status is set to 0xff)
10 RW 1 byte Select current fan; for H100i, 0-3 are the fans, 4 is pump
11 R 1 byte Number of fans
12 RW 1 byte Fan mode; 02=fixed PWM, 04=fixed RPM, 06=default, 08=quiet, 0a=balanced, 0c=performance, 0e=custom; high bit is one when fan is detected, low bit is one when the fan is 4-pin, bits 6~4 define the temperautre channel to use in "curve" modes, 0 internal and 7 manual
13 RW 1 byte Fan fixed PWM, 0-255, only used if fan mode is 02
14 RW 2 bytes Fan fixed RPM; when fan mode is 04, controller will target this RPM
15 RW 2 bytes Report external temperature to fan controller - used for controlling fans via external sensors
16 R 2 bytes Current fan RPM
17 R 2 bytes Maximum RPM recorded since power-on
18 RW 2 bytes Fan under speed threshold
19 RW 10 bytes Fan RPM table, for custom (0e) mode: array of 5 RPMs
1a RW 10 bytes Fan temp table, for custom (0e) mode: array of 5 temperatures

Note: All data is little-endian.
Temperatures are reported in units of 1/256th of a degree Celsius.
Reply With Quote

1 members found this post helpful.