The Corsair User Forums  

Go Back   The Corsair User Forums > Corsair Product Discussion > Corsair Link

Reply
 
Thread Tools Search this Thread Rating: Thread Rating: 252 votes, 5.00 average. Display Modes
  #46  
Old 03-20-2014, 10:31 PM
sa1 sa1 is offline
Registered User
sa1's PC Specs
 
Join Date: Mar 2014
Posts: 1
POST ID # = 702375
sa1 Reputation: 10
Default

Quote:
Originally Posted by volmok View Post
Hi,

I have switched one year ago to Linux and I found that it lacks the control over my cooler (H100i).
Thanks dwmccauley's example I have created a working basic tool that allows the following:
  • View fan and pump information
  • Change fan mode
  • Set fan RPM (if fixed RPM mode is selected)

The code is attached in the file and you can use the makefile in the Debug folder.

I apologize in advance if I break any "Linux developing rules", but I am a .NET developer (yes I use Linux and develop on MS products) and I just got into C++.

V.

P.S. Let me know if you find bugs or issues with my code.
Thanks, this seems to work well. I hope that someone converts this into a kernel module.
Reply With Quote


  #47  
Old 04-04-2014, 03:57 AM
barryha barryha is offline
Registered User
barryha's PC Specs
 
Join Date: Mar 2014
Posts: 1
POST ID # = 704196
barryha Reputation: 10
Default Linux kernel driver for h80i

Hi all

This is my first post on this forum. I have been following this thread
for sometime. I have a h80i and a Command module with a cooling node.
I am a software engineer (I do operating systems). I have had the need
for support for the hardware under Linux (on my personal home system).
So I decided to take all the great information supplied by other users and
develop a driver, which I did. Since I did this off of research and the hard
work of the other users. I am giving this work back to you all.


The attached tar-ball has a readme file that should help get things going.
Remember this is not a polished thing. While it has been working well (for
two weeks), it is new code. The install processes is ruff at best...

Also I think that if there is enough interest, it should get cleaned up some
and ultimately get put into appropriate community projects... At this point
I am getting good use out of it and I hope others can also...

Barry
Attached Files
File Type: zip corsairdriver.zip (706.5 KB, 543 views)

Last edited by barryha; 04-04-2014 at 04:19 AM.
Reply With Quote


  #48  
Old 04-07-2014, 11:16 AM
fredo fredo is offline
Registered User
 
Join Date: Apr 2014
Posts: 2
POST ID # = 704531
fredo Reputation: 10
Thumbs up Code works with a few tweaks

Quote:
Originally Posted by volmok View Post
Hi,

I have switched one year ago to Linux and I found that it lacks the control over my cooler (H100i).
Thanks dwmccauley's example I have created a working basic tool that allows the following:
  • View fan and pump information
  • Change fan mode
  • Set fan RPM (if fixed RPM mode is selected)

The code is attached in the file and you can use the makefile in the Debug folder.

I apologize in advance if I break any "Linux developing rules", but I am a .NET developer (yes I use Linux and develop on MS products) and I just got into C++.

V.

P.S. Let me know if you find bugs or issues with my code.
This worked for me with a little bit of hacking. There was a hard path to the source code I had to change and I had to change the library it uses from libhidapi-hidraw to libhidapi-libusb. This is probably because I'm using CentOS6, which has an older kernel. Also, for some reason the program segmentation faults when it finishes.

Thanks for the code.
Reply With Quote


  #49  
Old 04-10-2014, 06:18 PM
fredo fredo is offline
Registered User
 
Join Date: Apr 2014
Posts: 2
POST ID # = 704992
fredo Reputation: 10
Default

Quote:
Originally Posted by Thatualle1970 View Post
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).

http://www.pjrc.com/teensy/rawhid.html

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.
I'm adding some LED control and status to the C version of OpenCorsairLink. Can you give any more information about how register 08 works? Does it map colours to temperature ranges? How is the data encoded in this register?
Reply With Quote


  #50  
