Publish curated LumaOps source from c85ee9ef8f1454f5c305398902afbb9e6738de40
Managed validation / full (push) Failing after 8s
Managed validation / full (push) Failing after 8s
This commit is contained in:
1 parent
91f8b3e3c1
commit
def7920856
2271 files changed
+501225
-501178
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -1,163 +1,163 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| AlienwareController.h |
|
||||
| |
|
||||
| Driver for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 19 Apr 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <hidapi.h>
|
||||
#include "RGBController.h"
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*\
|
||||
| Definitions for Alienware Controller |
|
||||
\*----------------------------------------------------------------------------------------------*/
|
||||
|
||||
#define ALIENWARE_REPORT_SIZE 33
|
||||
#define HIDAPI_ALIENWARE_REPORT_SIZE (ALIENWARE_REPORT_SIZE + 1)
|
||||
#define ALIENWARE_CONTROLLER_NAME "AlienWare Controller"
|
||||
enum
|
||||
{
|
||||
ALIENWARE_COMMAND_REPORT = 0x20, /* Set report type to get */
|
||||
ALIENWARE_COMMAND_USER_ANIM = 0x21, /* Set user animation settings */
|
||||
ALIENWARE_COMMAND_POWER_ANIM = 0x22, /* Set power animation settings */
|
||||
ALIENWARE_COMMAND_SELECT_ZONES = 0x23, /* Select zones to apply actions to */
|
||||
ALIENWARE_COMMAND_ADD_ACTION = 0x24, /* Set actions to apply */
|
||||
ALIENWARE_COMMAND_UNKNOWN1 = 0x25, /* Supposedly set event? */
|
||||
ALIENWARE_COMMAND_DIM = 0x26, /* Set dim percentage */
|
||||
ALIENWARE_COMMAND_SET_COLOR = 0x27, /* Unclear (causes color flash) */
|
||||
ALIENWARE_COMMAND_RESET = 0x28, /* Reset */
|
||||
ALIENWARE_COMMAND_ERASE_FLASH = 0xFF, /* Erases flash memory on controller */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_COMMAND_REPORT_FIRMWARE = 0x00, /* Get firmware verion */
|
||||
ALIENWARE_COMMAND_REPORT_STATUS = 0x01, /* Get status */
|
||||
ALIENWARE_COMMAND_REPORT_CONFIG = 0x02, /* Get firmware config */
|
||||
ALIENWARE_COMMAND_REPORT_ANIMATION = 0x03, /* Get animation count and last id */
|
||||
ALIENWARE_COMMAND_REPORT_UNKNOWN1 = 0x04, /* Get ELC animation by ID */
|
||||
ALIENWARE_COMMAND_REPORT_UNKNOWN2 = 0x05, /* Read series??? */
|
||||
ALIENWARE_COMMAND_REPORT_UNKNOWN3 = 0x06, /* Get action??? */
|
||||
ALIENWARE_COMMAND_REPORT_UNKNOWN4 = 0x07, /* Get Caldera status??? */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_COMMAND_USER_ANIM_NEW = 0x0001, /* Start new animation */
|
||||
ALIENWARE_COMMAND_USER_ANIM_FINISH_SAVE = 0x0002, /* Finish and save animation */
|
||||
ALIENWARE_COMMAND_USER_ANIM_FINISH_PLAY = 0x0003, /* Finish and play animation */
|
||||
ALIENWARE_COMMAND_USER_ANIM_REMOVE = 0x0004, /* Remove/erase animation */
|
||||
ALIENWARE_COMMAND_USER_ANIM_PLAY = 0x0005, /* Play animation */
|
||||
ALIENWARE_COMMAND_USER_ANIM_DEFAULT = 0x0006, /* Set default animation */
|
||||
ALIENWARE_COMMAND_USER_ANIM_STARTUP = 0x0007, /* Set startup animation */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_ANIM_DEFAULT_STARTUP = 0x0008, /* Default slot for startup */
|
||||
ALIENWARE_ANIM_DEFAULT = 0x0061, /* Default slot */
|
||||
ALIENWARE_COMMAND_USER_ANIM_KEYBOARD = 0xFFFF, /* Non-saved animation slot */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_MODE_COLOR = 0x00, /* Action to set color mode */
|
||||
ALIENWARE_MODE_PULSE = 0x01, /* Action to set pulse mode */
|
||||
ALIENWARE_MODE_MORPH = 0x02, /* Action to set morph mode */
|
||||
ALIENWARE_MODE_SPECTRUM, /* Abitrary code for spectrum mode */
|
||||
ALIENWARE_MODE_RAINBOW, /* Arbitrary code for rainbow wave mode */
|
||||
ALIENWARE_MODE_BREATHING, /* Arbitrary code for rainbow wave mode */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_TEMPO_MIN = 0x0064, /* Min tempo (as used by AWCC) */
|
||||
ALIENWARE_TEMPO_MAX = 0x00FA, /* Max tempo (as used by AWCC) */
|
||||
ALIENWARE_TEMPO_SPECTRUM = 0x000F, /* Used by Spectrum mode */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_DURATION_LONG = 0x09C4, /* Min tempo (as used by AWCC) */
|
||||
ALIENWARE_DURATION_MED = 0x05DC, /* Max tempo (as used by AWCC) */
|
||||
ALIENWARE_DURATION_SHORT = 0x01F3, /* Max tempo (as used by AWCC) */
|
||||
ALIENWARE_DURATION_SPECTRUM = 0x01AC, /* Used by Spectrum mode */
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char data[ALIENWARE_REPORT_SIZE];
|
||||
} AlienwareReport;
|
||||
|
||||
class AlienwareController
|
||||
{
|
||||
public:
|
||||
AlienwareController(hid_device* dev_handle, const hid_device_info& info, std::string name);
|
||||
~AlienwareController();
|
||||
|
||||
std::string GetSerialString();
|
||||
std::string GetDeviceLocation();
|
||||
std::string GetDeviceName();
|
||||
std::string GetFirmwareVersion();
|
||||
unsigned GetZoneCount();
|
||||
std::vector<const char*> GetZoneNames();
|
||||
|
||||
void SetColor(uint8_t zone, RGBColor color);
|
||||
void SetColor(uint8_t zone, RGBColor color1, RGBColor color2);
|
||||
void SetMode(uint8_t zone, uint8_t mode);
|
||||
void SetPeriod(uint8_t zone, uint16_t period);
|
||||
void SetTempo(uint8_t zone, uint16_t tempo);
|
||||
void SetDim(uint8_t zone, uint8_t dim);
|
||||
AlienwareReport GetStatus(uint8_t subcommand);
|
||||
|
||||
void UpdateDim();
|
||||
void UpdateMode();
|
||||
void UpdateController();
|
||||
|
||||
protected:
|
||||
hid_device* dev;
|
||||
|
||||
private:
|
||||
typedef struct
|
||||
{
|
||||
RGBColor color[2];
|
||||
uint8_t mode;
|
||||
uint16_t period;
|
||||
uint16_t tempo;
|
||||
uint8_t dim;
|
||||
} alienware_zone;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char data[HIDAPI_ALIENWARE_REPORT_SIZE];
|
||||
} HidapiAlienwareReport;
|
||||
|
||||
std::string device_name;
|
||||
std::string location;
|
||||
std::vector<alienware_zone> zones;
|
||||
std::string serial_number;
|
||||
std::string version;
|
||||
std::vector<const char*> zone_names;
|
||||
bool dirty;
|
||||
bool dirty_dim;
|
||||
|
||||
HidapiAlienwareReport GetResponse();
|
||||
HidapiAlienwareReport Report(uint8_t subcommand);
|
||||
|
||||
bool Dim(std::vector<uint8_t> zones, double percent);
|
||||
bool UserAnimation(uint16_t subcommand, uint16_t animation, uint16_t duration);
|
||||
bool SelectZones(const std::vector<uint8_t>& zones);
|
||||
bool ModeAction(uint8_t mode, uint16_t duration, uint16_t tempo, RGBColor color);
|
||||
bool ModeAction(const uint8_t *mode, const uint16_t *duration, const uint16_t *tempo, const RGBColor *color, unsigned amount);
|
||||
bool MultiModeAction(const uint8_t *mode, const uint16_t *duration, const uint16_t *tempo, const RGBColor *color, unsigned amount);
|
||||
bool SetColorDirect(RGBColor color, std::vector<uint8_t> zones);
|
||||
bool UpdateDirect();
|
||||
bool Reset();
|
||||
};
|
||||
/*---------------------------------------------------------*\
|
||||
| AlienwareController.h |
|
||||
| |
|
||||
| Driver for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 19 Apr 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <hidapi.h>
|
||||
#include "RGBController.h"
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*\
|
||||
| Definitions for Alienware Controller |
|
||||
\*----------------------------------------------------------------------------------------------*/
|
||||
|
||||
#define ALIENWARE_REPORT_SIZE 33
|
||||
#define HIDAPI_ALIENWARE_REPORT_SIZE (ALIENWARE_REPORT_SIZE + 1)
|
||||
#define ALIENWARE_CONTROLLER_NAME "AlienWare Controller"
|
||||
enum
|
||||
{
|
||||
ALIENWARE_COMMAND_REPORT = 0x20, /* Set report type to get */
|
||||
ALIENWARE_COMMAND_USER_ANIM = 0x21, /* Set user animation settings */
|
||||
ALIENWARE_COMMAND_POWER_ANIM = 0x22, /* Set power animation settings */
|
||||
ALIENWARE_COMMAND_SELECT_ZONES = 0x23, /* Select zones to apply actions to */
|
||||
ALIENWARE_COMMAND_ADD_ACTION = 0x24, /* Set actions to apply */
|
||||
ALIENWARE_COMMAND_UNKNOWN1 = 0x25, /* Supposedly set event? */
|
||||
ALIENWARE_COMMAND_DIM = 0x26, /* Set dim percentage */
|
||||
ALIENWARE_COMMAND_SET_COLOR = 0x27, /* Unclear (causes color flash) */
|
||||
ALIENWARE_COMMAND_RESET = 0x28, /* Reset */
|
||||
ALIENWARE_COMMAND_ERASE_FLASH = 0xFF, /* Erases flash memory on controller */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_COMMAND_REPORT_FIRMWARE = 0x00, /* Get firmware verion */
|
||||
ALIENWARE_COMMAND_REPORT_STATUS = 0x01, /* Get status */
|
||||
ALIENWARE_COMMAND_REPORT_CONFIG = 0x02, /* Get firmware config */
|
||||
ALIENWARE_COMMAND_REPORT_ANIMATION = 0x03, /* Get animation count and last id */
|
||||
ALIENWARE_COMMAND_REPORT_UNKNOWN1 = 0x04, /* Get ELC animation by ID */
|
||||
ALIENWARE_COMMAND_REPORT_UNKNOWN2 = 0x05, /* Read series??? */
|
||||
ALIENWARE_COMMAND_REPORT_UNKNOWN3 = 0x06, /* Get action??? */
|
||||
ALIENWARE_COMMAND_REPORT_UNKNOWN4 = 0x07, /* Get Caldera status??? */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_COMMAND_USER_ANIM_NEW = 0x0001, /* Start new animation */
|
||||
ALIENWARE_COMMAND_USER_ANIM_FINISH_SAVE = 0x0002, /* Finish and save animation */
|
||||
ALIENWARE_COMMAND_USER_ANIM_FINISH_PLAY = 0x0003, /* Finish and play animation */
|
||||
ALIENWARE_COMMAND_USER_ANIM_REMOVE = 0x0004, /* Remove/erase animation */
|
||||
ALIENWARE_COMMAND_USER_ANIM_PLAY = 0x0005, /* Play animation */
|
||||
ALIENWARE_COMMAND_USER_ANIM_DEFAULT = 0x0006, /* Set default animation */
|
||||
ALIENWARE_COMMAND_USER_ANIM_STARTUP = 0x0007, /* Set startup animation */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_ANIM_DEFAULT_STARTUP = 0x0008, /* Default slot for startup */
|
||||
ALIENWARE_ANIM_DEFAULT = 0x0061, /* Default slot */
|
||||
ALIENWARE_COMMAND_USER_ANIM_KEYBOARD = 0xFFFF, /* Non-saved animation slot */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_MODE_COLOR = 0x00, /* Action to set color mode */
|
||||
ALIENWARE_MODE_PULSE = 0x01, /* Action to set pulse mode */
|
||||
ALIENWARE_MODE_MORPH = 0x02, /* Action to set morph mode */
|
||||
ALIENWARE_MODE_SPECTRUM, /* Abitrary code for spectrum mode */
|
||||
ALIENWARE_MODE_RAINBOW, /* Arbitrary code for rainbow wave mode */
|
||||
ALIENWARE_MODE_BREATHING, /* Arbitrary code for rainbow wave mode */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_TEMPO_MIN = 0x0064, /* Min tempo (as used by AWCC) */
|
||||
ALIENWARE_TEMPO_MAX = 0x00FA, /* Max tempo (as used by AWCC) */
|
||||
ALIENWARE_TEMPO_SPECTRUM = 0x000F, /* Used by Spectrum mode */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_DURATION_LONG = 0x09C4, /* Min tempo (as used by AWCC) */
|
||||
ALIENWARE_DURATION_MED = 0x05DC, /* Max tempo (as used by AWCC) */
|
||||
ALIENWARE_DURATION_SHORT = 0x01F3, /* Max tempo (as used by AWCC) */
|
||||
ALIENWARE_DURATION_SPECTRUM = 0x01AC, /* Used by Spectrum mode */
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char data[ALIENWARE_REPORT_SIZE];
|
||||
} AlienwareReport;
|
||||
|
||||
class AlienwareController
|
||||
{
|
||||
public:
|
||||
AlienwareController(hid_device* dev_handle, const hid_device_info& info, std::string name);
|
||||
~AlienwareController();
|
||||
|
||||
std::string GetSerialString();
|
||||
std::string GetDeviceLocation();
|
||||
std::string GetDeviceName();
|
||||
std::string GetFirmwareVersion();
|
||||
unsigned GetZoneCount();
|
||||
std::vector<const char*> GetZoneNames();
|
||||
|
||||
void SetColor(uint8_t zone, RGBColor color);
|
||||
void SetColor(uint8_t zone, RGBColor color1, RGBColor color2);
|
||||
void SetMode(uint8_t zone, uint8_t mode);
|
||||
void SetPeriod(uint8_t zone, uint16_t period);
|
||||
void SetTempo(uint8_t zone, uint16_t tempo);
|
||||
void SetDim(uint8_t zone, uint8_t dim);
|
||||
AlienwareReport GetStatus(uint8_t subcommand);
|
||||
|
||||
void UpdateDim();
|
||||
void UpdateMode();
|
||||
void UpdateController();
|
||||
|
||||
protected:
|
||||
hid_device* dev;
|
||||
|
||||
private:
|
||||
typedef struct
|
||||
{
|
||||
RGBColor color[2];
|
||||
uint8_t mode;
|
||||
uint16_t period;
|
||||
uint16_t tempo;
|
||||
uint8_t dim;
|
||||
} alienware_zone;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char data[HIDAPI_ALIENWARE_REPORT_SIZE];
|
||||
} HidapiAlienwareReport;
|
||||
|
||||
std::string device_name;
|
||||
std::string location;
|
||||
std::vector<alienware_zone> zones;
|
||||
std::string serial_number;
|
||||
std::string version;
|
||||
std::vector<const char*> zone_names;
|
||||
bool dirty;
|
||||
bool dirty_dim;
|
||||
|
||||
HidapiAlienwareReport GetResponse();
|
||||
HidapiAlienwareReport Report(uint8_t subcommand);
|
||||
|
||||
bool Dim(std::vector<uint8_t> zones, double percent);
|
||||
bool UserAnimation(uint16_t subcommand, uint16_t animation, uint16_t duration);
|
||||
bool SelectZones(const std::vector<uint8_t>& zones);
|
||||
bool ModeAction(uint8_t mode, uint16_t duration, uint16_t tempo, RGBColor color);
|
||||
bool ModeAction(const uint8_t *mode, const uint16_t *duration, const uint16_t *tempo, const RGBColor *color, unsigned amount);
|
||||
bool MultiModeAction(const uint8_t *mode, const uint16_t *duration, const uint16_t *tempo, const RGBColor *color, unsigned amount);
|
||||
bool SetColorDirect(RGBColor color, std::vector<uint8_t> zones);
|
||||
bool UpdateDirect();
|
||||
bool Reset();
|
||||
};
|
||||
@@ -1,39 +1,39 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| AlienwareControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "Detector.h"
|
||||
#include "AlienwareController.h"
|
||||
#include "RGBController_Alienware.h"
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Alienware vendor ID |
|
||||
\*---------------------------------------------------------*/
|
||||
#define ALIENWARE_VID 0x187C
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Alienware product ID |
|
||||
\*---------------------------------------------------------*/
|
||||
#define ALIENWARE_G_SERIES_PID1 0x0550
|
||||
#define ALIENWARE_G_SERIES_PID2 0x0551
|
||||
|
||||
void DetectAlienwareControllers(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
|
||||
if(dev)
|
||||
{
|
||||
AlienwareController* controller = new AlienwareController(dev, *info, name);
|
||||
RGBController_Alienware* rgb_controller = new RGBController_Alienware(controller);
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_HID_DETECTOR("Dell G Series LED Controller", DetectAlienwareControllers, ALIENWARE_VID, ALIENWARE_G_SERIES_PID1);
|
||||
REGISTER_HID_DETECTOR("Dell G Series LED Controller", DetectAlienwareControllers, ALIENWARE_VID, ALIENWARE_G_SERIES_PID2);
|
||||
/*---------------------------------------------------------*\
|
||||
| AlienwareControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "Detector.h"
|
||||
#include "AlienwareController.h"
|
||||
#include "RGBController_Alienware.h"
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Alienware vendor ID |
|
||||
\*---------------------------------------------------------*/
|
||||
#define ALIENWARE_VID 0x187C
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Alienware product ID |
|
||||
\*---------------------------------------------------------*/
|
||||
#define ALIENWARE_G_SERIES_PID1 0x0550
|
||||
#define ALIENWARE_G_SERIES_PID2 0x0551
|
||||
|
||||
void DetectAlienwareControllers(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
|
||||
if(dev)
|
||||
{
|
||||
AlienwareController* controller = new AlienwareController(dev, *info, name);
|
||||
RGBController_Alienware* rgb_controller = new RGBController_Alienware(controller);
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_HID_DETECTOR("Dell G Series LED Controller", DetectAlienwareControllers, ALIENWARE_VID, ALIENWARE_G_SERIES_PID1);
|
||||
REGISTER_HID_DETECTOR("Dell G Series LED Controller", DetectAlienwareControllers, ALIENWARE_VID, ALIENWARE_G_SERIES_PID2);
|
||||
@@ -1,285 +1,285 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_Alienware.cpp |
|
||||
| |
|
||||
| RGBController for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 19 Apr 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
#include "RGBController_Alienware.h"
|
||||
|
||||
/**------------------------------------------------------------------*\
|
||||
@name Alienware
|
||||
@category Keyboard
|
||||
@type USB
|
||||
@save :x:
|
||||
@direct :x:
|
||||
@effects :white_check_mark:
|
||||
@detectors DetectAlienwareControllers
|
||||
@comment
|
||||
\*-------------------------------------------------------------------*/
|
||||
|
||||
RGBController_Alienware::RGBController_Alienware(AlienwareController* controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
|
||||
name = controller->GetDeviceName();
|
||||
vendor = "Alienware";
|
||||
type = DEVICE_TYPE_KEYBOARD;
|
||||
description = "Alienware USB Device";
|
||||
location = controller->GetDeviceLocation();
|
||||
serial = controller->GetSerialString();
|
||||
version = controller->GetFirmwareVersion();
|
||||
|
||||
mode Color;
|
||||
Color.name = "Static";
|
||||
Color.value = ALIENWARE_MODE_COLOR;
|
||||
Color.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS;
|
||||
Color.color_mode = MODE_COLORS_PER_LED;
|
||||
Color.colors_min = 1;
|
||||
Color.colors_max = 1;
|
||||
Color.brightness_min = 100;
|
||||
Color.brightness_max = 0;
|
||||
Color.brightness = 0;
|
||||
modes.push_back(Color);
|
||||
|
||||
mode Pulse;
|
||||
Pulse.name = "Flashing";
|
||||
Pulse.value = ALIENWARE_MODE_PULSE;
|
||||
Pulse.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
|
||||
Pulse.color_mode = MODE_COLORS_PER_LED;
|
||||
Pulse.colors_min = 1;
|
||||
Pulse.colors_max = 1;
|
||||
Pulse.speed_min = ALIENWARE_TEMPO_MIN;
|
||||
Pulse.speed_max = ALIENWARE_TEMPO_MAX;
|
||||
Pulse.speed = ALIENWARE_TEMPO_MIN;
|
||||
Pulse.brightness_min = 100;
|
||||
Pulse.brightness_max = 0;
|
||||
Pulse.brightness = 0;
|
||||
modes.push_back(Pulse);
|
||||
|
||||
mode Morph;
|
||||
Morph.name = "Morph";
|
||||
Morph.value = ALIENWARE_MODE_MORPH;
|
||||
Morph.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
|
||||
Morph.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Morph.colors_min = 2 * controller->GetZoneCount();
|
||||
Morph.colors_max = Morph.colors_min;
|
||||
Morph.colors.resize(Morph.colors_max);
|
||||
Morph.speed_min = ALIENWARE_TEMPO_MIN;
|
||||
Morph.speed_max = ALIENWARE_TEMPO_MAX;
|
||||
Morph.speed = ALIENWARE_TEMPO_MIN;
|
||||
Morph.brightness_min = 100;
|
||||
Morph.brightness_max = 0;
|
||||
Morph.brightness = 0;
|
||||
modes.push_back(Morph);
|
||||
|
||||
mode Spectrum;
|
||||
Spectrum.name = "Spectrum Cycle";
|
||||
Spectrum.value = ALIENWARE_MODE_SPECTRUM;
|
||||
Spectrum.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
|
||||
Spectrum.color_mode = MODE_COLORS_NONE;
|
||||
Spectrum.speed_min = ALIENWARE_TEMPO_SPECTRUM;
|
||||
Spectrum.speed_max = ALIENWARE_TEMPO_MAX;
|
||||
Spectrum.speed = ALIENWARE_TEMPO_SPECTRUM;
|
||||
Spectrum.brightness_min = 100;
|
||||
Spectrum.brightness_max = 0;
|
||||
Spectrum.brightness = 0;
|
||||
modes.push_back(Spectrum);
|
||||
|
||||
mode Rainbow;
|
||||
Rainbow.name = "Rainbow Wave";
|
||||
Rainbow.value = ALIENWARE_MODE_RAINBOW;
|
||||
Rainbow.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
|
||||
Rainbow.color_mode = MODE_COLORS_NONE;
|
||||
Rainbow.speed_min = ALIENWARE_TEMPO_SPECTRUM;
|
||||
Rainbow.speed_max = ALIENWARE_TEMPO_MAX;
|
||||
Rainbow.speed = ALIENWARE_TEMPO_SPECTRUM;
|
||||
Rainbow.brightness_min = 100;
|
||||
Rainbow.brightness_max = 0;
|
||||
Rainbow.brightness = 0;
|
||||
modes.push_back(Rainbow);
|
||||
|
||||
mode Breathing;
|
||||
Breathing.name = "Breathing";
|
||||
Breathing.value = ALIENWARE_MODE_BREATHING;
|
||||
Breathing.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
|
||||
Breathing.color_mode = MODE_COLORS_PER_LED;
|
||||
Breathing.colors_min = 1;
|
||||
Breathing.colors_max = 1;
|
||||
Breathing.speed_min = ALIENWARE_TEMPO_MIN;
|
||||
Breathing.speed_max = ALIENWARE_TEMPO_MAX;
|
||||
Breathing.speed = ALIENWARE_TEMPO_MIN;
|
||||
Breathing.brightness_min = 100;
|
||||
Breathing.brightness_max = 0;
|
||||
Breathing.brightness = 0;
|
||||
modes.push_back(Breathing);
|
||||
|
||||
SetupZones();
|
||||
|
||||
controller->UpdateDim();
|
||||
}
|
||||
|
||||
void RGBController_Alienware::SetupZones()
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Set zones and leds |
|
||||
\*-------------------------------------------------*/
|
||||
std::vector<const char*> zone_names = controller->GetZoneNames();
|
||||
|
||||
for(unsigned int zone_idx = 0; zone_idx < controller->GetZoneCount(); zone_idx++)
|
||||
{
|
||||
zone new_zone;
|
||||
|
||||
new_zone.name = zone_names[zone_idx];
|
||||
new_zone.type = ZONE_TYPE_SINGLE;
|
||||
new_zone.leds_min = 1;
|
||||
new_zone.leds_max = 1;
|
||||
new_zone.leds_count = 1;
|
||||
new_zone.matrix_map = nullptr;
|
||||
|
||||
zones.emplace_back(new_zone);
|
||||
}
|
||||
|
||||
for(unsigned int led_idx = 0; led_idx < zones.size(); led_idx++)
|
||||
{
|
||||
led new_led;
|
||||
|
||||
new_led.name = zones[led_idx].name + std::string(" LED");
|
||||
|
||||
leds.emplace_back(new_led);
|
||||
}
|
||||
|
||||
SetupColors();
|
||||
}
|
||||
|
||||
void RGBController_Alienware::ResizeZone(int /*zone*/, int /*new_size*/)
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| This device does not support resizing zones |
|
||||
\*---------------------------------------------------------*/
|
||||
}
|
||||
|
||||
void RGBController_Alienware::DeviceUpdateLEDs()
|
||||
{
|
||||
DeviceUpdateMode();
|
||||
}
|
||||
|
||||
void RGBController_Alienware::UpdateZoneLEDs(int /*zone*/)
|
||||
{
|
||||
DeviceUpdateLEDs();
|
||||
}
|
||||
|
||||
void RGBController_Alienware::UpdateSingleLED(int led)
|
||||
{
|
||||
UpdateZoneLEDs(led);
|
||||
}
|
||||
|
||||
static bool modes_eq(const mode& mode1, const mode& mode2)
|
||||
{
|
||||
return( ( mode1.name == mode2.name )
|
||||
&& ( mode1.value == mode2.value )
|
||||
&& ( mode1.flags == mode2.flags )
|
||||
&& ( mode1.speed_min == mode2.speed_min )
|
||||
&& ( mode1.speed_max == mode2.speed_max )
|
||||
&& ( mode1.colors_min == mode2.colors_min )
|
||||
&& ( mode1.colors_max == mode2.colors_max )
|
||||
&& ( mode1.speed == mode2.speed )
|
||||
&& ( mode1.direction == mode2.direction )
|
||||
&& ( mode1.color_mode == mode2.color_mode )
|
||||
&& ( mode1.colors == mode2.colors )
|
||||
&& ( mode1.brightness == mode2.brightness )
|
||||
&& ( mode1.brightness_min == mode2.brightness_min )
|
||||
&& ( mode1.brightness_max == mode2.brightness_max ) );
|
||||
}
|
||||
|
||||
void RGBController_Alienware::DeviceUpdateMode()
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| Copy mode to get the current state-- this is racy, as the |
|
||||
| UI thread can be actively modifying this variable |
|
||||
\*---------------------------------------------------------*/
|
||||
int current_mode_idx = active_mode;
|
||||
mode current_mode = modes[current_mode_idx];
|
||||
|
||||
bool done = false;
|
||||
|
||||
while(!done)
|
||||
{
|
||||
/*-----------------------------------------------------*\
|
||||
| Setup state per zone |
|
||||
\*-----------------------------------------------------*/
|
||||
for(uint8_t zone_idx = 0; zone_idx < zones.size(); zone_idx++)
|
||||
{
|
||||
zone current_zone = zones[zone_idx];
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Some modes use 2000ms (0x07D0) for their duration,|
|
||||
| per traces |
|
||||
\*-------------------------------------------------*/
|
||||
uint16_t period = 0x07d0;
|
||||
|
||||
controller->SetMode(zone_idx, current_mode.value);
|
||||
|
||||
switch(current_mode_idx)
|
||||
{
|
||||
case ALIENWARE_MODE_COLOR:
|
||||
controller->SetPeriod(zone_idx, period);
|
||||
controller->SetColor( zone_idx, colors[current_zone.start_idx]);
|
||||
controller->SetTempo( zone_idx, ALIENWARE_TEMPO_MAX);
|
||||
controller->SetDim( zone_idx, modes[current_mode_idx].brightness);
|
||||
break;
|
||||
|
||||
case ALIENWARE_MODE_PULSE:
|
||||
controller->SetPeriod(zone_idx, period);
|
||||
controller->SetColor( zone_idx, colors[current_zone.start_idx]);
|
||||
controller->SetTempo( zone_idx, current_mode.speed);
|
||||
controller->SetDim( zone_idx, modes[current_mode_idx].brightness);
|
||||
break;
|
||||
|
||||
case ALIENWARE_MODE_MORPH:
|
||||
controller->SetPeriod(zone_idx, period);
|
||||
controller->SetColor( zone_idx, current_mode.colors[zone_idx * 2], current_mode.colors[(zone_idx * 2) + 1]);
|
||||
controller->SetTempo( zone_idx, current_mode.speed);
|
||||
controller->SetDim( zone_idx, modes[current_mode_idx].brightness);
|
||||
break;
|
||||
|
||||
case ALIENWARE_MODE_SPECTRUM:
|
||||
case ALIENWARE_MODE_RAINBOW:
|
||||
controller->SetPeriod(zone_idx, ALIENWARE_DURATION_SPECTRUM);
|
||||
controller->SetTempo( zone_idx, current_mode.speed);
|
||||
controller->SetDim( zone_idx, modes[current_mode_idx].brightness);
|
||||
break;
|
||||
|
||||
case ALIENWARE_MODE_BREATHING:
|
||||
controller->SetPeriod(zone_idx, period);
|
||||
controller->SetColor( zone_idx, colors[current_zone.start_idx], 0x0);
|
||||
controller->SetTempo( zone_idx, current_mode.speed);
|
||||
controller->SetDim( zone_idx, modes[current_mode_idx].brightness);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Due to rate-limiting, this can take more than one |
|
||||
| second to execute |
|
||||
\*-----------------------------------------------------*/
|
||||
controller->UpdateController();
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Re-run update if there's anything that's changed from |
|
||||
| under us... |
|
||||
\*-----------------------------------------------------*/
|
||||
int new_current_mode_idx = active_mode;
|
||||
mode new_current_mode = modes[current_mode_idx];
|
||||
|
||||
done = (current_mode_idx == new_current_mode_idx && modes_eq(new_current_mode, current_mode));
|
||||
current_mode_idx = new_current_mode_idx;
|
||||
current_mode = new_current_mode;
|
||||
}
|
||||
}
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_Alienware.cpp |
|
||||
| |
|
||||
| RGBController for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 19 Apr 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
#include "RGBController_Alienware.h"
|
||||
|
||||
/**------------------------------------------------------------------*\
|
||||
@name Alienware
|
||||
@category Keyboard
|
||||
@type USB
|
||||
@save :x:
|
||||
@direct :x:
|
||||
@effects :white_check_mark:
|
||||
@detectors DetectAlienwareControllers
|
||||
@comment
|
||||
\*-------------------------------------------------------------------*/
|
||||
|
||||
RGBController_Alienware::RGBController_Alienware(AlienwareController* controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
|
||||
name = controller->GetDeviceName();
|
||||
vendor = "Alienware";
|
||||
type = DEVICE_TYPE_KEYBOARD;
|
||||
description = "Alienware USB Device";
|
||||
location = controller->GetDeviceLocation();
|
||||
serial = controller->GetSerialString();
|
||||
version = controller->GetFirmwareVersion();
|
||||
|
||||
mode Color;
|
||||
Color.name = "Static";
|
||||
Color.value = ALIENWARE_MODE_COLOR;
|
||||
Color.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS;
|
||||
Color.color_mode = MODE_COLORS_PER_LED;
|
||||
Color.colors_min = 1;
|
||||
Color.colors_max = 1;
|
||||
Color.brightness_min = 100;
|
||||
Color.brightness_max = 0;
|
||||
Color.brightness = 0;
|
||||
modes.push_back(Color);
|
||||
|
||||
mode Pulse;
|
||||
Pulse.name = "Flashing";
|
||||
Pulse.value = ALIENWARE_MODE_PULSE;
|
||||
Pulse.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
|
||||
Pulse.color_mode = MODE_COLORS_PER_LED;
|
||||
Pulse.colors_min = 1;
|
||||
Pulse.colors_max = 1;
|
||||
Pulse.speed_min = ALIENWARE_TEMPO_MIN;
|
||||
Pulse.speed_max = ALIENWARE_TEMPO_MAX;
|
||||
Pulse.speed = ALIENWARE_TEMPO_MIN;
|
||||
Pulse.brightness_min = 100;
|
||||
Pulse.brightness_max = 0;
|
||||
Pulse.brightness = 0;
|
||||
modes.push_back(Pulse);
|
||||
|
||||
mode Morph;
|
||||
Morph.name = "Morph";
|
||||
Morph.value = ALIENWARE_MODE_MORPH;
|
||||
Morph.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
|
||||
Morph.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Morph.colors_min = 2 * controller->GetZoneCount();
|
||||
Morph.colors_max = Morph.colors_min;
|
||||
Morph.colors.resize(Morph.colors_max);
|
||||
Morph.speed_min = ALIENWARE_TEMPO_MIN;
|
||||
Morph.speed_max = ALIENWARE_TEMPO_MAX;
|
||||
Morph.speed = ALIENWARE_TEMPO_MIN;
|
||||
Morph.brightness_min = 100;
|
||||
Morph.brightness_max = 0;
|
||||
Morph.brightness = 0;
|
||||
modes.push_back(Morph);
|
||||
|
||||
mode Spectrum;
|
||||
Spectrum.name = "Spectrum Cycle";
|
||||
Spectrum.value = ALIENWARE_MODE_SPECTRUM;
|
||||
Spectrum.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
|
||||
Spectrum.color_mode = MODE_COLORS_NONE;
|
||||
Spectrum.speed_min = ALIENWARE_TEMPO_SPECTRUM;
|
||||
Spectrum.speed_max = ALIENWARE_TEMPO_MAX;
|
||||
Spectrum.speed = ALIENWARE_TEMPO_SPECTRUM;
|
||||
Spectrum.brightness_min = 100;
|
||||
Spectrum.brightness_max = 0;
|
||||
Spectrum.brightness = 0;
|
||||
modes.push_back(Spectrum);
|
||||
|
||||
mode Rainbow;
|
||||
Rainbow.name = "Rainbow Wave";
|
||||
Rainbow.value = ALIENWARE_MODE_RAINBOW;
|
||||
Rainbow.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
|
||||
Rainbow.color_mode = MODE_COLORS_NONE;
|
||||
Rainbow.speed_min = ALIENWARE_TEMPO_SPECTRUM;
|
||||
Rainbow.speed_max = ALIENWARE_TEMPO_MAX;
|
||||
Rainbow.speed = ALIENWARE_TEMPO_SPECTRUM;
|
||||
Rainbow.brightness_min = 100;
|
||||
Rainbow.brightness_max = 0;
|
||||
Rainbow.brightness = 0;
|
||||
modes.push_back(Rainbow);
|
||||
|
||||
mode Breathing;
|
||||
Breathing.name = "Breathing";
|
||||
Breathing.value = ALIENWARE_MODE_BREATHING;
|
||||
Breathing.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
|
||||
Breathing.color_mode = MODE_COLORS_PER_LED;
|
||||
Breathing.colors_min = 1;
|
||||
Breathing.colors_max = 1;
|
||||
Breathing.speed_min = ALIENWARE_TEMPO_MIN;
|
||||
Breathing.speed_max = ALIENWARE_TEMPO_MAX;
|
||||
Breathing.speed = ALIENWARE_TEMPO_MIN;
|
||||
Breathing.brightness_min = 100;
|
||||
Breathing.brightness_max = 0;
|
||||
Breathing.brightness = 0;
|
||||
modes.push_back(Breathing);
|
||||
|
||||
SetupZones();
|
||||
|
||||
controller->UpdateDim();
|
||||
}
|
||||
|
||||
void RGBController_Alienware::SetupZones()
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Set zones and leds |
|
||||
\*-------------------------------------------------*/
|
||||
std::vector<const char*> zone_names = controller->GetZoneNames();
|
||||
|
||||
for(unsigned int zone_idx = 0; zone_idx < controller->GetZoneCount(); zone_idx++)
|
||||
{
|
||||
zone new_zone;
|
||||
|
||||
new_zone.name = zone_names[zone_idx];
|
||||
new_zone.type = ZONE_TYPE_SINGLE;
|
||||
new_zone.leds_min = 1;
|
||||
new_zone.leds_max = 1;
|
||||
new_zone.leds_count = 1;
|
||||
new_zone.matrix_map = nullptr;
|
||||
|
||||
zones.emplace_back(new_zone);
|
||||
}
|
||||
|
||||
for(unsigned int led_idx = 0; led_idx < zones.size(); led_idx++)
|
||||
{
|
||||
led new_led;
|
||||
|
||||
new_led.name = zones[led_idx].name + std::string(" LED");
|
||||
|
||||
leds.emplace_back(new_led);
|
||||
}
|
||||
|
||||
SetupColors();
|
||||
}
|
||||
|
||||
void RGBController_Alienware::ResizeZone(int /*zone*/, int /*new_size*/)
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| This device does not support resizing zones |
|
||||
\*---------------------------------------------------------*/
|
||||
}
|
||||
|
||||
void RGBController_Alienware::DeviceUpdateLEDs()
|
||||
{
|
||||
DeviceUpdateMode();
|
||||
}
|
||||
|
||||
void RGBController_Alienware::UpdateZoneLEDs(int /*zone*/)
|
||||
{
|
||||
DeviceUpdateLEDs();
|
||||
}
|
||||
|
||||
void RGBController_Alienware::UpdateSingleLED(int led)
|
||||
{
|
||||
UpdateZoneLEDs(led);
|
||||
}
|
||||
|
||||
static bool modes_eq(const mode& mode1, const mode& mode2)
|
||||
{
|
||||
return( ( mode1.name == mode2.name )
|
||||
&& ( mode1.value == mode2.value )
|
||||
&& ( mode1.flags == mode2.flags )
|
||||
&& ( mode1.speed_min == mode2.speed_min )
|
||||
&& ( mode1.speed_max == mode2.speed_max )
|
||||
&& ( mode1.colors_min == mode2.colors_min )
|
||||
&& ( mode1.colors_max == mode2.colors_max )
|
||||
&& ( mode1.speed == mode2.speed )
|
||||
&& ( mode1.direction == mode2.direction )
|
||||
&& ( mode1.color_mode == mode2.color_mode )
|
||||
&& ( mode1.colors == mode2.colors )
|
||||
&& ( mode1.brightness == mode2.brightness )
|
||||
&& ( mode1.brightness_min == mode2.brightness_min )
|
||||
&& ( mode1.brightness_max == mode2.brightness_max ) );
|
||||
}
|
||||
|
||||
void RGBController_Alienware::DeviceUpdateMode()
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| Copy mode to get the current state-- this is racy, as the |
|
||||
| UI thread can be actively modifying this variable |
|
||||
\*---------------------------------------------------------*/
|
||||
int current_mode_idx = active_mode;
|
||||
mode current_mode = modes[current_mode_idx];
|
||||
|
||||
bool done = false;
|
||||
|
||||
while(!done)
|
||||
{
|
||||
/*-----------------------------------------------------*\
|
||||
| Setup state per zone |
|
||||
\*-----------------------------------------------------*/
|
||||
for(uint8_t zone_idx = 0; zone_idx < zones.size(); zone_idx++)
|
||||
{
|
||||
zone current_zone = zones[zone_idx];
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Some modes use 2000ms (0x07D0) for their duration,|
|
||||
| per traces |
|
||||
\*-------------------------------------------------*/
|
||||
uint16_t period = 0x07d0;
|
||||
|
||||
controller->SetMode(zone_idx, current_mode.value);
|
||||
|
||||
switch(current_mode_idx)
|
||||
{
|
||||
case ALIENWARE_MODE_COLOR:
|
||||
controller->SetPeriod(zone_idx, period);
|
||||
controller->SetColor( zone_idx, colors[current_zone.start_idx]);
|
||||
controller->SetTempo( zone_idx, ALIENWARE_TEMPO_MAX);
|
||||
controller->SetDim( zone_idx, modes[current_mode_idx].brightness);
|
||||
break;
|
||||
|
||||
case ALIENWARE_MODE_PULSE:
|
||||
controller->SetPeriod(zone_idx, period);
|
||||
controller->SetColor( zone_idx, colors[current_zone.start_idx]);
|
||||
controller->SetTempo( zone_idx, current_mode.speed);
|
||||
controller->SetDim( zone_idx, modes[current_mode_idx].brightness);
|
||||
break;
|
||||
|
||||
case ALIENWARE_MODE_MORPH:
|
||||
controller->SetPeriod(zone_idx, period);
|
||||
controller->SetColor( zone_idx, current_mode.colors[zone_idx * 2], current_mode.colors[(zone_idx * 2) + 1]);
|
||||
controller->SetTempo( zone_idx, current_mode.speed);
|
||||
controller->SetDim( zone_idx, modes[current_mode_idx].brightness);
|
||||
break;
|
||||
|
||||
case ALIENWARE_MODE_SPECTRUM:
|
||||
case ALIENWARE_MODE_RAINBOW:
|
||||
controller->SetPeriod(zone_idx, ALIENWARE_DURATION_SPECTRUM);
|
||||
controller->SetTempo( zone_idx, current_mode.speed);
|
||||
controller->SetDim( zone_idx, modes[current_mode_idx].brightness);
|
||||
break;
|
||||
|
||||
case ALIENWARE_MODE_BREATHING:
|
||||
controller->SetPeriod(zone_idx, period);
|
||||
controller->SetColor( zone_idx, colors[current_zone.start_idx], 0x0);
|
||||
controller->SetTempo( zone_idx, current_mode.speed);
|
||||
controller->SetDim( zone_idx, modes[current_mode_idx].brightness);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Due to rate-limiting, this can take more than one |
|
||||
| second to execute |
|
||||
\*-----------------------------------------------------*/
|
||||
controller->UpdateController();
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Re-run update if there's anything that's changed from |
|
||||
| under us... |
|
||||
\*-----------------------------------------------------*/
|
||||
int new_current_mode_idx = active_mode;
|
||||
mode new_current_mode = modes[current_mode_idx];
|
||||
|
||||
done = (current_mode_idx == new_current_mode_idx && modes_eq(new_current_mode, current_mode));
|
||||
current_mode_idx = new_current_mode_idx;
|
||||
current_mode = new_current_mode;
|
||||
}
|
||||
}
|
||||
@@ -1,36 +1,36 @@
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_Alienware.h |
|
||||
| |
|
||||
| RGBController for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 19 Apr 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <chrono>
|
||||
#include "RGBController.h"
|
||||
#include "AlienwareController.h"
|
||||
|
||||
class RGBController_Alienware : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_Alienware(AlienwareController* controller_ptr);
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
AlienwareController* controller;
|
||||
std::chrono::steady_clock::time_point last_packet_ts;
|
||||
};
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_Alienware.h |
|
||||
| |
|
||||
| RGBController for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 19 Apr 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <chrono>
|
||||
#include "RGBController.h"
|
||||
#include "AlienwareController.h"
|
||||
|
||||
class RGBController_Alienware : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_Alienware(AlienwareController* controller_ptr);
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
AlienwareController* controller;
|
||||
std::chrono::steady_clock::time_point last_packet_ts;
|
||||
};
|
||||
Reference in new issue
Block a user