Moving ahead on prototyping 'separate flow'
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
This commit is contained in:
parent
77c6af0021
commit
b369d7fb77
3 changed files with 131 additions and 67 deletions
|
@ -20,48 +20,83 @@
|
|||
#include "commands.c"
|
||||
#include "iousb.c"
|
||||
|
||||
unsigned int red, green, blue;
|
||||
|
||||
int parse_color(char *color, unsigned int *red, unsigned int *green, unsigned int *blue ){
|
||||
if (strlen(color) != 6)
|
||||
return -1;
|
||||
void parse_color(char *color, unsigned int *red, unsigned int *green, unsigned int *blue ){
|
||||
if (strlen(color) != 6){
|
||||
printf("Incorrect color: \"%s\". Using default: \"ffffff\"\n", color);
|
||||
*red = *green = *blue = 0xff;
|
||||
return;
|
||||
}
|
||||
|
||||
regex_t reg;
|
||||
regcomp(®, "^[0-9a-fA-F]{6}$", REG_EXTENDED);
|
||||
if (regexec(®, color, 0, NULL, 0) != 0)
|
||||
return -1;
|
||||
if (regexec(®, color, 0, NULL, 0) != 0){
|
||||
printf("Incorrect color: \"%s\". Using default: \"ffffff\"\n", color);
|
||||
*red = *green = *blue = 0xff;
|
||||
return;
|
||||
}
|
||||
regfree(®);
|
||||
|
||||
if (sscanf(color, "%2x%2x%2x", red, green, blue) == 3)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
return -1;
|
||||
printf("Incorrect color: \"%s\". Using default: \"ffffff\"\n", color);
|
||||
*red = *green = *blue = 0xff;
|
||||
}
|
||||
|
||||
int sync_flow(char* directive){
|
||||
if (strcmp(directive, "wave") == 0)
|
||||
int parse_brightness(char *brightness){
|
||||
int ret = atoi(brightness);
|
||||
if (ret > 5)
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int sync_flow(char* command, unsigned int red, unsigned int green, unsigned int blue){
|
||||
if (strcmp(command, "wave") == 0)
|
||||
return wave1();
|
||||
else if (strcmp(directive, "wave2") == 0)
|
||||
else if (strcmp(command, "wave2") == 0)
|
||||
return wave2();
|
||||
else if (strcmp(directive, "color") == 0)
|
||||
else if (strcmp(command, "color") == 0)
|
||||
return staticColorSync(red, green, blue);
|
||||
else if (strcmp(directive, "off") == 0)
|
||||
else if (strcmp(command, "off") == 0)
|
||||
return turnOffBacklightSync();
|
||||
else{
|
||||
printf("Command not recognized\n"
|
||||
"Possible values are: color wave wave2 off\n");
|
||||
printf("Invalid command \"%s\"\n"
|
||||
"Allowed: color wave wave2 off\n", command);
|
||||
|
||||
return staticColorSync(red, green, blue); // TODO: refactor; leave information block and nothing instead
|
||||
}
|
||||
}
|
||||
|
||||
int separate_flow(){
|
||||
int separate_flow(char *command1, int red1, int green1, int blue1, int brightness1, int intensity1,
|
||||
char *command2, int red2, int green2, int blue2, int brightness2, int intensity2,
|
||||
char *command3, int red3, int green3, int blue3, int brightness3, int intensity3,
|
||||
char *command4, int red4, int green4, int blue4, int brightness4, int intensity4,
|
||||
char *command5, int red5, int green5, int blue5, int brightness5, int intensity5,
|
||||
char *command6, int red6, int green6, int blue6, int brightness6, int intensity6 ){
|
||||
|
||||
printf("Command not recognized\n"
|
||||
"Possible values are: color off impulse flash flash2 cycle\n");
|
||||
if (strcmp(command1, "color") == 0)
|
||||
return staticColorSeparate(brightness1, red1, green1, blue1);
|
||||
else if (strcmp(command1, "off") == 0)
|
||||
return turnOffBacklight();
|
||||
else if (strcmp(command1, "impulse") == 0)
|
||||
return impulse(intensity1, red1, green1, blue1);
|
||||
else if (strcmp(command1, "flash") == 0)
|
||||
return flash(brightness1, intensity1, red1, green1, blue1);
|
||||
else if (strcmp(command1, "flash2") == 0)
|
||||
return doubleFlash(brightness1, intensity1, red1, green1, blue1);
|
||||
else if (strcmp(command1, "cycle") == 0)
|
||||
return cycle(intensity1, brightness1);
|
||||
else{
|
||||
printf("Invalid command \"%s\"\n"
|
||||
"Allowed: color off impulse flash flash2 cycle\n", command1);
|
||||
return staticColorSync(red1, green1, blue1); // TODO: FIX ME
|
||||
}
|
||||
|
||||
|
||||
|
||||
//FIXME
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
struct arguments arguments;
|
||||
|
@ -69,11 +104,15 @@ int main(int argc, char *argv[]) {
|
|||
arguments.quiet = 0;
|
||||
arguments.sync = 0;
|
||||
arguments.separate = 0;
|
||||
arguments.color = "ff2fff";
|
||||
arguments.brightness = "5";
|
||||
arguments.c1 = arguments.c2 = arguments.c3 = arguments.c4 =
|
||||
arguments.c5 = arguments.c6 = arguments.color = "ff2f00";
|
||||
arguments.i1 = arguments.i2 = arguments.i3 = arguments.i4 =
|
||||
arguments.i5 = arguments.i6 = "4";
|
||||
arguments.b1 = arguments.b2 = arguments.b3 = arguments.b4 =
|
||||
arguments.b5 = arguments.b6 = arguments.brightness = "4";
|
||||
arguments.z1 = arguments.z2 = arguments.z3 =
|
||||
arguments.z4 = arguments.z5 = arguments.z6 = "-";
|
||||
|
||||
/* Parse our arguments; every option seen by parse_opt will
|
||||
be reflected in arguments. */
|
||||
argp_parse(&argp, argc, argv, 0, 0, &arguments);
|
||||
|
||||
if (arguments.quiet)
|
||||
|
@ -89,14 +128,45 @@ int main(int argc, char *argv[]) {
|
|||
return -1;
|
||||
}
|
||||
*/
|
||||
if (parse_color(arguments.color, &red, &green, &blue) != 0){
|
||||
printf("Color parse failure\n");
|
||||
return -1;
|
||||
}
|
||||
unsigned int red, green, blue,
|
||||
red1, green1, blue1,
|
||||
red2, green2, blue2,
|
||||
red3, green3, blue3,
|
||||
red4, green4, blue4,
|
||||
red5, green5, blue5,
|
||||
red6, green6, blue6,
|
||||
brightness,
|
||||
brightness1, brightness2, brightness3,
|
||||
brightness4, brightness5, brightness6,
|
||||
intensity1, intensity2, intensity3,
|
||||
intensity4, intensity5, intensity6;
|
||||
|
||||
int brightness = atoi(arguments.brightness);
|
||||
if (brightness > 5)
|
||||
brightness = 0;
|
||||
parse_color(arguments.color, &red, &green, &blue);
|
||||
|
||||
brightness = parse_brightness(arguments.brightness);
|
||||
|
||||
if (arguments.separate == 1){
|
||||
parse_color(arguments.c1, &red1, &green1, &blue1);
|
||||
parse_color(arguments.c2, &red2, &green2, &blue2);
|
||||
parse_color(arguments.c3, &red3, &green3, &blue3);
|
||||
parse_color(arguments.c4, &red4, &green4, &blue4);
|
||||
parse_color(arguments.c5, &red5, &green5, &blue5);
|
||||
parse_color(arguments.c6, &red6, &green6, &blue6);
|
||||
|
||||
brightness1 = parse_brightness(arguments.b1);
|
||||
brightness2 = parse_brightness(arguments.b2);
|
||||
brightness3 = parse_brightness(arguments.b3);
|
||||
brightness4 = parse_brightness(arguments.b4);
|
||||
brightness5 = parse_brightness(arguments.b5);
|
||||
brightness6 = parse_brightness(arguments.b6);
|
||||
|
||||
intensity1 = parse_brightness(arguments.i1);
|
||||
intensity2 = parse_brightness(arguments.i2);
|
||||
intensity3 = parse_brightness(arguments.i3);
|
||||
intensity4 = parse_brightness(arguments.i4);
|
||||
intensity5 = parse_brightness(arguments.i5);
|
||||
intensity6 = parse_brightness(arguments.i6);
|
||||
}
|
||||
|
||||
// - - -
|
||||
int ret = configure_device();
|
||||
|
@ -118,32 +188,23 @@ int main(int argc, char *argv[]) {
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
if (arguments.sync == 1){ // Sync flow
|
||||
if (sync_flow(arguments.args[0])){
|
||||
if (sync_flow(arguments.args[0], red, green, blue)){
|
||||
printf("Command transfer failure\n");
|
||||
libusb_close(dev_handle);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else if (arguments.separate == 0){ // Separate flow
|
||||
if(staticColorSync(red, green, blue)){ // TODO: FIX!
|
||||
else if (arguments.separate == 1){ // Separate flow
|
||||
if (separate_flow(arguments.z1, red1, green1, blue1, brightness1, intensity1,
|
||||
arguments.z2, red2, green2, blue2, brightness2, intensity2,
|
||||
arguments.z3, red3, green3, blue3, brightness3, intensity3,
|
||||
arguments.z4, red4, green4, blue4, brightness4, intensity4,
|
||||
arguments.z5, red5, green5, blue5, brightness5, intensity5,
|
||||
arguments.z6, red6, green6, blue6, brightness6, intensity6)){
|
||||
printf("Command transfer failure\n");
|
||||
libusb_close(dev_handle);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
if (cycle(0, 4)){
|
||||
printf("Command transfer failure\n");
|
||||
libusb_close(dev_handle);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (impulse(0, 0xff, 0x2f, 0xff)){
|
||||
printf("Command transfer failure\n");
|
||||
libusb_close(dev_handle);
|
||||
return -1;
|
||||
}
|
||||
//*/
|
||||
}
|
||||
else{
|
||||
if(staticColorSync(red, green, blue)){ // Executed neither for sync, nor for separate => set single color
|
||||
|
|
|
@ -8,10 +8,13 @@ enum separate_options {
|
|||
B1, B2, B3, B4, B5, B6
|
||||
};
|
||||
|
||||
const char *argp_program_version = "argbColor 0.1";
|
||||
const char *argp_program_version = "argb-color 0.1\n\n\
|
||||
License: GPLv3+: GNU GPL version 3 or newer <https://gnu.org/licenses/gpl.html>.\n\
|
||||
Dmitry Isaenko, 2025, Russia.\n\
|
||||
https://redrise.ru, https://github.com/developersu";
|
||||
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\
|
||||
static char doc1[] = "Apply one effect for everything or configure each 'device' separately\v\
|
||||
Command's related options:\n\
|
||||
Synchronized\n\
|
||||
* color: color (-c ...)\n\
|
||||
|
@ -34,7 +37,7 @@ static struct argp_option options[] = {
|
|||
{"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},
|
||||
{"brightness", 'b', "value", 0, "Brightness (0..4)" , 2},
|
||||
|
||||
{"z1", Z1, "command", 0, "Command for zone 1", 3 },
|
||||
{"z2", Z2, "command", 0, "Command for zone 2", 3 },
|
||||
|
@ -50,19 +53,19 @@ static struct argp_option options[] = {
|
|||
{"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 },
|
||||
{"i1", I1, "value", 0, "Intensity/frequency for zone 1 (0..4)", 4 },
|
||||
{"i2", I2, "value", 0, "Intensity/frequency for zone 2 (0..4)", 4 },
|
||||
{"i3", I3, "value", 0, "Intensity/frequency for zone 3 (0..4)", 4 },
|
||||
{"i4", I4, "value", 0, "Intensity/frequency for zone 4 (0..4)", 4 },
|
||||
{"i5", I5, "value", 0, "Intensity/frequency for zone 5 (0..4)", 4 },
|
||||
{"i6", I6, "value", 0, "Intensity/frequency for zone 6 (0..4)", 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 },
|
||||
{"b1", B1, "value", 0, "Brightness for zone 1 (0..4)", 4 },
|
||||
{"b2", B2, "value", 0, "Brightness for zone 2 (0..4)", 4 },
|
||||
{"b3", B3, "value", 0, "Brightness for zone 3 (0..4)", 4 },
|
||||
{"b4", B4, "value", 0, "Brightness for zone 4 (0..4)", 4 },
|
||||
{"b5", B5, "value", 0, "Brightness for zone 5 (0..4)", 4 },
|
||||
{"b6", B6, "value", 0, "Brightness for zone 6 (0..4)", 4 },
|
||||
|
||||
{"quiet", 'q', 0, 0, "Mute output" , 7},
|
||||
{"verbose", 'v', 0, 0, "Verbose output" , 7},
|
||||
|
|
|
@ -436,11 +436,11 @@ int flash(int brightness, int frequency, unsigned char red, unsigned char green,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int doubleFlash(int brighness, int frequency, unsigned char red, unsigned char green, unsigned char blue){
|
||||
int doubleFlash(int brightness, int frequency, unsigned char red, unsigned char green, unsigned char blue){
|
||||
|
||||
unsigned char brgt;
|
||||
|
||||
switch (brighness){
|
||||
switch (brightness){
|
||||
case 0:
|
||||
brgt = 0x1a;
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue