From ea6e961a134823921338561976825412863c6761 Mon Sep 17 00:00:00 2001 From: silas Date: Sun, 31 Jan 2021 18:59:18 -0600 Subject: [PATCH] Added some sleeps as well as other changes to the Corsair Vengeance Pro controller Changed the way direct is handled for corsair devices Commit amended for code style by Adam Honse --- .../CorsairVengeanceProController.cpp | 15 +++++++++++---- .../CorsairVengeanceProController.h | 21 +++++++++++---------- .../RGBController_CorsairVengeancePro.cpp | 4 +++- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/Controllers/CorsairVengeanceProController/CorsairVengeanceProController.cpp b/Controllers/CorsairVengeanceProController/CorsairVengeanceProController.cpp index 5e6e5dcf..c1fa0a6a 100644 --- a/Controllers/CorsairVengeanceProController/CorsairVengeanceProController.cpp +++ b/Controllers/CorsairVengeanceProController/CorsairVengeanceProController.cpp @@ -139,6 +139,13 @@ void CorsairVengeanceProController::SetEffect(unsigned char mode, { effect_mode = mode; + direct_mode = (effect_mode == CORSAIR_PRO_MODE_DIRECT); + + if(direct_mode) + { + return; + } + bus->i2c_smbus_write_byte_data(dev, 0x26, 0x01); std::this_thread::sleep_for(1ms); bus->i2c_smbus_write_byte_data(dev, 0x21, 0x00); @@ -155,10 +162,10 @@ void CorsairVengeanceProController::SetEffect(unsigned char mode, random_byte = CORSAIR_PRO_EFFECT_CUSTOM_COLORS; } - bus->i2c_smbus_write_byte_data(dev, CORSAIR_PRO_REG_COMMAND, effect_mode); //Mode - bus->i2c_smbus_write_byte_data(dev, CORSAIR_PRO_REG_COMMAND, speed); //Speed - bus->i2c_smbus_write_byte_data(dev, CORSAIR_PRO_REG_COMMAND, random_byte); //Custom color - bus->i2c_smbus_write_byte_data(dev, CORSAIR_PRO_REG_COMMAND, direction); //Direction + bus->i2c_smbus_write_byte_data(dev, CORSAIR_PRO_REG_COMMAND, effect_mode); // Mode + bus->i2c_smbus_write_byte_data(dev, CORSAIR_PRO_REG_COMMAND, speed); // Speed + bus->i2c_smbus_write_byte_data(dev, CORSAIR_PRO_REG_COMMAND, random_byte); // Custom color + bus->i2c_smbus_write_byte_data(dev, CORSAIR_PRO_REG_COMMAND, direction); // Direction bus->i2c_smbus_write_byte_data(dev, CORSAIR_PRO_REG_COMMAND, red1); // Custom color 1 red bus->i2c_smbus_write_byte_data(dev, CORSAIR_PRO_REG_COMMAND, grn1); // Custom color 1 green bus->i2c_smbus_write_byte_data(dev, CORSAIR_PRO_REG_COMMAND, blu1); // Custom color 1 blue diff --git a/Controllers/CorsairVengeanceProController/CorsairVengeanceProController.h b/Controllers/CorsairVengeanceProController/CorsairVengeanceProController.h index 2ca42276..8b523e43 100644 --- a/Controllers/CorsairVengeanceProController/CorsairVengeanceProController.h +++ b/Controllers/CorsairVengeanceProController/CorsairVengeanceProController.h @@ -25,16 +25,17 @@ enum enum { - CORSAIR_PRO_MODE_COLOR_SHIFT = 0x00, /* Color Shift mode */ - CORSAIR_PRO_MODE_COLOR_PULSE = 0x01, /* Color Pulse mode */ - CORSAIR_PRO_MODE_RAINBOW_WAVE = 0x03, /* Rainbow Wave mode */ - CORSAIR_PRO_MODE_COLOR_WAVE = 0x04, /* Color Wave mode */ - CORSAIR_PRO_MODE_VISOR = 0x05, /* Visor mode */ - CORSAIR_PRO_MODE_RAIN = 0x06, /* Rain mode */ - CORSAIR_PRO_MODE_MARQUEE = 0x07, /* Marquee mode */ - CORSAIR_PRO_MODE_RAINBOW = 0x08, /* Rainbow mode */ - CORSAIR_PRO_MODE_SEQUENTIAL = 0x09, /* Sequential mode */ - CORSAIR_PRO_MODE_STATIC = 0x10, /* Static mode */ + CORSAIR_PRO_MODE_DIRECT = 0xDD, /* Arbitrary value to compare against later. Not the actual packet */ + CORSAIR_PRO_MODE_COLOR_SHIFT = 0x00, /* Color Shift mode */ + CORSAIR_PRO_MODE_COLOR_PULSE = 0x01, /* Color Pulse mode */ + CORSAIR_PRO_MODE_RAINBOW_WAVE = 0x03, /* Rainbow Wave mode */ + CORSAIR_PRO_MODE_COLOR_WAVE = 0x04, /* Color Wave mode */ + CORSAIR_PRO_MODE_VISOR = 0x05, /* Visor mode */ + CORSAIR_PRO_MODE_RAIN = 0x06, /* Rain mode */ + CORSAIR_PRO_MODE_MARQUEE = 0x07, /* Marquee mode */ + CORSAIR_PRO_MODE_RAINBOW = 0x08, /* Rainbow mode */ + CORSAIR_PRO_MODE_SEQUENTIAL = 0x09, /* Sequential mode */ + CORSAIR_PRO_MODE_STATIC = 0x10, /* Static mode */ CORSAIR_PRO_NUMBER_MODES = 10, /* Number of Corsair Pro modes */ }; diff --git a/Controllers/CorsairVengeanceProController/RGBController_CorsairVengeancePro.cpp b/Controllers/CorsairVengeanceProController/RGBController_CorsairVengeancePro.cpp index 6322c69e..840eba52 100644 --- a/Controllers/CorsairVengeanceProController/RGBController_CorsairVengeancePro.cpp +++ b/Controllers/CorsairVengeanceProController/RGBController_CorsairVengeancePro.cpp @@ -21,7 +21,7 @@ RGBController_CorsairVengeancePro::RGBController_CorsairVengeancePro(CorsairVeng mode Direct; Direct.name = "Direct"; - Direct.value = CORSAIR_PRO_MODE_STATIC; + Direct.value = CORSAIR_PRO_MODE_DIRECT; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; Direct.speed_min = 0; Direct.speed_max = 0; @@ -303,4 +303,6 @@ void RGBController_CorsairVengeancePro::DeviceUpdateMode() mode_colors[3], mode_colors[4], mode_colors[5]); + + std::this_thread::sleep_for(std::chrono::milliseconds(15)); }