Thatualle1970 Posted May 14, 2014 Share Posted May 14, 2014 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... :biggrin: Barry Wow. Great job. Link to comment Share on other sites More sharing options...
PJSingh5000 Posted May 17, 2014 Share Posted May 17, 2014 Barry, thanks for your effort/contribution. I'll try out your code over the next few days. Link to comment Share on other sites More sharing options...
neslekkim Posted August 28, 2014 Share Posted August 28, 2014 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? Link to comment Share on other sites More sharing options...
Doridian Posted September 14, 2014 Share Posted September 14, 2014 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. Link to comment Share on other sites More sharing options...
Doridian Posted September 15, 2014 Share Posted September 15, 2014 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. Link to comment Share on other sites More sharing options...
Doridian Posted September 15, 2014 Share Posted September 15, 2014 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). Link to comment Share on other sites More sharing options...
WizzyThing Posted September 15, 2014 Share Posted September 15, 2014 You also missed the fact that the AFP LINK interface is completely broken. Link to comment Share on other sites More sharing options...
WizzyThing Posted September 17, 2014 Share Posted September 17, 2014 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. Link to comment Share on other sites More sharing options...
WizzyThing Posted September 20, 2014 Share Posted September 20, 2014 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: { "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_" } ] } ] } ] } Link to comment Share on other sites More sharing options...
red-ray Posted September 21, 2014 Share Posted September 21, 2014 (edited) 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. Edited July 29, 2017 by red-ray Global\CorsairLinkReadWriteGuardMutex 1 Link to comment Share on other sites More sharing options...
Doridian Posted September 21, 2014 Share Posted September 21, 2014 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 is in the global namespace (GLOBAL\Access_CorsairLink). I also added this Mutex to my app already. Link to comment Share on other sites More sharing options...
brandtryan Posted September 21, 2014 Share Posted September 21, 2014 I'm very grateful for this shining example of community developers. Well done indeed. Thanks to all for the effort! Link to comment Share on other sites More sharing options...
Doridian Posted September 21, 2014 Share Posted September 21, 2014 I'm very grateful for this shining example of community developers. Well done indeed. Thanks to all for the effort! I just wish I could convince someone at Corsair to hand me the firmware source code so I can fix the bugs in there as well, because disassembling it is hard and I am not too experienced in reverse-engineering firmware. Link to comment Share on other sites More sharing options...
brandtryan Posted September 21, 2014 Share Posted September 21, 2014 I just wish I could convince someone at Corsair to hand me the firmware source code so I can fix the bugs in there as well, because disassembling it is hard and I am not too experienced in reverse-engineering firmware. Well, maybe there's a chance of that happening, seeing as there's no competition for this particular product (not that I'm aware of, correct me if I'm wrong). Better yet, why don't they just send it to you, have you fix it, and then pay you for your time :) 1 Link to comment Share on other sites More sharing options...
brandtryan Posted September 21, 2014 Share Posted September 21, 2014 Also -- to any of the developers -- I'm also a software-tester by trade, and if there's anything I can do -- documentation, testing, whatever -- please let me know. Link to comment Share on other sites More sharing options...
directhex Posted September 21, 2014 Share Posted September 21, 2014 Thanks, this seems to work well. I hope that someone converts this into a kernel module. I'm taking a preliminary look at it (I don't plan on building the PC which will have the Corsair Link components in it for another month, though). It'd be great to cooperate with the existing guys on here who've hacked stuff together, of course. Link to comment Share on other sites More sharing options...
directhex Posted September 21, 2014 Share Posted September 21, 2014 @red-ray what're the chances of switching from HidLibrary (which is heavily Windows-based) to http://www.signal11.us/oss/hidapi/ (which is cross-platform)? The driver and CLI build fine on linux, but obviously don't run due to the hid.dll P/Invokes in HidLibrary Link to comment Share on other sites More sharing options...
Doridian Posted September 21, 2014 Share Posted September 21, 2014 @red-ray what're the chances of switching from HidLibrary (which is heavily Windows-based) to http://www.signal11.us/oss/hidapi/ (which is cross-platform)? The driver and CLI build fine on linux, but obviously don't run due to the hid.dll P/Invokes in HidLibrary red-ray is the maker of SIV. Not CL++. That would be me. I will try swapping to a more cross-platform library if I can get it wrapped up nicely in a .NET DLL. If you know of any existing wrappers, go ahead and poke me with them! Link to comment Share on other sites More sharing options...
Doridian Posted September 21, 2014 Share Posted September 21, 2014 Good news everyone: I have swapped CorsairLink++ over to the cross-platform HidSharp library! (It is also faster than HidLibrary) Link to comment Share on other sites More sharing options...
directhex Posted September 21, 2014 Share Posted September 21, 2014 red-ray is the maker of SIV. Not CL++. That would be me. Sorry, it's hard keeping track on a phone screen. Link to comment Share on other sites More sharing options...
directhex Posted September 21, 2014 Share Posted September 21, 2014 Good news everyone: I have swapped CorsairLink++ over to the cross-platform HidSharp library! (It is also faster than HidLibrary) I've reported one obvious problem in HidSharp to the library's author. It'd be nice if it was just on GitHub or something, but never mind. I should be able to take a closer look once my kit actually arrives. Link to comment Share on other sites More sharing options...
red-ray Posted September 25, 2014 Share Posted September 25, 2014 (edited) I have now managed to get the Corsair Link Lighting Node to work? SIV can set the LEDs on my H100i, CLCC and Lighting Node. Please let me know how it does on any others. Edited October 15, 2014 by red-ray Link to comment Share on other sites More sharing options...
Doridian Posted September 25, 2014 Share Posted September 25, 2014 Has anyone managed to get the Corsair Link Lighting Node to work? I can controll the LEDs in the H100i and CLCC with no issues, but the Lighting Node will not work with the V1.1.09 firmware. It's also reporting three LEDs when there are only two connectors. Typically it's reporting Blue rather than the actual LED colours and writing to it changes nothing. http://rh-software.com/siv_led.png I tried using Corsair Link and it did not even find the Lighting Node. I am looking more and more through Corsair's nightmare of a software. Well, the Lighting Node has it's entirely own protocol it seems. Sadly I don't own one so I can't test too much :( Link to comment Share on other sites More sharing options...
red-ray Posted September 25, 2014 Share Posted September 25, 2014 I have thus far found the following registers, // Device ID 0x39 Lighting Node Registers by deduction #define CNR_BUTTON_1 0x04 // R 1 byte Button 1 State // Range 1 -> 7 #define CNR_BUTTON_2 0x05 // R 1 byte Button 2 State // #define CNR_LIGHTS_1 0x20 // RW 3 bytes Lights 1 RGB // Changed by buttons #define CNR_LIGHTS_1_R 0x20 // RW 1 byte Lights 1 R // and writable. #define CNR_LIGHTS_1_G 0x21 // RW 1 byte Lights 1 G // When written button #define CNR_LIGHTS_1_B 0x22 // RW 1 byte Lights 1 B // goes to zero. #define CNR_LIGHTS_2 0x40 // RW 3 bytes Lights 2 RGB // #define CNR_LIGHTS_2_R 0x40 // RW 1 byte Lights 2 R // #define CNR_LIGHTS_2_G 0x41 // RW 1 byte Lights 2 G // #define CNR_LIGHTS_2_B 0x42 // RW 1 byte Lights 2 B // Link to comment Share on other sites More sharing options...
WizzyThing Posted October 2, 2014 Share Posted October 2, 2014 This is pretty much our version of an alpha: There are a lot of features missing but the core is done. Link to comment Share on other sites More sharing options...
Recommended Posts