added sleep, some error checking and details to README.md
This commit is contained in:
parent
a31d04c2e8
commit
a4290beb57
|
@ -38,6 +38,8 @@ You must provide the temperature at which you wish to step down the maximum freq
|
||||||
|
|
||||||
`homemade_speedstep <max temp> <min temp>`
|
`homemade_speedstep <max temp> <min temp>`
|
||||||
|
|
||||||
|
**Important**: max temp and min temp must be passed as 5 digit integers, like so: 82ºC = 82000
|
||||||
|
|
||||||
---
|
---
|
||||||
**Recomendation**: add a service to your init script that runs this program at startup in the background so you don't need to keep a terminal emulator open running it.
|
**Recomendation**: add a service to your init script that runs this program at startup in the background so you don't need to keep a terminal emulator open running it.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#define POLLING_TIME 1
|
||||||
#define CURGOV "/sys/devices/system/cpu/cpufreq/policy0/scaling_governor"
|
#define CURGOV "/sys/devices/system/cpu/cpufreq/policy0/scaling_governor"
|
||||||
#define FREQS "/sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies"
|
#define FREQS "/sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies"
|
||||||
#define MAXSPDPATH "/sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq"
|
#define MAXSPDPATH "/sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq"
|
||||||
|
@ -113,9 +115,15 @@ int main(int argc, char** argv){
|
||||||
fprintf(stderr, " see homemade_speedstep --help\n");
|
fprintf(stderr, " see homemade_speedstep --help\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/* set maxtemp and mintemp TODO: check for integer and difference */
|
/* set maxtemp and mintemp TODO: check for integer */
|
||||||
const int maxtemp = stringtoint(argv[1], stringlength(argv[1]));
|
const int maxtemp = stringtoint(argv[1], stringlength(argv[1]));
|
||||||
const int mintemp = stringtoint(argv[2], stringlength(argv[2]));
|
const int mintemp = stringtoint(argv[2], stringlength(argv[2]));
|
||||||
|
/* check that the values are, at the very least, different
|
||||||
|
and that max is higher than min */
|
||||||
|
if (maxtemp <= mintemp){
|
||||||
|
fprintf(stderr, "error: maxtemp must be higher than mintemp\n");
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
/* try to open scaling_current_governor, exit on fail */
|
/* try to open scaling_current_governor, exit on fail */
|
||||||
FILE* govfile = fopen(CURGOV, "r");
|
FILE* govfile = fopen(CURGOV, "r");
|
||||||
if (govfile == NULL){
|
if (govfile == NULL){
|
||||||
|
@ -124,7 +132,7 @@ int main(int argc, char** argv){
|
||||||
fprintf(stderr, " and the userspace governor in your kernel\n");
|
fprintf(stderr, " and the userspace governor in your kernel\n");
|
||||||
fprintf(stderr, " also check that you're running this program\n");
|
fprintf(stderr, " also check that you're running this program\n");
|
||||||
fprintf(stderr, " as root\n");
|
fprintf(stderr, " as root\n");
|
||||||
return 2;
|
return 3;
|
||||||
}
|
}
|
||||||
/* assign content of govfile to a temporary char array */
|
/* assign content of govfile to a temporary char array */
|
||||||
char* gov = malloc(sizeof(char) * 20);
|
char* gov = malloc(sizeof(char) * 20);
|
||||||
|
@ -135,7 +143,7 @@ int main(int argc, char** argv){
|
||||||
/* free memory and close file */
|
/* free memory and close file */
|
||||||
free(gov);
|
free(gov);
|
||||||
fclose(govfile);
|
fclose(govfile);
|
||||||
return 3;
|
return 4;
|
||||||
}
|
}
|
||||||
/* free memory and close file */
|
/* free memory and close file */
|
||||||
free(gov);
|
free(gov);
|
||||||
|
@ -147,7 +155,7 @@ int main(int argc, char** argv){
|
||||||
fprintf(stderr, " check that you have support for cpufreq\n");
|
fprintf(stderr, " check that you have support for cpufreq\n");
|
||||||
fprintf(stderr, " in your kernel and that the program is\n");
|
fprintf(stderr, " in your kernel and that the program is\n");
|
||||||
fprintf(stderr, " running as root\n");
|
fprintf(stderr, " running as root\n");
|
||||||
return 4;
|
return 5;
|
||||||
}
|
}
|
||||||
/* assign content of freqsfile to a temporary char array */
|
/* assign content of freqsfile to a temporary char array */
|
||||||
char* freqsfilec = malloc(sizeof(char) * 200);
|
char* freqsfilec = malloc(sizeof(char) * 200);
|
||||||
|
@ -170,7 +178,7 @@ int main(int argc, char** argv){
|
||||||
fprintf(stderr, " check that you have support for cpufreq\n");
|
fprintf(stderr, " check that you have support for cpufreq\n");
|
||||||
fprintf(stderr, " in your kernel and that the program is\n");
|
fprintf(stderr, " in your kernel and that the program is\n");
|
||||||
fprintf(stderr, " running as root\n");
|
fprintf(stderr, " running as root\n");
|
||||||
return 5;
|
return 6;
|
||||||
}
|
}
|
||||||
/* assign content of curmaxfile to a temporary char array */
|
/* assign content of curmaxfile to a temporary char array */
|
||||||
char *curmaxfreq = malloc(sizeof(char) * 20);
|
char *curmaxfreq = malloc(sizeof(char) * 20);
|
||||||
|
@ -193,7 +201,7 @@ int main(int argc, char** argv){
|
||||||
fprintf(stderr, " check that you have support for cpufreq\n");
|
fprintf(stderr, " check that you have support for cpufreq\n");
|
||||||
fprintf(stderr, " in your kernel and that the program is\n");
|
fprintf(stderr, " in your kernel and that the program is\n");
|
||||||
fprintf(stderr, " running as root\n");
|
fprintf(stderr, " running as root\n");
|
||||||
return 6;
|
return 7;
|
||||||
}
|
}
|
||||||
FILE* curtempfile;
|
FILE* curtempfile;
|
||||||
/* from here onwards an infinite while loop should start */
|
/* from here onwards an infinite while loop should start */
|
||||||
|
@ -201,22 +209,39 @@ int main(int argc, char** argv){
|
||||||
char* temperature = malloc(sizeof(char) * 8);
|
char* temperature = malloc(sizeof(char) * 8);
|
||||||
getfilec(curtempfile, temperature);
|
getfilec(curtempfile, temperature);
|
||||||
newlinetonullbyte(temperature);
|
newlinetonullbyte(temperature);
|
||||||
|
/* check if current temp is higher than max and step down */
|
||||||
if (stringtoint(temperature, stringlength(temperature)) >= maxtemp
|
if (stringtoint(temperature, stringlength(temperature)) >= maxtemp
|
||||||
&& curstep < stepc - 1){
|
&& curstep < stepc - 1){
|
||||||
curstep++;
|
curstep++;
|
||||||
curmaxfile = fopen(MAXSPDPATH, "w");
|
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]);
|
fprintf(curmaxfile, "%s\n", steps[curstep]);
|
||||||
fclose(curmaxfile);
|
fclose(curmaxfile);
|
||||||
}
|
}
|
||||||
|
/* check if current temp is lower than min and step down */
|
||||||
if (stringtoint(temperature, stringlength(temperature)) <= mintemp
|
if (stringtoint(temperature, stringlength(temperature)) <= mintemp
|
||||||
&& curstep > 0){
|
&& curstep > 0){
|
||||||
curstep--;
|
curstep--;
|
||||||
curmaxfile = fopen(MAXSPDPATH, "w");
|
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]);
|
fprintf(curmaxfile, "%s\n", steps[curstep]);
|
||||||
fclose(curmaxfile);
|
fclose(curmaxfile);
|
||||||
}
|
}
|
||||||
free(temperature);
|
free(temperature);
|
||||||
fclose(curtempfile);
|
fclose(curtempfile);
|
||||||
|
sleep(POLLING_TIME);
|
||||||
}
|
}
|
||||||
/* cleanup for graceful exit */
|
/* cleanup for graceful exit */
|
||||||
free(steps);
|
free(steps);
|
||||||
|
|
Loading…
Reference in New Issue