This commit is contained in:
parent
b6fcc80f38
commit
e2be723c56
3 changed files with 132 additions and 17 deletions
|
@ -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);
|
||||||
|
|
103
src/commands.c
103
src/commands.c
|
@ -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
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue