From 78696c9c5221f1644282aaa749968dea4430e5b6 Mon Sep 17 00:00:00 2001 From: T-Troll Date: Wed, 11 May 2022 13:40:59 +0700 Subject: [PATCH] Overboost in GUI, modified overboost logic. --- Doc/alienfan-gui.md | 10 +- Doc/alienfx-gui.md | 12 +- Doc/img/alienfan.png | Bin 38223 -> 38223 bytes Doc/img/gui-fans.png | Bin 40471 -> 40806 bytes Install/Install.vdproj | 110 +++---- alienfan-tools/alienfan-SDK/alienfan-SDK.cpp | 5 +- alienfan-tools/alienfan-SDK/alienfan-SDK.h | 2 +- .../alienfan-SDK/alienfan-controls.h | 12 +- alienfan-tools/alienfan-cli/alienfan-cli.cpp | 99 +++--- alienfan-tools/alienfan-curve/FanCurve.cpp | 287 +++++++++++++----- alienfan-tools/alienfan-gui/alienfan-gui.cpp | 67 ++-- alienfan-tools/alienfan-gui/alienfan-gui.rc | Bin 13912 -> 14018 bytes alienfan-tools/alienfan-gui/resource.h | 1 + alienfan-tools/alienfan-shared/ConfigFan.cpp | 2 + alienfan-tools/alienfan-shared/ConfigFan.h | 1 + alienfan-tools/alienfan-shared/common.h | 12 + alienfx-gui/FanDialog.cpp | 79 ++--- alienfx-gui/SettingsDialog.cpp | 15 +- alienfx-gui/alienfx-gui.cpp | 1 - alienfx-gui/alienfx-gui.rc | Bin 66010 -> 66116 bytes alienfx-gui/resource.h | 5 +- alienfx-mon/alienfx-mon.cpp | 11 +- alienfx-mon/alienfx-mon.rc | Bin 15220 -> 15220 bytes 23 files changed, 442 insertions(+), 289 deletions(-) diff --git a/Doc/alienfan-gui.md b/Doc/alienfan-gui.md index 43bb5ec1..b91a2313 100644 --- a/Doc/alienfan-gui.md +++ b/Doc/alienfan-gui.md @@ -23,14 +23,20 @@ Selected fan curve presented in green color, rest of the fans attached to the sa Now play with fan control curve - it defines fan boost by temperature level. X axle is temperature, Y axle is boost level. You can left click (and drag until mouse button release) into the curve window to add point or select close point (if any) and move it. You can click right mouse button at the graph point to remove it. -Big red dot represent current boost and temperature position. +Big red dot represent current boost and temperature position, yellow dots present current temperatures for other sensors involved into control of this fan. Please keep in mind: - You can't remove first or last point of the curve. - If you move first or last point, it will keep it's temperature after button release - but you can set other boost level for it. - Then fan controlled by more, then one sensor, boost will be set to the maximal value across them. -"Reset" button reset currently selected fan curve to default one (0-100 boost). +"X" button above sensors list reset maximal temperature sensors value to current one. +"X" button above fans list reset currently selected fan curve to default one (0-100 boost). + +"Overboost" button will check possibility of currently selected fan to increase RPM even more, then 100% boost. +It will switch curve window to other mode - showing currently tested boost level and resulting RPM. +This process can take some minutes, window with final results will be shown after the process ends, and they be used lately for this fan. +You can press "Stop Overboost" button at any time to stop overboost check. You can minimize application to tray pressing Minimize button (or the top one), left click on try icon restore application back, right click will close application. There are two settings into application top menu under "Settings": diff --git a/Doc/alienfx-gui.md b/Doc/alienfx-gui.md index a1615dd9..f9ca5362 100644 --- a/Doc/alienfx-gui.md +++ b/Doc/alienfx-gui.md @@ -187,12 +187,20 @@ After you doing so, currently selected fan settings will be shown at "Fan Curve" Now play with fan control curve - it defines fan boost by temperature level. X axle is temperature, Y axle is boost level. You can left click (and drag until release mouse button) into the curve window to add point or select close point (if any) and move it. You can click right mouse button at the graph point to remove it. -Big red dot represents current boost-in-action position. +Big red dot represent current boost and temperature position, yellow dots present current temperatures for other sensors involved into control of this fan. Please keep in mind: - You can't remove first or last point of the curve. - If you move first or last point, it will keep its temperature after button release - but you can set other boost level for it. -- Then fan controlled by more, then one sensor, boost will be set to the maximal value across them. +- Then fan controlled by more, then one sensor, boost will be set to the maximal value across them. + +"X" button above sensors list reset maximal temperature sensors value to current one. +"X" button above fans list reset currently selected fan curve to default one (0-100 boost). + +"Overboost" button will check possibility of currently selected fan to increase RPM even more, then 100% boost. +It will switch curve window to other mode - showing currently tested boost level and resulting RPM. +This process can take some minutes, window with final results will be shown after the process ends, and they be used lately for this fan. +You can press "Stop Overboost" button at any time to stop overboost check. ![Settings tab](/Doc/img/gui-settings.png?raw=true) diff --git a/Doc/img/alienfan.png b/Doc/img/alienfan.png index 416f12423dad23d82c802b4afb3238d1dc93aa59..8652fb1097eecf821119638d437ae2d7594753aa 100644 GIT binary patch literal 38223 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