Old 05-14-2014, 12:19 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 # = 710960
Thatualle1970 Reputation: 13
Default

Quote:
Originally Posted by fredo View Post
I'm adding some LED control and status to the C version of OpenCorsairLink. Can you give any more information about how register 08 works? Does it map colours to temperature ranges? How is the data encoded in this register?
Yes. In a nutshell, there are three colours, cool, warm and hot. The temperature thresholds are defined in 09 and are 8.8 signed fixed-point. The colours are simple RGB values for each point and reside in register 0A. To set the temperature colour points, you'd do something like:
Code:
for(int i=0; i<3; i++) {
    temp[i * 2] = (unsigned char)(temp.value[i] * 256.0f);
    temp[i * 2 + 1] = (unsigned char)temp_value[i];
}
When you write the temperature to 08 while under temperature controlled mode, the H80i will interpolate that temperature to within the cool-warm-hot range and determine the RGB value automatically.
Reply With Quote


  #51  
Old 05-14-2014, 12:39 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 # = 710961
Thatualle1970 Reputation: 13
Default

Quote:
Originally Posted by barryha View Post
Hi all

This is my first post on this forum. I have been following this thread
for sometime. I have a h80i and a Command module with a cooling node.
I am a software engineer (I do operating systems). I have had the need
for support for the hardware under Linux (on my personal home system).
So I decided to take all the great information supplied by other users and
develop a driver, which I did. Since I did this off of research and the hard
work of the other users. I am giving this work back to you all.


The attached tar-ball has a readme file that should help get things going.
Remember this is not a polished thing. While it has been working well (for
two weeks), it is new code. The install processes is ruff at best...

Also I think that if there is enough interest, it should get cleaned up some
and ultimately get put into appropriate community projects... At this point
I am getting good use out of it and I hope others can also...

Barry
Wow. Great job.
Reply With Quote


  #52  
Old 05-17-2014, 12:11 AM
PJSingh5000 PJSingh5000 is offline
Registered User
PJSingh5000's PC Specs
 
Join Date: Aug 2013
Posts: 2
POST ID # = 711228
PJSingh5000 Reputation: 10
Default

Barry, thanks for your effort/contribution. I'll try out your code over the next few days.
Reply With Quote


  #53  
Old 08-28-2014, 05:13 AM
neslekkim neslekkim is offline
Registered User
neslekkim's PC Specs
 
Join Date: Aug 2014
Location: Oslo, Norway
Posts: 1
POST ID # = 724739
neslekkim Reputation: 10
Default

Registered on this forum to follow this development, very cool stuff.
Do anyone have put up the various code on github or some other public code repository?
Reply With Quote


  #54  
Old 09-14-2014, 07:42 PM
Doridian Doridian is offline
Registered User
Doridian's PC Specs
 
Join Date: Aug 2014
Posts: 49
POST ID # = 727830
Doridian Reputation: 10
Default

I have done some coding and got to this: https://github.com/Doridian/CorsairLinkPlusPlus
This can communicate with the Commander Mini (or other USB things), enumerate devices connected to it etc.
However, my problem now is: The AX1200i and AirFlow Pro. They reply totally weird.
Both of them give me a 0x00 ID on register 0x00 (ID).
One gives me all 0xFF bytes on 0x02 (name), the other 00 00 fe 58 00 00 00 00.
The one giving me all 0xFF on 0x02 (name) also gives me all 0xFF on 0x01 (version) and fan count, the other all 0x00.
Reply With Quote


  #55  
Old 09-15-2014, 08:41 AM
Doridian Doridian is offline
Registered User
Doridian's PC Specs
 
Join Date: Aug 2014
Posts: 49
POST ID # = 727882
Doridian Reputation: 10
Default

I have now managed to find out the protocols for AFP and the PSUs. I will try and document it once I have gotten fully through it.
Reply With Quote


  #56  
