diff --git a/Makefile b/Makefile index c19d98c..d990271 100644 --- a/Makefile +++ b/Makefile @@ -41,12 +41,9 @@ tags: $(SRC) @echo [ctags] @ctags $(SRC) -# root ownership and suid bit is set to enable non-root execution -#install: kbbutil -# @sudo rm -f $(PREFIX)/bin/kbbutil -# @cp -a kbbutil $(PREFIX)/bin/kbbutil -# @sudo chown root:root $(PREFIX)/bin/kbbutil -# @sudo chmod 4755 $(PREFIX)/bin/kbbutil + +install: kbbutil + @mv kbbutil $(PREFIX)/bin/kbbutil depend: makedepend -Y $(SRC) diff --git a/kbbutil.c b/kbbutil.c index 737ebb2..65ea3aa 100644 --- a/kbbutil.c +++ b/kbbutil.c @@ -10,16 +10,16 @@ // variable defs {{{ io_connect_t io; -uint64_t wtf=0; +uint64_t wtf=0; // I don't know what this is used for //}}} int getKBBrightness(void) {//{{{ kern_return_t kr; - uint32_t c_out=1,c_in=1; + uint32_t c_out=1, c_in=1; uint64_t cbr; kr = IOConnectCallScalarMethod(io,kGetLEDBrightnessID,&wtf,c_in,&cbr,&c_out); - if(kr==kIOReturnBusy) {fprintf(stderr,"AppleLMUController IO is busy?\n");return -1;} - if(kr!=KERN_SUCCESS) {mach_error("IOKit error: ",kr);exit(kr);} + if(kr==kIOReturnBusy) { fprintf(stderr,"AppleLMUController IO is busy?\n"); return -1; } + if(kr!=KERN_SUCCESS) { mach_error("IOKit error: ",kr); exit(kr); } return (int)cbr; }//}}} bool setKBBrightness(int nbr) {//{{{ @@ -27,8 +27,8 @@ bool setKBBrightness(int nbr) {//{{{ uint32_t c_out=1,c_in=2; uint64_t cbr,sbr[2]={wtf,nbr}; kr = IOConnectCallScalarMethod(io,kSetLEDBrightnessID,sbr,c_in,&cbr,&c_out); - if(kr==kIOReturnBusy) {fprintf(stderr,"AppleLMUController IO is busy?\n");return false;} - if(kr!=KERN_SUCCESS) {mach_error("IOKit error: ",kr);exit(kr);} + if(kr==kIOReturnBusy) { fprintf(stderr,"AppleLMUController IO is busy?\n"); return false; } + if(kr!=KERN_SUCCESS) { mach_error("IOKit error: ",kr); exit(kr); } return true; }//}}} @@ -36,12 +36,35 @@ int main(int argc, char *argv []) {//{{{ kern_return_t kr; io_service_t is; is = IOServiceGetMatchingService(kIOMasterPortDefault,IOServiceMatching("AppleLMUController")); - if(!is) {fprintf(stderr,"Failed to into AppleLMUController\n");exit(1);} + if(!is) { fprintf(stderr,"Failed to get AppleLMUController service\n"); exit(1); } kr = IOServiceOpen(is,mach_task_self(),0,&io); IOObjectRelease(is); - if(kr!=KERN_SUCCESS) {mach_error("IOKit error: ",kr);exit(kr);} - if(argc==1||(argc==2&&(strcmp(argv[1],"-n")==0||strcmp(argv[1],"--numeric-only")==0))) printf(argc==2? "%i" : "Current keyboard brightness: %i\n",getKBBrightness()); - else if(argc==2&&((atoi(argv[1])==0&&strcmp(argv[1],"0")==0)||(atoi(argv[1])>0&&atoi(argv[1])<=4091))) setKBBrightness(atoi(argv[1])); - else {fprintf(stderr,"Invalid argument. kbbutil must be run either with no arguments, with -n or --numeric-only, or with one argument which is a number between 0 and 4091.\n");exit(1);} + if(kr!=KERN_SUCCESS) { mach_error("IOKit error: ",kr); exit(kr); } + //big argparsing block i intend to clean up later, but for now i've just formatted it more readably + if + (argc==1 || + (argc==2 && + (strcmp(argv[1],"-n")==0 || + strcmp(argv[1],"--numeric-only")==0) + ) + ) + printf(argc==2? "%i\n" : "Current keyboard brightness: %i\n",getKBBrightness()); + else if + (argc==2 && ( + (atoi(argv[1])==0 && strcmp(argv[1],"0")==0) || + (atoi(argv[1])> 0 && atoi(argv[1])<=4091) + ) + ) { + if(!setKBBrightness(atoi(argv[1]))) { + fprintf(stderr,"Error setting brightness to %i.\n",atoi(argv[1])); + exit(1); + } + } else { + fprintf(stderr,"Usage:\n\ +- kbbutil : Returns current brightness\n\ +- kbbutil [-n|--numeric-only] : Returns only integer brightness\n\ +- kbbutil [0-4091] : Set brightness\n"); + exit(1); + } return 0; }//}}} diff --git a/kbbutil.h b/kbbutil.h index 4861efe..9aeb080 100644 --- a/kbbutil.h +++ b/kbbutil.h @@ -12,6 +12,7 @@ // prototypes {{{ int getKBBrightness(void); bool setKBBrightness(int); +int main(int, char* []); enum { kGetSensorReadingID = 0, kGetLEDBrightnessID = 1,