works
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

This commit is contained in:
Dmitry Isaenko 2025-02-02 20:26:38 +03:00
parent d9911a4d68
commit c990922489
4 changed files with 62 additions and 31 deletions

View file

@ -20,7 +20,8 @@
#include "commands.c"
#include "iousb.c"
enum synchronized_commands { SYNC_COLOR, SYNC_WAVE, SYNC_WAVE2, SYNC_OFF, SPEC_IMPULSE }
enum synchronized_commands { SYNC_COLOR, SYNC_WAVE, SYNC_WAVE2, SYNC_OFF,
SPEC_IMPULSE, SPEC_FLASH, SPEC_FLASH2, SPEC_CYCLE }
synchronized_commands;
struct separate_c{
@ -58,7 +59,7 @@ void parse_color(char *color, unsigned int *red, unsigned int *green, unsigned i
*red = *green = *blue = 0xff;
}
int parse_brightness(char *brightness){
int parse_brightness_intensity(char *brightness){
int ret = atoi(brightness);
if (ret > 5)
return 0;
@ -78,9 +79,15 @@ int prepare_sync(char* command){
sync_cmd = SYNC_OFF;
else if (strcmp(command, "impulse") == 0)
sync_cmd = SPEC_IMPULSE;
else if (strcmp(command, "flash") == 0)
sync_cmd = SPEC_FLASH;
else if (strcmp(command, "flash2") == 0)
sync_cmd = SPEC_FLASH2;
else if (strcmp(command, "cycle") == 0)
sync_cmd = SPEC_CYCLE;
else{
printf("Invalid command \"%s\"\n"
"Allowed: color wave wave2 off\n", command);
"Allowed: color wave wave2 off. Plus aliases: impulse flash flash2 cycle\n", command);
return -1;
}
return 0;
@ -139,7 +146,7 @@ int make_separate_commands_set(){
return 0;
}
int sync_flow(unsigned int red, unsigned int green, unsigned int blue){
int sync_flow(unsigned int red, unsigned int green, unsigned int blue, unsigned int brightness, unsigned int intensity){
switch (sync_cmd){
case SYNC_COLOR:
return staticColorSync(red, green, blue);
@ -150,12 +157,24 @@ int sync_flow(unsigned int red, unsigned int green, unsigned int blue){
case SYNC_OFF:
return turnOffBacklightSync();
case SPEC_IMPULSE:
make_separate_command(&s, 1, "impulse", red, green, blue, 4, 4);
make_separate_command(&s, 2, "impulse", red, green, blue, 4, 4);
make_separate_command(&s, 3, "impulse", red, green, blue, 4, 4);
make_separate_command(&s, 4, "impulse", red, green, blue, 4, 4);
make_separate_command(&s, 5, "impulse", red, green, blue, 4, 4);
make_separate_command(&s, 6, "impulse", red, green, blue, 4, 4);
for (int i = 1; i < 7; i++){
make_separate_command(&s, i, "impulse", red, green, blue, brightness, intensity);
}
return runStaticCommand(s);
case SPEC_FLASH:
for (int i = 1; i < 7; i++){
make_separate_command(&s, i, "flash", red, green, blue, brightness, intensity);
}
return runStaticCommand(s);
case SPEC_FLASH2:
for (int i = 1; i < 7; i++){
make_separate_command(&s, i, "flash2", red, green, blue, brightness, intensity);
}
return runStaticCommand(s);
case SPEC_CYCLE:
for (int i = 1; i < 7; i++){
make_separate_command(&s, i, "cycle", red, green, blue, brightness, intensity);
}
return runStaticCommand(s);
default:
return -1;
@ -171,7 +190,7 @@ int main(int argc, char *argv[]) {
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.i5 = arguments.i6 = arguments.intensity = "4";
arguments.b1 = arguments.b2 = arguments.b3 = arguments.b4 =
arguments.b5 = arguments.b6 = arguments.brightness = "4";
arguments.z1 = arguments.z2 = arguments.z3 =
@ -187,9 +206,10 @@ int main(int argc, char *argv[]) {
return -1;
}
unsigned int red, green, blue, brightness;
unsigned int red, green, blue, brightness, intensity;
parse_color(arguments.color, &red, &green, &blue);
brightness = parse_brightness(arguments.brightness);
brightness = parse_brightness_intensity(arguments.brightness);
intensity = parse_brightness_intensity(arguments.intensity);
if (arguments.separate == 1){
sc.command1 = arguments.z1;
@ -206,19 +226,19 @@ int main(int argc, char *argv[]) {
parse_color(arguments.c5, &sc.red5, &sc.green5, &sc.blue5);
parse_color(arguments.c6, &sc.red6, &sc.green6, &sc.blue6);
sc.brightness1 = parse_brightness(arguments.b1);
sc.brightness2 = parse_brightness(arguments.b2);
sc.brightness3 = parse_brightness(arguments.b3);
sc.brightness4 = parse_brightness(arguments.b4);
sc.brightness5 = parse_brightness(arguments.b5);
sc.brightness6 = parse_brightness(arguments.b6);
sc.brightness1 = parse_brightness_intensity(arguments.b1);
sc.brightness2 = parse_brightness_intensity(arguments.b2);
sc.brightness3 = parse_brightness_intensity(arguments.b3);
sc.brightness4 = parse_brightness_intensity(arguments.b4);
sc.brightness5 = parse_brightness_intensity(arguments.b5);
sc.brightness6 = parse_brightness_intensity(arguments.b6);
sc.intensity1 = parse_brightness(arguments.i1);
sc.intensity2 = parse_brightness(arguments.i2);
sc.intensity3 = parse_brightness(arguments.i3);
sc.intensity4 = parse_brightness(arguments.i4);
sc.intensity5 = parse_brightness(arguments.i5);
sc.intensity6 = parse_brightness(arguments.i6);
sc.intensity1 = parse_brightness_intensity(arguments.i1);
sc.intensity2 = parse_brightness_intensity(arguments.i2);
sc.intensity3 = parse_brightness_intensity(arguments.i3);
sc.intensity4 = parse_brightness_intensity(arguments.i4);
sc.intensity5 = parse_brightness_intensity(arguments.i5);
sc.intensity6 = parse_brightness_intensity(arguments.i6);
if (make_separate_commands_set(&sc))
return -1;
@ -251,7 +271,7 @@ int main(int argc, char *argv[]) {
return -1;
}
}
else if (sync_flow(red, green, blue)){ // Sync & not-defined
else if (sync_flow(red, green, blue, brightness, intensity)){ // Sync & not-defined
printf("Command transfer failure\n");
libusb_close(dev_handle);
return -1;

View file

@ -25,11 +25,11 @@ Separate\n\
* flash2: color (-cN ...), brightness (-bN ...), frequency (-iN ...)\n\
* cycle: intensity (-iN ...), brightness (-bN ...)\n\n\
Zones description:\n\
||1| \n\
||4| \n\
| 6| || |||| | \n\
| | |||| | \n\
|__| || | \n\
| |_4_| | \n\
| |_1_| | \n\
|___2_3_5_______| \n";
static struct argp_option options[] = {
@ -38,6 +38,7 @@ static struct argp_option options[] = {
{"color", 'c', "RGB_color", 0, "Color (000000..ffffff)" , 2},
{"brightness", 'b', "value", 0, "Brightness (0..4)" , 2},
{"intensity", 'i', "value", 0, "Intensity (0..4)" , 2},
{"z1", Z1, "command", 0, "Command for zone 1", 3 },
{"z2", Z2, "command", 0, "Command for zone 2", 3 },
@ -78,7 +79,7 @@ struct arguments{
int sync;
int separate;
char *color,
*brightness,
*brightness, *intensity,
*z1, *z2, *z3, *z4, *z5, *z6,
*c1, *c2, *c3, *c4, *c5, *c6,
*i1, *i2, *i3, *i4, *i5, *i6,
@ -106,6 +107,9 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state){
case 'b':
arguments->brightness = arg;
break;
case 'i':
arguments->intensity = arg;
break;
case 'v':
verbose_output = 1;
case Z1:

View file

@ -198,7 +198,15 @@ int runStaticCommand(separate_commands_set c_set){
counter = 0;
limit = 7;
#ifdef DEBUG
print_array(c_set.dir1, 64);
print_array(c_set.dir2, 64);
print_array(c_set.dir3, 64);
print_array(c_set.dir4, 64);
print_array(c_set.dir5, 64);
print_array(c_set.dir6, 64);
#endif
if(64 != writeUsb(c_set.dir1))
return 1;

View file

@ -19,7 +19,6 @@ int findDevice(libusb_device *dev){
}
int configure_device(){
libusb_context *context;
int ret = libusb_init_context(&context, /*options=*/NULL, /*num_options=*/0);
if (ret < 0){