Old 09-15-2014, 03:45 PM
Doridian Doridian is offline
Registered User
Doridian's PC Specs
 
Join Date: Aug 2014
Posts: 49
POST ID # = 727924
Doridian Reputation: 10
Default

Finally got most things to work (missing LEDs and the huge Mains power sensor block as well as control):


As we can also deduct from this: The temperature sensor breakage and PSU sensor breakage are a fault of the hardware or firmware (on the Commander Mini).
Reply With Quote


  #57  
Old 09-15-2014, 06:02 PM
WizzyThing WizzyThing is offline
Registered User
WizzyThing's PC Specs
 
Join Date: Aug 2014
Posts: 61
POST ID # = 727936
WizzyThing Reputation: 10
Default

You also missed the fact that the AFP LINK interface is completely broken.
Reply With Quote


  #58  
Old 09-16-2014, 08:17 PM
WizzyThing WizzyThing is offline
Registered User
WizzyThing's PC Specs
 
Join Date: Aug 2014
Posts: 61
POST ID # = 728137
WizzyThing Reputation: 10
Default

We are currently trying to figure out the specifics of the firmware, we already figured out it's saved in an SREC(http://en.wikipedia.org/wiki/SREC_(file_format)) format and unpacked the actual firmware from it.

We still need to figure out what exactly is running the firmware before we can start messing with that and fix stuff like the temp sensors not working.
Reply With Quote


  #59  
Old 09-20-2014, 08:25 AM
WizzyThing WizzyThing is offline
Registered User
WizzyThing's PC Specs
 
Join Date: Aug 2014
Posts: 61
POST ID # = 728850
WizzyThing Reputation: 10
Default

For now we shifted our focus away from the driver as it's pretty much complete at this stage.

Dori is currently implementing a RESTful API, that will allow us to query the driver via browser or whatever, we also hope to implement a proper standalone program that does not require a browser.

Here's the full device tree I queried from the API:

