diff --git a/README.md b/README.md index d05cc08..a41afee 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # argb controls for 048d:5711 Integrated Technology Express, Inc. GIGABYTE Device -![License](https://img.shields.io/badge/License-GPLv3-blue.svg) [![status-badge](https://ci.redrise.ru/api/badges/13/status.svg)](https://ci.redrise.ru/repos/13) +[![status-badge](https://ci.redrise.ru/api/badges/13/status.svg)](https://ci.redrise.ru/repos/13) Reference hardware used: Z890 AORUS PRO ICE diff --git a/SPECIFICATION.md b/SPECIFICATION.md index 2a2cc4f..4415936 100755 --- a/SPECIFICATION.md +++ b/SPECIFICATION.md @@ -198,7 +198,7 @@ EXAMPLE: --- -#### Flash (user selects: intensity, color and brightness) +#### Flash (user selects: frequency, color and brightness) ``` ↓↓↓↓↓↓ - Color BGR cc2204000000000000000003__00______000000000064006400____0000000101 @@ -208,7 +208,7 @@ cc2640000000000000000003__00______000000000064006400____0000000101 cc2780000000000000000003__00______000000000064006400____0000000101 cc9100020000000000000003__00______000000000064006400____0000000101 cc28ff07 ↑↑ ↑↑↑↑ - ff → Intensity max 2003 → Brightness max + ff → Brightness max 2003 → Frequency max b3 -1 b004 -1 80 -2 4006 -2 4d -3 d007 -3 @@ -219,7 +219,7 @@ EXAMPLE: --- -#### Flash-double (user selects: brightness, color and intensity) +#### Flash-double (user selects: brightness, color and frequency) ``` ↓↓↓↓↓↓ - Color BRG cc2204000000000000000003__00______000000000064006400____0000000102 @@ -229,7 +229,7 @@ cc2640000000000000000003__00______000000000064006400____0000000102 cc2780000000000000000003__00______000000000064006400____0000000102 cc9100020000000000000003__00______000000000064006400____0000000102 cc28ff07 ↑↑ ↑↑↑↑ - ff → Brightness max e803 → Intensity max + ff → Brightness max e803 → Frequency max b3 -1 7805 -1 80 -2 0807 -2 4d -3 9808 -3 diff --git a/src/argbColors.c b/src/argbColors.c index beb92a9..922f7a9 100644 --- a/src/argbColors.c +++ b/src/argbColors.c @@ -132,6 +132,12 @@ int main(int argc, char *argv[]) { 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); diff --git a/src/commands.c b/src/commands.c index 51569f6..090cebe 100644 --- a/src/commands.c +++ b/src/commands.c @@ -311,9 +311,301 @@ int impulse(int intensity, unsigned char red, unsigned char green, unsigned char return 0; } +// flash - 1 = brighness; 2 - frequency +int flash(int brightness, int frequency, unsigned char red, unsigned char green, unsigned char blue){ -// Impulse -// Flash -// 2xFlash -// Cycle \ No newline at end of file + unsigned char brgt; + + switch (brightness){ + case 0: + brgt = 0x1a; + break; + case 1: + brgt = 0x4d; + break; + case 2: + brgt = 0x80; + break; + case 3: + brgt = 0xb3; + break; + case 4: + brgt = 0xff; + break; + default: + printf("Intensity must be defined in range of 0..4\n"); + return 1; + } + + unsigned char *F; + + switch (frequency){ + case 0: + F = (unsigned char [2]) { 0x60, 0x09 }; // 6009 + break; + case 1: + F = (unsigned char [2]) { 0xd0, 0x07 }; // d007 + break; + case 2: + F = (unsigned char [2]) { 0x40, 0x06 }; // 4006 + break; + case 3: + F = (unsigned char [2]) { 0xb0, 0x04 }; // b004 + break; + case 4: + F = (unsigned char [2]) { 0x20, 0x03 }; // 2003 + break; + default: + printf("Brightness must be defined in range of 0..4\n"); + return 1; + } + + // cc2204000000000000000003__00______000000000064006400____0000000101 + unsigned char dir1[64] = { 0xcc, 0x22, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, brgt, 0x00, blue, green, + red, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, F[0], F[1], 0x00, 0x00, 0x00, 0x01, + 0x01, }; + // cc2410000000000000000003__00______000000000064006400____0000000101 + unsigned char dir2[64] = { 0xcc, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, brgt, 0x00, blue, green, + red, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, F[0], F[1], 0x00, 0x00, 0x00, 0x01, + 0x01, }; + // cc2520000000000000000003__00______000000000064006400____0000000101 + unsigned char dir3[64] = { 0xcc, 0x25, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, brgt, 0x00, blue, green, + red, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, F[0], F[1], 0x00, 0x00, 0x00, 0x01, + 0x01, }; + // cc2640000000000000000003__00______000000000064006400____0000000101 + unsigned char dir4[64] = { 0xcc, 0x26, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, brgt, 0x00, blue, green, + red, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, F[0], F[1], 0x00, 0x00, 0x00, 0x01, + 0x01, }; + // cc2780000000000000000003__00______000000000064006400____0000000101 + unsigned char dir5[64] = { 0xcc, 0x27, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, brgt, 0x00, blue, green, + red, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, F[0], F[1], 0x00, 0x00, 0x00, 0x01, + 0x01, }; + // cc9100020000000000000003__00______000000000064006400____0000000101 + unsigned char dir6[64] = { 0xcc, 0x91, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, brgt, 0x00, blue, green, + red, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, F[0], F[1], 0x00, 0x00, 0x00, 0x01, + 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("\rFlash (Separate) sequence sent\n"); + + return 0; +} + +int doubleFlash(int brighness, int frequency, unsigned char red, unsigned char green, unsigned char blue){ + + unsigned char brgt; + + switch (brighness){ + case 0: + brgt = 0x1a; + break; + case 1: + brgt = 0x4d; + break; + case 2: + brgt = 0x80; + break; + case 3: + brgt = 0xb3; + break; + case 4: + brgt = 0xff; + break; + default: + printf("Brightness must be defined in range of 0..4\n"); + return 1; + } + + unsigned char *F; + + switch (frequency){ + case 0: + F = (unsigned char [2]) { 0x28, 0x0a }; // 280a + break; + case 1: + F = (unsigned char [2]) { 0x98, 0x08 }; // 9808 + break; + case 2: + F = (unsigned char [2]) { 0x08, 0x07 }; // 0807 + break; + case 3: + F = (unsigned char [2]) { 0x78, 0x05 }; // 7805 + break; + case 4: + F = (unsigned char [2]) { 0xe8, 0x03 }; // e803 + break; + default: + printf("Frequency must be defined in range of 0..4\n"); + return 1; + } + + //cc2204000000000000000003__00______000000000064006400____0000000102 + unsigned char dir1[64] = { 0xcc, 0x22, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, brgt, 0x00, blue, green, + red, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, F[0], F[1], 0x00, 0x00, 0x00, 0x01, + 0x02, }; + //cc2410000000000000000003__00______000000000064006400____0000000102 + unsigned char dir2[64] = { 0xcc, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, brgt, 0x00, blue, green, + red, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, F[0], F[1], 0x00, 0x00, 0x00, 0x01, + 0x02, }; + //cc2520000000000000000003__00______000000000064006400____0000000102 + unsigned char dir3[64] = { 0xcc, 0x25, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, brgt, 0x00, blue, green, + red, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, F[0], F[1], 0x00, 0x00, 0x00, 0x01, + 0x02, }; + //cc2640000000000000000003__00______000000000064006400____0000000102 + unsigned char dir4[64] = { 0xcc, 0x26, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, brgt, 0x00, blue, green, + red, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, F[0], F[1], 0x00, 0x00, 0x00, 0x01, + 0x02, }; + //cc2780000000000000000003__00______000000000064006400____0000000102 + unsigned char dir5[64] = { 0xcc, 0x27, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, brgt, 0x00, blue, green, + red, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, F[0], F[1], 0x00, 0x00, 0x00, 0x01, + 0x02, }; + //cc9100020000000000000003__00______000000000064006400____0000000102 + unsigned char dir6[64] = { 0xcc, 0x91, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, brgt, 0x00, blue, green, + red, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, F[0], F[1], 0x00, 0x00, 0x00, 0x01, + 0x02, }; + + counter = 0; + limit = 7; + + 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("\rDouble flash (Separate) sequence sent\n"); + + return 0; +} + +int cycle(int intensity, int brightness){ + + unsigned char brgt; + + switch (brightness){ + case 0: + brgt = 0x1a; + break; + case 1: + brgt = 0x4d; + break; + case 2: + brgt = 0x80; + break; + case 3: + brgt = 0xb3; + break; + case 4: + brgt = 0xff; + break; + default: + printf("Brightness must be defined in range of 0..4\n"); + return 1; + } + + unsigned char *I; + + switch (intensity){ + case 0: + I = (unsigned char [4]) { 0x78, 0x05, 0xb0, 0x04 }; // 7805b004 + break; + case 1: + I = (unsigned char [4]) { 0x52, 0x03, 0xee, 0x02 }; // 5203ee02 + break; + case 2: + I = (unsigned char [4]) { 0x26, 0x02, 0xc2, 0x01 }; // 2602c201 + break; + case 3: + I = (unsigned char [4]) { 0x58, 0x02, 0x90, 0x01 }; // 58029001 + break; + case 4: + I = (unsigned char [4]) { 0x90, 0x01, 0xc8, 0x00 }; // 9001c800 + break; + default: + printf("Intensity must be defined in range of 0..4\n"); + return 1; + } + + counter = 0; + limit = 7; + + //cc2204000000000000000004__00fd00fe0000000000________0000000007 + unsigned char dir1[64] = { 0xcc, 0x22, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, brgt, 0x00, 0xfd, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, I[0], I[1], I[2], I[3], 0x00, 0x00, 0x00, 0x00, 0x07, }; + //cc2410000000000000000004__00fd00fe0000000000________0000000007 + unsigned char dir2[64] = { 0xcc, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, brgt, 0x00, 0xfd, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, I[0], I[1], I[2], I[3], 0x00, 0x00, 0x00, 0x00, 0x07, }; + //cc2520000000000000000004__00fd00fe0000000000________0000000007 + unsigned char dir3[64] = { 0xcc, 0x25, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, brgt, 0x00, 0xfd, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, I[0], I[1], I[2], I[3], 0x00, 0x00, 0x00, 0x00, 0x07, }; + //cc2640000000000000000004__00fd00fe0000000000________0000000007 + unsigned char dir4[64] = { 0xcc, 0x26, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, brgt, 0x00, 0xfd, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, I[0], I[1], I[2], I[3], 0x00, 0x00, 0x00, 0x00, 0x07, }; + //cc2780000000000000000004__00fd00fe0000000000________0000000007 + unsigned char dir5[64] = { 0xcc, 0x27, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, brgt, 0x00, 0xfd, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, I[0], I[1], I[2], I[3], 0x00, 0x00, 0x00, 0x00, 0x07, }; + //cc9100020000000000000004__00fd00fe0000000000________0000000007 + unsigned char dir6[64] = { 0xcc, 0x91, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, brgt, 0x00, 0xfd, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, I[0], I[1], I[2], I[3], 0x00, 0x00, 0x00, 0x00, 0x07, }; + + 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; +} \ No newline at end of file