The Notebook Review forums were hosted by TechTarget, who shut down them down on January 31, 2022. This static read-only archive was pulled by NBR forum users between January 20 and January 31, 2022, in an effort to make sure that the valuable technical information that had been posted on the forums is preserved. For current discussions, many NBR forum users moved over to NotebookTalk.net after the shutdown.
Problems? See this thread at archive.org.

    P650RE Fan Offset Mod

    Discussion in 'Sager and Clevo' started by sm2596, Oct 12, 2018.

  1. sm2596

    sm2596 Notebook Guru

    Reputations:
    4
    Messages:
    57
    Likes Received:
    25
    Trophy Points:
    26
    [​IMG]

    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)

    [​IMG]

    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.
     
    Danishblunt and jclausius like this.
  2. Danishblunt

    Danishblunt Guest

    Reputations:
    0
    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 nice :)
     
    Last edited by a moderator: Oct 12, 2018
  3. sm2596

    sm2596 Notebook Guru

    Reputations:
    4
    Messages:
    57
    Likes Received:
    25
    Trophy Points:
    26
    Thanks :)
    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 morning :) I'd probably use OpenHardwareMonitor though, since I'm a bit more familiar with it already.
     
  4. Danishblunt

    Danishblunt Guest

    Reputations:
    0
    Don't, EC viewer loses control. You can use the DLL provided inm the control center tho, Obsedian made a fan control software out of that DLL and it works reliably.
     
  5. sm2596

    sm2596 Notebook Guru

    Reputations:
    4
    Messages:
    57
    Likes Received:
    25
    Trophy Points:
    26
    yup looks like I want to stay well away from that one. Those WMI hooks that Control Centre adds look interesting, but I'm trying to avoid using CCC as it gives me issues every now and then.
    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 signature
     
    Last edited: Oct 12, 2018
    jclausius likes this.
  6. Danishblunt

    Danishblunt Guest

    Reputations:
    0
    Well yours is open source, so I guess it could still be useful for people who want freebees :)
     
  7. sm2596

    sm2596 Notebook Guru

    Reputations:
    4
    Messages:
    57
    Likes Received:
    25
    Trophy Points:
    26
    Good point :) Which reminds me, I need to stick an MIT license on it.
     
  8. sm2596

    sm2596 Notebook Guru

    Reputations:
    4
    Messages:
    57
    Likes Received:
    25
    Trophy Points:
    26
    @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
     
  9. John@OBSIDIAN-PC

    John@OBSIDIAN-PC Company Representative

    Reputations:
    754
    Messages:
    2,265
    Likes Received:
    2,862
    Trophy Points:
    181
    Nevermind using the CLEVOMOF.dll, unless you use it to write to EC memory (not even sure if that function is included there).
    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.
  10. sm2596

    sm2596 Notebook Guru

    Reputations:
    4
    Messages:
    57
    Likes Received:
    25
    Trophy Points:
    26
    If I understand you correctly, CLEVOMOF.dll doesn't permanently write to the EC, but rather keeps pushing new values to it at live intervals.
    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.
     
  11. John@OBSIDIAN-PC

    John@OBSIDIAN-PC Company Representative

    Reputations:
    754
    Messages:
    2,265
    Likes Received:
    2,862
    Trophy Points:
    181
    Yeah MOF is just a collection of WMI methods.
    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.