![]()
Adjust fan offset curve for Clevo P650RE notebooks (other notebooks to be added)
ECFan on Github
Some of you may remember this post I made a while back showing how to manually change the fan speed offset on the P650RE. I finally got round to building a user interface for it, and while it's still rough at this point, it should serve its purpose.
Currently the default fan curve maxes out at 3600RPM, which is far below the actual fan max of ~4800RPM, and the laptop thermal throttles at 79C (in Discrete mode). Even with a modest 25% offset, the fan can reach 4500RPM which is fast enough to never reach the throttle point.
You will need RWEverything for this to work, so go ahead and download that first. Make sure you understand the potential risks with modifying the EC like this, so I'd recommend reading the post linked above first just to be safe. You'll also need .NET Framework 4.6.2 (comes with Windows 10, but can be downloaded for older OSes)
![]()
If you open the program and it looks like the above, then most likely everything matches up correctly and you can adjust it safely. However I'd still recommend reading this thread to see how you can manually check that the correct region is being updated first. Even though the laptop has 2 GPU fans only one will show up since they're supposed to operate synchronously.
These are the features that I'd like to add:
- Saving and loading of custom profiles
- Detection of running games to activate a fan offset while gaming, then reset it afterwards to return to quiet speeds.
- Optionally add to Start Menu
- Potentially support more laptops - however I'll need people who are willing to do some (safe) testing on their laptops so I can get the numbers I need to add them to the program. Let me know if you want to help and I can step you through what's needed
- if you feel adventurous you can just edit the P650RE values in the settings.xml file yourself. The most important one is the Fan Offset location (0xE7 by default) which is the only point that gets written to, while the others are for calculations and readings.
-
The user unterface looks absolutely nice, good job!
I want to ask tho, how do yuou communicaate with the EC? Do you use the same as rhe ECviewer?
EDIT: nvm, this is quite niceLast edited by a moderator: Oct 12, 2018 -
The EC communication is done through the RWEverything commandline, which is why you need to download that first. Ideally I want to be able to do it directly, but I'm erring on the side of caution for now. I haven't heard of ECViewer before, I'll look into it tomorrow morningI'd probably use OpenHardwareMonitor though, since I'm a bit more familiar with it already.
-
-
Would you be able to link me to the Obsidian fan control software? If one already works well then it makes this one a bit redundant. Still, using the DLL directly seems like a great idea, thanks for that.
Edit: Never mind, found the tool in @John@OBSIDIAN-PC 's signatureLast edited: Oct 12, 2018jclausius likes this. -
-
Which reminds me, I need to stick an MIT license on it.
-
@Danishblunt I had to go with a GPLv3 license instead of MIT because that's what NVAPI Wrapper uses, but it shouldn't change much
-
John@OBSIDIAN-PC Company Representative
CLEVOMOF does allow to send a manual fan value, for every fan... but.... it sucks... it uses ACPI stack, so it´s not the way to go, if you keep sending values at a X rate you are always adding DPC to the system... that´s why we are now getting rid of it...
I think moving forward we should implement a solution that does write to EC without going through the ACPI, that´s what we are testing at the moment.sm2596 likes this. -
I thought that you could use it to write the EC which would be persistent (pepper the system with calls once, but after that the fan curves are stored in the EC), but from what you're saying it's always peppering the system to refresh the fan speed?
That sounds like such a dodgy system, wow. -
John@OBSIDIAN-PC Company Representative
In those methods you have all sorts of functions (either to send or receive).
One of those functions is to set a "Manual / Fixed" fan value, but there are also functions like:
- WritetH2RAM (which i have no idea what it does).
- SystemControlFunction (which can be used from all sorts of stuff, from changing Power Modes to change MSHYBRID/DISCRETE)
- GetECData (no idea)
- GetECLiveInfo (no idea)
etc...
Some of the functions there are useful for one time click stuff, but NONE should be used for periodic data transfer (ex: getting values or sending values at each 500ms), that will cause DPC lag. Basically CLEVO own method (same that CONTROL CENTER uses) kinda sucks...
CLEVO probably uses it because it uses the ACPI stack which is probably a more "secure" way, and the way MS wants it to be done. Anything reading and writing to an EC should probably be blocked and there is probably no way you can sign a driver that does that (not sure?).
In a ideal world you would have a driver that communicates directly with EC and you would have this documented API to be able to use it in all sorts of software. That´s what i would like to do... but i´m afraid that´s probably too much for me.
My current work is something more in the line of a service wrapper, that like your method, talks directly to EC, my wrapper will accept and transmit data either by shared memory or TCP. It´s not hard to do, BUT i do need all the relevant EC addresses, i need to think security and i need to assure some level of checks for model compatibility.
P650RE Fan Offset Mod
Discussion in 'Sager and Clevo' started by sm2596, Oct 12, 2018.