diff --git a/src/argbColors.c b/src/argbColors.c index cb19271..de24319 100644 --- a/src/argbColors.c +++ b/src/argbColors.c @@ -13,6 +13,7 @@ #include "libusb-1.0/libusb.h" +#include "argbColors.h" #include "configuration.h" #include "device_setup.c" #include "init_terminate.c" @@ -21,72 +22,6 @@ unsigned int red, green, blue; -const char *argp_program_version = "argbColor 0.1"; -const char *argp_program_bug_address = "https://github.com/developersu/argbColors/issues/"; -static char doc[] = "-s COMMAND\n-e SOMETHING-SOMETHING"; -static char doc1[] = "apply sync or separate command\vFIXME LATER ON PLEASE"; - -static struct argp_option options[] = { - {"sync", 's', 0, 0, "Synchronized command" }, - {"separate", 'e', 0, 0, "Separate command(s)" }, - {"color", 'c', "RGB_COLOR", 0, "Define color (000000..ffffff)" }, - {"brightness", 'b', "VALUE", 0, "Define brightness (0..5)" }, - {"quiet", 'q', 0, 0, "Mute output" }, - {"verbose", 'v', 0, 0, "Verbose output" }, - { 0 } -}; - -struct arguments{ - char *args[1]; - int quiet; - int sync; - int separate; - char *color; - char *brightness; -}; - -static error_t parse_opt(int key, char *arg, struct argp_state *state){ - /* Get the input argument from argp_parse, which we - know is a pointer to our arguments structure. */ - struct arguments *arguments = state->input; - - switch (key) { - case 'q': - arguments->quiet = 1; - break; - case 's': - arguments->sync = 1; - break; - case 'e': - arguments->separate = 1; - break; - case 'c': - arguments->color = arg; - break; - case 'b': - arguments->brightness = arg; - break; - case 'v': - verbose_output = 1; - case ARGP_KEY_ARG: - if (state->arg_num >= 1) // Too many arguments - argp_usage (state); - arguments->args[state->arg_num] = arg; - break; -/* - case ARGP_KEY_END: - if (state->arg_num < 1) // Not enough arguments - argp_usage (state); - break; -*/ - default: - return ARGP_ERR_UNKNOWN; - } - return 0; -} - -static struct argp argp = { options, parse_opt, doc, doc1 }; - int parse_color(char *color, unsigned int *red, unsigned int *green, unsigned int *blue ){ if (strlen(color) != 6) return -1; @@ -114,12 +49,15 @@ int sync_flow(char* directive){ return turnOffBacklightSync(); else{ printf("Command not recognized\n" - "Possible values are: wave wave2 color off\n"); + "Possible values are: color wave wave2 off\n"); return staticColorSync(red, green, blue); // TODO: refactor; leave information block and nothing instead } } +int separate_flow(){ + +} int main(int argc, char *argv[]) { @@ -139,19 +77,24 @@ int main(int argc, char *argv[]) { if (arguments.quiet) freopen("/dev/null", "a", stdout); - if (arguments.sync == arguments.separate == 1){ - printf("Only one option must be defined: '-s' or '-e'\n"); + if (arguments.sync && arguments.separate){ + printf("Only one option must be defined: '-s' or '-e'\n"); return -1; } - + /* + if (arguments.separate && ){ + printf("In separate flow each zone has to be defined: '-z1=color -z2=impulse ... -z6=color'\n"); + return -1; + } + */ if (parse_color(arguments.color, &red, &green, &blue) != 0){ printf("Color parse failure\n"); return -1; } - - int brightness = atoi(arguments.brightness); - if (brightness > 5) - brightness = 0; + + int brightness = atoi(arguments.brightness); + if (brightness > 5) + brightness = 0; // - - - int ret = configure_device(); diff --git a/src/argbColors.h b/src/argbColors.h new file mode 100644 index 0000000..8802c7a --- /dev/null +++ b/src/argbColors.h @@ -0,0 +1,183 @@ +int verbose_output = 0; + +enum separate_options { + Z1 = 0x100, + Z2, Z3, Z4, Z5, Z6, + C1, C2, C3, C4, C5, C6, + I1, I2, I3, I4, I5, I6, + B1, B2, B3, B4, B5, B6 +}; + +const char *argp_program_version = "argbColor 0.1"; +const char *argp_program_bug_address = "https://github.com/developersu/argbColors/issues/"; +static char doc[] = "-s [color|wave|wave2|off]\n-e -z1=[color|off|impulse|flash|flash2|cycle] ... -z6=[...]"; +static char doc1[] = "Apply same effect to every connected device or configure each device separately\v\ +Command's related options:\n\ +Synchronized\n\ + * color: color (-c ...)\n\ +Separate\n\ + * color: color (-cN ...), brightness (-bN ...)\n\ + * impulse: color (-cN ...), intensity (-iN ...)\n\ + * flash: color (-cN ...), brightness (-bN ...), frequency (-iN ...)\n\ + * flash2: color (-cN ...), brightness (-bN ...), frequency (-iN ...)\n\ + * cycle: intensity (-iN ...), brightness (-bN ...)\n\n\ +Zones description:\n\ + |‾‾|‾‾‾‾‾‾‾‾‾‾‾1| \n\ + | 6| |‾‾| |||| | \n\ + | | ‾‾ |||| | \n\ + |__| |‾‾‾| | \n\ + | |_4_| | \n\ + |___2_3_5_______| \n"; + +static struct argp_option options[] = { + {"sync", 's', 0, 0, "Synchronized command flow" , 0}, + {"separate", 'e', 0, 0, "Separate commands flow" , 1}, + {"color", 'c', "RGB_color", 0, "Color (000000..ffffff)" , 2}, + + {"brightness", 'b', "value", 0, "Brightness (0..5)" , 2}, + + {"z1", Z1, "command", 0, "Command for zone 1", 3 }, + {"z2", Z2, "command", 0, "Command for zone 2", 3 }, + {"z3", Z3, "command", 0, "Command for zone 3", 3 }, + {"z4", Z4, "command", 0, "Command for zone 4", 3 }, + {"z5", Z5, "command", 0, "Command for zone 5", 3 }, + {"z6", Z6, "command", 0, "Command for zone 6", 3 }, + + {"c1", C1, "RGB_color", 0, "Color for zone 1", 4 }, + {"c2", C2, "RGB_color", 0, "Color for zone 2", 4 }, + {"c3", C3, "RGB_color", 0, "Color for zone 3", 4 }, + {"c4", C4, "RGB_color", 0, "Color for zone 4", 4 }, + {"c5", C5, "RGB_color", 0, "Color for zone 5", 4 }, + {"c6", C6, "RGB_color", 0, "Color for zone 6", 4 }, + + {"i1", I1, "value", 0, "Intensity/frequency for zone 1", 4 }, + {"i2", I2, "value", 0, "Intensity/frequency for zone 2", 4 }, + {"i3", I3, "value", 0, "Intensity/frequency for zone 3", 4 }, + {"i4", I4, "value", 0, "Intensity/frequency for zone 4", 4 }, + {"i5", I5, "value", 0, "Intensity/frequency for zone 5", 4 }, + {"i6", I6, "value", 0, "Intensity/frequency for zone 6", 4 }, + + {"b1", B1, "value", 0, "Brightness for zone 1", 4 }, + {"b2", B2, "value", 0, "Brightness for zone 2", 4 }, + {"b3", B3, "value", 0, "Brightness for zone 3", 4 }, + {"b4", B4, "value", 0, "Brightness for zone 4", 4 }, + {"b5", B5, "value", 0, "Brightness for zone 5", 4 }, + {"b6", B6, "value", 0, "Brightness for zone 6", 4 }, + + {"quiet", 'q', 0, 0, "Mute output" , 7}, + {"verbose", 'v', 0, 0, "Verbose output" , 7}, + { 0 } +}; + +struct arguments{ + char *args[1]; + int quiet; + int sync; + int separate; + char *color, + *brightness, + *z1, *z2, *z3, *z4, *z5, *z6, + *c1, *c2, *c3, *c4, *c5, *c6, + *i1, *i2, *i3, *i4, *i5, *i6, + *b1, *b2, *b3, *b4, *b5, *b6; +}; + +static error_t parse_opt(int key, char *arg, struct argp_state *state){ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) { + case 'q': + arguments->quiet = 1; + break; + case 's': + arguments->sync = 1; + break; + case 'e': + arguments->separate = 1; + break; + case 'c': + arguments->color = arg; + break; + case 'b': + arguments->brightness = arg; + break; + case 'v': + verbose_output = 1; + case Z1: + arguments->z1 = arg; + break; + case Z2: + arguments->z2 = arg; + break; + case Z3: + arguments->z3 = arg; + break; + case Z4: + arguments->z4 = arg; + break; + case Z5: + arguments->z5 = arg; + break; + case Z6: + arguments->z6 = arg; + break; + case C1: + arguments->z1 = arg; + break; + case C2: + arguments->z2 = arg; + break; + case C3: + arguments->z3 = arg; + break; + case C4: + arguments->z4 = arg; + break; + case C5: + arguments->z5 = arg; + break; + case C6: + arguments->z6 = arg; + break; + case I1: + arguments->z1 = arg; + break; + case I2: + arguments->z2 = arg; + break; + case I3: + arguments->z3 = arg; + break; + case I4: + arguments->z4 = arg; + break; + case I5: + arguments->z5 = arg; + break; + case I6: + arguments->z6 = arg; + break; + + + case ARGP_KEY_ARG: + if (state->arg_num >= 1) // Too many arguments + argp_usage (state); + arguments->args[state->arg_num] = arg; + break; +/* + case ARGP_KEY_END: + if (state->arg_num < 1) // Not enough arguments + argp_usage (state); + break; +*/ + default: + return ARGP_ERR_UNKNOWN; + } + printf("%03x = %s\n", key, arg); + + return 0; +} + +static struct argp argp = { options, parse_opt, doc, doc1 }; \ No newline at end of file diff --git a/src/configuration.h b/src/configuration.h index e9709b8..0de17ea 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -12,5 +12,4 @@ const uint16_t PID = 0x5711; // REAL //const uint16_t PID = 0x2101; unsigned int TIMEOUT = 2000; int counter; -int limit; -int verbose_output = 0; \ No newline at end of file +int limit; \ No newline at end of file