diff --git a/src/homemade_speedstep.c b/src/homemade_speedstep.c index 3385123..a7261fd 100644 --- a/src/homemade_speedstep.c +++ b/src/homemade_speedstep.c @@ -124,30 +124,6 @@ int main(int argc, char** argv){ fprintf(stderr, "error: maxtemp must be higher than mintemp\n"); return 2; } - /* try to open scaling_current_governor, exit on fail */ - FILE* govfile = fopen(CURGOV, "r"); - if (govfile == NULL){ - fprintf(stderr, "error: couldn't open scaling_current_governor\n"); - fprintf(stderr, " check that you have support for cpufreq\n"); - fprintf(stderr, " and the userspace governor in your kernel\n"); - fprintf(stderr, " also check that you're running this program\n"); - fprintf(stderr, " as root\n"); - return 3; - } - /* assign content of govfile to a temporary char array */ - char* gov = malloc(sizeof(char) * 20); - getfilec(govfile, gov); - /* check content of scaling_current_governor and exit on failure */ - if (comparestrings(gov, "userspace\n") != 0){ - fprintf(stderr, "error: userspace governor not set\n"); - /* free memory and close file */ - free(gov); - fclose(govfile); - return 4; - } - /* free memory and close file */ - free(gov); - fclose(govfile); /* try to open scaling_available_frequencies, exit on fail */ FILE *freqsfile = fopen(FREQS, "r"); if (freqsfile == NULL){ @@ -203,15 +179,17 @@ int main(int argc, char** argv){ fprintf(stderr, " running as root\n"); return 7; } + int timepassed = 0; FILE* curtempfile; /* from here onwards an infinite while loop should start */ while((curtempfile = fopen(CURTEMPPATH, "r")) != NULL){ - char* temperature = malloc(sizeof(char) * 8); - getfilec(curtempfile, temperature); - newlinetonullbyte(temperature); + timepassed++; + char* char_temperature = malloc(sizeof(char) * 8); + getfilec(curtempfile, char_temperature); + newlinetonullbyte(char_temperature); + int temperature = stringtoint(temperature, stringlength(temperature)); /* check if current temp is higher than max and step down */ - if (stringtoint(temperature, stringlength(temperature)) >= maxtemp - && curstep < stepc - 1){ + if (tempreature >= maxtemp && curstep < stepc - 1){ curstep++; curmaxfile = fopen(MAXSPDPATH, "w"); if (curmaxfile == NULL){ @@ -223,10 +201,10 @@ int main(int argc, char** argv){ } fprintf(curmaxfile, "%s\n", steps[curstep]); fclose(curmaxfile); + timepassed = 0; } /* check if current temp is lower than min and step down */ - if (stringtoint(temperature, stringlength(temperature)) <= mintemp - && curstep > 0){ + if (temperature <= mintemp && curstep > 0){ curstep--; curmaxfile = fopen(MAXSPDPATH, "w"); if (curmaxfile == NULL){ @@ -238,8 +216,24 @@ int main(int argc, char** argv){ } fprintf(curmaxfile, "%s\n", steps[curstep]); fclose(curmaxfile); + timepassed = 0; } - free(temperature); + /* check if a minute passed without step changes and temp is below minmax average */ + if (timepassed > 60 && temperature <= (mintemp+maxtemp)/2 && curstep < stepc - 1){ + curstep++; + curmaxfile = fopen(MAXSPDPATH, "w"); + if (curmaxfile == NULL){ + fprintf(stderr, "error: couldn't open scaling_maximum_frequency\n"); + fprintf(stderr, " check that you have support for cpufreq\n"); + fprintf(stderr, " in your kernel and that the program is\n"); + fprintf(stderr, " running as root\n"); + return 6; + } + fprintf(curmaxfile, "%s\n", steps[curstep]); + fclose(curmaxfile); + timepassed = 0; + } + free(char_temperature); fclose(curtempfile); sleep(POLLING_TIME); }