Code:
{
  "Name": "Root Device",
  "Present": true,
  "Valid": true,
  "AbsolutePath": "/",
  "ParentPath": null,
  "Children": [
    {
      "Name": "Corsair Link",
      "Present": true,
      "Valid": true,
      "AbsolutePath": "/CorsairLink",
      "ParentPath": "/",
      "Children": [
        {
          "Name": "Corsair Commander Mini USB",
          "Present": true,
          "Valid": true,
          "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_",
          "ParentPath": "/CorsairLink",
          "Children": [
            {
              "Name": "Corsair Commander Mini",
              "Present": true,
              "Valid": true,
              "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0",
              "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_",
              "Children": [
                {
                  "Controller": {
                    "Value": 94,
                    "RegisteredName": "CorsairLink.FanFixedPercentController"
                  },
                  "ValidControllerNames": [
                    "CorsairLink.FanDefaultController",
                    "CorsairLink.FanBalancedModeController",
                    "CorsairLink.FanQuiteModeController",
                    "CorsairLink.FanPerformanceModeController",
                    "CorsairLink.FanCustomCurveController",
                    "CorsairLink.FanFixedRPMController",
                    "CorsairLink.FanFixedPercentController"
                  ],
                  "PWM": false,
                  "SensorType": "Fan",
                  "Unit": "RPM",
                  "Name": "Fan 0",
                  "Present": true,
                  "Value": 2759,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0/SensorFan0",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0"
                },
                {
                  "Controller": {
                    "Value": 94,
                    "RegisteredName": "CorsairLink.FanFixedPercentController"
                  },
                  "ValidControllerNames": [
                    "CorsairLink.FanDefaultController",
                    "CorsairLink.FanBalancedModeController",
                    "CorsairLink.FanQuiteModeController",
                    "CorsairLink.FanPerformanceModeController",
                    "CorsairLink.FanCustomCurveController",
                    "CorsairLink.FanFixedRPMController",
                    "CorsairLink.FanFixedPercentController"
                  ],
                  "PWM": false,
                  "SensorType": "Fan",
                  "Unit": "RPM",
                  "Name": "Fan 1",
                  "Present": true,
                  "Value": 873,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0/SensorFan1",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0"
                },
                {
                  "Controller": {
                    "Value": 94,
                    "RegisteredName": "CorsairLink.FanFixedPercentController"
                  },
                  "ValidControllerNames": [
                    "CorsairLink.FanDefaultController",
                    "CorsairLink.FanBalancedModeController",
                    "CorsairLink.FanQuiteModeController",
                    "CorsairLink.FanPerformanceModeController",
                    "CorsairLink.FanCustomCurveController",
                    "CorsairLink.FanFixedRPMController",
                    "CorsairLink.FanFixedPercentController"
                  ],
                  "PWM": false,
                  "SensorType": "Fan",
                  "Unit": "RPM",
                  "Name": "Fan 2",
                  "Present": true,
                  "Value": 1248,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0/SensorFan2",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0"
                },
                {
                  "Controller": {
                    "Value": 94,
                    "RegisteredName": "CorsairLink.FanFixedPercentController"
                  },
                  "ValidControllerNames": [
                    "CorsairLink.FanDefaultController",
                    "CorsairLink.FanBalancedModeController",
                    "CorsairLink.FanQuiteModeController",
                    "CorsairLink.FanPerformanceModeController",
                    "CorsairLink.FanCustomCurveController",
                    "CorsairLink.FanFixedRPMController",
                    "CorsairLink.FanFixedPercentController"
                  ],
                  "PWM": false,
                  "SensorType": "Fan",
                  "Unit": "RPM",
                  "Name": "Fan 3",
                  "Present": true,
                  "Value": 882,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0/SensorFan3",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0"
                },
                {
                  "Controller": {
                    "Value": 94,
                    "RegisteredName": "CorsairLink.FanFixedPercentController"
                  },
                  "ValidControllerNames": [
                    "CorsairLink.FanDefaultController",
                    "CorsairLink.FanBalancedModeController",
                    "CorsairLink.FanQuiteModeController",
                    "CorsairLink.FanPerformanceModeController",
                    "CorsairLink.FanCustomCurveController",
                    "CorsairLink.FanFixedRPMController",
                    "CorsairLink.FanFixedPercentController"
                  ],
                  "PWM": false,
                  "SensorType": "Fan",
                  "Unit": "RPM",
                  "Name": "Fan 4",
                  "Present": true,
                  "Value": 860,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0/SensorFan4",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0"
                },
                {
                  "Controller": {
                    "Value": 94,
                    "RegisteredName": "CorsairLink.FanFixedPercentController"
                  },
                  "ValidControllerNames": [
                    "CorsairLink.FanDefaultController",
                    "CorsairLink.FanBalancedModeController",
                    "CorsairLink.FanQuiteModeController",
                    "CorsairLink.FanPerformanceModeController",
                    "CorsairLink.FanCustomCurveController",
                    "CorsairLink.FanFixedRPMController",
                    "CorsairLink.FanFixedPercentController"
                  ],
                  "PWM": false,
                  "SensorType": "Fan",
                  "Unit": "RPM",
                  "Name": "Fan 5",
                  "Present": true,
                  "Value": 831,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0/SensorFan5",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0"
                },
                {
                  "SensorType": "Temperature",
                  "Unit": "DegreeCelsius",
                  "Name": "Temp 0",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0/SensorTemp0",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0"
                },
                {
                  "SensorType": "Temperature",
                  "Unit": "DegreeCelsius",
                  "Name": "Temp 1",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0/SensorTemp1",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0"
                },
                {
                  "SensorType": "Temperature",
                  "Unit": "DegreeCelsius",
                  "Name": "Temp 2",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0/SensorTemp2",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0"
                },
                {
                  "SensorType": "Temperature",
                  "Unit": "DegreeCelsius",
                  "Name": "Temp 3",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0/SensorTemp3",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0"
                },
                {
                  "Controller": {
                    "Value": {
                      "R": 255,
                      "G": 2,
                      "B": 39
                    },
                    "RegisteredName": "CorsairLink.LEDSingleColorController"
                  },
                  "ValidControllerNames": [
                    "CorsairLink.LEDSingleColorController",
                    "CorsairLink.LEDTwoColorController",
                    "CorsairLink.LEDFourColorController",
                    "CorsairLink.LEDTemperatureController"
                  ],
                  "Color": {
                    "R": 255,
                    "G": 2,
                    "B": 39
                  },
                  "SensorType": "LED",
                  "Unit": "Color",
                  "Name": "LED 0",
                  "Present": true,
                  "Value": 2556671,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0/SensorLED0",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel0"
                }
              ]
            },
            {
              "Name": "Corsair PSU AX1200i",
              "Present": true,
              "Valid": true,
              "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1",
              "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_",
              "Children": [
                {
                  "SensorType": "Temperature",
                  "Unit": "DegreeCelsius",
                  "Name": "Temp 0",
                  "Present": true,
                  "Value": 37.5,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/SensorTemp0",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1"
                },
                {
                  "Controller": {
                    "RegisteredName": "CorsairLink.FanDefaultController"
                  },
                  "ValidControllerNames": [
                    "CorsairLink.FanDefaultController",
                    "CorsairLink.FanFixedPercentController"
                  ],
                  "PWM": false,
                  "SensorType": "Fan",
                  "Unit": "RPM",
                  "Name": "Fan 0",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/SensorFan0",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1"
                },
                {
                  "Name": "PSU 5V",
                  "Present": true,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain1",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1",
                  "Children": [
                    {
                      "SensorType": "Current",
                      "Unit": "Ampere",
                      "Name": "Current 0",
                      "Present": true,
                      "Value": 0,
                      "Valid": true,
                      "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain1/SensorCurrent0",
                      "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain1"
                    },
                    {
                      "SensorType": "Power",
                      "Unit": "Watt",
                      "Name": "Power 0",
                      "Present": true,
                      "Value": 0,
                      "Valid": true,
                      "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain1/SensorPower0",
                      "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain1"
                    },
                    {
                      "SensorType": "Voltage",
                      "Unit": "Volt",
                      "Name": "Voltage 0",
                      "Present": true,
                      "Value": 5,
                      "Valid": true,
                      "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain1/SensorVoltage0",
                      "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain1"
                    }
                  ]
                },
                {
                  "Name": "PSU 3.3V",
                  "Present": true,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain2",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1",
                  "Children": [
                    {
                      "SensorType": "Current",
                      "Unit": "Ampere",
                      "Name": "Current 0",
                      "Present": true,
                      "Value": 0,
                      "Valid": true,
                      "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain2/SensorCurrent0",
                      "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain2"
                    },
                    {
                      "SensorType": "Power",
                      "Unit": "Watt",
                      "Name": "Power 0",
                      "Present": true,
                      "Value": 0,
                      "Valid": true,
                      "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain2/SensorPower0",
                      "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain2"
                    },
                    {
                      "SensorType": "Voltage",
                      "Unit": "Volt",
                      "Name": "Voltage 0",
                      "Present": true,
                      "Value": 3.3,
                      "Valid": true,
                      "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain2/SensorVoltage0",
                      "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain2"
                    }
                  ]
                },
                {
                  "Name": "PCIe 1 Current",
                  "SensorType": "Current",
                  "Unit": "Ampere",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/SensorCurrent0",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1"
                },
                {
                  "Name": "PCIe 2 Current",
                  "SensorType": "Current",
                  "Unit": "Ampere",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/SensorCurrent1",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1"
                },
                {
                  "Name": "PCIe 3 Current",
                  "SensorType": "Current",
                  "Unit": "Ampere",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/SensorCurrent2",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1"
                },
                {
                  "Name": "PCIe 4 Current",
                  "SensorType": "Current",
                  "Unit": "Ampere",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/SensorCurrent3",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1"
                },
                {
                  "Name": "PCIe 5 Current",
                  "SensorType": "Current",
                  "Unit": "Ampere",
                  "Present": true,
                  "Value": 7.6,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/SensorCurrent4",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1"
                },
                {
                  "Name": "PCIe 6 Current",
                  "SensorType": "Current",
                  "Unit": "Ampere",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/SensorCurrent5",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1"
                },
                {
                  "Name": "PCIe 7 Current",
                  "SensorType": "Current",
                  "Unit": "Ampere",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/SensorCurrent6",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1"
                },
                {
                  "Name": "PCIe 8 Current",
                  "SensorType": "Current",
                  "Unit": "Ampere",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/SensorCurrent7",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1"
                },
                {
                  "Name": "PSU 12V Current",
                  "SensorType": "Current",
                  "Unit": "Ampere",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/SensorCurrent8",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1"
                },
                {
                  "Name": "PERIPHERAL 12V Current",
                  "SensorType": "Current",
                  "Unit": "Ampere",
                  "Present": true,
                  "Value": 0,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/SensorCurrent9",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1"
                },
                {
                  "Name": "Mains",
                  "Present": true,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain0",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1",
                  "Children": [
                    {
                      "SensorType": "Current",
                      "Unit": "Ampere",
                      "Name": "Current 0",
                      "Present": true,
                      "Value": 0.8,
                      "Valid": true,
                      "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain0/SensorCurrent0",
                      "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain0"
                    },
                    {
                      "SensorType": "Power",
                      "Unit": "Watt",
                      "Name": "Power 0",
                      "Present": true,
                      "Value": 153.33360879160318,
                      "Valid": true,
                      "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain0/SensorPower0",
                      "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain0"
                    },
                    {
                      "SensorType": "Voltage",
                      "Unit": "Volt",
                      "Name": "Voltage 0",
                      "Present": true,
                      "Value": 228,
                      "Valid": true,
                      "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain0/SensorVoltage0",
                      "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain0"
                    },
                    {
                      "SensorType": "Power",
                      "Unit": "Watt",
                      "Name": "Power 0",
                      "Present": true,
                      "Value": 153.33360879160318,
                      "Valid": true,
                      "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain0/SensorPower0",
                      "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain0"
                    },
                    {
                      "SensorType": "Efficiency",
                      "Unit": "Percent",
                      "Name": "Efficiency 0",
                      "Present": true,
                      "Value": 89.56402382687102,
                      "Valid": true,
                      "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain0/SensorEfficiency0",
                      "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel1/PowerMain0"
                    }
                  ]
                }
              ]
            },
            {
              "Name": "Corsair H100i",
              "Present": true,
              "Valid": true,
              "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel2",
              "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_",
              "Children": [
                {
                  "Controller": {
                    "Value": {
                      "Points": [
                        {
                          "X": 25,
                          "Y": 1000
                        },
                        {
                          "X": 60,
                          "Y": 2000
                        },
                        {
                          "X": 60,
                          "Y": 2000
                        },
                        {
                          "X": 60,
                          "Y": 2000
                        },
                        {
                          "X": 60,
                          "Y": 2000
                        }
                      ]
                    },
                    "RegisteredName": "CorsairLink.FanCustomCurveController"
                  },
                  "ValidControllerNames": [
                    "CorsairLink.FanDefaultController",
                    "CorsairLink.FanBalancedModeController",
                    "CorsairLink.FanQuiteModeController",
                    "CorsairLink.FanPerformanceModeController",
                    "CorsairLink.FanCustomCurveController",
                    "CorsairLink.FanFixedRPMController",
                    "CorsairLink.FanFixedPercentController"
                  ],
                  "PWM": true,
                  "SensorType": "Fan",
                  "Unit": "RPM",
                  "Name": "Fan 0",
                  "Present": true,
                  "Value": 1248,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel2/SensorFan0",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel2"
                },
                {
                  "Controller": {
                    "Value": {
                      "Points": [
                        {
                          "X": 25,
                          "Y": 1000
                        },
                        {
                          "X": 60,
                          "Y": 2000
                        },
                        {
                          "X": 60,
                          "Y": 2000
                        },
                        {
                          "X": 60,
                          "Y": 2000
                        },
                        {
                          "X": 60,
                          "Y": 2000
                        }
                      ]
                    },
                    "RegisteredName": "CorsairLink.FanCustomCurveController"
                  },
                  "ValidControllerNames": [
                    "CorsairLink.FanDefaultController",
                    "CorsairLink.FanBalancedModeController",
                    "CorsairLink.FanQuiteModeController",
                    "CorsairLink.FanPerformanceModeController",
                    "CorsairLink.FanCustomCurveController",
                    "CorsairLink.FanFixedRPMController",
                    "CorsairLink.FanFixedPercentController"
                  ],
                  "PWM": true,
                  "SensorType": "Fan",
                  "Unit": "RPM",
                  "Name": "Fan 1",
                  "Present": true,
                  "Value": 1268,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel2/SensorFan1",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel2"
                },
                {
                  "SensorType": "Pump",
                  "Unit": "RPM",
                  "Name": "Pump 4",
                  "Present": true,
                  "Value": 2261,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel2/SensorPump4",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel2"
                },
                {
                  "SensorType": "Temperature",
                  "Unit": "DegreeCelsius",
                  "Name": "Temp 0",
                  "Present": true,
                  "Value": 33.265625,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel2/SensorTemp0",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel2"
                },
                {
                  "Controller": {
                    "Value": {
                      "R": 255,
                      "G": 1,
                      "B": 1
                    },
                    "RegisteredName": "CorsairLink.LEDSingleColorController"
                  },
                  "ValidControllerNames": [
                    "CorsairLink.LEDSingleColorController",
                    "CorsairLink.LEDTwoColorController",
                    "CorsairLink.LEDFourColorController",
                    "CorsairLink.LEDTemperatureController"
                  ],
                  "Color": {
                    "R": 255,
                    "G": 1,
                    "B": 1
                  },
                  "SensorType": "LED",
                  "Unit": "Color",
                  "Name": "LED 0",
                  "Present": true,
                  "Value": 66047,
                  "Valid": true,
                  "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel2/SensorLED0",
                  "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel2"
                }
              ]
            },
            {
              "Name": "Corsair AirFlow Pro",
              "Present": true,
              "Valid": true,
              "AbsolutePath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_/Channel3",
              "ParentPath": "/CorsairLink/____hid_vid_1b1c_pid_0c04_6_34b03405_0_0000__4d1e55b2-f16f-11cf-88cb-001111000030_"
            }
          ]
        }
      ]
    }
  ]
}
Reply With Quote


  #60  
Old 09-21-2014, 07:33 AM
red-ray red-ray is offline
Banned
red-ray's PC Specs
 
Join Date: May 2014
Location: England (GMT+1)
Posts: 7,152
POST ID # = 728998
red-ray Reputation: 81
Arrow Global\CorsairLinkReadWriteGuardMutex

I feel we should define and use a mutex to interlock access to the Corsair Link hardware so all our programs can be run at the same time. We should also request that Corsair Link use it.
In SIV (http://rh-software.com/) I have already implemented this and the mutex is called Access_CorsairLink and it is in the global namespace (Global\Access_CorsairLink).


From CL 4.2.4.25 Global\CorsairLinkReadWriteGuardMutex should be used to interlock access, see http://forum.corsair.com/forums/showthread.php?p=896054 for the history of locking.

Last edited by red-ray; 07-29-2017 at 01:25 PM. Reason: Global\CorsairLinkReadWriteGuardMutex
Reply With Quote


Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 09:52 PM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, vBulletin Solutions, Inc.