hHqTbO}9i)2<>0l_g8M4sFbJ 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 diff --git a/Doc/img/gui-fans.png b/Doc/img/gui-fans.png index bdb5b8d3d6aed093b3f98435e72e8849a0c46491..cd3410a83981c1e90e197c53eca4f7a307a24d06 100644 GIT binary patch literal 40806 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�> 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 z zpv3FjX`Kl6Ro43bi6`5GDxQdH<|+4vGI}*Q`Qf&v&Hawy>51@93H;cv7` zCs20MK>qTW-2nD?O%W+J^SIL?KR;WgQxPENig<{YphG3{AyE3z*kR{DAV)w;(5Zbk znO#7O=&N2qYV1Njz5`iaKKM3kR4M(7k;7$+)`r+?a46OqH_|&;OngUjZPyqowzuu`@I&|@V+>oo>8;Zk zyiEE&w}A-bATdn=5GV2`opYjh?M097`WBt8Oxzj7+}GO$gkZf26H9Z+s;MfAfOJ4g zi7tLP^Tr`c&d1jE>40O8DKtO$q%}6X$0+v%hEKe#S)?G^uDqL=7hd454PioF{XU(V zP1NHDd(Krb+_Cly8Y=X5(t>z@F6TGVU&}nUIBr#b+MO9!8`X4bP!Ov;{iJ~yUG4HS z<5c;xaNCb}w51w}E{AaR$#Uzubc5*@nne8!r5NnKW6M%oUkDYswg39zr0|Q z^531wKmPfhw5u%$LH4Ul7Co7i{Y~sO1u-4$HQ5(9l78)!G=9IYjgM1-nvWkC0YLtE zKyd1}olN8(|6hGXJW|$DDtTZQ2uhkW6J$?w zvfx&l8oS@B38n|6xVw8zhEg&XVO0SY?kwjTRYwX*iWQpK;LG-NqSDxErV4sVQcGZYGW8q@@5dV=pC?@lAe`SnD)o`P_A0v z<|#JL5yzpO1z}bxbRrcMRVb%#6Oc0<$So!ki0NG8Z$0#1meH?;7iXa-+9sM*mP)i& zB4Pz=poi`G!O0Klq_yrIY9#Z%-k``j=a_iaA{=|AujFV0k>63i`L>z^ksoqfzKfP@ zFqc!5wIPFFCA`fp)jMu_uYui0D$Zqu9=ZRCNP8b##k^bhfb~=)CvUmGGlBWCrU5a~ z=tt96LS^VZ96a{gV1dy$pDIN1*alQkAkB3}XeyI!g*^mjJN5Zfs@bAXpxYz%NCxlJ zUOVI4vm7I7-C?mBor4jZ-7j7=I9b>+qsb5ZM*u66=GV5CIg_^m3-yeJuPl{6sFKzMz@tg3Dez;TiLe94fu~^o(zL>(VlEhlPB1`B)enA}lWm(x=0xxq~mk zdIScC$9RQ9Fi7oW$-z#qH<9QB z8Un#1=ysIytG=$`6N~y$$&uw4(^lVJVtuVufe#ioexDK&vyDEo<5|S3$d!uGl^5v| z_=)?%eJkN1H)#r_uTGc5@y%tMi+$hz6qvTB##j7G8k>o?>nsm|8gLlwJEUhk@>!O0 z36-|}9Gere*sCZOwMHXX@;$C(=Yu z9YYP>;sxV8e%nQ{mqBdO1lv)X%=Tkd4_);P!lehc2kG&JD?eU% z<*$XqX#cvB20kr8JD=t3(i0{FB2{l;ufWd>ZtZy1G#!k5w;v@XMCTk)OiXrY$UZ?j zjV#vQk}X;sO0J3wb~#=+PTBP}33Dt?O^z20`tf_@X#e*_=q$QToI}1Gd3jAO(k*QluV*Cn&=GYgXjuk*-BnE-pDfx} z{lH#%#4fP)WnM|z6jrMKsBuSd$&>kpJ0H-1`(X$Ee)4tZ|Ki zec!~6-#!~>4I<>5L9EEk0$xmi_^l}A=1%O*y$I_KEH*nHB9y!PF}{59%v$PI!zC=9 z@v*t#-1{~cGs^J#cx=7{3!7qOfv%aRaaJ@nTd%|GTz)n_;SGX${`w1?O%@a?MSfvG)D#SVA?5pj@V%yJOa|8e+B>auq%~ku zsfJJ3ih){%8Vq=aT!|aMVW_~u5`22C 0 || funcID > 0x130) { // bugfix for 0x132 fan for R7 fans.push_back(funcID & 0xff); + boosts.push_back(100); fIndex++; } //printf("%d fans detected, last reply %d\n", fIndex, funcID); @@ -253,8 +254,8 @@ namespace AlienFan_SDK { } //printf("%d TZ sensors detected.\n", HowManySensors()); // Set boost block - for (int i = 0; i < fans.size(); i++) - boosts.push_back(devs[aDev].maxBoost); + //for (int i = 0; i < fans.size(); i++) + // boosts.push_back(devs[aDev].maxBoost); return true; } } diff --git a/alienfan-tools/alienfan-SDK/alienfan-SDK.h b/alienfan-tools/alienfan-SDK/alienfan-SDK.h index eda51c3a..a1ccdb97 100644 --- a/alienfan-tools/alienfan-SDK/alienfan-SDK.h +++ b/alienfan-tools/alienfan-SDK/alienfan-SDK.h @@ -25,7 +25,7 @@ namespace AlienFan_SDK { struct ALIENFAN_DEVICE { string mainCommand; string gpuCommand; - byte maxBoost; + //byte maxBoost; bool commandControlled; short controlID; ALIENFAN_COMMAND probe; diff --git a/alienfan-tools/alienfan-SDK/alienfan-controls.h b/alienfan-tools/alienfan-SDK/alienfan-controls.h index 29f0b2f9..ce5ccaee 100644 --- a/alienfan-tools/alienfan-SDK/alienfan-controls.h +++ b/alienfan-tools/alienfan-SDK/alienfan-controls.h @@ -58,7 +58,7 @@ namespace AlienFan_SDK { { // Alienware m15/m17 "\\_SB.AMW1.WMAX", // main command "\\_SB.PCI0.PEG0.PEGP.GPS", // GPU command - 105, // max. boost + //105, // max. boost true, // command controlled 0, // controlID 0x14, 2, // Probe command @@ -66,7 +66,7 @@ namespace AlienFan_SDK { { // Dell G15 "\\_SB.AMW3.WMAX", // main command "\\_SB.PCI0.GPP0.PEGP.GPS", // GPU command - 150, // Max. boost + //150, // Max. boost true, // command controlled 0, // controlID 0x14, 2, // Probe command @@ -74,7 +74,7 @@ namespace AlienFan_SDK { { // Dell G5 SE "\\_SB.AMWW.WMAX", // main command "\\_SB.PC00.PEG1.PEGP.GPS", // GPU command - 100, // Max. boost + //100, // Max. boost true, // command controlled 0, // controlID 0x14, 2, // Probe command @@ -82,7 +82,7 @@ namespace AlienFan_SDK { { // Aurora R7 "\\_SB.AMW1.WMAX", // main command "\\_SB.PCI0.PEG0.PEGP.GPS", // GPU command - 100, // Max. boost + //100, // Max. boost true, // command controlled 1, // controlID 0x10, 2, // Probe command @@ -90,7 +90,7 @@ namespace AlienFan_SDK { { // Area 51R4 "\\_SB.WMI2.WMAX", // main command "\\_SB.PCI0.PEG0.PEGP.GPS", // GPU command - 100, // Max. boost + //100, // Max. boost true, // command controlled 1, // controlID 0x10, 2, // Probe command @@ -98,7 +98,7 @@ namespace AlienFan_SDK { { // Alienware 13R2, 15R2 "\\_SB.AMW0.WMBC", // main command "\\_SB.PCI0.PEG0.PEGP.GPS", // GPU command - 99, // Max. boost + //99, // Max. boost false, // command controlled 0, // controlID 0x14, 5, // Probe command diff --git a/alienfan-tools/alienfan-cli/alienfan-cli.cpp b/alienfan-tools/alienfan-cli/alienfan-cli.cpp index d80b39f1..db04749a 100644 --- a/alienfan-tools/alienfan-cli/alienfan-cli.cpp +++ b/alienfan-tools/alienfan-cli/alienfan-cli.cpp @@ -25,82 +25,83 @@ bool CheckArgs(string cName, int minArgs, size_t nargs) { return true; } -int SetFanSteady(short num, byte boost, int &gMaxRPM, bool downtrend = false) { - printf("Probing Fan#%d at boost %d: ", num, boost); - //acpi->SetFanValue(num, 0, true); - //Sleep(2000); - acpi->SetFanValue(num, boost, true); +fan_overboost bestBoostPoint, lastBoostPoint; + +int SetFanSteady(byte boost, bool downtrend = false) { + printf("Probing Fan#%d at boost %d: ", bestBoostPoint.fanID, boost); + acpi->SetFanValue(bestBoostPoint.fanID, boost, true); // Check the trend... - int fRpm, fDelta = -1, oDelta, bRpm = acpi->GetFanRPM(num); + int fRpm, fDelta = -1, oDelta, bRpm = acpi->GetFanRPM(bestBoostPoint.fanID); + lastBoostPoint = { (byte)bestBoostPoint.fanID, boost, (USHORT)bRpm }; Sleep(5000); do { oDelta = fDelta; Sleep(5000); - fRpm = acpi->GetFanRPM(num); + fRpm = acpi->GetFanRPM(bestBoostPoint.fanID); fDelta = fRpm - bRpm; - printf("\rProbing Fan#%d at boost %d: %d-%d (%+d) ", num, boost, bRpm, fRpm, fDelta); - gMaxRPM = max(gMaxRPM, max(bRpm, bRpm)); - //printf("-%d (%+d) ", fRpm, fDelta); + printf("\rProbing Fan#%d at boost %d: %d-%d (%+d) ", bestBoostPoint.fanID, boost, bRpm, fRpm, fDelta); + lastBoostPoint.maxRPM = max(bRpm, fRpm); + bestBoostPoint.maxRPM = max(bestBoostPoint.maxRPM, lastBoostPoint.maxRPM); bRpm = fRpm; } while ((fDelta > 0 || oDelta < 0 ) && (!downtrend || !(fDelta < -40 && oDelta < -40))); - printf("\rProbing Fan#%d at boost %d done, %d RPM ", num, boost, fRpm); - return oDelta > 0 && fDelta < 0 ? bRpm - fDelta : fRpm; + printf("\rProbing Fan#%d at boost %d done, %d RPM ", bestBoostPoint.fanID, boost, lastBoostPoint.maxRPM); + return lastBoostPoint.maxRPM; } -void UpdateBoost(byte id, byte boost, USHORT rpm) { - fan_overboost* fOver = fan_conf->FindBoost(id); +void UpdateBoost() { + fan_overboost* fOver = fan_conf->FindBoost(bestBoostPoint.fanID); if (fOver) { - fOver->maxBoost = boost; - fOver->maxRPM = max(rpm, fOver->maxRPM); + fOver->maxBoost = bestBoostPoint.maxBoost; + fOver->maxRPM = max(bestBoostPoint.maxRPM, fOver->maxRPM); } else - fan_conf->boosts.push_back({ id, boost, rpm }); - acpi->boosts[id] = boost; + fan_conf->boosts.push_back(bestBoostPoint); + acpi->boosts[bestBoostPoint.fanID] = bestBoostPoint.maxBoost; fan_conf->Save(); } void CheckFanOverboost(byte num) { - int steps = 8, cSteps, boost = 100, cBoost = 0, fBoost = 100, gRpm = 0, - runrpm = 0, rpm = 0, oldBoost = acpi->GetFanValue(num, true); - bool run = true; + int steps = 8, cSteps, boost = 100, cBoost = 100, + rpm, oldBoost = acpi->GetFanValue(num, true); printf("Checking Fan#%d:\n", num); - runrpm = rpm = SetFanSteady(num, boost, gRpm); + bestBoostPoint = { (byte)num, 100, 0 }; + rpm = SetFanSteady(boost); printf(" \n"); for (int steps = 8; steps; steps = steps >> 1) { // Check for uptrend while ((boost+=steps) != cBoost) { - runrpm = SetFanSteady(num, boost, gRpm, true); - printf("(Best: %d @ %d RPM)\n", runrpm > rpm ? boost : fBoost, gRpm); - if (runrpm > rpm) { - rpm = runrpm; + SetFanSteady(boost, true); + //printf("(Best: %d @ %d RPM)\n", bestBoostPoint.maxBoost, bestBoostPoint.maxRPM); + if (lastBoostPoint.maxRPM > rpm) { + rpm = lastBoostPoint.maxRPM; cSteps = steps; - fBoost = boost; + bestBoostPoint.maxBoost = boost; + printf("(New best: %d @ %d RPM)\n", bestBoostPoint.maxBoost, bestBoostPoint.maxRPM); } - else + else { + printf("(Skipped)\n"); break; + } } - cBoost = fBoost + steps; - boost = fBoost; + boost = bestBoostPoint.maxBoost; + cBoost = boost + steps; } - printf("High check done, best %d @ %d RPM, starting low check...\n", fBoost, rpm); - boost = fBoost; - rpm = gRpm; - for (int steps = cSteps >> 1; steps; steps = steps >> 1) { + printf("High check done, best %d @ %d RPM, starting low check:\n", bestBoostPoint.maxBoost, bestBoostPoint.maxRPM); + for (int steps = cSteps > 1 ? cSteps >> 1 : 1; steps; steps = steps >> 1) { // Check for uptrend boost -= steps; - runrpm = SetFanSteady(num, boost, gRpm); - if (runrpm >= rpm - 60) { - rpm = max(runrpm, rpm); - fBoost = boost; + while (SetFanSteady(boost, true) >= bestBoostPoint.maxRPM - 60) { + bestBoostPoint.maxBoost = boost; + boost -= steps; + printf("(New best: %d @ %d RPM)\n", bestBoostPoint.maxBoost, bestBoostPoint.maxRPM); } - printf("(Best: %d @ %d RPM)\n", fBoost, gRpm); - boost = fBoost; + printf("(Step back)\n"); + boost = bestBoostPoint.maxBoost; } - //boost++; - printf("Final boost - %d, %d RPM\n\n", fBoost, gRpm); + printf("Final boost - %d, %d RPM\n\n", bestBoostPoint.maxBoost, bestBoostPoint.maxRPM); acpi->SetFanValue(num, oldBoost, true); - UpdateBoost(num, fBoost, gRpm); + UpdateBoost(); } void Usage() { @@ -133,7 +134,7 @@ directgpu=,\t\tIssue direct GPU interface command (for testing)\n\ int main(int argc, char* argv[]) { - printf("AlienFan-cli v5.9.1\n"); + printf("AlienFan-cli v5.9.2\n"); bool supported = false; @@ -283,12 +284,12 @@ int main(int argc, char* argv[]) if (fanID < acpi->HowManyFans()) if (args.size() > 1) { // manual fan set - byte newBoost = atoi(args[1].c_str()); acpi->Unlock(); - printf("Boost for fan #%d will be set to %d.\n", fanID, newBoost); - int mrpm, newrpm = SetFanSteady(fanID, newBoost, mrpm); - UpdateBoost(fanID, newBoost, newrpm); - printf("Done, %d RPM\n", newrpm); + bestBoostPoint = { fanID, (byte)atoi(args[1].c_str()), 0 }; + printf("Boost for fan #%d will be set to %d.\n", fanID, bestBoostPoint.maxBoost); + SetFanSteady(fanID, bestBoostPoint.maxBoost); + UpdateBoost(); + printf("\nDone, %d RPM\n", bestBoostPoint.maxRPM); } else CheckFanOverboost(fanID); diff --git a/alienfan-tools/alienfan-curve/FanCurve.cpp b/alienfan-tools/alienfan-curve/FanCurve.cpp index cff2f5bc..f0a69a2a 100644 --- a/alienfan-tools/alienfan-curve/FanCurve.cpp +++ b/alienfan-tools/alienfan-curve/FanCurve.cpp @@ -10,11 +10,18 @@ extern MonHelper* mon; extern HWND fanWindow, tipWindow; extern AlienFan_SDK::Control* acpi; -extern HWND CreateToolTip(HWND hwndParent, HWND oldTip); HWND toolTip = NULL; extern HINSTANCE hInst; +bool fanMode = true; +RECT cArea{ 0 }; fan_point* lastFanPoint = NULL; +fan_overboost* lastBoostPoint = NULL, bestBoostPoint{ 0 }; +vector boostCheck; + +int boostScale = 10, fanMinScale = 4000, fanMaxScale = 500; + +HANDLE ocStopEvent = CreateEvent(NULL, false, false, NULL); HWND CreateToolTip(HWND hwndParent, HWND oldTip) { @@ -43,49 +50,73 @@ void SetTooltip(HWND tt, int x, int y) { } } -void DrawFan(int oper = 0, int xx = -1, int yy = -1) -{ - if (fanWindow) { - RECT clirect, graphZone; - GetClientRect(fanWindow, &clirect); - graphZone = clirect; - clirect.right -= 1; - clirect.bottom -= 1; +void SetBoostTip(HWND tt, int rpm, int boost) { + TOOLINFO ti{ sizeof(ti) }; + if (tt) { + SendMessage(tt, TTM_ENUMTOOLS, 0, (LPARAM)&ti); + string toolTip = "Boost " + to_string(boost) + " @ " + to_string(rpm) + " RPM"; + ti.lpszText = (LPTSTR)toolTip.c_str(); + SendMessage(tt, TTM_SETTOOLINFO, 0, (LPARAM)&ti); + } +} - switch (oper) { - case 2:// tooltip, no redraw - SetTooltip(toolTip, 100 * (xx - clirect.left) / clirect.right, - 100 * (clirect.bottom - yy) / clirect.bottom); - return; - case 1:// show tooltip - SetTooltip(toolTip, 100 * (xx - clirect.left) / clirect.right, - 100 * (clirect.bottom - yy) / clirect.bottom); - break; - } +fan_point Screen2Fan(LPARAM lParam) { + return { + (short)max(0, min(100, (100 * (GET_X_LPARAM(lParam))) / cArea.right)), + (short)max(0, min(100, (100 * (cArea.bottom - GET_Y_LPARAM(lParam))) / cArea.bottom)) + //(short)max(0, min(100, (100 * (GET_X_LPARAM(lParam) - cArea.left)) / (cArea.right - cArea.left))), + //(short)max(0, min(100, (100 * (cArea.bottom - GET_Y_LPARAM(lParam))) / (cArea.bottom - cArea.top))) + }; +} +POINT Fan2Screen(short temp, short boost) { + return { + temp* cArea.right / 100, + (100 - boost)* cArea.bottom / 100 + //temp * cArea.right / 100 + cArea.left, + //(100 - boost)* cArea.bottom / 100 + cArea.top + }; +} + +POINT Boost2Screen(fan_overboost* boost) { + if (boost) { + boostScale = boost->maxBoost - 100 > boostScale ? boostScale << 1 : boostScale; + fanMaxScale = boost->maxRPM - fanMinScale > fanMaxScale ? ((boost->maxRPM - fanMinScale)/ 500 + 1) * 500 : fanMaxScale; + return { + boost->maxRPM < fanMinScale ? 0 : ((boost->maxRPM - fanMinScale) * cArea.right) / fanMaxScale, + (boostScale + 100 - boost->maxBoost)* cArea.bottom / boostScale + }; + } + else + return { 0 }; +} + +void DrawFan() +{ + if (fanWindow) { + POINT mark; HDC hdc_r = GetDC(fanWindow); // Double buff... HDC hdc = CreateCompatibleDC(hdc_r); - HBITMAP hbmMem = CreateCompatibleBitmap(hdc_r, graphZone.right - graphZone.left, graphZone.bottom - graphZone.top); - + HBITMAP hbmMem = CreateCompatibleBitmap(hdc_r, cArea.right - cArea.left + 1, cArea.bottom - cArea.top + 1); SetBkMode(hdc, TRANSPARENT); - HGDIOBJ hOld = SelectObject(hdc, hbmMem); + // Grid... SetDCPenColor(hdc, RGB(127, 127, 127)); SelectObject(hdc, GetStockObject(DC_PEN)); for (int x = 0; x < 11; x++) for (int y = 0; y < 11; y++) { - int cx = (x * clirect.right) / 10 + clirect.left, - cy = (y * clirect.bottom) / 10 + clirect.top; - MoveToEx(hdc, cx, clirect.top, NULL); - LineTo(hdc, cx, clirect.bottom); - MoveToEx(hdc, clirect.left, cy, NULL); - LineTo(hdc, clirect.right, cy); + int cx = (x * cArea.right) / 10 + cArea.left, + cy = (y * cArea.bottom) / 10 + cArea.top; + MoveToEx(hdc, cx, cArea.top, NULL); + LineTo(hdc, cx, cArea.bottom); + MoveToEx(hdc, cArea.left, cy, NULL); + LineTo(hdc, cArea.right, cy); } - if (fan_conf->lastSelectedFan != -1) { + if (fanMode /*&& fan_conf->lastSelectedFan != -1*/) { // curve... temp_block* sen = fan_conf->FindSensor(fan_conf->lastSelectedSensor); fan_block* fan = NULL; @@ -99,12 +130,11 @@ void DrawFan(int oper = 0, int xx = -1, int yy = -1) SetDCPenColor(hdc, RGB(255, 255, 0)); SelectObject(hdc, GetStockObject(DC_PEN)); // First point - MoveToEx(hdc, clirect.left, clirect.bottom, NULL); + MoveToEx(hdc, cArea.left, cArea.bottom, NULL); for (int i = 0; i < fan->points.size(); i++) { - int cx = fan->points[i].temp * clirect.right / 100 + clirect.left, - cy = (100 - fan->points[i].boost) * clirect.bottom / 100 + clirect.top; - LineTo(hdc, cx, cy); - Ellipse(hdc, cx - 2, cy - 2, cx + 2, cy + 2); + mark = Fan2Screen(fan->points[i].temp, fan->points[i].boost); + LineTo(hdc, mark.x, mark.y); + Ellipse(hdc, mark.x - 2, mark.y - 2, mark.x + 2, mark.y + 2); } // Yellow dots if (sen && senI->sensorIndex != sen->sensorIndex) { @@ -112,9 +142,7 @@ void DrawFan(int oper = 0, int xx = -1, int yy = -1) SetDCBrushColor(hdc, RGB(255, 255, 0)); SelectObject(hdc, GetStockObject(DC_PEN)); SelectObject(hdc, GetStockObject(DC_BRUSH)); - POINT mark; - mark.x = acpi->GetTempValue(senI->sensorIndex) * clirect.right / 100 + clirect.left; - mark.y = (100 - acpi->GetFanValue(fan_conf->lastSelectedFan)) * clirect.bottom / 100 + clirect.top; + mark = Fan2Screen(mon->senValues[senI->sensorIndex], mon->boostValues[fan_conf->lastSelectedFan]); Ellipse(hdc, mark.x - 3, mark.y - 3, mark.x + 3, mark.y + 3); } } @@ -123,9 +151,7 @@ void DrawFan(int oper = 0, int xx = -1, int yy = -1) SetDCBrushColor(hdc, RGB(255, 0, 0)); SelectObject(hdc, GetStockObject(DC_PEN)); SelectObject(hdc, GetStockObject(DC_BRUSH)); - POINT mark; - mark.x = acpi->GetTempValue(fan_conf->lastSelectedSensor) * clirect.right / 100 + clirect.left; - mark.y = (100 - acpi->GetFanValue(fan_conf->lastSelectedFan)) * clirect.bottom / 100 + clirect.top; + mark = Fan2Screen(mon->senValues[fan_conf->lastSelectedSensor], mon->boostValues[fan_conf->lastSelectedFan]); Ellipse(hdc, mark.x - 3, mark.y - 3, mark.x + 3, mark.y + 3); // RPM fan_overboost* maxBoost = fan_conf->FindBoost(fan_conf->lastSelectedFan); @@ -134,8 +160,35 @@ void DrawFan(int oper = 0, int xx = -1, int yy = -1) + to_string(maxBoost ? acpi->GetFanRPM(fan_conf->lastSelectedFan) * 100 / maxBoost->maxRPM : acpi->GetFanPercent(fan_conf->lastSelectedFan)) + "%)"; SetWindowText(tipWindow, rpmText.c_str()); } + else { + SetDCPenColor(hdc, RGB(0, 255, 0)); + SelectObject(hdc, GetStockObject(DC_PEN)); + MoveToEx(hdc, cArea.left, cArea.bottom, NULL); + for (auto iter = boostCheck.begin(); iter < boostCheck.end(); iter++) { + mark = Boost2Screen(&(*iter)); + LineTo(hdc, mark.x, mark.y); + Ellipse(hdc, mark.x - 2, mark.y - 2, mark.x + 2, mark.y + 2); + } + if (lastBoostPoint) { + SetDCPenColor(hdc, RGB(255, 255, 0)); + SetDCBrushColor(hdc, RGB(255, 255, 0)); + SelectObject(hdc, GetStockObject(DC_PEN)); + SelectObject(hdc, GetStockObject(DC_BRUSH)); + mark = Boost2Screen(lastBoostPoint); + Ellipse(hdc, mark.x - 3, mark.y - 3, mark.x + 3, mark.y + 3); + string rpmText = to_string(lastBoostPoint->maxBoost) + " @ " + to_string(lastBoostPoint->maxRPM) + + " RPM (Max. " + to_string(bestBoostPoint.maxBoost) + " @ " + to_string(bestBoostPoint.maxRPM) + " RPM)"; + SetWindowText(tipWindow, rpmText.c_str()); + } + SetDCPenColor(hdc, RGB(255, 0, 0)); + SetDCBrushColor(hdc, RGB(255, 0, 0)); + SelectObject(hdc, GetStockObject(DC_PEN)); + SelectObject(hdc, GetStockObject(DC_BRUSH)); + mark = Boost2Screen(&bestBoostPoint); + Ellipse(hdc, mark.x - 3, mark.y - 3, mark.x + 3, mark.y + 3); + } - BitBlt(hdc_r, 0, 0, graphZone.right - graphZone.left, graphZone.bottom - graphZone.top, hdc, 0, 0, SRCCOPY); + BitBlt(hdc_r, 0, 0, cArea.right - cArea.left + 1, cArea.bottom - cArea.top + 1, hdc, 0, 0, SRCCOPY); SelectObject(hdc, hOld); DeleteObject(hbmMem); @@ -145,13 +198,106 @@ void DrawFan(int oper = 0, int xx = -1, int yy = -1) } } +int SetFanSteady(byte boost, bool downtrend = false) { + acpi->SetFanValue(bestBoostPoint.fanID, boost, true); + // Check the trend... + int fRpm, fDelta = -1, oDelta, bRpm = acpi->GetFanRPM(bestBoostPoint.fanID); + boostCheck.push_back({ bestBoostPoint.fanID, boost, (USHORT)bRpm }); + lastBoostPoint = &boostCheck.back(); + DrawFan(); + //if (WaitForSingleObject(ocStopEvent, 5000) != WAIT_TIMEOUT) + // return -1; + do { + oDelta = fDelta; + if (WaitForSingleObject(ocStopEvent, 6000) != WAIT_TIMEOUT) + return -1; + fRpm = acpi->GetFanRPM(bestBoostPoint.fanID); + fDelta = fRpm - bRpm; + lastBoostPoint->maxRPM = max(bRpm, fRpm); + bestBoostPoint.maxRPM = max(bestBoostPoint.maxRPM, lastBoostPoint->maxRPM); + bRpm = fRpm; + DrawFan(); + } while ((fDelta > 0 || oDelta < 0) && (!downtrend || !(fDelta < -40 && oDelta < -40))); + return lastBoostPoint->maxRPM; +} + +void UpdateBoost() { + fan_overboost* fOver = fan_conf->FindBoost(bestBoostPoint.fanID); + if (fOver) { + fOver->maxBoost = bestBoostPoint.maxBoost; + fOver->maxRPM = max(bestBoostPoint.maxRPM, fOver->maxRPM); + } + else + fan_conf->boosts.push_back(bestBoostPoint); + acpi->boosts[bestBoostPoint.fanID] = bestBoostPoint.maxBoost; + fan_conf->Save(); +} + +DWORD WINAPI CheckFanOverboost(LPVOID lpParam) { + int num = (int)lpParam, steps = 8, cSteps, boost = 100, cBoost = 100, crpm, rpm, oldBoost = acpi->GetFanValue(num, true); + mon->Stop(); + fanMode = false; + acpi->Unlock(); + for (int i = 0; i < acpi->HowManyFans(); i++) + if (num < 0 || num == i) { + bestBoostPoint = { (byte)i, 100, 0 }; + boostScale = 10; fanMinScale = 4000; fanMaxScale = 500; + if ((rpm = SetFanSteady(boost)) < 0) + goto finish; + fanMinScale = (rpm / 100) * 100; + for (int steps = 8; steps; steps = steps >> 1) { + // Check for uptrend + while ((boost += steps) != cBoost) + { + if ((crpm = SetFanSteady(boost, true)) > rpm) { + rpm = lastBoostPoint->maxRPM; + cSteps = steps; + bestBoostPoint.maxBoost = boost; + DrawFan(); + //steps = steps << 1; + } + else { + if (crpm > 0) + break; + else + goto finish; + } + } + boost = bestBoostPoint.maxBoost; + cBoost = boost + steps; + } + for (int steps = cSteps > 1 ? cSteps >> 1 : 1; steps; steps = steps >> 1) { + // Check for uptrend + boost -= steps; + while ((crpm = SetFanSteady(boost, true)) >= bestBoostPoint.maxRPM - 60) { + bestBoostPoint.maxBoost = boost; + DrawFan(); + boost -= steps; + } + if (crpm < 0) + goto finish; + boost = bestBoostPoint.maxBoost; + } + acpi->SetFanValue(num, oldBoost, true); + UpdateBoost(); + DrawFan(); + } + MessageBox(fanWindow, ("Overboost calculation done, best " + to_string(bestBoostPoint.maxBoost) + + " @ " + to_string(bestBoostPoint.maxRPM) + " RPM.").c_str(), "Done!", MB_OK | MB_ICONINFORMATION); +finish: + lastBoostPoint = NULL; + boostCheck.clear(); + acpi->SetPower(fan_conf->lastProf->powerStage); + fanMode = true; + mon->Start(); + return 0; +} + INT_PTR CALLBACK FanCurve(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { fan_block* cFan = fan_conf->FindFanBlock(fan_conf->FindSensor(fan_conf->lastSelectedSensor), fan_conf->lastSelectedFan); - RECT cArea; GetClientRect(hDlg, &cArea); - cArea.right -= 1; - cArea.bottom -= 1; + cArea.right--; cArea.bottom--; switch (message) { case WM_PAINT: { @@ -162,35 +308,34 @@ INT_PTR CALLBACK FanCurve(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) return true; } break; case WM_MOUSEMOVE: { - int x = GET_X_LPARAM(lParam), y = GET_Y_LPARAM(lParam); - - if (lastFanPoint && wParam & MK_LBUTTON) { - int temp = (100 * (GET_X_LPARAM(lParam) - cArea.left)) / (cArea.right - cArea.left), - boost = (100 * (cArea.bottom - GET_Y_LPARAM(lParam))) / (cArea.bottom - cArea.top); - lastFanPoint->temp = max(0, min(100, temp)); - lastFanPoint->boost = max(0, min(100, boost)); - DrawFan(1, x, y); + if (fanMode) { + fan_point clk = Screen2Fan(lParam); + if (lastFanPoint && wParam & MK_LBUTTON) { + *lastFanPoint = clk; + DrawFan(); + } + SetTooltip(toolTip, clk.temp, clk.boost); + } + else { + SetBoostTip(toolTip, GET_X_LPARAM(lParam) * fanMaxScale / cArea.right + fanMinScale, + (cArea.bottom - GET_Y_LPARAM(lParam)) * boostScale / cArea.bottom + 100); } - else - DrawFan(2, x, y); } break; case WM_LBUTTONDOWN: { - SetCapture(hDlg); - if (cFan) { + if (fanMode && cFan) { + SetCapture(hDlg); // check and add point - int temp = (100 * (GET_X_LPARAM(lParam) - cArea.left)) / (cArea.right - cArea.left), - boost = (100 * (cArea.bottom - GET_Y_LPARAM(lParam))) / (cArea.bottom - cArea.top); - for (vector::iterator fPi = cFan->points.begin(); - fPi < cFan->points.end(); fPi++) { - if (fPi->temp - DRAG_ZONE <= temp && fPi->temp + DRAG_ZONE >= temp) { + fan_point clk = Screen2Fan(lParam); + for (auto fPi = cFan->points.begin(); fPi < cFan->points.end(); fPi++) { + if (abs(fPi->temp - clk.temp) <= DRAG_ZONE && abs(fPi->boost - clk.boost) <= DRAG_ZONE) { // Starting drag'n'drop... lastFanPoint = &(*fPi); break; } - if (fPi->temp > temp) { + if (fPi->temp > clk.temp) { // Insert point here... - lastFanPoint = &(*cFan->points.insert(fPi, { (short)temp, (short)boost })); + lastFanPoint = &(*cFan->points.insert(fPi, clk)); break; } } @@ -200,9 +345,8 @@ INT_PTR CALLBACK FanCurve(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) case WM_LBUTTONUP: { ReleaseCapture(); // re-sort and de-duplicate array. - if (cFan) { - for (vector::iterator fPi = cFan->points.begin(); - fPi < cFan->points.end() - 1; fPi++) { + if (fanMode && cFan) { + for (auto fPi = cFan->points.begin(); fPi < cFan->points.end() - 1; fPi++) { if (fPi->temp > (fPi + 1)->temp) { fan_point t = *fPi; *fPi = *(fPi + 1); @@ -216,17 +360,16 @@ INT_PTR CALLBACK FanCurve(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) DrawFan(); fan_conf->Save(); } + lastFanPoint = NULL; SetFocus(GetParent(hDlg)); } break; case WM_RBUTTONUP: { // remove point from curve... - if (cFan && cFan->points.size() > 2) { + if (fanMode && cFan && cFan->points.size() > 2) { // check and remove point - int temp = (100 * (GET_X_LPARAM(lParam) - cArea.left)) / (cArea.right - cArea.left), - boost = (100 * (cArea.bottom - GET_Y_LPARAM(lParam))) / (cArea.bottom - cArea.top); - for (vector::iterator fPi = cFan->points.begin() + 1; - fPi < cFan->points.end() - 1; fPi++) - if (fPi->temp - DRAG_ZONE <= temp && fPi->temp + DRAG_ZONE >= temp) { + fan_point clk = Screen2Fan(lParam); + for (auto fPi = cFan->points.begin() + 1; fPi < cFan->points.end() - 1; fPi++) + if (abs(fPi->temp - clk.temp) <= DRAG_ZONE && abs(fPi->boost - clk.boost) <= DRAG_ZONE) { // Remove this element... cFan->points.erase(fPi); break; diff --git a/alienfan-tools/alienfan-gui/alienfan-gui.cpp b/alienfan-tools/alienfan-gui/alienfan-gui.cpp index f269af84..979db190 100644 --- a/alienfan-tools/alienfan-gui/alienfan-gui.cpp +++ b/alienfan-tools/alienfan-gui/alienfan-gui.cpp @@ -47,7 +47,7 @@ ThreadHelper* fanThread; // Forward declarations of functions included in this code module: //ATOM MyRegisterClass(HINSTANCE hInstance); HWND InitInstance(HINSTANCE, int); -LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK FanDialog(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK FanCurve(HWND, UINT, WPARAM, LPARAM); @@ -58,6 +58,10 @@ void ReloadPowerList(HWND list, int id); void ReloadTempView(HWND list, int cID); HWND CreateToolTip(HWND hwndParent, HWND oldTip); +extern bool fanMode; +extern HANDLE ocStopEvent; +DWORD WINAPI CheckFanOverboost(LPVOID lpParam); + int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, @@ -104,9 +108,8 @@ int APIENTRY wWinMain(_In_ HINSTANCE hInstance, else { MessageBox(NULL, "Driver can't start or supported hardware not detected!", "Fatal error", MB_OK | MB_ICONSTOP); - string shellcomm = "/delete /F /TN \"AlienFan-GUI\""; - ShellExecute(NULL, "runas", "schtasks.exe", shellcomm.c_str(), NULL, SW_HIDE); fan_conf->startWithWindows = false; + WindowsStartSet(false, "AlienFan-GUI"); } delete acpi; @@ -124,7 +127,7 @@ HWND InitInstance(HINSTANCE hInstance, int nCmdShow) dlg = CreateDialogParam(hInstance,//GetModuleHandle(NULL), /// instance handle MAKEINTRESOURCE(IDD_MAIN_VIEW), /// dialog box template NULL, /// handle to parent - (DLGPROC)WndProc, 0); + (DLGPROC)FanDialog, 0); if (!dlg) return NULL; SendMessage(dlg, WM_SETICON, ICON_BIG, (LPARAM) LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ALIENFANGUI))); @@ -135,7 +138,7 @@ HWND InitInstance(HINSTANCE hInstance, int nCmdShow) return dlg; } -LRESULT CALLBACK WndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +LRESULT CALLBACK FanDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { HWND power_list = GetDlgItem(hDlg, IDC_COMBO_POWER), power_gpu = GetDlgItem(hDlg, IDC_SLIDER_GPU); @@ -219,6 +222,15 @@ LRESULT CALLBACK WndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) SendMessage(power_gpu, TBM_SETTICFREQ, 1, 0); SendMessage(power_gpu, TBM_SETPOS, true, fan_conf->lastProf->GPUPower); + if (!fan_conf->obCheck && MessageBox(NULL, "Fan overboost values not defined!\nDo you want to set it now (it will took some minutes)?", "Question", + MB_YESNO | MB_ICONINFORMATION) == IDYES) { + // ask for boost check + EnableWindow(power_list, false); + CreateThread(NULL, 0, CheckFanOverboost, (LPVOID)(-1), 0, NULL); + SetWindowText(GetDlgItem(hDlg, IDC_BUT_OVER), "Stop Overboost"); + } + fan_conf->obCheck = 1; + return true; } break; case WM_COMMAND: @@ -282,18 +294,8 @@ LRESULT CALLBACK WndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { fan_conf->startWithWindows = !fan_conf->startWithWindows; CheckMenuItem(GetMenu(hDlg), IDM_SETTINGS_STARTWITHWINDOWS, fan_conf->startWithWindows ? MF_CHECKED : MF_UNCHECKED); - char pathBuffer[MAX_PATH]; - string shellcomm; - if (fan_conf->startWithWindows) { - GetModuleFileName(NULL, pathBuffer, MAX_PATH); - shellcomm = "Register-ScheduledTask -TaskName \"AlienFan-GUI\" -trigger $(New-ScheduledTaskTrigger -Atlogon) -settings $(New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit 0) -action $(New-ScheduledTaskAction -Execute '" - + string(pathBuffer) + "') -force -RunLevel Highest"; - ShellExecute(NULL, "runas", "powershell.exe", shellcomm.c_str(), NULL, SW_HIDE); - } else { - shellcomm = "/delete /F /TN \"AlienFan-GUI\""; - ShellExecute(NULL, "runas", "schtasks.exe", shellcomm.c_str(), NULL, SW_HIDE); - } - fan_conf->Save(); + if (WindowsStartSet(fan_conf->startWithWindows, "AlienFan-GUI")) + fan_conf->Save(); } break; case IDM_SETTINGS_STARTMINIMIZED: { @@ -318,12 +320,20 @@ LRESULT CALLBACK WndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) } } break; case IDC_MAX_RESET: - { mon->maxTemps = mon->senValues; ReloadTempView(GetDlgItem(hDlg, IDC_TEMP_LIST), fan_conf->lastSelectedSensor); - } break; - default: - return DefWindowProc(hDlg, message, wParam, lParam); + break; + case IDC_BUT_OVER: + if (fanMode) { + EnableWindow(power_list, false); + CreateThread(NULL, 0, CheckFanOverboost, (LPVOID)fan_conf->lastSelectedFan, 0, NULL); + SetWindowText(GetDlgItem(hDlg, IDC_BUT_OVER), "Stop Overboost"); + } + else { + SetEvent(ocStopEvent); + SetWindowText(GetDlgItem(hDlg, IDC_BUT_OVER), "Overboost"); + } + break; } } break; @@ -553,15 +563,20 @@ INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) void UpdateFanUI(LPVOID lpParam) { HWND tempList = GetDlgItem((HWND)lpParam, IDC_TEMP_LIST), - fanList = GetDlgItem((HWND)lpParam, IDC_FAN_LIST); + fanList = GetDlgItem((HWND)lpParam, IDC_FAN_LIST), + power_list = GetDlgItem((HWND)lpParam, IDC_COMBO_POWER); + if (fanMode) { + EnableWindow(power_list, true); + SetWindowText(GetDlgItem((HWND)lpParam, IDC_BUT_OVER), "Overboost"); + } if (mon && IsWindowVisible((HWND)lpParam)) { //DebugPrint("Fans UI update...\n"); - for (int i = 0; i < mon->acpi->HowManySensors(); i++) { - string name = to_string(mon->senValues[i]) + " (" + to_string(mon->maxTemps[i]) + ")"; + for (int i = 0; i < acpi->HowManySensors(); i++) { + string name = to_string(acpi->GetTempValue(i)) + " (" + to_string(mon->maxTemps[i]) + ")"; ListView_SetItemText(tempList, i, 0, (LPSTR)name.c_str()); } - for (int i = 0; i < mon->acpi->HowManyFans(); i++) { - string name = "Fan " + to_string(i + 1) + " (" + to_string(mon->fanValues[i]) + ")"; + for (int i = 0; i < acpi->HowManyFans(); i++) { + string name = "Fan " + to_string(i + 1) + " (" + to_string(acpi->GetFanRPM(i) /*eve->mon->fanValues[i]*/) + ")"; ListView_SetItemText(fanList, i, 0, (LPSTR)name.c_str()); } SendMessage(fanWindow, WM_PAINT, 0, 0); diff --git a/alienfan-tools/alienfan-gui/alienfan-gui.rc b/alienfan-tools/alienfan-gui/alienfan-gui.rc index 0371e8e7b19fef44129c66d6cac09c5ca2dfde2c..de09210b035c1f75fe745856c92f32fb0814008d 100644 GIT binary patch delta 152 zcmcbSb0~Mi0=dbrl=voR@Qbh-F&HoyO%_xZoxDa;YqN;F5DSpOF}Y4o$<&{rj3Jew zh#`p~9|(&XN*I(FbQnAtTo{}g;u)M6LK#AUv_C@_gDXQ2P{xqKl)+^3MLEgMYRcz0 t8I2}?)iGo=+N`eomI-K$9)rQ;gZjFg-3*>E!nxv;yHvS02N-d%008kPCeQ!? delta 96 zcmX? 0) { // clean old data diff --git a/alienfan-tools/alienfan-shared/ConfigFan.h b/alienfan-tools/alienfan-shared/ConfigFan.h index 5e1efa16..e0bad916 100644 --- a/alienfan-tools/alienfan-shared/ConfigFan.h +++ b/alienfan-tools/alienfan-shared/ConfigFan.h @@ -44,6 +44,7 @@ class ConfigFan { DWORD startWithWindows = 0; DWORD startMinimized = 0; DWORD updateCheck = 1; + DWORD obCheck = 0; fan_profile prof; fan_profile* lastProf = &prof; diff --git a/alienfan-tools/alienfan-shared/common.h b/alienfan-tools/alienfan-shared/common.h index a297480c..c3d7f3bb 100644 --- a/alienfan-tools/alienfan-shared/common.h +++ b/alienfan-tools/alienfan-shared/common.h @@ -92,4 +92,16 @@ DWORD WINAPI CUpdateCheck(LPVOID lparam) { Shell_NotifyIcon(NIM_MODIFY, niData); niData->uFlags &= ~NIF_INFO; return 0; +} + +bool WindowsStartSet(bool kind, string name) { + char pathBuffer[2048]; + if (kind) { + GetModuleFileName(NULL, pathBuffer, 2047); + return ShellExecute(NULL, "runas", "powershell.exe", ("Register-ScheduledTask -TaskName \"" + name + "\" -trigger $(New-ScheduledTaskTrigger -Atlogon) -settings $(New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit 0) -action $(New-ScheduledTaskAction -Execute '" + + string(pathBuffer) + "' -Argument '-d') -force -RunLevel Highest").c_str(), NULL, SW_HIDE) > (HINSTANCE)32; + } + else { + return ShellExecute(NULL, "runas", "schtasks.exe", ("/delete /F /TN \"" + name + "\"").c_str(), NULL, SW_HIDE) > (HINSTANCE)32; + } } \ No newline at end of file diff --git a/alienfx-gui/FanDialog.cpp b/alienfx-gui/FanDialog.cpp index e01b16f5..0ef338aa 100644 --- a/alienfx-gui/FanDialog.cpp +++ b/alienfx-gui/FanDialog.cpp @@ -16,15 +16,19 @@ extern HWND toolTip; int pLid = -1; +extern bool fanMode; + GUID* sch_guid, perfset; extern INT_PTR CALLBACK FanCurve(HWND, UINT, WPARAM, LPARAM); +DWORD WINAPI CheckFanOverboost(LPVOID lpParam); extern void ReloadFanView(HWND list, int cID); extern void ReloadPowerList(HWND list, int id); extern void ReloadTempView(HWND list, int cID); -void UpdateFanUI(LPVOID); +extern HANDLE ocStopEvent; -ThreadHelper* fanUIUpdate; +void UpdateFanUI(LPVOID); +ThreadHelper* fanUIUpdate = NULL; BOOL CALLBACK TabFanDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { @@ -34,7 +38,7 @@ BOOL CALLBACK TabFanDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam switch (message) { case WM_INITDIALOG: { - if (acpi && acpi->IsActivated()) { + if (eve->mon) { fan_conf = conf->fan_conf; mon = eve->mon; @@ -85,6 +89,15 @@ BOOL CALLBACK TabFanDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam SendMessage(power_gpu, TBM_SETTICFREQ, 1, 0); SendMessage(power_gpu, TBM_SETPOS, true, fan_conf->lastProf->GPUPower); + if (!fan_conf->obCheck && MessageBox(NULL, "Fan overboost values not defined!\nDo you want to set it now (it will took some minutes)?", "Question", + MB_YESNO | MB_ICONINFORMATION) == IDYES) { + // ask for boost check + EnableWindow(power_list, false); + CreateThread(NULL, 0, CheckFanOverboost, (LPVOID)(-1), 0, NULL); + SetWindowText(GetDlgItem(hDlg, IDC_BUT_OVER), "Stop Overboost"); + } + fan_conf->obCheck = 1; + } else { SwitchTab(TAB_SETTINGS); return false; @@ -137,7 +150,7 @@ BOOL CALLBACK TabFanDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam } } } break; - case IDC_BUT_RESET: + case IDC_FAN_RESET: { temp_block* cur = fan_conf->FindSensor(fan_conf->lastSelectedSensor); if (cur) { @@ -151,10 +164,20 @@ BOOL CALLBACK TabFanDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam } } break; case IDC_MAX_RESET: - { mon->maxTemps = mon->senValues; ReloadTempView(GetDlgItem(hDlg, IDC_TEMP_LIST), fan_conf->lastSelectedSensor); - } break; + break; + case IDC_BUT_OVER: + if (fanMode) { + EnableWindow(power_list, false); + CreateThread(NULL, 0, CheckFanOverboost, (LPVOID)fan_conf->lastSelectedFan, 0, NULL); + SetWindowText(GetDlgItem(hDlg, IDC_BUT_OVER), "Stop Overboost"); + } + else { + SetEvent(ocStopEvent); + SetWindowText(GetDlgItem(hDlg, IDC_BUT_OVER), "Overboost"); + } + break; } } break; case WM_NOTIFY: @@ -240,11 +263,10 @@ BOOL CALLBACK TabFanDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam } break; } break; case WM_DESTROY: - //SetEvent(fuiEvent); - //WaitForSingleObject(uiFanHandle, 1000); - //CloseHandle(uiFanHandle); - delete fanUIUpdate; - LocalFree(sch_guid); + if (fanUIUpdate) { + delete fanUIUpdate; + LocalFree(sch_guid); + } break; } return 0; @@ -254,39 +276,20 @@ void UpdateFanUI(LPVOID lpParam) { HWND tempList = GetDlgItem((HWND)lpParam, IDC_TEMP_LIST), fanList = GetDlgItem((HWND)lpParam, IDC_FAN_LIST), power_list = GetDlgItem((HWND)lpParam, IDC_COMBO_POWER); + if (fanMode) { + EnableWindow(power_list, true); + SetWindowText(GetDlgItem((HWND)lpParam, IDC_BUT_OVER), "Overboost"); + } if (eve->mon && IsWindowVisible((HWND)lpParam)) { //DebugPrint("Fans UI update...\n"); - for (int i = 0; i < eve->mon->acpi->HowManySensors(); i++) { - string name = to_string(eve->mon->senValues[i]) + " (" + to_string(eve->mon->maxTemps[i]) + ")"; + for (int i = 0; i < acpi->HowManySensors(); i++) { + string name = to_string(acpi->GetTempValue(i)) + " (" + to_string(eve->mon->maxTemps[i]) + ")"; ListView_SetItemText(tempList, i, 0, (LPSTR)name.c_str()); } - for (int i = 0; i < eve->mon->acpi->HowManyFans(); i++) { - string name = "Fan " + to_string(i + 1) + " (" + to_string(eve->mon->fanValues[i]) + ")"; + for (int i = 0; i < acpi->HowManyFans(); i++) { + string name = "Fan " + to_string(i + 1) + " (" + to_string(acpi->GetFanRPM(i) /*eve->mon->fanValues[i]*/) + ")"; ListView_SetItemText(fanList, i, 0, (LPSTR)name.c_str()); } SendMessage(fanWindow, WM_PAINT, 0, 0); } } - -//DWORD WINAPI UpdateFanUI(LPVOID lpParam) { -// HWND tempList = GetDlgItem((HWND)lpParam, IDC_TEMP_LIST), -// fanList = GetDlgItem((HWND)lpParam, IDC_FAN_LIST), -// power_list = GetDlgItem((HWND)lpParam, IDC_COMBO_POWER); -// -// SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_LOWEST); -// while (WaitForSingleObject(fuiEvent, 250) == WAIT_TIMEOUT) { -// if (eve->mon && IsWindowVisible((HWND)lpParam)) { -// //DebugPrint("Fans UI update...\n"); -// for (int i = 0; i < eve->mon->acpi->HowManySensors(); i++) { -// string name = to_string(eve->mon->senValues[i]) + " (" + to_string(eve->mon->maxTemps[i]) + ")"; -// ListView_SetItemText(tempList, i, 0, (LPSTR)name.c_str()); -// } -// for (int i = 0; i < eve->mon->acpi->HowManyFans(); i++) { -// string name = "Fan " + to_string(i + 1) + " (" + to_string(eve->mon->fanValues[i]) + ")"; -// ListView_SetItemText(fanList, i, 0, (LPSTR)name.c_str()); -// } -// SendMessage(fanWindow, WM_PAINT, 0, 0); -// } -// } -// return 0; -//} \ No newline at end of file diff --git a/alienfx-gui/SettingsDialog.cpp b/alienfx-gui/SettingsDialog.cpp index 09966c20..0a8a9596 100644 --- a/alienfx-gui/SettingsDialog.cpp +++ b/alienfx-gui/SettingsDialog.cpp @@ -1,11 +1,13 @@ #include "alienfx-gui.h" #include "EventHandler.h" + extern void ReloadProfileList(); extern bool DoStopService(bool kind); extern HWND CreateToolTip(HWND hwndParent, HWND oldTip); extern void SetSlider(HWND tt, int value); extern void EvaluteToAdmin(); +extern bool WindowsStartSet(bool kind, string name); extern EventHandler* eve; extern AlienFan_SDK::Control* acpi; @@ -51,17 +53,8 @@ BOOL CALLBACK TabSettingsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM l case IDC_STARTW: { conf->startWindows = state; - char pathBuffer[2048]; - string shellcomm; - if (conf->startWindows) { - GetModuleFileNameA(NULL, pathBuffer, 2047); - shellcomm = "Register-ScheduledTask -TaskName \"AlienFX-GUI\" -trigger $(New-ScheduledTaskTrigger -Atlogon) -settings $(New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit 0) -action $(New-ScheduledTaskAction -Execute '" - + string(pathBuffer) + "') -force -RunLevel Highest"; - ShellExecute(NULL, "runas", "powershell.exe", shellcomm.c_str(), NULL, SW_HIDE); - } else { - shellcomm = "/delete /F /TN \"Alienfx-GUI\""; - ShellExecute(NULL, "runas", "schtasks.exe", shellcomm.c_str(), NULL, SW_HIDE); - } + if (WindowsStartSet(state, "AlienFX-GUI")) + conf->Save(); } break; case IDC_CHECK_UPDATE: conf->updateCheck = state; diff --git a/alienfx-gui/alienfx-gui.cpp b/alienfx-gui/alienfx-gui.cpp index d7692127..9b998f6d 100644 --- a/alienfx-gui/alienfx-gui.cpp +++ b/alienfx-gui/alienfx-gui.cpp @@ -175,7 +175,6 @@ int APIENTRY wWinMain(_In_ HINSTANCE hInstance, conf = new ConfigHandler(); conf->Load(); - //conf->SetStates(); // check fans... if (conf->activeProfile->flags & PROF_FANS) diff --git a/alienfx-gui/alienfx-gui.rc b/alienfx-gui/alienfx-gui.rc index 71a59965dc904b66b0621d378c1ecd928e48bad1..253b139dbced745377ac3c611603dba6ed879140 100644 GIT binary patch delta 192 zcmccB%yOiKWy2&cMx)7-xeOVNHXr4B$i!~MpvPdqpfq{o0ny0~{9>DL@V;V17TkP~ zpRa4OzRels{EgBV;Hf`K@ML5IPR!GggINSlDzlivrMZ%&xCj*-!LGNXq6zyFWu1(2}6ZqO%kycTHB=TrfW?2>?bAJUjpZ delta 136 zcmX@o!g8ybWy2&cM#IUIxeOT%Hy`DC$i!~QpvPdqpfq{oLD9(#{9>DL@V;V17TkP~ zpRbEiZL(vYEO$IZ5Q8g2Fc61Ko;qJ~@)|>q$$T10lh=LX+8i@$3FBl5b%V(UbLKIc eO+G&-n$cvk_T1w@^7GtUAXzx??B;Fr`;q|ajxbvQ diff --git a/alienfx-gui/resource.h b/alienfx-gui/resource.h index 9e66cf9f..b130d67c 100644 --- a/alienfx-gui/resource.h +++ b/alienfx-gui/resource.h @@ -213,10 +213,11 @@ #define IDC_SLIDER_VSCALE 1130 #define IDC_BUTTON1 1130 #define IDC_BUT_COPYACTIVE 1130 +#define IDC_BUT_OVER 1130 #define IDC_VAL_NET 1131 -#define IDC_CHECK1 1131 #define IDC_OFFONBATTERY 1131 #define IDC_VAL_BAT 1132 +#define IDC_FAN_RESET 1132 #define IDC_VAL_TEMP 1133 #define ID_TRAYMENU_RESTORE 32772 #define ID_TRAYMENU_LIGHTSON 32773 @@ -249,7 +250,7 @@ #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 156 #define _APS_NEXT_COMMAND_VALUE 32808 -#define _APS_NEXT_CONTROL_VALUE 1132 +#define _APS_NEXT_CONTROL_VALUE 1133 #define _APS_NEXT_SYMED_VALUE 113 #endif #endif diff --git a/alienfx-mon/alienfx-mon.cpp b/alienfx-mon/alienfx-mon.cpp index 4db4d043..4c51b941 100644 --- a/alienfx-mon/alienfx-mon.cpp +++ b/alienfx-mon/alienfx-mon.cpp @@ -347,15 +347,8 @@ BOOL CALLBACK DialogMain(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) case IDC_STARTW: { conf->startWindows = state; - char pathBuffer[2048]; - if (conf->startWindows) { - GetModuleFileNameA(NULL, pathBuffer, 2047); - ShellExecute(NULL, "runas", "powershell.exe", string("Register-ScheduledTask -TaskName \"AlienFX-Mon\" -trigger $(New-ScheduledTaskTrigger -Atlogon) -settings $(New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit 0) -action $(New-ScheduledTaskAction -Execute '" - + string(pathBuffer) + "' -Argument '-d') -force -RunLevel Highest").c_str(), NULL, SW_HIDE); - } - else { - ShellExecute(NULL, "runas", "schtasks.exe", "/delete /F /TN \"Alienfx-Mon\"", NULL, SW_HIDE); - } + if (WindowsStartSet(state, "AlienFX-Mon")) + conf->Save(); } break; case IDC_CHECK_UPDATE: conf->updateCheck = state; diff --git a/alienfx-mon/alienfx-mon.rc b/alienfx-mon/alienfx-mon.rc index dafafd54f0d61df178771d6d2551dab535306975..c100e2b2f6f7a14aff7806c87c3c86c7cee01502 100644 GIT binary patch delta 50 zcmexT_N8pY0)0lK$qV%jS&bNU7z`#W8c1&bpnr-9$khXKKN{+8eq;22k