EvanMulawski / FanControl.CorsairLink

The unofficial CorsairLink plugin for Fan Control. Adds support for Corsair controllers, liquid coolers, and power supplies. An alternative to iCUE.
149 stars 11 forks source link

iCUE LINK XD5 Support #181

Open EvanMulawski opened 3 months ago

EvanMulawski commented 3 months ago

Discussed in https://github.com/EvanMulawski/FanControl.CorsairLink/discussions/180

Originally posted by **frostb1t** July 10, 2024 Hey, Firstly I want to thank you for an awesome repo. I've been using this for a little bit to control my fan speed based on my XC7 waterblock temps. However, it'd be awesome if I could instead control them based on the coolant temperature that my Corsair XD5 pump reads instead. From the looks of things, this isn't currently supported. I'm just wondering if this is something that is possible in the future? Thanks again!
EvanMulawski commented 3 months ago

Hi @frostb1t, is your XD5 the Hydro X variant or the iCUE LINK variant? Would you be able to provide a USB packet capture?

frostb1t commented 3 months ago

Hey @EvanMulawski

Thank you for the response! It's the ICUE LINK variant - the iCUE LINK XD5 RGB Elite LCD in Stealth Grey - to be specific.

Here is a link to download the packet capture. It expires in 24hrs so please let me know if you'd like to reupload it (or if I've failed to capture the data correctly!): https://wormhole.app/e5qmX#6bz8TmJ-raxx1gWLdhbXDw

I started iCue (making sure all the processes were previously closed), and changed the pump speed a few times (first to 100%, then to 56%, then a few other random speeds).

Thank you for the response

EvanMulawski commented 3 months ago

Thanks, @frostb1t - I can see the data passing through the iCUE LINK hub. Can you also list the devices you have connected to the hub and how they are connected/chained?

frostb1t commented 3 months ago

No problem @EvanMulawski - I also have an iCUE LINK XC7 RGB Elite CPU Water block connected to the ICUE LINK hub, but that's it.

If it helps, I have some Corsair Dominator RAM plugged in too, but since that doesn't go through the iCUE LINK hub, I assume that's not an issue. I also have a Corsair XG7 GPU Waterblock, but this is the NON iCUE LINK, Hydro X model for the 30-series. That's plugged directly into the mobo and doesn't connect to the iCUE LINK hub. Just thought I'd mention it in case those two components also show in the iCue data somehow.

EvanMulawski commented 3 months ago

@frostb1t Build attached. Let me know if the XD5 shows up and you can see and control the pump speed. If it's not working, attach the CorsairLink.log file(s) (located in the Fan Control directory) to your reply.

FanControl.CorsairLink-1.7.0-beta.2.zip

frostb1t commented 3 months ago

Hey @EvanMulawski,

Thanks for this, especially the quick turnaround.

Unfortunately that build hasn't worked. Please note that the info in the attached log is near the bottom (i.e. in the past ~20 mins at the time of me making this post)

Log: CorsairLink.log

I presume the relevant issue is this:

2024-07-12T21:58:36.3489751Z [ERR] Device Initialization: Type: System.TypeInitializationException Message: The type initializer for 'CorsairLink.Synchronization.CorsairDevicesGuard' threw an exception. Source: FanControl.CorsairLink.merged HResult: -2146233036 Stack Trace: at CorsairLink.Synchronization.CorsairDevicesGuard.Acquire() at CorsairLink.Synchronization.CorsairDevicesGuardLock..ctor() at CorsairLink.Synchronization.CorsairDevicesGuardManager.AwaitExclusiveAccess() at CorsairLink.Devices.ICueLink.ICueLinkHubDevice.TryChangeDeviceMode() at CorsairLink.Devices.ICueLink.ICueLinkHubDevice.Initialize() at CorsairLink.Devices.ICueLink.ICueLinkHubDevice.Connect() at FanControl.CorsairLink.CorsairLinkPlugin.FanControl.Plugins.IPlugin.Initialize() Inner Exception: Type: System.MissingMethodException Message: Method not found: 'Void System.Threading.Mutex.SetAccessControl(System.Security.AccessControl.MutexSecurity)'. Source: FanControl.CorsairLink.merged HResult: -2146233069 Stack Trace: at CorsairLink.Synchronization.CorsairDevicesGuard.CreateMutex() at CorsairLink.Synchronization.CorsairDevicesGuard..cctor()

EvanMulawski commented 3 months ago

@frostb1t Please try the one in the net8.0 directory - it needs to match your Fan Control build.

frostb1t commented 3 months ago

@EvanMulawski - Apologies, FanControl seemed to automatically pick the wrong dll version when importing the zip. Manually placing the correct DLL in the plugins folder worked.

The XD5 coolant temp sensor is being read correctly now. I can control my fan curves from the coolant temperature now which is awesome!

The one thing I ought to let you know is that I think I have found an issue in regards to controlling the pumps RPM. When build a curve for the pump I can set the pumps RPM from 0% to 100%. The maximum sets the pump to ~4800 RPM (which is right), but the lowest RPM the pump will go to is about ~2500. I'm certain I've been able to set it much lower via iCUE.

Other than that it looks good though!

EvanMulawski commented 3 months ago

@frostb1t Note the following from the Readme (the home page of this repository):

The minimum pump power is 50% (regardless of the requested power in Fan Control). As a result, Fan Control's automatic control-sensor pairing may fail for these devices and the sensor must be paired manually. As of v1.6.0, the default minimum pump power is 50% but users may override this by setting the FANCONTROL_CORSAIRLINK_MIN_PUMP_DUTY environment variable to the desired minimum pump power.

Additional instructions regarding environment variables are also in the Readme. That should allow you to set the pump speed lower than 2500rpm.

frostb1t commented 3 months ago

Thanks @EvanMulawski , I didn't notice that. Sorry.

I can confirm everything is looking good so far then!