From 8784f5e7c5e782c951a6fde12546ec6e8a4e0527 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Mon, 15 Nov 2021 12:08:34 -0600 Subject: [PATCH] Copy in updates from ENE controller - speed, direction, save --- .../RGBController_XPGSpectrixS40G.cpp | 73 ++++++++++++++++--- .../RGBController_XPGSpectrixS40G.h | 1 + .../XPGSpectrixS40GController.cpp | 13 +++- .../XPGSpectrixS40GController.h | 32 ++++++-- 4 files changed, 99 insertions(+), 20 deletions(-) diff --git a/Controllers/XPGSpectrixS40GController/RGBController_XPGSpectrixS40G.cpp b/Controllers/XPGSpectrixS40GController/RGBController_XPGSpectrixS40G.cpp index 0ac34ee19..fa996535d 100644 --- a/Controllers/XPGSpectrixS40GController/RGBController_XPGSpectrixS40G.cpp +++ b/Controllers/XPGSpectrixS40GController/RGBController_XPGSpectrixS40G.cpp @@ -88,64 +88,88 @@ RGBController_XPGSpectrixS40G::RGBController_XPGSpectrixS40G(XPGSpectrixS40GCont mode Off; Off.name = "Off"; Off.value = AURA_MODE_OFF; - Off.flags = 0; + Off.flags = MODE_FLAG_MANUAL_SAVE; Off.color_mode = MODE_COLORS_NONE; modes.push_back(Off); mode Static; Static.name = "Static"; Static.value = AURA_MODE_STATIC; - Static.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Static.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE; Static.color_mode = MODE_COLORS_PER_LED; modes.push_back(Static); - + mode Breathing; Breathing.name = "Breathing"; Breathing.value = AURA_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 | MODE_FLAG_MANUAL_SAVE; Breathing.color_mode = MODE_COLORS_PER_LED; + Breathing.speed_min = AURA_SPEED_SLOWEST; + Breathing.speed_max = AURA_SPEED_FASTEST; + Breathing.speed = AURA_SPEED_NORMAL; modes.push_back(Breathing); mode Flashing; Flashing.name = "Flashing"; Flashing.value = AURA_MODE_FLASHING; - Flashing.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Flashing.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE; Flashing.color_mode = MODE_COLORS_PER_LED; + Flashing.speed_min = AURA_SPEED_SLOWEST; + Flashing.speed_max = AURA_SPEED_FASTEST; + Flashing.speed = AURA_SPEED_NORMAL; modes.push_back(Flashing); mode SpectrumCycle; SpectrumCycle.name = "Spectrum Cycle"; SpectrumCycle.value = AURA_MODE_SPECTRUM_CYCLE; - SpectrumCycle.flags = 0; + SpectrumCycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE; SpectrumCycle.color_mode = MODE_COLORS_NONE; + SpectrumCycle.speed_min = AURA_SPEED_SLOWEST; + SpectrumCycle.speed_max = AURA_SPEED_FASTEST; + SpectrumCycle.speed = AURA_SPEED_NORMAL; modes.push_back(SpectrumCycle); mode Rainbow; Rainbow.name = "Rainbow"; Rainbow.value = AURA_MODE_RAINBOW; - Rainbow.flags = 0; + Rainbow.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_MANUAL_SAVE; Rainbow.color_mode = MODE_COLORS_NONE; + Rainbow.speed_min = AURA_SPEED_SLOWEST; + Rainbow.speed_max = AURA_SPEED_FASTEST; + Rainbow.speed = AURA_SPEED_NORMAL; + Rainbow.direction = MODE_DIRECTION_LEFT; modes.push_back(Rainbow); mode ChaseFade; ChaseFade.name = "Chase Fade"; ChaseFade.value = AURA_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 | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_MANUAL_SAVE; ChaseFade.color_mode = MODE_COLORS_PER_LED; + ChaseFade.speed_min = AURA_SPEED_SLOWEST; + ChaseFade.speed_max = AURA_SPEED_FASTEST; + ChaseFade.speed = AURA_SPEED_NORMAL; + ChaseFade.direction = MODE_DIRECTION_LEFT; modes.push_back(ChaseFade); mode Chase; Chase.name = "Chase"; Chase.value = AURA_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 | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_MANUAL_SAVE; Chase.color_mode = MODE_COLORS_PER_LED; + Chase.speed_min = AURA_SPEED_SLOWEST; + Chase.speed_max = AURA_SPEED_FASTEST; + Chase.speed = AURA_SPEED_NORMAL; + ChaseFade.direction = MODE_DIRECTION_LEFT; modes.push_back(Chase); mode RandomFlicker; RandomFlicker.name = "Random Flicker"; RandomFlicker.value = AURA_MODE_RANDOM_FLICKER; - RandomFlicker.flags = 0; + RandomFlicker.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE; RandomFlicker.color_mode = MODE_COLORS_NONE; + RandomFlicker.speed_min = AURA_SPEED_SLOWEST; + RandomFlicker.speed_max = AURA_SPEED_FASTEST; + RandomFlicker.speed = AURA_SPEED_NORMAL; modes.push_back(RandomFlicker); SetupZones(); @@ -288,6 +312,8 @@ void RGBController_XPGSpectrixS40G::DeviceUpdateMode() else { int new_mode = modes[active_mode].value; + int new_speed = 0; + int new_direction = 0; if(modes[active_mode].color_mode == MODE_COLORS_RANDOM) { @@ -305,7 +331,32 @@ void RGBController_XPGSpectrixS40G::DeviceUpdateMode() } } - aura->SetMode(new_mode); + if(modes[active_mode].flags & MODE_FLAG_HAS_SPEED) + { + new_speed = modes[active_mode].speed; + } + + if(modes[active_mode].flags & MODE_FLAG_HAS_DIRECTION_LR) + { + switch(modes[active_mode].direction) + { + case MODE_DIRECTION_LEFT: + new_direction = AURA_DIRECTION_FORWARD; + break; + + case MODE_DIRECTION_RIGHT: + new_direction = AURA_DIRECTION_REVERSE; + break; + } + } + + aura->SetMode(new_mode, new_speed, new_direction); aura->SetDirect(false); } } + +void RGBController_XPGSpectrixS40G::DeviceSaveMode() +{ + DeviceUpdateMode(); + aura->SaveMode(); +} \ No newline at end of file diff --git a/Controllers/XPGSpectrixS40GController/RGBController_XPGSpectrixS40G.h b/Controllers/XPGSpectrixS40GController/RGBController_XPGSpectrixS40G.h index 48f032e79..9f53c4196 100644 --- a/Controllers/XPGSpectrixS40GController/RGBController_XPGSpectrixS40G.h +++ b/Controllers/XPGSpectrixS40GController/RGBController_XPGSpectrixS40G.h @@ -28,6 +28,7 @@ public: void SetCustomMode(); void DeviceUpdateMode(); + void DeviceSaveMode(); private: XPGSpectrixS40GController* aura; diff --git a/Controllers/XPGSpectrixS40GController/XPGSpectrixS40GController.cpp b/Controllers/XPGSpectrixS40GController/XPGSpectrixS40GController.cpp index e659ac508..3216550c6 100644 --- a/Controllers/XPGSpectrixS40GController/XPGSpectrixS40GController.cpp +++ b/Controllers/XPGSpectrixS40GController/XPGSpectrixS40GController.cpp @@ -160,6 +160,11 @@ unsigned char XPGSpectrixS40GController::GetLEDBlue(unsigned int led) return(AuraRegisterRead(direct_reg + ( 3 * led ) + 1)); } +void XPGSpectrixS40GController::SaveMode() +{ + AuraRegisterWrite(AURA_REG_APPLY, AURA_SAVE_VAL); +} + void XPGSpectrixS40GController::SetAllColorsDirect(RGBColor* colors) { unsigned char* color_buf = new unsigned char[led_count * 3]; @@ -216,10 +221,12 @@ void XPGSpectrixS40GController::SetLEDColorEffect(unsigned int led, unsigned cha AuraRegisterWrite(AURA_REG_APPLY, AURA_APPLY_VAL); } -void XPGSpectrixS40GController::SetMode(unsigned char mode) +void XPGSpectrixS40GController::SetMode(unsigned char mode, unsigned char speed, unsigned char direction) { - AuraRegisterWrite(AURA_REG_MODE, mode); - AuraRegisterWrite(AURA_REG_APPLY, AURA_APPLY_VAL); + AuraRegisterWrite(AURA_REG_MODE, mode); + AuraRegisterWrite(AURA_REG_SPEED, speed); + AuraRegisterWrite(AURA_REG_DIRECTION, direction); + AuraRegisterWrite(AURA_REG_APPLY, AURA_APPLY_VAL); } void XPGSpectrixS40GController::AuraUpdateDeviceName() diff --git a/Controllers/XPGSpectrixS40GController/XPGSpectrixS40GController.h b/Controllers/XPGSpectrixS40GController/XPGSpectrixS40GController.h index 468ecf7c9..a85c3ab54 100644 --- a/Controllers/XPGSpectrixS40GController/XPGSpectrixS40GController.h +++ b/Controllers/XPGSpectrixS40GController/XPGSpectrixS40GController.h @@ -42,19 +42,23 @@ typedef unsigned char aura_dev_id; typedef unsigned short aura_register; -#define AURA_APPLY_VAL 0x01 /* Value for Apply Changes Register */ +#define AURA_APPLY_VAL 0x01 /* Value for Apply Changes Register */ +#define AURA_SAVE_VAL 0xAA /* Value for Save Changes */ enum { AURA_REG_DEVICE_NAME = 0x1000, /* Device String 16 bytes */ + AURA_REG_MICRON_CHECK = 0x1030, /* If "Micron" appears here, skip */ AURA_REG_CONFIG_TABLE = 0x1C00, /* Start of LED configuration bytes */ AURA_REG_COLORS_DIRECT = 0x8000, /* Colors for Direct Mode 15 bytes */ AURA_REG_COLORS_EFFECT = 0x8010, /* Colors for Internal Effects 15 bytes */ AURA_REG_DIRECT = 0x8020, /* "Direct Access" Selection Register */ - AURA_REG_MODE = 0x8021, /* AURA Mode Selection Register */ - AURA_REG_APPLY = 0x80A0, /* AURA Apply Changes Register */ - AURA_REG_SLOT_INDEX = 0x80F8, /* AURA Slot Index Register (RAM only) */ - AURA_REG_I2C_ADDRESS = 0x80F9, /* AURA I2C Address Register (RAM only) */ + AURA_REG_MODE = 0x8021, /* Mode Selection Register */ + AURA_REG_SPEED = 0x8022, /* Speed Control Register */ + AURA_REG_DIRECTION = 0x8023, /* Direction Control Register */ + AURA_REG_APPLY = 0x80A0, /* Apply Changes Register */ + AURA_REG_SLOT_INDEX = 0x80F8, /* Slot Index Register (RAM only) */ + AURA_REG_I2C_ADDRESS = 0x80F9, /* I2C Address Register (RAM only) */ AURA_REG_COLORS_DIRECT_V2 = 0x8100, /* Direct Colors (v2) 30 bytes */ AURA_REG_COLORS_EFFECT_V2 = 0x8160, /* Internal Colors (v2) 30 bytes */ }; @@ -78,6 +82,21 @@ enum AURA_NUMBER_MODES /* Number of Aura modes */ }; +enum +{ + AURA_SPEED_SLOWEST = 0x04, /* Slowest effect speed */ + AURA_SPEED_SLOW = 0x03, /* Slow effect speed */ + AURA_SPEED_NORMAL = 0x02, /* Normal effect speed */ + AURA_SPEED_FAST = 0x01, /* Fast effect speed */ + AURA_SPEED_FASTEST = 0x00, /* Fastest effect speed */ +}; + +enum +{ + AURA_DIRECTION_FORWARD = 0x0, /* Forward effect direction */ + AURA_DIRECTION_REVERSE = 0x1, /* Reverse effect direction */ +}; + enum { AURA_LED_CHANNEL_DRAM_2 = 0x05, /* DRAM LED channel */ @@ -124,12 +143,13 @@ public: unsigned char GetLEDRed(unsigned int led); unsigned char GetLEDGreen(unsigned int led); unsigned char GetLEDBlue(unsigned int led); + void SaveMode(); void SetAllColorsDirect(RGBColor* colors); void SetAllColorsEffect(RGBColor* colors); 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, unsigned char direction); void AuraUpdateDeviceName();