You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
911 B
56 lines
911 B
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
|
#include <unistd.h> |
|
|
|
void usage() { |
|
fprintf(stderr, "Usage: setpineled [red|green|blue|white] [0-255]\n"); |
|
} |
|
|
|
int main(int argc, char *argv[]) { |
|
int brightness; |
|
char * color; |
|
char * command; |
|
char * type; |
|
|
|
if (argc < 2) { |
|
usage(); |
|
return 1; |
|
} |
|
argc--; |
|
brightness = atoi(argv[argc--]); |
|
|
|
if (brightness < 0 || brightness > 255) { |
|
usage(); |
|
return 1; |
|
} |
|
|
|
color = argv[argc--]; |
|
if ( |
|
strcmp(color, "red") && |
|
strcmp(color, "blue") && |
|
strcmp(color, "green") && |
|
strcmp(color, "white") |
|
) { |
|
usage(); |
|
return 1; |
|
} |
|
|
|
if (!strcmp(color, "white")) { |
|
type = "flash"; |
|
} else { |
|
type = "indicator"; |
|
} |
|
|
|
command = malloc(80); |
|
sprintf( |
|
command, |
|
"sh -c 'echo %d > /sys/class/leds/%s:%s/brightness'", |
|
brightness, color, type |
|
); |
|
if (setuid(0)) { |
|
fprintf(stderr, "setuid(0) failed\n"); |
|
} else { |
|
return system(command); |
|
} |
|
}
|
|
|