commit 8ca904eeab2293f6adf1ba0cac296774b111df66 Author: Dmitry Isaenko Date: Thu Jan 23 02:08:56 2025 +0300 init repo by specification diff --git a/SPECIFICATION.md b/SPECIFICATION.md new file mode 100755 index 0000000..4eb9997 --- /dev/null +++ b/SPECIFICATION.md @@ -0,0 +1,255 @@ +# Specification of the 048d:5711 Integrated Technology Express, Inc. GIGABYTE Device + +#### Structure description + +**USB control transfer used** +(and usbhid 🤓) + +Endpoint: **0x00**, Direction: **OUT** +* bmRequestType: **0x21** +* bRequest: **9** +* wValue: **0x03cc** +* wIndex: **1 (0x0001)** +* wLength: **64** +* Data fragment: as described below. Trailing zeroes trimmed in this document however must be defined within actual data interaction. Therefore 'wLength: 64' is imperative'. + +In libusb semantic: +``` +unsigned char message[64] = { 0XCC, 0X60, }; // example 'cc60' +int returned_value = libusb_control_transfer(dev_handle, 0x21, 9, 0x03cc, 1, message, 64, TIMEOUT); +``` + +Endpoint: **0x80**, Direction: **IN** +* bmRequestType: **0xa1** +* bRequest: **1** +* wValue: **0x03cc** +* wIndex: **1 (0x0001)** +* wLength: **64** + +In libusb semantic: +``` +unsigned char buf[64] = {}; +int returned_value = libusb_control_transfer(dev_handle, 0xa1, 1, 0x03cc, 1, buf, sizeof(buf), TIMEOUT); +``` +**NOTE:** input values below marked with prefix "INPUT << " + +---- + +Interaction could be split on three phases: Application startup, command transmission, ending + +### Application initial flow: +``` +cc60 ↓↓↓↓↓↓↓↓ version in hex +INPUT << cc01000100001802000000034954353731312d47494741425954452056302e302e32342e320000000000000002000100020001000001020000c01157 +cc60 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ascii text: 'IT5711-GIGABYTE V0.0.24.2' +INPUT << cc01000100001802000000034954353731312d47494741425954452056302e302e32342e320000000000000002000100020001000001020000c01157 +cc34 +cc48 +INPUT << cc +cc61 +in? << cc000000020001000200010002000100020001 +cc3c +cc3e +INPUT << cc +cc34 +cc3d +cc3f +INPUT << cc +cc34 +cc38 +``` + +### Commands + +NOTE: Переходы между изменениями цвета в sync режимах идут без следующих пред-последовательностей. Но переход от отдельных к синхронизированному - через стандартные ппоследовательности + +There are two types of commands: +* syncronized - applies same setting to everything +* separate - adjusts settings separately + +***Commands sent before actual directive. Structure is always the same*** +``` +cc20 +cc21 +cc22 +cc23 +cc24 +cc25 +cc26 +cc27 +cc90 +cc91 +cc92 +cc28ff07 +``` + +--- +#### Turn off backlight - Applies to everything! +``` +cc20ff070000000000000001ff +cc28ff07 +``` +EXAMPLE: +`cc20ff070000000000000001ff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000` + +--- + +#### Turn off backlight (user selects: channel) +``` +cc2204000000000000000001ff ← 1 |‾‾|‾‾‾‾‾‾‾‾‾‾‾1| +cc2410000000000000000001ff ← 2 | 6| |‾‾| |||| | +cc2520000000000000000001ff ← 3 | | ‾‾ |||| | +cc2640000000000000000001ff ← 4 |__| |‾‾‾| | +cc2780000000000000000001ff ← 5 | |_4_| | +cc9100020000000000000001ff ← 6 |___2_3_5_______| +cc28ff07 +``` +EXAMPLE: +`cc2204000000000000000001ff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000` + +--- + +#### Wave 1 - Applies to everything! +``` +cc20ff070000000000000001ff ← turns off backlight +cc28ff07 +cc220000000000000000000964000000000000000000260200000000000007 +cc2804 +``` +EXAMPLE: +`cc220000000000000000000964000000000000000000260200000000000007000000000000000000000000000000000000000000000000000000000000000000` + +--- + +#### Wave 2 - Applies to everything! +``` +cc20ff070000000000000001ff ← turns off backlight +cc28ff07 +cc220000000000000000000a640000000000000000007d0000000000000020 +cc2804 +``` +EXAMPLE: +`cc220000000000000000000a640000000000000000007d0000000000000020000000000000000000000000000000000000000000000000000000000000000000` + +--- + +#### Individually set static color (user selects: color, brightness) +``` + ↓↓↓↓↓↓ → Color as RGB +cc2204000000000000000001__00______ +cc2410000000000000000001__00______ +cc2520000000000000000001__00______ +cc2640000000000000000001__00______ +cc2780000000000000000001__00______ +cc9100020000000000000001__00______ +cc28ff07 ↑↑ + ff → Brightness max + b3 -1 + 80 -2 + 4d -3 + 1a -4 +``` +EXAMPLE: +`cc2204000000000000000001ff00ffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000` + +--- + +#### Synchronized static color (user selects: color) - Applies to everything! +``` + ↓↓↓↓↓↓ - Color as RGB +cc20ff070000000000000001ff00______ +cc28ff07 +``` +EXAMPLE: +`cc20ff070000000000000001ff00ffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000` + +--- + +#### Impulse (user selects: color, intensity) +``` + ↓↓↓↓↓↓ - Color as RGB +cc22040000000000000000026400______0000000000____________00000001 +cc24100000000000000000026400______0000000000____________00000001 +cc25200000000000000000026400______0000000000____________00000001 +cc26400000000000000000026400______0000000000____________00000001 +cc27800000000000000000026400______0000000000____________00000001 +cc91000200000000000000026400______0000000000____________00000001 +cc28ff07 ↑↑↑↑↑↑↑↑↑↑↑↑ + f401f401fa00 → Intensity max + bc02bc025e01 - 1 + 84038403c201 - 2 + b004b004f401 - 3 + 400640062003 - 4 +``` +EXAMPLE: +`cc220400000000000000000264000040fe0000000000b004b004f401000000010000000000000000000000000000000000000000000000000000000000000000` + +--- + +#### Flash (user selects: intensity, color and brightness) +``` + ↓↓↓↓↓↓ - Color RGB or BGR +cc2204000000000000000003__00______000000000064006400____0000000101 +cc2410000000000000000003__00______000000000064006400____0000000101 +cc2520000000000000000003__00______000000000064006400____0000000101 +cc2640000000000000000003__00______000000000064006400____0000000101 +cc2780000000000000000003__00______000000000064006400____0000000101 +cc9100020000000000000003__00______000000000064006400____0000000101 +cc28ff07 ↑↑ ↑↑↑↑ + ff → Intensity max 2003 → Brightness max + b3 -1 b004 -1 + 80 -2 4006 -2 + 4d -3 d007 -3 + 1a -4 6009 -4 +``` +EXAMPLE: +`cc2204000000000000000003ff00ffffff0000000000640064002003000000010100000000000000000000000000000000000000000000000000000000000000` + +--- + +#### Flash-double (user selects: brightness, color and intensity) +``` + ↓↓↓↓↓↓ - Color RGB +cc2204000000000000000003__00______000000000064006400____0000000102 +cc2410000000000000000003__00______000000000064006400____0000000102 +cc2520000000000000000003__00______000000000064006400____0000000102 +cc2640000000000000000003__00______000000000064006400____0000000102 +cc2780000000000000000003__00______000000000064006400____0000000102 +cc9100020000000000000003__00______000000000064006400____0000000102 +cc28ff07 ↑↑ ↑↑↑↑ + ff → Brightness max e803 → Intensity max + b3 -1 7805 -1 + 80 -2 0807 -2 + 4d -3 9808 -3 + 1a -4 280a -4 +``` +EXAMPLE: +`cc2204000000000000000003ff00fd00fe000000000064006400e803000000010200000000000000000000000000000000000000000000000000000000000000` + +--- + +#### Cycle (user selects: intensive and brightness) +``` + ↓↓↓↓↓↓- Old values; doesn't make any difference +cc2204000000000000000004__00fd00fe0000000000________0000000007 +cc2410000000000000000004__00fd00fe0000000000________0000000007 +cc2520000000000000000004__00fd00fe0000000000________0000000007 +cc2640000000000000000004__00fd00fe0000000000________0000000007 +cc2780000000000000000004__00fd00fe0000000000________0000000007 +cc9100020000000000000004__00fd00fe0000000000________0000000007 +cc28ff07 ↑↑ ↑↑↑↑↑↑↑↑ + ff → Bright. max 9001c800 → Intensive max + b3 -1 58029001 -1 + 80 -2 2602c201 -2 + 4d -3 5203ee02 -3 + 1a -4 7805b004 -4 +``` +EXAMPLE: +`cc91000200000000000000041a00f0f0f000000000007805b0040000000007000000000000000000000000000000000000000000000000000000000000000000` + +--- +### Termination +[repeat last setup request for some reason] +``` +cc4701 +```