/* setbklight.c * * bon, c'est juste pour foutre le backlight du Hercules ECafe, via le sysfs en root r/w! * donc du c plutôt que du bash, heh * * 2013/06/23 00:24:31 eak! */ #include #include #include #include #include #define SYSDIR_BK "/sys/devices/platform/pwm-backlight.0/backlight/pwm-backlight.0" #define SYSDIR_NAME "brightness" #define SYSDIR_MAXNAME "max_brightness" #define bufsz 32 #define reset 'r' #define maxBright 140 #define minBright 5 ////////////////// int getBrightness() { FILE *fp; char buffer[bufsz]; int current=-1; fp=fopen(SYSDIR_BK"/"SYSDIR_NAME, "r"); if ( fp == NULL ) { perror("fp for read:"); return(-1); } if (fgets(buffer, bufsz, fp) == NULL ) { perror("fgets:"); return(-1); } current=atoi(buffer); if (fclose(fp)!=0 ) { perror("fclose:"); return(-1); } return(current); } int setBrightness(int value) { FILE *fp; char buffer[bufsz]; int sz, szdone, ecode=0; fp=fopen(SYSDIR_BK"/"SYSDIR_NAME, "r+b"); if ( fp == NULL ) { perror("fp for write:"); return(-1); } sz=snprintf(buffer, bufsz, "%d\n", value); szdone=fwrite(buffer, sizeof(char), sz, fp); if ( szdone < sz ) { perror("fwrite..:"); ecode=1; } if ( fclose(fp) != 0 ) { perror("fclose?!@#%:"); ecode++; } return(ecode); } void Usage(char *prog) { fprintf(stderr, "%s \n", prog); } int main(int ac, char **av) { int *state; int current, count, new, max; FILE *fp; char *buffer; int ecode=1; if ( ac < 1 || ac > 2 ) { Usage(av[0]); return(-1); } if (av[1][0] == reset ) { current=0; buffer=*(av+1); count=atoi(buffer); } else { count=atoi(av[1]); current=getBrightness(); if ( current < 0 ) { return(++ecode); } } new=current+count; if ( new < minBright || new > maxBright ) new=0; ecode=setBrightness(new); return(ecode); }