diff --git a/light/adr.h b/light/adr.h new file mode 100644 index 0000000000000000000000000000000000000000..c701413350592871a1e89054f7c7413ae41a392e --- /dev/null +++ b/light/adr.h @@ -0,0 +1,6 @@ +const int adrlen = 2; +const char adr [adrlen][1000] = +{ + "/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/brightness", + "/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight/brightness" +}; diff --git a/light/light.c b/light/light.c index 4feb9eff4cbcb317ab650b9a5ddb427d8afdd0fb..ba62b90707ccc6371223ba0a385678f3555de9e5 100644 --- a/light/light.c +++ b/light/light.c @@ -3,59 +3,69 @@ #include <sys/types.h> #include <unistd.h> #include <math.h> +#include "adr.h" -const char adr [] = "/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/brightness"; const int lightMin = 2; const int lightMax = 937; int main(int argc,char ** argv) { if(argc<2) return 100; setuid(0); - if(argv[1][0]=='H') + for(int adri=0;adri<adrlen;adri++) { - FILE * f = fopen(adr,"w"); - fprintf(f,"%d",atoi(argv[2])); - fclose(f); - return 0; + { + if(argv[1][0]=='H') + { + FILE * f = fopen(adr[adri],"w"); + if(!f) goto nextAdr; + fprintf(f,"%d",atoi(argv[2])); + fclose(f); + return 0; + } + double argv2 = atof(argv[2]); + double light; + if(argv[1][0]=='=') + light = argv2; + else + { + FILE * f = fopen(adr[adri],"r"); + if(!f) goto nextAdr; + fprintf(f,"%d",atoi(argv[2])); + int realAct; + fscanf(f,"%d",&realAct); + if(realAct<light) realAct=lightMin; + double act=log(realAct); + if(argv[1][0]=='+') + light = act+argv2; + else + if(argv[1][0]=='-') + light = act-argv2; + else return 100; + fclose(f); + } + int notInLimit=0; + double realLight=pow(M_E,light); + if(realLight>lightMax) + { + realLight=lightMax; + notInLimit=1; + } + if(realLight<lightMin) + { + realLight=lightMin; + notInLimit=1; + } + int intLight = realLight+0.7; + FILE * f = fopen(adr[adri],"w"); + if(!f) goto nextAdr; + //printf("light=%d\n",intLight); + fprintf(f,"%d",intLight); + fclose(f); + //char exe [1000]; + //sprintf( exe,"echo %d > /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/brightness",light); + //system(exe); + return notInLimit; + } + nextAdr:; } - double argv2 = atof(argv[2]); - double light; - if(argv[1][0]=='=') - light = argv2; - else - { - FILE * f = fopen(adr,"r"); - int realAct; - fscanf(f,"%d",&realAct); - if(realAct<light) realAct=lightMin; - double act=log(realAct); - if(argv[1][0]=='+') - light = act+argv2; - else - if(argv[1][0]=='-') - light = act-argv2; - else return 100; - fclose(f); - } - int notInLimit=0; - double realLight=pow(M_E,light); - if(realLight>lightMax) - { - realLight=lightMax; - notInLimit=1; - } - if(realLight<lightMin) - { - realLight=lightMin; - notInLimit=1; - } - int intLight = realLight+0.7; - FILE * f = fopen(adr,"w"); - //printf("light=%d\n",intLight); - fprintf(f,"%d",intLight); - fclose(f); - //char exe [1000]; - //sprintf( exe,"echo %d > /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/brightness",light); - //system(exe); - return notInLimit; } diff --git a/light/lightInfo.c b/light/lightInfo.c index 9e68f7a97b702f4534e41cf2d1971308ac65087d..f380097701d741a7cf48d74b40a18dda4f9338d7 100644 --- a/light/lightInfo.c +++ b/light/lightInfo.c @@ -3,21 +3,31 @@ #include <sys/types.h> #include <unistd.h> #include <math.h> +#include "adr.h" -const char adr [] = "/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/brightness"; const int lightMin = 2; const int lightMax = 937; int main(int argc,char ** argv) { setuid(0); - FILE * f = fopen(adr,"r"); - int realAct; - fscanf(f,"%d",&realAct); - double act=log(realAct); - if(act<0) act = 0; - printf("%d%% %d\n[",int(100*act/log(lightMax)+0.5),realAct); - for(double i=0;i<log(lightMax);i+=0.3) - printf("%s",act<i?"−":"+"); - printf("]"); - fclose(f); + for(int adri=0;adri<adrlen;adri++) + { + { + FILE * f = fopen(adr[adri],"r"); + if(!f) goto nextAdr; + int realAct; + fscanf(f,"%d",&realAct); + double act=log(realAct); + if(act<0) act = 0; + printf("%d%% %d\n[",int(100*act/log(lightMax)+0.5),realAct); + for(double i=0;i<log(lightMax);i+=0.3) + printf("%s",act<i?"−":"+"); + printf("]"); + fclose(f); + return 0; + } + nextAdr:; + } + return 1; + }