From 759e09b3a377a7fd36aa3999076cfbe584ff2651 Mon Sep 17 00:00:00 2001 From: TheRogueZeta <6479694-TheRogueZeta@users.noreply.gitlab.com> Date: Mon, 7 Sep 2020 00:24:09 -0700 Subject: [PATCH] Rework Polychrome v1 to be separate from ASRLED/V2 Code cleanup and some register name changes by Adam Honse --- .../PolychromeController.cpp | 96 +++++-- .../PolychromeController.h | 202 ++++++++++---- RGBController/RGBController_Polychrome.cpp | 247 ++++++++++++++---- 3 files changed, 419 insertions(+), 126 deletions(-) diff --git a/Controllers/PolychromeController/PolychromeController.cpp b/Controllers/PolychromeController/PolychromeController.cpp index 1d8708f0a..6ee97b352 100644 --- a/Controllers/PolychromeController/PolychromeController.cpp +++ b/Controllers/PolychromeController/PolychromeController.cpp @@ -90,7 +90,7 @@ unsigned short PolychromeController::ReadFirmwareVersion() { // The firmware register holds two bytes, so the first read should return 2 // If not, report invalid firmware revision FFFF - if (bus->i2c_smbus_read_byte_data(dev, POLYCHROME_REG_FIRMWARE_VER) == 0x02) + if (bus->i2c_smbus_read_byte_data(dev, ASROCK_REG_FIRMWARE_VER) == 0x02) { std::this_thread::sleep_for(1ms); unsigned char major = bus->i2c_smbus_read_byte(dev); @@ -107,22 +107,24 @@ unsigned short PolychromeController::ReadFirmwareVersion() void PolychromeController::ReadLEDConfiguration() { - // The LED configuration register holds 6 bytes, so the first read should return 6 - // If not, set all zone sizes to zero + /*---------------------------------------------------------------------------------*\ + | The LED configuration register holds 6 bytes, so the first read should return 6 | + | If not, set all zone sizes to zero | + \*---------------------------------------------------------------------------------*/ if (bus->i2c_smbus_read_byte_data(dev, POLYCHROME_REG_LED_CONFIG) == 0x06) { std::this_thread::sleep_for(1ms); - zone_led_count[POLYCHROME_ZONE_RGB_LED_0_HDR] = bus->i2c_smbus_read_byte(dev); + zone_led_count[POLYCHROME_ZONE_1] = bus->i2c_smbus_read_byte(dev); std::this_thread::sleep_for(1ms); - zone_led_count[POLYCHROME_ZONE_RGB_LED_1_HDR] = bus->i2c_smbus_read_byte(dev); + zone_led_count[POLYCHROME_ZONE_2] = bus->i2c_smbus_read_byte(dev); std::this_thread::sleep_for(1ms); - zone_led_count[POLYCHROME_ZONE_AUDIO] = bus->i2c_smbus_read_byte(dev); + zone_led_count[POLYCHROME_ZONE_3] = bus->i2c_smbus_read_byte(dev); std::this_thread::sleep_for(1ms); - zone_led_count[POLYCHROME_ZONE_PCH] = bus->i2c_smbus_read_byte(dev); + zone_led_count[POLYCHROME_ZONE_4] = bus->i2c_smbus_read_byte(dev); std::this_thread::sleep_for(1ms); - zone_led_count[POLYCHROME_ZONE_IO_COVER] = bus->i2c_smbus_read_byte(dev); + zone_led_count[POLYCHROME_ZONE_5] = bus->i2c_smbus_read_byte(dev); std::this_thread::sleep_for(1ms); - zone_led_count[POLYCHROME_ZONE_ADDRESSABLE] = bus->i2c_smbus_read_byte(dev); + zone_led_count[POLYCHROME_ZONE_ADDRESSABLE] = bus->i2c_smbus_read_byte(dev); } else { @@ -143,11 +145,10 @@ void PolychromeController::SetColorsAndSpeed(unsigned char led, unsigned char re switch(asrock_type) { case ASROCK_TYPE_ASRLED: - case ASROCK_TYPE_POLYCHROME_V1: /*-----------------------------------------------------*\ | Select LED | \*-----------------------------------------------------*/ - bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_LED_SELECT, 1, select_led_pkt); + bus->i2c_smbus_write_block_data(dev, ASROCK_REG_LED_SELECT, 1, select_led_pkt); std::this_thread::sleep_for(1ms); switch(active_mode) @@ -156,7 +157,7 @@ void PolychromeController::SetColorsAndSpeed(unsigned char led, unsigned char re | These modes take 4 bytes in R/G/B/S order | \*-----------------------------------------------------*/ case ASRLED_MODE_BREATHING: - case ASRLED_MODE_FLASHING: + case ASRLED_MODE_STROBE: case ASRLED_MODE_SPECTRUM_CYCLE: bus->i2c_smbus_write_block_data(dev, active_mode, 4, color_speed_pkt); break; @@ -187,17 +188,70 @@ void PolychromeController::SetColorsAndSpeed(unsigned char led, unsigned char re std::this_thread::sleep_for(1ms); break; + case ASROCK_TYPE_POLYCHROME_V1: + /*-----------------------------------------------------*\ + | Select LED | + \*-----------------------------------------------------*/ + bus->i2c_smbus_write_block_data(dev, ASROCK_REG_LED_SELECT, 1, select_led_pkt); + std::this_thread::sleep_for(1ms); + + switch(active_mode) + { + /*-----------------------------------------------------*\ + | These modes take 4 bytes in R/G/B/S order | + \*-----------------------------------------------------*/ + case POLYCHROME_V1_MODE_BREATHING: + case POLYCHROME_V1_MODE_STROBE: + case POLYCHROME_V1_MODE_SPECTRUM_CYCLE: + case POLYCHROME_V1_MODE_SPRING: + case POLYCHROME_V1_MODE_METEOR: + case POLYCHROME_V1_MODE_STACK: + case POLYCHROME_V1_MODE_CRAM: + case POLYCHROME_V1_MODE_SCAN: + case POLYCHROME_V1_MODE_NEON: + case POLYCHROME_V1_MODE_WATER: + + bus->i2c_smbus_write_block_data(dev, active_mode, 4, color_speed_pkt); + break; + + /*-----------------------------------------------------*\ + | These modes take 3 bytes in R/G/B order | + \*-----------------------------------------------------*/ + default: + case POLYCHROME_V1_MODE_STATIC: + case POLYCHROME_V1_MODE_MUSIC: + bus->i2c_smbus_write_block_data(dev, active_mode, 3, color_speed_pkt); + break; + + /*-----------------------------------------------------*\ + | These modes take 1 byte - speed | + \*-----------------------------------------------------*/ + case POLYCHROME_V1_MODE_RANDOM: + case POLYCHROME_V1_MODE_WAVE: + case POLYCHROME_V1_MODE_RAINBOW: + bus->i2c_smbus_write_block_data(dev, active_mode, 1, &active_speed); + break; + + /*-----------------------------------------------------*\ + | These modes take no bytes | + \*-----------------------------------------------------*/ + case POLYCHROME_V1_MODE_OFF: + break; + } + std::this_thread::sleep_for(1ms); + break; + case ASROCK_TYPE_POLYCHROME_V2: /*-----------------------------------------------------*\ | Select LED | \*-----------------------------------------------------*/ - bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_LED_SELECT, 1, select_led_pkt); + bus->i2c_smbus_write_block_data(dev, ASROCK_REG_LED_SELECT, 1, select_led_pkt); std::this_thread::sleep_for(1ms); /*-----------------------------------------------------*\ | Polychrome firmware always writes color to fixed reg | \*-----------------------------------------------------*/ - bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_COLOR, 3, color_speed_pkt); + bus->i2c_smbus_write_block_data(dev, POLYCHROME_V2_REG_COLOR, 3, color_speed_pkt); std::this_thread::sleep_for(1ms); break; } @@ -212,29 +266,29 @@ void PolychromeController::SetMode(unsigned char mode, unsigned char speed) switch(asrock_type) { case ASROCK_TYPE_ASRLED: - bus->i2c_smbus_write_block_data(dev, ASRLED_REG_MODE, 1, &active_mode); + bus->i2c_smbus_write_block_data(dev, ASROCK_REG_MODE, 1, &active_mode); std::this_thread::sleep_for(1ms); break; case ASROCK_TYPE_POLYCHROME_V1: - bus->i2c_smbus_write_block_data(dev, ASRLED_REG_MODE, 1, &active_mode); + bus->i2c_smbus_write_block_data(dev, ASROCK_REG_MODE, 1, &active_mode); std::this_thread::sleep_for(1ms); /*-----------------------------------------------------*\ | Select a single LED | \*-----------------------------------------------------*/ - bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_LED_COUNT, 0, led_count_pkt); + bus->i2c_smbus_write_block_data(dev, POLYCHROME_V1_REG_SET_ALL, 0, led_count_pkt); std::this_thread::sleep_for(1ms); break; case ASROCK_TYPE_POLYCHROME_V2: - bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_MODE, 1, &active_mode); + bus->i2c_smbus_write_block_data(dev, ASROCK_REG_MODE, 1, &active_mode); std::this_thread::sleep_for(1ms); /*-----------------------------------------------------*\ | Select a single LED | \*-----------------------------------------------------*/ - bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_LED_COUNT, 0, led_count_pkt); + bus->i2c_smbus_write_block_data(dev, POLYCHROME_V2_REG_LED_COUNT, 0, led_count_pkt); std::this_thread::sleep_for(1ms); switch(active_mode) @@ -242,8 +296,8 @@ void PolychromeController::SetMode(unsigned char mode, unsigned char speed) /*-----------------------------------------------------*\ | These modes don't take a speed | \*-----------------------------------------------------*/ - case POLYCHROME_MODE_OFF: - case POLYCHROME_MODE_STATIC: + case POLYCHROME_V2_MODE_OFF: + case POLYCHROME_V2_MODE_STATIC: break; /*-----------------------------------------------------*\ diff --git a/Controllers/PolychromeController/PolychromeController.h b/Controllers/PolychromeController/PolychromeController.h index fc2c2fd2a..a569f9e4a 100644 --- a/Controllers/PolychromeController/PolychromeController.h +++ b/Controllers/PolychromeController/PolychromeController.h @@ -17,86 +17,178 @@ typedef unsigned char polychrome_dev_id; enum { - ASROCK_TYPE_UNKNOWN = 0x00, /* Unknown Type or Not ASRock Device */ - ASROCK_TYPE_ASRLED = 0x01, /* ASRock Firmware 1.x - ASR LED */ - ASROCK_TYPE_POLYCHROME_V1 = 0x02, /* ASRock Firmware 2.x - Polychrome V1 */ - ASROCK_TYPE_POLYCHROME_V2 = 0x03, /* ASRock Firmware 3.x - Polychrome V2 */ + ASROCK_TYPE_UNKNOWN = 0x00, /* Unknown Type or Not ASRock Device */ + ASROCK_TYPE_ASRLED = 0x01, /* ASRock Firmware 1.x - ASR LED */ + ASROCK_TYPE_POLYCHROME_V1 = 0x02, /* ASRock Firmware 2.x - Polychrome V1 */ + ASROCK_TYPE_POLYCHROME_V2 = 0x03, /* ASRock Firmware 3.x - Polychrome V2 */ }; enum { - ASRLED_REG_FIRMWARE_VER = 0x00, /* Firmware version Major.Minor */ - ASRLED_REG_MODE = 0x30, /* Mode selection register */ - ASRLED_REG_LED_SELECT = 0x31, /* LED selection register */ -}; - -#define ASRLED_NUM_MODES 8 /* Number of ASR LED modes */ - -enum -{ - ASRLED_MODE_OFF = 0x10, /* OFF mode */ - ASRLED_MODE_STATIC = 0x11, /* Static color mode */ - ASRLED_MODE_BREATHING = 0x12, /* Breathing effect mode */ - ASRLED_MODE_FLASHING = 0x13, /* Flashing effect mode */ - ASRLED_MODE_SPECTRUM_CYCLE = 0x14, /* Spectrum Cycle effect mode */ - ASRLED_MODE_RANDOM = 0x15, /* Random effect mode */ - ASRLED_MODE_MUSIC = 0x17, /* Music effect mode */ - ASRLED_MODE_WAVE = 0x18, /* Wave effect mode */ + /*------------------------------------------------------------------------------------------*\ + | ASRock Common Registers | + \*------------------------------------------------------------------------------------------*/ + ASROCK_REG_FIRMWARE_VER = 0x00, /* Firmware version Major.Minor */ + ASROCK_REG_MODE = 0x30, /* Mode selection register */ + ASROCK_REG_LED_SELECT = 0x31, /* LED selection register */ + /*------------------------------------------------------------------------------------------*\ + | ASRock Polychrome V1/V2 Common Registers | + \*------------------------------------------------------------------------------------------*/ + POLYCHROME_REG_LED_CONFIG = 0x33, /* LED configuration register */ + /*------------------------------------------------------------------------------------------*\ + | ASRock Polychrome V1 (Firmware 2.x) Registers | + \*------------------------------------------------------------------------------------------*/ + POLYCHROME_V1_REG_SET_ALL = 0x32, /* Set All register 0x1 = set all */ + POLYCHROME_V1_REG_ARGB_GRB = 0x35, /* ARGB bistream reversing register */ + /*------------------------------------------------------------------------------------------*\ + | ASRock Polychrome V2 (Firmware 3.x) Registers | + \*------------------------------------------------------------------------------------------*/ + POLYCHROME_V2_REG_LED_COUNT = 0x32, /* Additional LED count register */ + POLYCHROME_V2_REG_COLOR = 0x34, /* Color register: Red, Green, Blue */ + POLYCHROME_V2_REG_ARGB_GRB = 0x35, /* ARGB bistream reversing register */ }; enum { - ASRLED_SPEED_MIN = 0x05, /* Slowest speed */ - ASRLED_SPEED_DEFAULT = 0x03, /* Default speed */ - ASRLED_SPEED_MAX = 0x00, /* Fastest speed */ + POLYCHROME_ZONE_1 = 0x00, /* RGB LED 1 Header */ + POLYCHROME_ZONE_2 = 0x01, /* RGB LED 2 Header */ + POLYCHROME_ZONE_3 = 0x02, /* Audio/PCH Zone LEDs */ + POLYCHROME_ZONE_4 = 0x03, /* Audio/PCH Zone LEDs */ + POLYCHROME_ZONE_5 = 0x04, /* IO Cover Zone LEDs */ + POLYCHROME_ZONE_ADDRESSABLE = 0x05, /* Addressable LED header */ + POLYCHROME_ZONE_COUNT = 0x06, /* Total number of zones */ + POLYCHROME_ZONE_ADDRESSABLE_MAX = 0x64, /* Maxinum number of ARGB LEDs */ +}; + +/*----------------------------------------------------------------------------------------------*\ +| Definitions for ASR LED | +\*----------------------------------------------------------------------------------------------*/ +#define ASRLED_NUM_MODES 8 /* Number of ASR LED modes */ + +enum +{ + ASRLED_MODE_OFF = 0x10, /* OFF mode */ + ASRLED_MODE_STATIC = 0x11, /* Static color mode */ + ASRLED_MODE_BREATHING = 0x12, /* Breathing effect mode */ + ASRLED_MODE_STROBE = 0x13, /* Strobe effect mode */ + ASRLED_MODE_SPECTRUM_CYCLE = 0x14, /* Spectrum Cycle effect mode */ + ASRLED_MODE_RANDOM = 0x15, /* Random effect mode */ + ASRLED_MODE_MUSIC = 0x17, /* Music effect mode */ + ASRLED_MODE_WAVE = 0x18, /* Wave effect mode */ }; enum { - POLYCHROME_REG_FIRMWARE_VER = 0x00, /* Firmware version Major.Minor */ - POLYCHROME_REG_MODE = 0x30, /* Mode selection register */ - POLYCHROME_REG_LED_SELECT = 0x31, /* LED selection register */ - POLYCHROME_REG_LED_COUNT = 0x32, /* Additional LED count register */ - POLYCHROME_REG_LED_CONFIG = 0x33, /* LED configuration register */ - POLYCHROME_REG_COLOR = 0x34, /* Color register: Red, Green, Blue */ + ASRLED_SPEED_MIN = 0x05, /* Slowest speed */ + ASRLED_SPEED_DEFAULT = 0x03, /* Default speed */ + ASRLED_SPEED_MAX = 0x00, /* Fastest speed */ }; -#define POLYCHROME_NUM_MODES 14 /* Number of Polychrome modes */ +/*----------------------------------------------------------------------------------------------*\ +| Definitions for Polychrome V1 | +\*----------------------------------------------------------------------------------------------*/ +#define POLYCHROME_V1_NUM_MODES 16 /* Number of Polychrome V1 modes */ enum { - POLYCHROME_MODE_OFF = 0x10, /* OFF mode */ - POLYCHROME_MODE_STATIC = 0x11, /* Static color mode */ - POLYCHROME_MODE_BREATHING = 0x12, /* Breating effect mode */ - POLYCHROME_MODE_FLASHING = 0x13, /* Flashing effect mode */ - POLYCHROME_MODE_SPECTRUM_CYCLE = 0x14, /* Spectrum Cycle effect mode */ - POLYCHROME_MODE_RANDOM = 0x15, /* Random effect mode */ - POLYCHROME_MODE_WAVE = 0x17, /* Wave effect mode */ - POLYCHROME_MODE_SPRING = 0x18, /* Spring effect mode */ - POLYCHROME_MODE_STACK = 0x19, /* Stack effect mode */ - POLYCHROME_MODE_CRAM = 0x1A, /* Cram effect mode */ - POLYCHROME_MODE_SCAN = 0x1B, /* Scan effect mode */ - POLYCHROME_MODE_NEON = 0x1C, /* Neon effect mode */ - POLYCHROME_MODE_WATER = 0x1D, /* Water effect mode */ - POLYCHROME_MODE_RAINBOW = 0x1E, /* Rainbow effect mode */ + POLYCHROME_V1_MODE_OFF = 0x10, /* OFF mode */ + POLYCHROME_V1_MODE_STATIC = 0x11, /* Static color mode */ + POLYCHROME_V1_MODE_BREATHING = 0x12, /* Breating effect mode */ + POLYCHROME_V1_MODE_STROBE = 0x13, /* Strobe effect mode */ + POLYCHROME_V1_MODE_SPECTRUM_CYCLE = 0x14, /* Spectrum Cycle effect mode */ + POLYCHROME_V1_MODE_RANDOM = 0x15, /* Random effect mode */ + POLYCHROME_V1_MODE_MUSIC = 0x17, /* Music effect mode */ + POLYCHROME_V1_MODE_WAVE = 0x18, /* Wave effect mode */ + /*------------------------------------------------------------------------------------------*\ + | Modes only available on ARGB headers | + \*------------------------------------------------------------------------------------------*/ + POLYCHROME_V1_MODE_SPRING = 0x19, /* Spring effect mode */ + POLYCHROME_V1_MODE_METEOR = 0x1A, /* Meteor effect mode */ + POLYCHROME_V1_MODE_STACK = 0x1B, /* Stack effect mode */ + POLYCHROME_V1_MODE_CRAM = 0x1C, /* Cram effect mode */ + POLYCHROME_V1_MODE_SCAN = 0x1D, /* Scan effect mode */ + POLYCHROME_V1_MODE_NEON = 0x1E, /* Neon effect mode */ + POLYCHROME_V1_MODE_WATER = 0x1F, /* Water effect mode */ + POLYCHROME_V1_MODE_RAINBOW = 0x20, /* Rainbow chase effect mode */ }; enum { - POLYCHROME_SPEED_MIN = 0x05, /* Slowest speed */ - POLYCHROME_SPEED_DEFAULT = 0x03, /* Default speed */ - POLYCHROME_SPEED_MAX = 0x00, /* Fastest speed */ + /*------------------------------------------------------------------------------------------*\ + | POLYCHROME_V1_MODE_BREATHING | + \*------------------------------------------------------------------------------------------*/ + POLYCHROME_V1_SPEED_MIN_BREATHING = 0x0A, /* Slowest speed */ + POLYCHROME_V1_SPEED_DEFAULT_BREATHING = 0x02, /* Default speed */ + POLYCHROME_V1_SPEED_MAX_BREATHING = 0x02, /* Fastest speed */ + /*------------------------------------------------------------------------------------------*\ + | POLYCHROME_V1_MODE_STROBE | + \*------------------------------------------------------------------------------------------*/ + POLYCHROME_V1_SPEED_MIN_STROBE = 0xA0, /* Slowest speed */ + POLYCHROME_V1_SPEED_DEFAULT_STROBE = 0x14, /* Default speed */ + POLYCHROME_V1_SPEED_MAX_STROBE = 0x05, /* Fastest speed */ + /*------------------------------------------------------------------------------------------*\ + | POLYCHROME_V1_MODE_SPECTRUM_CYCLE | + \*------------------------------------------------------------------------------------------*/ + POLYCHROME_V1_SPEED_MIN_CYCLE = 0xA0, /* Slowest speed */ + POLYCHROME_V1_SPEED_DEFAULT_CYCLE = 0x14, /* Default speed */ + POLYCHROME_V1_SPEED_MAX_CYCLE = 0x0A, /* Fastest speed */ + /*------------------------------------------------------------------------------------------*\ + | POLYCHROME_V1_MODE_RANDOM | + \*------------------------------------------------------------------------------------------*/ + POLYCHROME_V1_SPEED_MIN_RANDOM = 0xA0, /* Slowest speed */ + POLYCHROME_V1_SPEED_DEFAULT_RANDOM = 0x28, /* Default speed */ + POLYCHROME_V1_SPEED_MAX_RANDOM = 0x05, /* Fastest speed */ + /*------------------------------------------------------------------------------------------*\ + | POLYCHROME_V1_MODE_WAVE | + \*------------------------------------------------------------------------------------------*/ + POLYCHROME_V1_SPEED_MIN_WAVE = 0x06, /* Slowest speed */ + POLYCHROME_V1_SPEED_DEFAULT_WAVE = 0x02, /* Default speed */ + POLYCHROME_V1_SPEED_MAX_WAVE = 0x01, /* Fastest speed */ + POLYCHROME_V1_SPEED_DEFAULT_SPRING = 0x04, /* Default speed */ + POLYCHROME_V1_SPEED_DEFAULT_METEOR = 0x0A, /* Default speed */ + POLYCHROME_V1_SPEED_DEFAULT_STACK = 0x04, /* Default speed */ + POLYCHROME_V1_SPEED_DEFAULT_CRAM = 0x04, /* Default speed */ + POLYCHROME_V1_SPEED_DEFAULT_SCAN = 0x0A, /* Default speed */ + POLYCHROME_V1_SPEED_DEFAULT_NEON = 0x20, /* Default speed */ + POLYCHROME_V1_SPEED_DEFAULT_WATER = 0x0A, /* Default speed */ + /*------------------------------------------------------------------------------------------*\ + | POLYCHROME_V1_MODE_RAINBOW | + \*------------------------------------------------------------------------------------------*/ + POLYCHROME_V1_SPEED_MIN_RAINBOW = 0x12, /* Slowest speed */ + POLYCHROME_V1_SPEED_DEFAULT_RAINBOW = 0x0A, /* Default speed */ + POLYCHROME_V1_SPEED_MAX_RAINBOW = 0x01, /* Fastest speed */ + POLYCHROME_V1_SPEED_MIN_ARGB = 0x20, /* Slowest speed */ + POLYCHROME_V1_SPEED_MAX_ARGB = 0x02, /* Fastest speed */ +}; + +/*----------------------------------------------------------------------------------------------*\ +| Definitions for Polychrome V2 | +\*----------------------------------------------------------------------------------------------*/ +#define POLYCHROME_V2_NUM_MODES 14 /* Number of Polychrome V2 modes */ + +enum +{ + POLYCHROME_V2_MODE_OFF = 0x10, /* OFF mode */ + POLYCHROME_V2_MODE_STATIC = 0x11, /* Static color mode */ + POLYCHROME_V2_MODE_BREATHING = 0x12, /* Breating effect mode */ + POLYCHROME_V2_MODE_STROBE = 0x13, /* Strobe effect mode */ + POLYCHROME_V2_MODE_SPECTRUM_CYCLE = 0x14, /* Spectrum Cycle effect mode */ + POLYCHROME_V2_MODE_RANDOM = 0x15, /* Random effect mode */ + POLYCHROME_V2_MODE_WAVE = 0x17, /* Wave effect mode */ + POLYCHROME_V2_MODE_SPRING = 0x18, /* Spring effect mode */ + POLYCHROME_V2_MODE_STACK = 0x19, /* Stack effect mode */ + POLYCHROME_V2_MODE_CRAM = 0x1A, /* Cram effect mode */ + POLYCHROME_V2_MODE_SCAN = 0x1B, /* Scan effect mode */ + POLYCHROME_V2_MODE_NEON = 0x1C, /* Neon effect mode */ + POLYCHROME_V2_MODE_WATER = 0x1D, /* Water effect mode */ + POLYCHROME_V2_MODE_RAINBOW = 0x1E, /* Rainbow effect mode */ }; enum { - POLYCHROME_ZONE_RGB_LED_0_HDR = 0x00, /* RGB LED 0 Header */ - POLYCHROME_ZONE_RGB_LED_1_HDR = 0x01, /* RGB LED 1 Header */ - POLYCHROME_ZONE_AUDIO = 0x02, /* Audio Zone LEDs */ - POLYCHROME_ZONE_PCH = 0x03, /* PCH Zone LEDs */ - POLYCHROME_ZONE_IO_COVER = 0x04, /* IO Cover Zone LEDs */ - POLYCHROME_ZONE_ADDRESSABLE = 0x05, /* Addressable LED header */ - POLYCHROME_ZONE_COUNT = 0x06, /* Total number of zones */ + POLYCHROME_V2_SPEED_MIN = 0x05, /* Slowest speed */ + POLYCHROME_V2_SPEED_DEFAULT = 0x03, /* Default speed */ + POLYCHROME_V2_SPEED_MAX = 0x00, /* Fastest speed */ }; class PolychromeController diff --git a/RGBController/RGBController_Polychrome.cpp b/RGBController/RGBController_Polychrome.cpp index 3c00ac25f..3e2968498 100644 --- a/RGBController/RGBController_Polychrome.cpp +++ b/RGBController/RGBController_Polychrome.cpp @@ -14,8 +14,8 @@ static const char* polychrome_v1_zone_names[] = { - "RGB LED 0 Header", "RGB LED 1 Header", + "RGB LED 2 Header", "PCH", "IO Cover", "Audio", @@ -24,8 +24,8 @@ static const char* polychrome_v1_zone_names[] = static const char* polychrome_v2_zone_names[] = { - "RGB LED 0 Header", "RGB LED 1 Header", + "RGB LED 2 Header", "Audio", "PCH", "IO Cover", @@ -72,7 +72,7 @@ RGBController_Polychrome::RGBController_Polychrome(PolychromeController* polychr mode Strobe; Strobe.name = "Strobe"; - Strobe.value = ASRLED_MODE_FLASHING; + Strobe.value = ASRLED_MODE_STROBE; Strobe.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; Strobe.speed_min = ASRLED_SPEED_MIN; Strobe.speed_max = ASRLED_SPEED_MAX; @@ -120,136 +120,283 @@ RGBController_Polychrome::RGBController_Polychrome(PolychromeController* polychr break; case ASROCK_TYPE_POLYCHROME_V1: + { + mode Off; + Off.name = "Off"; + Off.value = POLYCHROME_V1_MODE_OFF; + Off.flags = 0; + Off.color_mode = MODE_COLORS_NONE; + modes.push_back(Off); + + mode Static; + Static.name = "Static"; + Static.value = POLYCHROME_V1_MODE_STATIC; + Static.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Static.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Static); + + mode Breathing; + Breathing.name = "Breathing"; + Breathing.value = POLYCHROME_V1_MODE_BREATHING; + Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; + Breathing.speed_min = POLYCHROME_V1_SPEED_MIN_BREATHING; + Breathing.speed_max = POLYCHROME_V1_SPEED_MAX_BREATHING; + Breathing.speed = POLYCHROME_V1_SPEED_DEFAULT_BREATHING; + Breathing.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Breathing); + + mode Strobe; + Strobe.name = "Strobe"; + Strobe.value = POLYCHROME_V1_MODE_STROBE; + Strobe.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; + Strobe.speed_min = POLYCHROME_V1_SPEED_MIN_STROBE; + Strobe.speed_max = POLYCHROME_V1_SPEED_MAX_STROBE; + Strobe.speed = POLYCHROME_V1_SPEED_DEFAULT_STROBE; + Strobe.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Strobe); + + mode SpectrumCycle; + SpectrumCycle.name = "Spectrum Cycle"; + SpectrumCycle.value = POLYCHROME_V1_MODE_SPECTRUM_CYCLE; + SpectrumCycle.flags = MODE_FLAG_HAS_SPEED; + SpectrumCycle.speed_min = POLYCHROME_V1_SPEED_MIN_CYCLE; + SpectrumCycle.speed_max = POLYCHROME_V1_SPEED_MAX_CYCLE; + SpectrumCycle.speed = POLYCHROME_V1_SPEED_DEFAULT_CYCLE; + SpectrumCycle.color_mode = MODE_COLORS_NONE; + modes.push_back(SpectrumCycle); + + mode Random; + Random.name = "Random"; + Random.value = POLYCHROME_V1_MODE_RANDOM; + Random.flags = MODE_FLAG_HAS_SPEED; + Random.speed_min = POLYCHROME_V1_SPEED_MIN_RANDOM; + Random.speed_max = POLYCHROME_V1_SPEED_MAX_RANDOM; + Random.speed = POLYCHROME_V1_SPEED_DEFAULT_RANDOM; + Random.color_mode = MODE_COLORS_NONE; + modes.push_back(Random); + + mode Music; + Music.name = "Music"; + Music.value = POLYCHROME_V1_MODE_MUSIC; + Music.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Music.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Music); + + mode Wave; + Wave.name = "Wave"; + Wave.value = POLYCHROME_V1_MODE_WAVE; + Wave.flags = MODE_FLAG_HAS_SPEED; + Wave.speed_min = POLYCHROME_V1_SPEED_MIN_WAVE; + Wave.speed_max = POLYCHROME_V1_SPEED_MAX_WAVE; + Wave.speed = POLYCHROME_V1_SPEED_DEFAULT_WAVE; + Wave.color_mode = MODE_COLORS_NONE; + modes.push_back(Wave); + + /*---------------------------------------------------------------------*\ + | Comment out until per zone modes are working. These are only for ARGB | + \*---------------------------------------------------------------------*/ +// mode Spring; +// Spring.name = "Spring"; +// Spring.value = POLYCHROME_V1_MODE_SPRING; +// Spring.flags = MODE_FLAG_HAS_SPEED; +// Spring.speed_min = POLYCHROME_V1_SPEED_MIN_ARGB; +// Spring.speed_max = POLYCHROME_V1_SPEED_MAX_ARGB; +// Spring.speed = POLYCHROME_V1_SPEED_DEFAULT_SPRING; +// Spring.color_mode = MODE_COLORS_PER_LED; +// modes.push_back(Spring); + +// mode Stack; +// Stack.name = "Stack"; +// Stack.value = POLYCHROME_V1_MODE_STACK; +// Stack.flags = MODE_FLAG_HAS_SPEED; +// Stack.speed_min = POLYCHROME_V1_SPEED_MIN_ARGB; +// Stack.speed_max = POLYCHROME_V1_SPEED_MAX_ARGB; +// Stack.speed = POLYCHROME_V1_SPEED_DEFAULT_STACK; +// Stack.color_mode = MODE_COLORS_PER_LED; +// modes.push_back(Stack); + +// mode Cram; +// Cram.name = "Cram"; +// Cram.value = POLYCHROME_V1_MODE_CRAM; +// Cram.flags = MODE_FLAG_HAS_SPEED; +// Cram.speed_min = POLYCHROME_V1_SPEED_MIN_ARGB; +// Cram.speed_max = POLYCHROME_V1_SPEED_MAX_ARGB; +// Cram.speed = POLYCHROME_V1_SPEED_DEFAULT_CRAM; +// Cram.color_mode = MODE_COLORS_PER_LED; +// modes.push_back(Cram); + +// mode Scan; +// Scan.name = "Scan"; +// Scan.value = POLYCHROME_V1_MODE_SCAN; +// Scan.flags = MODE_FLAG_HAS_SPEED; +// Scan.speed_min = POLYCHROME_V1_SPEED_MIN_ARGB; +// Scan.speed_max = POLYCHROME_V1_SPEED_MAX_ARGB; +// Scan.speed = POLYCHROME_V1_SPEED_DEFAULT_SCAN; +// Scan.color_mode = MODE_COLORS_PER_LED; +// modes.push_back(Scan); + +// mode Neon; +// Neon.name = "Neon"; +// Neon.value = POLYCHROME_V1_MODE_NEON; +// Neon.flags = MODE_FLAG_HAS_SPEED; +// Neon.speed_min = POLYCHROME_V1_SPEED_MIN_ARGB; +// Neon.speed_max = POLYCHROME_V1_SPEED_MAX_ARGB; +// Neon.speed = POLYCHROME_V1_SPEED_DEFAULT_NEON; +// Neon.color_mode = MODE_COLORS_PER_LED; +// modes.push_back(Neon); + +// mode Water; +// Water.name = "Water"; +// Water.value = POLYCHROME_V1_MODE_WATER; +// Water.flags = MODE_FLAG_HAS_SPEED; +// Water.speed_min = POLYCHROME_V1_SPEED_MIN_ARGB; +// Water.speed_max = POLYCHROME_V1_SPEED_MAX_ARGB; +// Water.speed = POLYCHROME_V1_SPEED_DEFAULT_WATER; +// Water.color_mode = MODE_COLORS_PER_LED; +// modes.push_back(Water); + +// mode Rainbow; +// Rainbow.name = "Rainbow"; +// Rainbow.value = POLYCHROME_V1_MODE_RAINBOW; +// Rainbow.flags = MODE_FLAG_HAS_SPEED; +// Rainbow.speed_min = POLYCHROME_V1_SPEED_MIN_RAINBOW; +// Rainbow.speed_max = POLYCHROME_V1_SPEED_MAX_RAINBOW; +// Rainbow.speed = POLYCHROME_V1_SPEED_DEFAULT_RAINBOW; +// Rainbow.color_mode = MODE_COLORS_NONE; +// modes.push_back(Rainbow); + } + break; + case ASROCK_TYPE_POLYCHROME_V2: { mode Off; Off.name = "Off"; - Off.value = POLYCHROME_MODE_OFF; + Off.value = POLYCHROME_V2_MODE_OFF; Off.flags = 0; Off.color_mode = MODE_COLORS_NONE; modes.push_back(Off); mode Static; Static.name = "Static"; - Static.value = POLYCHROME_MODE_STATIC; + Static.value = POLYCHROME_V2_MODE_STATIC; Static.flags = MODE_FLAG_HAS_PER_LED_COLOR; Static.color_mode = MODE_COLORS_PER_LED; modes.push_back(Static); mode Breathing; Breathing.name = "Breathing"; - Breathing.value = POLYCHROME_MODE_BREATHING; + Breathing.value = POLYCHROME_V2_MODE_BREATHING; Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; - Breathing.speed_min = POLYCHROME_SPEED_MIN; - Breathing.speed_max = POLYCHROME_SPEED_MAX; - Breathing.speed = POLYCHROME_SPEED_DEFAULT; + Breathing.speed_min = POLYCHROME_V2_SPEED_MIN; + Breathing.speed_max = POLYCHROME_V2_SPEED_MAX; + Breathing.speed = POLYCHROME_V2_SPEED_DEFAULT; Breathing.color_mode = MODE_COLORS_PER_LED; modes.push_back(Breathing); mode Strobe; Strobe.name = "Strobe"; - Strobe.value = POLYCHROME_MODE_FLASHING; + Strobe.value = POLYCHROME_V2_MODE_STROBE; Strobe.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; - Strobe.speed_min = POLYCHROME_SPEED_MIN; - Strobe.speed_max = POLYCHROME_SPEED_MAX; - Strobe.speed = POLYCHROME_SPEED_DEFAULT; + Strobe.speed_min = POLYCHROME_V2_SPEED_MIN; + Strobe.speed_max = POLYCHROME_V2_SPEED_MAX; + Strobe.speed = POLYCHROME_V2_SPEED_DEFAULT; Strobe.color_mode = MODE_COLORS_PER_LED; modes.push_back(Strobe); mode SpectrumCycle; SpectrumCycle.name = "Spectrum Cycle"; - SpectrumCycle.value = POLYCHROME_MODE_SPECTRUM_CYCLE; + SpectrumCycle.value = POLYCHROME_V2_MODE_SPECTRUM_CYCLE; SpectrumCycle.flags = MODE_FLAG_HAS_SPEED; - SpectrumCycle.speed_min = POLYCHROME_SPEED_MIN; - SpectrumCycle.speed_max = POLYCHROME_SPEED_MAX; - SpectrumCycle.speed = POLYCHROME_SPEED_DEFAULT; + SpectrumCycle.speed_min = POLYCHROME_V2_SPEED_MIN; + SpectrumCycle.speed_max = POLYCHROME_V2_SPEED_MAX; + SpectrumCycle.speed = POLYCHROME_V2_SPEED_DEFAULT; SpectrumCycle.color_mode = MODE_COLORS_NONE; modes.push_back(SpectrumCycle); mode Random; Random.name = "Random"; - Random.value = POLYCHROME_MODE_RANDOM; + Random.value = POLYCHROME_V2_MODE_RANDOM; Random.flags = MODE_FLAG_HAS_SPEED; - Random.speed_min = POLYCHROME_SPEED_MIN; - Random.speed_max = POLYCHROME_SPEED_MAX; - Random.speed = POLYCHROME_SPEED_DEFAULT; + Random.speed_min = POLYCHROME_V2_SPEED_MIN; + Random.speed_max = POLYCHROME_V2_SPEED_MAX; + Random.speed = POLYCHROME_V2_SPEED_DEFAULT; Random.color_mode = MODE_COLORS_NONE; modes.push_back(Random); mode Wave; Wave.name = "Wave"; - Wave.value = POLYCHROME_MODE_WAVE; + Wave.value = POLYCHROME_V2_MODE_WAVE; Wave.flags = MODE_FLAG_HAS_SPEED; - Wave.speed_min = POLYCHROME_SPEED_MIN; - Wave.speed_max = POLYCHROME_SPEED_MAX; - Wave.speed = POLYCHROME_SPEED_DEFAULT; + Wave.speed_min = POLYCHROME_V2_SPEED_MIN; + Wave.speed_max = POLYCHROME_V2_SPEED_MAX; + Wave.speed = POLYCHROME_V2_SPEED_DEFAULT; Wave.color_mode = MODE_COLORS_NONE; modes.push_back(Wave); mode Spring; Spring.name = "Spring"; - Spring.value = POLYCHROME_MODE_SPRING; + Spring.value = POLYCHROME_V2_MODE_SPRING; Spring.flags = MODE_FLAG_HAS_SPEED; - Spring.speed_min = POLYCHROME_SPEED_MIN; - Spring.speed_max = POLYCHROME_SPEED_MAX; - Spring.speed = POLYCHROME_SPEED_DEFAULT; + Spring.speed_min = POLYCHROME_V2_SPEED_MIN; + Spring.speed_max = POLYCHROME_V2_SPEED_MAX; + Spring.speed = POLYCHROME_V2_SPEED_DEFAULT; Spring.color_mode = MODE_COLORS_NONE; modes.push_back(Spring); mode Stack; Stack.name = "Stack"; - Stack.value = POLYCHROME_MODE_STACK; + Stack.value = POLYCHROME_V2_MODE_STACK; Stack.flags = MODE_FLAG_HAS_SPEED; - Stack.speed_min = POLYCHROME_SPEED_MIN; - Stack.speed_max = POLYCHROME_SPEED_MAX; - Stack.speed = POLYCHROME_SPEED_DEFAULT; + Stack.speed_min = POLYCHROME_V2_SPEED_MIN; + Stack.speed_max = POLYCHROME_V2_SPEED_MAX; + Stack.speed = POLYCHROME_V2_SPEED_DEFAULT; Stack.color_mode = MODE_COLORS_NONE; modes.push_back(Stack); mode Cram; Cram.name = "Cram"; - Cram.value = POLYCHROME_MODE_CRAM; + Cram.value = POLYCHROME_V2_MODE_CRAM; Cram.flags = MODE_FLAG_HAS_SPEED; - Cram.speed_min = POLYCHROME_SPEED_MIN; - Cram.speed_max = POLYCHROME_SPEED_MAX; - Cram.speed = POLYCHROME_SPEED_DEFAULT; + Cram.speed_min = POLYCHROME_V2_SPEED_MIN; + Cram.speed_max = POLYCHROME_V2_SPEED_MAX; + Cram.speed = POLYCHROME_V2_SPEED_DEFAULT; Cram.color_mode = MODE_COLORS_NONE; modes.push_back(Cram); mode Scan; Scan.name = "Scan"; - Scan.value = POLYCHROME_MODE_SCAN; + Scan.value = POLYCHROME_V2_MODE_SCAN; Scan.flags = MODE_FLAG_HAS_SPEED; - Scan.speed_min = POLYCHROME_SPEED_MIN; - Scan.speed_max = POLYCHROME_SPEED_MAX; - Scan.speed = POLYCHROME_SPEED_DEFAULT; + Scan.speed_min = POLYCHROME_V2_SPEED_MIN; + Scan.speed_max = POLYCHROME_V2_SPEED_MAX; + Scan.speed = POLYCHROME_V2_SPEED_DEFAULT; Scan.color_mode = MODE_COLORS_NONE; modes.push_back(Scan); mode Neon; Neon.name = "Neon"; - Neon.value = POLYCHROME_MODE_NEON; + Neon.value = POLYCHROME_V2_MODE_NEON; Neon.flags = 0; Neon.color_mode = MODE_COLORS_NONE; modes.push_back(Neon); mode Water; Water.name = "Water"; - Water.value = POLYCHROME_MODE_WATER; + Water.value = POLYCHROME_V2_MODE_WATER; Water.flags = MODE_FLAG_HAS_SPEED; - Water.speed_min = POLYCHROME_SPEED_MIN; - Water.speed_max = POLYCHROME_SPEED_MAX; - Water.speed = POLYCHROME_SPEED_DEFAULT; + Water.speed_min = POLYCHROME_V2_SPEED_MIN; + Water.speed_max = POLYCHROME_V2_SPEED_MAX; + Water.speed = POLYCHROME_V2_SPEED_DEFAULT; Water.color_mode = MODE_COLORS_NONE; modes.push_back(Water); mode Rainbow; Rainbow.name = "Rainbow"; - Rainbow.value = POLYCHROME_MODE_RAINBOW; + Rainbow.value = POLYCHROME_V2_MODE_RAINBOW; Rainbow.flags = MODE_FLAG_HAS_SPEED; - Rainbow.speed_min = POLYCHROME_SPEED_MIN; - Rainbow.speed_max = POLYCHROME_SPEED_MAX; - Rainbow.speed = POLYCHROME_SPEED_DEFAULT; + Rainbow.speed_min = POLYCHROME_V2_SPEED_MIN; + Rainbow.speed_max = POLYCHROME_V2_SPEED_MAX; + Rainbow.speed = POLYCHROME_V2_SPEED_DEFAULT; Rainbow.color_mode = MODE_COLORS_NONE; modes.push_back(Rainbow); }