Add Direction control to ENE SMBus (ASUS Aura SMBus) effect modes
This commit is contained in:
parent
4370d35d54
commit
c9172e9bb1
3 changed files with 37 additions and 11 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue