From d38dcc038aa0d05255cce30adf6478823d165936 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Sun, 30 Aug 2020 01:57:13 -0500 Subject: [PATCH] Remove boolean for ASR LED and replace it with an ASRock type enum with ASR LED, Polychrome V1, and Polychrome V2. --- .../PolychromeController.cpp | 199 +++++----- .../PolychromeController.h | 12 +- .../PolychromeControllerDetect.cpp | 14 +- RGBController/RGBController_Polychrome.cpp | 375 +++++++++--------- 4 files changed, 312 insertions(+), 288 deletions(-) diff --git a/Controllers/PolychromeController/PolychromeController.cpp b/Controllers/PolychromeController/PolychromeController.cpp index c4b618d4..a52b9543 100644 --- a/Controllers/PolychromeController/PolychromeController.cpp +++ b/Controllers/PolychromeController/PolychromeController.cpp @@ -27,25 +27,30 @@ PolychromeController::PolychromeController(i2c_smbus_interface* bus, polychrome_ | Versions 1.xx and 2.xx use ASR LED, 3.xx uses | | Polychrome | \*-----------------------------------------------------*/ - if((major_version < 0x03) && (major_version > 0x00)) + switch(major_version) { - device_name = "ASRock ASR LED"; - asr_led = true; + case ASROCK_TYPE_ASRLED: + device_name = "ASRock ASR LED"; + asrock_type = ASROCK_TYPE_ASRLED; + memset(zone_led_count, 0, sizeof(zone_led_count)); + break; - memset(zone_led_count, 0, sizeof(zone_led_count)); - } - else if(major_version == 0x03) - { - device_name = "ASRock Polychrome"; - asr_led = false; + case ASROCK_TYPE_POLYCHROME_V1: + device_name = "ASRock Polychrome V1"; + asrock_type = ASROCK_TYPE_POLYCHROME_V1; + ReadLEDConfiguration(); + break; - ReadLEDConfiguration(); + case ASROCK_TYPE_POLYCHROME_V2: + device_name = "ASRock Polychrome V2"; + asrock_type = ASROCK_TYPE_POLYCHROME_V2; + ReadLEDConfiguration(); + break; + + default: + asrock_type = ASROCK_TYPE_UNKNOWN; + break; } - else - { - memset(zone_led_count, 0, sizeof(zone_led_count)); - } - } PolychromeController::~PolychromeController() @@ -53,6 +58,11 @@ PolychromeController::~PolychromeController() } +unsigned int PolychromeController::GetASRockType() +{ + return(asrock_type); +} + std::string PolychromeController::GetDeviceName() { return(device_name); @@ -116,69 +126,65 @@ unsigned int PolychromeController::GetMode() return(active_mode); } -bool PolychromeController::IsAsrLed() -{ - return(asr_led); -} - void PolychromeController::SetColorsAndSpeed(unsigned char led, unsigned char red, unsigned char green, unsigned char blue) { unsigned char color_speed_pkt[4] = { red, green, blue, active_speed }; unsigned char select_led_pkt[1] = { led }; - if (asr_led) + switch(asrock_type) { - switch(active_mode) - { + case ASROCK_TYPE_ASRLED: + switch(active_mode) + { + /*-----------------------------------------------------*\ + | These modes take 4 bytes in R/G/B/S order | + \*-----------------------------------------------------*/ + case ASRLED_MODE_BREATHING: + case ASRLED_MODE_FLASHING: + case ASRLED_MODE_SPECTRUM_CYCLE: + 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 ASRLED_MODE_STATIC: + case ASRLED_MODE_MUSIC: + bus->i2c_smbus_write_block_data(dev, active_mode, 3, color_speed_pkt); + break; + + /*-----------------------------------------------------*\ + | These modes take 1 byte - speed | + \*-----------------------------------------------------*/ + case ASRLED_MODE_RANDOM: + case ASRLED_MODE_WAVE: + bus->i2c_smbus_write_block_data(dev, active_mode, 1, &active_speed); + break; + + /*-----------------------------------------------------*\ + | These modes take no bytes | + \*-----------------------------------------------------*/ + case ASRLED_MODE_OFF: + break; + } + std::this_thread::sleep_for(1ms); + break; + + case ASROCK_TYPE_POLYCHROME_V1: + case ASROCK_TYPE_POLYCHROME_V2: /*-----------------------------------------------------*\ - | These modes take 4 bytes in R/G/B/S order | + | Select LED | \*-----------------------------------------------------*/ - case ASRLED_MODE_BREATHING: - case ASRLED_MODE_FLASHING: - case ASRLED_MODE_SPECTRUM_CYCLE: - bus->i2c_smbus_write_block_data(dev, active_mode, 4, color_speed_pkt); - break; + bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_LED_SELECT, 1, select_led_pkt); + std::this_thread::sleep_for(1ms); /*-----------------------------------------------------*\ - | These modes take 3 bytes in R/G/B order | + | Polychrome firmware always writes color to fixed reg | \*-----------------------------------------------------*/ - default: - case ASRLED_MODE_STATIC: - case ASRLED_MODE_MUSIC: - bus->i2c_smbus_write_block_data(dev, active_mode, 3, color_speed_pkt); - break; - - /*-----------------------------------------------------*\ - | These modes take 1 byte - speed | - \*-----------------------------------------------------*/ - case ASRLED_MODE_RANDOM: - case ASRLED_MODE_WAVE: - bus->i2c_smbus_write_block_data(dev, active_mode, 1, &active_speed); - break; - - /*-----------------------------------------------------*\ - | These modes take no bytes | - \*-----------------------------------------------------*/ - case ASRLED_MODE_OFF: - break; - } - std::this_thread::sleep_for(1ms); - } - else - { - /*-----------------------------------------------------*\ - | Select LED | - \*-----------------------------------------------------*/ - bus->i2c_smbus_write_block_data(dev, POLYCHROME_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); - - std::this_thread::sleep_for(1ms); + bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_COLOR, 3, color_speed_pkt); + std::this_thread::sleep_for(1ms); + break; } } @@ -188,38 +194,41 @@ void PolychromeController::SetMode(unsigned char mode, unsigned char speed) active_mode = mode; active_speed = speed; - if(asr_led) + switch(asrock_type) { - bus->i2c_smbus_write_block_data(dev, ASRLED_REG_MODE, 1, &active_mode); - std::this_thread::sleep_for(1ms); - } - else - { - bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_MODE, 1, &active_mode); - std::this_thread::sleep_for(1ms); + case ASROCK_TYPE_ASRLED: + bus->i2c_smbus_write_block_data(dev, ASRLED_REG_MODE, 1, &active_mode); + std::this_thread::sleep_for(1ms); + break; - /*-----------------------------------------------------*\ - | Select a single LED | - \*-----------------------------------------------------*/ - bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_LED_COUNT, 0, led_count_pkt); - std::this_thread::sleep_for(1ms); - - switch(active_mode) - { - /*-----------------------------------------------------*\ - | These modes don't take a speed | - \*-----------------------------------------------------*/ - case POLYCHROME_MODE_OFF: - case POLYCHROME_MODE_STATIC: - break; + case ASROCK_TYPE_POLYCHROME_V1: + case ASROCK_TYPE_POLYCHROME_V2: + bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_MODE, 1, &active_mode); + std::this_thread::sleep_for(1ms); /*-----------------------------------------------------*\ - | All other modes, write speed to active mode register | + | Select a single LED | \*-----------------------------------------------------*/ - default: - bus->i2c_smbus_write_block_data(dev, active_mode, 1, &speed); - std::this_thread::sleep_for(1ms); - break; - } + bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_LED_COUNT, 0, led_count_pkt); + std::this_thread::sleep_for(1ms); + + switch(active_mode) + { + /*-----------------------------------------------------*\ + | These modes don't take a speed | + \*-----------------------------------------------------*/ + case POLYCHROME_MODE_OFF: + case POLYCHROME_MODE_STATIC: + break; + + /*-----------------------------------------------------*\ + | All other modes, write speed to active mode register | + \*-----------------------------------------------------*/ + default: + bus->i2c_smbus_write_block_data(dev, active_mode, 1, &speed); + std::this_thread::sleep_for(1ms); + break; + } + break; } } diff --git a/Controllers/PolychromeController/PolychromeController.h b/Controllers/PolychromeController/PolychromeController.h index 0eaf0452..92b9faff 100644 --- a/Controllers/PolychromeController/PolychromeController.h +++ b/Controllers/PolychromeController/PolychromeController.h @@ -15,6 +15,14 @@ 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 */ +}; + enum { ASRLED_REG_FIRMWARE_VER = 0x00, /* Firmware version Major.Minor */ @@ -98,12 +106,12 @@ public: std::string GetDeviceName(); std::string GetFirmwareVersion(); unsigned int GetMode(); - bool IsAsrLed(); + unsigned int GetASRockType(); void SetColorsAndSpeed(unsigned char led, unsigned char red, unsigned char green, unsigned char blue); void SetMode(unsigned char mode, unsigned char speed); private: - bool asr_led; + unsigned int asrock_type; std::string device_name; unsigned int zone_led_count[6]; unsigned char active_mode; diff --git a/Controllers/PolychromeController/PolychromeControllerDetect.cpp b/Controllers/PolychromeController/PolychromeControllerDetect.cpp index 989f14d3..c24e7e98 100644 --- a/Controllers/PolychromeController/PolychromeControllerDetect.cpp +++ b/Controllers/PolychromeController/PolychromeControllerDetect.cpp @@ -55,15 +55,15 @@ void DetectPolychromeControllers(std::vector& busses, std: { new_polychrome = new PolychromeController(busses[bus], 0x6A); -// if(new_polychrome->GetLEDCount() != 0) -// { + if(new_polychrome->GetASRockType() != ASROCK_TYPE_UNKNOWN) + { new_controller = new RGBController_Polychrome(new_polychrome); rgb_controllers.push_back(new_controller); -// } -// else -// { -// delete new_polychrome; -// } + } + else + { + delete new_polychrome; + } } } diff --git a/RGBController/RGBController_Polychrome.cpp b/RGBController/RGBController_Polychrome.cpp index f070d1b4..a4c5cdb9 100644 --- a/RGBController/RGBController_Polychrome.cpp +++ b/RGBController/RGBController_Polychrome.cpp @@ -143,211 +143,218 @@ RGBController_Polychrome::RGBController_Polychrome(PolychromeController* polychr type = DEVICE_TYPE_MOTHERBOARD; description = "ASRock ASR LED/Polychrome Device"; - if(polychrome->IsAsrLed()) + switch(polychrome->GetASRockType()) { - mode Off; - Off.name = "Off"; - Off.value = ASRLED_MODE_OFF; - Off.flags = 0; - Off.color_mode = MODE_COLORS_NONE; - modes.push_back(Off); + case ASROCK_TYPE_ASRLED: + { + mode Off; + Off.name = "Off"; + Off.value = ASRLED_MODE_OFF; + Off.flags = 0; + Off.color_mode = MODE_COLORS_NONE; + modes.push_back(Off); - mode Static; - Static.name = "Static"; - Static.value = ASRLED_MODE_STATIC; - Static.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Static.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Static); + mode Static; + Static.name = "Static"; + Static.value = ASRLED_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 = ASRLED_MODE_BREATHING; - Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; - Breathing.speed_min = ASRLED_SPEED_MIN; - Breathing.speed_max = ASRLED_SPEED_MAX; - Breathing.speed = ASRLED_SPEED_DEFAULT; - Breathing.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Breathing); + mode Breathing; + Breathing.name = "Breathing"; + Breathing.value = ASRLED_MODE_BREATHING; + Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; + Breathing.speed_min = ASRLED_SPEED_MIN; + Breathing.speed_max = ASRLED_SPEED_MAX; + Breathing.speed = ASRLED_SPEED_DEFAULT; + Breathing.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Breathing); - mode Strobe; - Strobe.name = "Strobe"; - Strobe.value = ASRLED_MODE_FLASHING; - Strobe.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; - Strobe.speed_min = ASRLED_SPEED_MIN; - Strobe.speed_max = ASRLED_SPEED_MAX; - Strobe.speed = ASRLED_SPEED_DEFAULT; - Strobe.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Strobe); + mode Strobe; + Strobe.name = "Strobe"; + Strobe.value = ASRLED_MODE_FLASHING; + Strobe.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR; + Strobe.speed_min = ASRLED_SPEED_MIN; + Strobe.speed_max = ASRLED_SPEED_MAX; + Strobe.speed = ASRLED_SPEED_DEFAULT; + Strobe.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Strobe); - mode SpectrumCycle; - SpectrumCycle.name = "Spectrum Cycle"; - SpectrumCycle.value = ASRLED_MODE_SPECTRUM_CYCLE; - SpectrumCycle.flags = MODE_FLAG_HAS_SPEED; - SpectrumCycle.speed_min = ASRLED_SPEED_MIN; - SpectrumCycle.speed_max = ASRLED_SPEED_MAX; - SpectrumCycle.speed = ASRLED_SPEED_DEFAULT; - SpectrumCycle.color_mode = MODE_COLORS_NONE; - modes.push_back(SpectrumCycle); + mode SpectrumCycle; + SpectrumCycle.name = "Spectrum Cycle"; + SpectrumCycle.value = ASRLED_MODE_SPECTRUM_CYCLE; + SpectrumCycle.flags = MODE_FLAG_HAS_SPEED; + SpectrumCycle.speed_min = ASRLED_SPEED_MIN; + SpectrumCycle.speed_max = ASRLED_SPEED_MAX; + SpectrumCycle.speed = ASRLED_SPEED_DEFAULT; + SpectrumCycle.color_mode = MODE_COLORS_NONE; + modes.push_back(SpectrumCycle); - mode Random; - Random.name = "Random"; - Random.value = ASRLED_MODE_RANDOM; - Random.flags = MODE_FLAG_HAS_SPEED; - Random.speed_min = ASRLED_SPEED_MIN; - Random.speed_max = ASRLED_SPEED_MAX; - Random.speed = ASRLED_SPEED_DEFAULT; - Random.color_mode = MODE_COLORS_NONE; - modes.push_back(Random); + mode Random; + Random.name = "Random"; + Random.value = ASRLED_MODE_RANDOM; + Random.flags = MODE_FLAG_HAS_SPEED; + Random.speed_min = ASRLED_SPEED_MIN; + Random.speed_max = ASRLED_SPEED_MAX; + Random.speed = ASRLED_SPEED_DEFAULT; + Random.color_mode = MODE_COLORS_NONE; + modes.push_back(Random); - mode Music; - Music.name = "Music"; - Music.value = ASRLED_MODE_MUSIC; - Music.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Music.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Music); + mode Music; + Music.name = "Music"; + Music.value = ASRLED_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 = ASRLED_MODE_WAVE; - Wave.flags = MODE_FLAG_HAS_SPEED; - Wave.speed_min = ASRLED_SPEED_MIN; - Wave.speed_max = ASRLED_SPEED_MAX; - Wave.speed = ASRLED_SPEED_DEFAULT; - Wave.color_mode = MODE_COLORS_NONE; - modes.push_back(Wave); - } - else - { - mode Off; - Off.name = "Off"; - Off.value = POLYCHROME_MODE_OFF; - Off.flags = 0; - Off.color_mode = MODE_COLORS_NONE; - modes.push_back(Off); + mode Wave; + Wave.name = "Wave"; + Wave.value = ASRLED_MODE_WAVE; + Wave.flags = MODE_FLAG_HAS_SPEED; + Wave.speed_min = ASRLED_SPEED_MIN; + Wave.speed_max = ASRLED_SPEED_MAX; + Wave.speed = ASRLED_SPEED_DEFAULT; + Wave.color_mode = MODE_COLORS_NONE; + modes.push_back(Wave); + } + break; - mode Static; - Static.name = "Static"; - Static.value = POLYCHROME_MODE_STATIC; - Static.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Static.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Static); + case ASROCK_TYPE_POLYCHROME_V1: + case ASROCK_TYPE_POLYCHROME_V2: + { + mode Off; + Off.name = "Off"; + Off.value = POLYCHROME_MODE_OFF; + Off.flags = 0; + Off.color_mode = MODE_COLORS_NONE; + modes.push_back(Off); - mode Breathing; - Breathing.name = "Breathing"; - Breathing.value = POLYCHROME_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.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Breathing); + mode Static; + Static.name = "Static"; + Static.value = POLYCHROME_MODE_STATIC; + Static.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Static.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Static); - mode Strobe; - Strobe.name = "Strobe"; - Strobe.value = POLYCHROME_MODE_FLASHING; - 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.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Strobe); + mode Breathing; + Breathing.name = "Breathing"; + Breathing.value = POLYCHROME_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.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Breathing); - mode SpectrumCycle; - SpectrumCycle.name = "Spectrum Cycle"; - SpectrumCycle.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; - modes.push_back(SpectrumCycle); + mode Strobe; + Strobe.name = "Strobe"; + Strobe.value = POLYCHROME_MODE_FLASHING; + 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.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Strobe); - mode Random; - Random.name = "Random"; - Random.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; - modes.push_back(Random); + mode SpectrumCycle; + SpectrumCycle.name = "Spectrum Cycle"; + SpectrumCycle.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; + modes.push_back(SpectrumCycle); - mode Wave; - Wave.name = "Wave"; - Wave.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; - modes.push_back(Wave); + mode Random; + Random.name = "Random"; + Random.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; + modes.push_back(Random); - mode Spring; - Spring.name = "Spring"; - Spring.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; - modes.push_back(Spring); + mode Wave; + Wave.name = "Wave"; + Wave.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; + modes.push_back(Wave); - mode Stack; - Stack.name = "Stack"; - Stack.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; - modes.push_back(Stack); + mode Spring; + Spring.name = "Spring"; + Spring.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; + modes.push_back(Spring); - mode Cram; - Cram.name = "Cram"; - Cram.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; - modes.push_back(Cram); + mode Stack; + Stack.name = "Stack"; + Stack.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; + modes.push_back(Stack); - mode Scan; - Scan.name = "Scan"; - Scan.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; - modes.push_back(Scan); + mode Cram; + Cram.name = "Cram"; + Cram.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; + modes.push_back(Cram); - mode Neon; - Neon.name = "Neon"; - Neon.value = POLYCHROME_MODE_NEON; - Neon.flags = 0; - Neon.color_mode = MODE_COLORS_NONE; - modes.push_back(Neon); + mode Scan; + Scan.name = "Scan"; + Scan.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; + modes.push_back(Scan); - mode Water; - Water.name = "Water"; - Water.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; - modes.push_back(Water); + mode Neon; + Neon.name = "Neon"; + Neon.value = POLYCHROME_MODE_NEON; + Neon.flags = 0; + Neon.color_mode = MODE_COLORS_NONE; + modes.push_back(Neon); - mode Rainbow; - Rainbow.name = "Rainbow"; - Rainbow.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; - modes.push_back(Rainbow); + mode Water; + Water.name = "Water"; + Water.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; + modes.push_back(Water); + + mode Rainbow; + Rainbow.name = "Rainbow"; + Rainbow.value = POLYCHROME_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.color_mode = MODE_COLORS_NONE; + modes.push_back(Rainbow); + } + break; } SetupZones();