From c9172e9bb11ad2c73415e988997b4ed4cea92328 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Sun, 14 Nov 2021 01:30:09 -0600 Subject: [PATCH] Add Direction control to ENE SMBus (ASUS Aura SMBus) effect modes --- .../ENESMBusController/ENESMBusController.cpp | 9 +++--- .../ENESMBusController/ENESMBusController.h | 9 +++++- .../RGBController_ENESMBus.cpp | 30 +++++++++++++++---- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/Controllers/ENESMBusController/ENESMBusController.cpp b/Controllers/ENESMBusController/ENESMBusController.cpp index 7af6ae486..c1d246335 100644 --- a/Controllers/ENESMBusController/ENESMBusController.cpp +++ b/Controllers/ENESMBusController/ENESMBusController.cpp @@ -253,11 +253,12 @@ void ENESMBusController::SetLEDColorEffect(unsigned int led, unsigned char red, ENERegisterWrite(ENE_REG_APPLY, ENE_APPLY_VAL); } -void ENESMBusController::SetMode(unsigned char mode, unsigned char speed) +void ENESMBusController::SetMode(unsigned char mode, unsigned char speed, unsigned char direction) { - ENERegisterWrite(ENE_REG_MODE, mode); - ENERegisterWrite(ENE_REG_SPEED, speed); - ENERegisterWrite(ENE_REG_APPLY, ENE_APPLY_VAL); + ENERegisterWrite(ENE_REG_MODE, mode); + ENERegisterWrite(ENE_REG_SPEED, speed); + ENERegisterWrite(ENE_REG_DIRECTION, direction); + ENERegisterWrite(ENE_REG_APPLY, ENE_APPLY_VAL); } void ENESMBusController::UpdateDeviceName() diff --git a/Controllers/ENESMBusController/ENESMBusController.h b/Controllers/ENESMBusController/ENESMBusController.h index 60b1ac323..cb7baec80 100644 --- a/Controllers/ENESMBusController/ENESMBusController.h +++ b/Controllers/ENESMBusController/ENESMBusController.h @@ -30,6 +30,7 @@ enum ENE_REG_DIRECT = 0x8020, /* "Direct Access" Selection Register */ ENE_REG_MODE = 0x8021, /* Mode Selection Register */ ENE_REG_SPEED = 0x8022, /* Speed Control Register */ + ENE_REG_DIRECTION = 0x8023, /* Direction 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) */ @@ -65,6 +66,12 @@ enum ENE_SPEED_FASTEST = 0x00, /* Fastest effect speed */ }; +enum +{ + ENE_DIRECTION_FORWARD = 0x0, /* Forward effect direction */ + ENE_DIRECTION_REVERSE = 0x1, /* Reverse effect direction */ +}; + enum { ENE_LED_CHANNEL_DRAM_2 = 0x05, /* DRAM LED channel */ @@ -106,7 +113,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, unsigned char speed); + void SetMode(unsigned char mode, unsigned char speed, unsigned char direction); void UpdateDeviceName(); diff --git a/Controllers/ENESMBusController/RGBController_ENESMBus.cpp b/Controllers/ENESMBusController/RGBController_ENESMBus.cpp index f47aa8593..92f7cf92b 100644 --- a/Controllers/ENESMBusController/RGBController_ENESMBus.cpp +++ b/Controllers/ENESMBusController/RGBController_ENESMBus.cpp @@ -88,31 +88,34 @@ RGBController_ENESMBus::RGBController_ENESMBus(ENESMBusController * controller_p mode Rainbow; Rainbow.name = "Rainbow"; Rainbow.value = ENE_MODE_RAINBOW; - Rainbow.flags = MODE_FLAG_HAS_SPEED; + Rainbow.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; Rainbow.color_mode = MODE_COLORS_NONE; Rainbow.speed_min = ENE_SPEED_SLOWEST; Rainbow.speed_max = ENE_SPEED_FASTEST; Rainbow.speed = ENE_SPEED_NORMAL; + Rainbow.direction = MODE_DIRECTION_LEFT; 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 | MODE_FLAG_HAS_SPEED; + ChaseFade.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; ChaseFade.color_mode = MODE_COLORS_PER_LED; ChaseFade.speed_min = ENE_SPEED_SLOWEST; ChaseFade.speed_max = ENE_SPEED_FASTEST; ChaseFade.speed = ENE_SPEED_NORMAL; + ChaseFade.direction = MODE_DIRECTION_LEFT; 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 | MODE_FLAG_HAS_SPEED; + Chase.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; Chase.color_mode = MODE_COLORS_PER_LED; Chase.speed_min = ENE_SPEED_SLOWEST; Chase.speed_max = ENE_SPEED_FASTEST; Chase.speed = ENE_SPEED_NORMAL; + ChaseFade.direction = MODE_DIRECTION_LEFT; modes.push_back(Chase); mode RandomFlicker; @@ -376,8 +379,9 @@ void RGBController_ENESMBus::DeviceUpdateMode() } else { - int new_mode = modes[active_mode].value; - int new_speed = 0; + int new_mode = modes[active_mode].value; + int new_speed = 0; + int new_direction = 0; if(modes[active_mode].color_mode == MODE_COLORS_RANDOM) { @@ -400,7 +404,21 @@ void RGBController_ENESMBus::DeviceUpdateMode() new_speed = modes[active_mode].speed; } - controller->SetMode(new_mode, new_speed); + if(modes[active_mode].flags & MODE_FLAG_HAS_DIRECTION_LR) + { + switch(modes[active_mode].direction) + { + case MODE_DIRECTION_LEFT: + new_direction = ENE_DIRECTION_FORWARD; + break; + + case MODE_DIRECTION_RIGHT: + new_direction = ENE_DIRECTION_REVERSE; + break; + } + } + + controller->SetMode(new_mode, new_speed, new_direction); controller->SetDirect(false); } }