+staticColorSync +impulse
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

This commit is contained in:
Dmitry Isaenko 2025-01-26 19:08:12 +03:00
parent b6fcc80f38
commit e2be723c56
3 changed files with 132 additions and 17 deletions

View file

@ -26,7 +26,7 @@ int findDevice(libusb_device *dev){
} }
if (desc.idVendor == VID && desc.idProduct == PID){ if (desc.idVendor == VID && desc.idProduct == PID){
printf("Found VID:PID device: %04x:%04x\n", desc.idVendor, desc.idProduct); printf("Device found: %04x:%04x\n", desc.idVendor, desc.idProduct);
return 1; return 1;
} }
@ -76,7 +76,9 @@ int main(int argc, char *argv[]) {
} }
// We will rule, not kernel modules :D // We will rule, not kernel modules :D
printf("libusb_set_auto_detach_kernel_driver - %d\n", libusb_set_auto_detach_kernel_driver(dev_handle, 1)); ret = libusb_set_auto_detach_kernel_driver(dev_handle, 1);
#ifdef DEBUG
printf("libusb_set_auto_detach_kernel_driver - %d\n", ret);
// Let's find out current CONFIGURATION // Let's find out current CONFIGURATION
int bConfigurationValue; int bConfigurationValue;
@ -86,17 +88,19 @@ int main(int argc, char *argv[]) {
printf("libusb_get_configuration failed: %d\n", ret); printf("libusb_get_configuration failed: %d\n", ret);
return ret; return ret;
} }
printf("Current bConfigurationValue: %d\n", bConfigurationValue); printf("Current bConfigurationValue: %d\n", bConfigurationValue);
#endif
// if device used by kernel drivers already // Check if device used by kernel drivers already
ret = libusb_kernel_driver_active(dev_handle, 1); ret = libusb_kernel_driver_active(dev_handle, 1);
printf("libusb_kernel_driver_active: %d\n", ret); printf("Kernel driver is%s", ret == 0?" not active\n":"active and ");
// Active? Let's try to get control
if(ret != LIBUSB_ERROR_NOT_SUPPORTED && ret < 0){ if(ret != LIBUSB_ERROR_NOT_SUPPORTED && ret < 0){
ret = libusb_detach_kernel_driver(dev_handle, 1); ret = libusb_detach_kernel_driver(dev_handle, 1);
if (ret != LIBUSB_ERROR_NOT_SUPPORTED && ret < 0) { if (ret != LIBUSB_ERROR_NOT_SUPPORTED && ret < 0) {
libusb_exit(NULL); libusb_exit(NULL);
printf("libusb_detach_kernel_driver failed: %d\n", ret); printf("detach kernel driver attempt failed: %d\n", ret);
return ret; return ret;
} }
} }
@ -128,12 +132,19 @@ int main(int argc, char *argv[]) {
return -1; return -1;
} }
if (impulse(0, 0xff, 0x2f, 0xff)){
printf("Command transfer failure\n");
libusb_close(dev_handle);
return -1;
}
/*
// 0xff, 0x2f, 0xff <3
if(staticColorSeparate(0xff, 0xff, 0x2b, 0x00)){ if(staticColorSeparate(0xff, 0xff, 0x2b, 0x00)){
printf("Command transfer failure\n"); printf("Command transfer failure\n");
libusb_close(dev_handle); libusb_close(dev_handle);
return -1; return -1;
} }
//*/
if (terminate_sequence()){ if (terminate_sequence()){
printf("Termination sequence transfer failure\n"); printf("Termination sequence transfer failure\n");
libusb_close(dev_handle); libusb_close(dev_handle);

View file

@ -214,3 +214,106 @@ int wave2(){
return 0; return 0;
} }
int staticColorSync(unsigned char red, unsigned char green, unsigned char blue){
if (prefix())
return 1;
counter = 0;
limit = 2;
//cc 20 ff 07 00 00 00 00 00 00 00 01 ff 00 __ __ __
unsigned char dir1[64] = { 0xcc, 0x20, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, blue, green, red, };
if(64 != writeUsb(dir1))
return 1;
if(64 != writeUsb(end_transaction))
return 1;
printf("\rStatic Color (Sync) sequence sent\n");
return 0;
}
int impulse(int intensity, unsigned char red, unsigned char green, unsigned char blue){
unsigned char *I;
switch (intensity){
case 0:
I = (unsigned char [6]) { 0x40, 0x06, 0x40, 0x06, 0x20, 0x03 }; // 400640062003
break;
case 1:
I = (unsigned char [6]) { 0xb0, 0x04, 0xb0, 0x04, 0xf4, 0x01 }; // b004b004f401
break;
case 2:
I = (unsigned char [6]) { 0x84, 0x03, 0x84, 0x03, 0xc2, 0x01 }; // 84038403c201
break;
case 3:
I = (unsigned char [6]) { 0xbc, 0x02, 0xbc, 0x02, 0x5e, 0x01 }; // bc02bc025e01
break;
case 4:
I = (unsigned char [6]) { 0xf4, 0x01, 0xf4, 0x01, 0xfa, 0x00 }; // f401f401fa00
break;
default:
printf("Intensity must be defined in range of 0..4\n");
return 1;
}
if (prefix())
return 1;
counter = 0;
limit = 7;
//cc22040000000000000000026400______0000000000____________00000001
unsigned char dir1[64] = { 0xcc, 0x22, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x64, 0x00, blue, green,
red, 0x00, 0x00, 0x00, 0x00, 0x00, I[0], I[1], I[2], I[3], I[4], I[5], 0x00, 0x00, 0x00, 0x01, };
//cc24100000000000000000026400______0000000000____________00000001
unsigned char dir2[64] = { 0xcc, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x64, 0x00, blue, green,
red, 0x00, 0x00, 0x00, 0x00, 0x00, I[0], I[1], I[2], I[3], I[4], I[5], 0x00, 0x00, 0x00, 0x01, };
//cc25200000000000000000026400______0000000000____________00000001
unsigned char dir3[64] = { 0xcc, 0x25, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x64, 0x00, blue, green,
red, 0x00, 0x00, 0x00, 0x00, 0x00, I[0], I[1], I[2], I[3], I[4], I[5], 0x00, 0x00, 0x00, 0x01, };
//cc26400000000000000000026400______0000000000____________00000001
unsigned char dir4[64] = { 0xcc, 0x26, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x64, 0x00, blue, green,
red, 0x00, 0x00, 0x00, 0x00, 0x00, I[0], I[1], I[2], I[3], I[4], I[5], 0x00, 0x00, 0x00, 0x01, };
//cc27800000000000000000026400______0000000000____________00000001
unsigned char dir5[64] = { 0xcc, 0x27, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x64, 0x00, blue, green,
red, 0x00, 0x00, 0x00, 0x00, 0x00, I[0], I[1], I[2], I[3], I[4], I[5], 0x00, 0x00, 0x00, 0x01, };
//cc91000200000000000000026400______0000000000____________00000001
unsigned char dir6[64] = { 0xcc, 0x91, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x64, 0x00, blue, green,
red, 0x00, 0x00, 0x00, 0x00, 0x00, I[0], I[1], I[2], I[3], I[4], I[5], 0x00, 0x00, 0x00, 0x01, };
if(64 != writeUsb(dir1))
return 1;
if(64 != writeUsb(dir2))
return 1;
if(64 != writeUsb(dir3))
return 1;
if(64 != writeUsb(dir4))
return 1;
if(64 != writeUsb(dir5))
return 1;
if(64 != writeUsb(dir6))
return 1;
if(64 != writeUsb(end_transaction))
return 1;
printf("\rImpulse (Separate) sequence sent\n");
return 0;
}
// Impulse
// Flash
// 2xFlash
// Cycle

View file

@ -26,7 +26,8 @@ int readUsb(){
} }
#ifdef DEBUG #ifdef DEBUG
printf("INPUT REQUEST\n"); printf("INPUT RESPONSE:\n");
print_array(buffer, 64);
#endif #endif
return ret; return ret;