diff --git a/Controllers/ENESMBusController/ENESMBusController.cpp b/Controllers/ENESMBusController/ENESMBusController.cpp index 7ed96b26..7af6ae48 100644 --- a/Controllers/ENESMBusController/ENESMBusController.cpp +++ b/Controllers/ENESMBusController/ENESMBusController.cpp @@ -253,9 +253,10 @@ void ENESMBusController::SetLEDColorEffect(unsigned int led, unsigned char red, ENERegisterWrite(ENE_REG_APPLY, ENE_APPLY_VAL); } -void ENESMBusController::SetMode(unsigned char mode) +void ENESMBusController::SetMode(unsigned char mode, unsigned char speed) { ENERegisterWrite(ENE_REG_MODE, mode); + ENERegisterWrite(ENE_REG_SPEED, speed); ENERegisterWrite(ENE_REG_APPLY, ENE_APPLY_VAL); } diff --git a/Controllers/ENESMBusController/ENESMBusController.h b/Controllers/ENESMBusController/ENESMBusController.h index 62b5ecb0..60b1ac32 100644 --- a/Controllers/ENESMBusController/ENESMBusController.h +++ b/Controllers/ENESMBusController/ENESMBusController.h @@ -28,10 +28,11 @@ enum ENE_REG_COLORS_DIRECT = 0x8000, /* Colors for Direct Mode 15 bytes */ ENE_REG_COLORS_EFFECT = 0x8010, /* Colors for Internal Effects 15 bytes */ ENE_REG_DIRECT = 0x8020, /* "Direct Access" Selection Register */ - ENE_REG_MODE = 0x8021, /* AURA Mode Selection Register */ - ENE_REG_APPLY = 0x80A0, /* AURA Apply Changes Register */ - ENE_REG_SLOT_INDEX = 0x80F8, /* AURA Slot Index Register (RAM only) */ - ENE_REG_I2C_ADDRESS = 0x80F9, /* AURA I2C Address Register (RAM only) */ + ENE_REG_MODE = 0x8021, /* Mode Selection Register */ + ENE_REG_SPEED = 0x8022, /* Speed Control Register */ + ENE_REG_APPLY = 0x80A0, /* Apply Changes Register */ + ENE_REG_SLOT_INDEX = 0x80F8, /* Slot Index Register (RAM only) */ + ENE_REG_I2C_ADDRESS = 0x80F9, /* I2C Address Register (RAM only) */ ENE_REG_COLORS_DIRECT_V2 = 0x8100, /* Direct Colors (v2) 30 bytes */ ENE_REG_COLORS_EFFECT_V2 = 0x8160, /* Internal Colors (v2) 30 bytes */ }; @@ -55,6 +56,15 @@ enum ENE_NUMBER_MODES /* Number of Aura modes */ }; +enum +{ + ENE_SPEED_SLOWEST = 0x04, /* Slowest effect speed */ + ENE_SPEED_SLOW = 0x03, /* Slow effect speed */ + ENE_SPEED_NORMAL = 0x02, /* Normal effect speed */ + ENE_SPEED_FAST = 0x01, /* Fast effect speed */ + ENE_SPEED_FASTEST = 0x00, /* Fastest effect speed */ +}; + enum { ENE_LED_CHANNEL_DRAM_2 = 0x05, /* DRAM LED channel */ @@ -96,7 +106,7 @@ public: void SetDirect(unsigned char direct); void SetLEDColorDirect(unsigned int led, unsigned char red, unsigned char green, unsigned char blue); void SetLEDColorEffect(unsigned int led, unsigned char red, unsigned char green, unsigned char blue); - void SetMode(unsigned char mode); + void SetMode(unsigned char mode, unsigned char speed); void UpdateDeviceName(); diff --git a/Controllers/ENESMBusController/RGBController_ENESMBus.cpp b/Controllers/ENESMBusController/RGBController_ENESMBus.cpp index 5511f1b1..f47aa859 100644 --- a/Controllers/ENESMBusController/RGBController_ENESMBus.cpp +++ b/Controllers/ENESMBusController/RGBController_ENESMBus.cpp @@ -17,7 +17,7 @@ RGBController_ENESMBus::RGBController_ENESMBus(ENESMBusController * controller_p | the ENE controller's version string | \*---------------------------------------------------------*/ version = controller->GetDeviceName(); - + if((version.find("DIMM_LED") != std::string::npos) || (version.find("AUDA") != std::string::npos) ) { type = DEVICE_TYPE_DRAM; @@ -58,50 +58,71 @@ RGBController_ENESMBus::RGBController_ENESMBus(ENESMBusController * controller_p mode Breathing; Breathing.name = "Breathing"; Breathing.value = ENE_MODE_BREATHING; - Breathing.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_PER_LED_COLOR; + Breathing.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_SPEED; Breathing.color_mode = MODE_COLORS_PER_LED; + Breathing.speed_min = ENE_SPEED_SLOWEST; + Breathing.speed_max = ENE_SPEED_FASTEST; + Breathing.speed = ENE_SPEED_NORMAL; modes.push_back(Breathing); mode Flashing; Flashing.name = "Flashing"; Flashing.value = ENE_MODE_FLASHING; - Flashing.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Flashing.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_SPEED; Flashing.color_mode = MODE_COLORS_PER_LED; + Flashing.speed_min = ENE_SPEED_SLOWEST; + Flashing.speed_max = ENE_SPEED_FASTEST; + Flashing.speed = ENE_SPEED_NORMAL; modes.push_back(Flashing); mode SpectrumCycle; SpectrumCycle.name = "Spectrum Cycle"; SpectrumCycle.value = ENE_MODE_SPECTRUM_CYCLE; - SpectrumCycle.flags = 0; + SpectrumCycle.flags = MODE_FLAG_HAS_SPEED; SpectrumCycle.color_mode = MODE_COLORS_NONE; + SpectrumCycle.speed_min = ENE_SPEED_SLOWEST; + SpectrumCycle.speed_max = ENE_SPEED_FASTEST; + SpectrumCycle.speed = ENE_SPEED_NORMAL; modes.push_back(SpectrumCycle); mode Rainbow; Rainbow.name = "Rainbow"; Rainbow.value = ENE_MODE_RAINBOW; - Rainbow.flags = 0; + Rainbow.flags = MODE_FLAG_HAS_SPEED; Rainbow.color_mode = MODE_COLORS_NONE; + Rainbow.speed_min = ENE_SPEED_SLOWEST; + Rainbow.speed_max = ENE_SPEED_FASTEST; + Rainbow.speed = ENE_SPEED_NORMAL; modes.push_back(Rainbow); mode ChaseFade; ChaseFade.name = "Chase Fade"; ChaseFade.value = ENE_MODE_CHASE_FADE; - ChaseFade.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_PER_LED_COLOR; + ChaseFade.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_SPEED; ChaseFade.color_mode = MODE_COLORS_PER_LED; + ChaseFade.speed_min = ENE_SPEED_SLOWEST; + ChaseFade.speed_max = ENE_SPEED_FASTEST; + ChaseFade.speed = ENE_SPEED_NORMAL; modes.push_back(ChaseFade); mode Chase; Chase.name = "Chase"; Chase.value = ENE_MODE_CHASE; - Chase.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_PER_LED_COLOR; + Chase.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_SPEED; Chase.color_mode = MODE_COLORS_PER_LED; + Chase.speed_min = ENE_SPEED_SLOWEST; + Chase.speed_max = ENE_SPEED_FASTEST; + Chase.speed = ENE_SPEED_NORMAL; modes.push_back(Chase); mode RandomFlicker; RandomFlicker.name = "Random Flicker"; RandomFlicker.value = ENE_MODE_RANDOM_FLICKER; - RandomFlicker.flags = 0; + RandomFlicker.flags = MODE_FLAG_HAS_SPEED; RandomFlicker.color_mode = MODE_COLORS_NONE; + RandomFlicker.speed_min = ENE_SPEED_SLOWEST; + RandomFlicker.speed_max = ENE_SPEED_FASTEST; + RandomFlicker.speed = ENE_SPEED_NORMAL; modes.push_back(RandomFlicker); SetupZones(); @@ -355,7 +376,8 @@ void RGBController_ENESMBus::DeviceUpdateMode() } else { - int new_mode = modes[active_mode].value; + int new_mode = modes[active_mode].value; + int new_speed = 0; if(modes[active_mode].color_mode == MODE_COLORS_RANDOM) { @@ -373,7 +395,12 @@ void RGBController_ENESMBus::DeviceUpdateMode() } } - controller->SetMode(new_mode); + if(modes[active_mode].flags & MODE_FLAG_HAS_SPEED) + { + new_speed = modes[active_mode].speed; + } + + controller->SetMode(new_mode, new_speed); controller->SetDirect(false); } }