Add Direction control to ENE SMBus (ASUS Aura SMBus) effect modes

This commit is contained in:
Adam Honse 2021-11-14 01:30:09 -06:00
parent 4370d35d54
commit c9172e9bb1
3 changed files with 37 additions and 11 deletions

View file

@ -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()

View file

@ -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();

View file

@ -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);
}
}