Compare commits

...
Author SHA1 Message Date
Adam Honse ebaed20534 Clean up unused hidapi files 2020-03-01 15:43:18 -06:00
Adam Honse 85d91d2d63 Add refreshing thread for HyperX keyboard Direct mode 2020-03-01 11:52:44 -06:00
Adam Honse 8d2f188c0b Add timeouts to fix HyperX and Poseidon Z RGB in Linux 2020-03-01 11:52:05 -06:00
Adam Honse 4ba3beab63 Get hidapi over libusb working on linux 2020-02-29 16:03:52 -06:00
Adam Honse b92082b545 libusb-based hidapi on Windows 2020-02-29 16:03:11 -06:00
Adam Honse c7960c090a Add software version information to CLI 2020-02-29 14:01:06 -06:00
Adam Honse 85b2545409 Fill in software information and set version to 0.0 for now 2020-02-29 13:45:43 -06:00
Adam Honse e10881db3e Add empty software information tab to information UI 2020-02-28 12:31:32 -06:00
Adam Honse 977feabe6e Add profile selection to system tray icon menu 2020-02-27 13:16:10 -06:00
Adam Honse a6c9d1232a Don't apply colors unless per LED mode 2020-02-26 21:16:02 -06:00
Adam Honse 4024e6de85 Fix build on Linux 2020-02-26 19:40:25 -06:00
Adam Honse f3df584d3a Don't update devices if the profile could not be loaded 2020-02-26 19:36:00 -06:00
Adam Honse 60a0ab5c93 Populate profile list with .orp files and load profile selected in list 2020-02-26 19:36:00 -06:00
Adam Honse c908847577 Add dialog to name profile. Save all controllers to a single file. Add a file header with version number and use extension .orp for OpenRgb Profile 2020-02-26 19:36:00 -06:00
Adam Honse bd027e596e Set colors when updating mode 2020-02-26 19:36:00 -06:00
Adam Honse 51c3568f7a Profile save and load test 2020-02-26 19:36:00 -06:00
Adam Honse 4f8db7d63f Add cstring include to fix build on Linux 2020-02-25 21:07:06 -06:00
Adam Honse f844c2fb07 Add functions to get/set RGBController parameters to/from a binary data buffer. Add a dummy RGBController object to load data into. 2020-02-25 18:09:14 -06:00
Adam Honse f7041988e4 Fix off-by-one errors in Aura RAM address assignment 2020-02-25 14:20:59 -06:00
Stefan Reiter 71c650cd45 Add cli.cpp and make it build at least
Not confirmed working as of yet, but at least it builds and
--list-devices works.

Code originally taken from Sam Lewis (@sam-masaki on gitlab.com), see:
https://gitlab.com/CalcProgrammer1/OpenRGB/-/merge_requests/9
2020-02-24 00:03:07 -06:00
Stefan Reiter 3c6ac31eab Introduce device_type_to_str 2020-02-23 23:40:26 -06:00
Stefan Reiter 20a99ef7ef Append LED number to Aura devices' LEDs
Makes identifying them easier then just 'Unknown' 8 times in a row.
2020-02-23 23:40:11 -06:00
Stefan Reiter c69a98096b Remove debug print
Annoying when in CLI mode
2020-02-23 23:39:13 -06:00
Adam Honse 92afebe2c7 Fix Windows build 2020-02-23 19:09:03 -06:00
jackun 5b82eb39a8 RGB Fusion 2 (IT8297BX) support based on Gigabyte X570 Elite. 2020-02-23 18:26:48 -06:00
Adam Honse 7b120515d8 Fix include path for NvAPI 2020-02-23 15:54:23 -06:00
Adam Honse b480bbd666 Clean up NvAPI I2C code and allow multiple GPUs 2020-02-23 15:54:14 -06:00
Adam Honse 5e5ac81f53 Get detection working (tested on nouveau in Linux) 2020-02-23 15:54:06 -06:00
Adam Honse adcd59848a Add RGB Fusion GPU controller and NVAPI I1C interface 2020-02-23 15:53:54 -06:00
Adam Honse 937cbc656e Add Windows application icon 2020-02-20 00:37:31 -06:00
Jan Rettig aead384282 Aura GPU Support 2020-02-19 21:24:36 -06:00
Adam Honse b717600c37 Add name, description, and type information to MSI-RGB controller 2020-02-19 21:05:04 -06:00
Adam Honse f38be5119e MSI-RGB driver based on https://github.com/nagisa/msi-rgb 2020-02-19 20:19:12 -06:00
Adam Honse f8de686296 Add LED numbers to Linux OpenRazer controller 2020-02-19 19:42:49 -06:00
Adam Honse 0703fb8c68 Support 64-bit Windows builds 2020-02-19 10:24:56 -06:00
Adam Honse 8d0915de6e Add support for mode specific colors in HyperX keyboard breathing mode 2020-02-18 11:01:43 -06:00
Adam Honse ef33d7e2c4 Firmware 2.x seems to use ASR LED protocol, confirmed on 2.08 2020-02-16 13:43:57 -06:00
Adam Honse bba88eb1f2 Update mode color description to add mode-specific colors. 2020-02-16 12:09:11 -06:00
Adam Honse 7b35cf72f7 Add zone numbers to Chroma HDK and add LED numbers for all OpenRazer zones. 2020-02-13 12:36:57 -06:00
Adam Honse 9603489f4a Get rid of razerchromahdk driver as it was never merged and use razeraccessory instead 2020-02-13 12:36:57 -06:00
Adam Honse d4cd2a6853 Add direction control to OpenRazer Wave mode 2020-02-13 12:36:57 -06:00
Adam Honse c4d2f72df1 Clean up Linux OpenRazer code to match Windows and break out device list into a shared header file 2020-02-13 12:36:57 -06:00
Adam Honse 1a07aee7a6 Add OpenRazer-Win32 driver to support Razer devices on Windows without official software 2020-02-13 12:36:57 -06:00
Adam Honse 415d79a3ef Remove Razer Chroma SDK backend 2020-02-13 12:33:31 -06:00
122 changed files with 11775 additions and 4252 deletions
+3
View File
@@ -1,3 +1,6 @@
[submodule "dependencies/libe131"] [submodule "dependencies/libe131"]
path = dependencies/libe131 path = dependencies/libe131
url = https://github.com/CalcProgrammer1/libe131 url = https://github.com/CalcProgrammer1/libe131
[submodule "razer-drivers-win32"]
path = razer-drivers-win32
url = https://github.com/rsandoz/razer-drivers-win32
@@ -135,7 +135,7 @@ void DetectAuraControllers(std::vector<i2c_smbus_interface*> &busses, std::vecto
for (unsigned int bus = 0; bus < busses.size(); bus++) for (unsigned int bus = 0; bus < busses.size(); bus++)
{ {
int address_list_idx = 0; int address_list_idx = -1;
// Remap Aura-enabled RAM modules on 0x77 // Remap Aura-enabled RAM modules on 0x77
for (unsigned int slot = 0; slot < 8; slot++) for (unsigned int slot = 0; slot < 8; slot++)
@@ -151,8 +151,8 @@ void DetectAuraControllers(std::vector<i2c_smbus_interface*> &busses, std::vecto
{ {
if(address_list_idx < AURA_RAM_ADDRESS_COUNT) if(address_list_idx < AURA_RAM_ADDRESS_COUNT)
{ {
res = busses[bus]->i2c_smbus_write_quick(aura_ram_addresses[address_list_idx], I2C_SMBUS_WRITE);
address_list_idx++; address_list_idx++;
res = busses[bus]->i2c_smbus_write_quick(aura_ram_addresses[address_list_idx], I2C_SMBUS_WRITE);
} }
else else
{ {
@@ -0,0 +1,84 @@
/*-----------------------------------------*\
| AuraGPUController.cpp |
| |
| Driver for ASUS Aura RGB on GPUs |
| |
| Jan Rettig (Klapstuhl) 14.02.2020 |
\*-----------------------------------------*/
#include "AuraGPUController.h"
#include <cstring>
AuraGPUController::AuraGPUController(i2c_smbus_interface* bus, aura_gpu_dev_id dev)
{
this->bus = bus;
this->dev = dev;
strcpy(device_name, "ASUS Aura GPU"); // Would be nice to get the actual GPU name. Using this as a placeholder.
}
AuraGPUController::~AuraGPUController()
{
}
std::string AuraGPUController::GetDeviceName()
{
return(device_name);
}
std::string AuraGPUController::GetDeviceLocation()
{
std::string return_string(bus->device_name);
char addr[5];
snprintf(addr, 5, "0x%02X", dev);
return_string.append(", address ");
return_string.append(addr);
return(return_string);
}
unsigned char AuraGPUController::GetLEDRed()
{
return(AuraGPURegisterRead(AURA_GPU_REG_RED));
}
unsigned char AuraGPUController::GetLEDGreen()
{
return(AuraGPURegisterRead(AURA_GPU_REG_GREEN));
}
unsigned char AuraGPUController::GetLEDBlue()
{
return(AuraGPURegisterRead(AURA_GPU_REG_BLUE));
}
void AuraGPUController::SetLEDColorsDirect(unsigned char red, unsigned char green, unsigned char blue) // Direct Mode is just Static Mode without applying color changes
{
AuraGPURegisterWrite(AURA_GPU_REG_RED, red);
AuraGPURegisterWrite(AURA_GPU_REG_GREEN, green);
AuraGPURegisterWrite(AURA_GPU_REG_BLUE, blue);
}
void AuraGPUController::SetLEDColorsEffect(unsigned char red, unsigned char green, unsigned char blue)
{
AuraGPURegisterWrite(AURA_GPU_REG_RED, red);
AuraGPURegisterWrite(AURA_GPU_REG_GREEN, green);
AuraGPURegisterWrite(AURA_GPU_REG_BLUE, blue);
AuraGPURegisterWrite(AURA_GPU_REG_APPLY, AURA_GPU_APPLY_VAL);
}
void AuraGPUController::SetMode(unsigned char mode)
{
AuraGPURegisterWrite(AURA_GPU_REG_MODE, mode);
AuraGPURegisterWrite(AURA_GPU_REG_APPLY, AURA_GPU_APPLY_VAL);
}
unsigned char AuraGPUController::AuraGPURegisterRead(unsigned char reg)
{
return(bus->i2c_smbus_read_byte_data(dev, reg));
}
void AuraGPUController::AuraGPURegisterWrite(unsigned char reg, unsigned char val)
{
bus->i2c_smbus_write_byte_data(dev, reg, val);
}
@@ -0,0 +1,64 @@
/*-----------------------------------------*\
| AuraGPUController.h |
| |
| Definitions for ASUS Aura RGB on GPUs |
| |
| Jan Rettig (Klapstuhl) 14.02.2020 |
\*-----------------------------------------*/
#include <string>
#include "i2c_smbus.h"
#pragma once
typedef unsigned char aura_gpu_dev_id;
#define AURA_GPU_MAGIC_VAL 0x1589 /* This magic value is present in all Aura GPU controllers */
#define AURA_GPU_APPLY_VAL 0x01 /* Value for Apply Changes Register */
enum
{
AURA_GPU_REG_RED = 0x04, /* AURA GPU RED Register */
AURA_GPU_REG_GREEN = 0x05, /* AURA GPU GREEN Register */
AURA_GPU_REG_BLUE = 0x06, /* AURA GPU BLUE Register */
AURA_GPU_REG_MODE = 0x07, /* AURA GPU Mode Selection Register */
AURA_GPU_REG_SYNC = 0x0C, /* AURA GPU "Sync" Register */
AURA_GPU_REG_APPLY = 0x0E, /* AURA GPU Apply Chnages Register */
};
enum
{
AURA_GPU_MODE_OFF = 0, /* OFF mode (not a real Mode! Doesn't do anything!) */
AURA_GPU_MODE_STATIC = 1, /* Static color mode */
AURA_GPU_MODE_BREATHING = 2, /* Breathing effect mode */
AURA_GPU_MODE_FLASHING = 3, /* Flashing effect mode */
AURA_GPU_MODE_SPECTRUM_CYCLE = 4, /* Spectrum Cycle mode */
AURA_GPU_MODE_DIRECT = 5, /* Direct mode (not a real Mode! Doesn't do anything!) */
AURA_GPU_NUMBER_MODES
};
class AuraGPUController
{
public:
AuraGPUController(i2c_smbus_interface* bus, aura_gpu_dev_id);
~AuraGPUController();
std::string GetDeviceName();
std::string GetDeviceLocation();
unsigned char GetLEDRed();
unsigned char GetLEDGreen();
unsigned char GetLEDBlue();
void SetLEDColorsDirect(unsigned char red, unsigned char green, unsigned char blue);
void SetLEDColorsEffect(unsigned char red, unsigned char green, unsigned char blue);
void SetMode(unsigned char mode);
unsigned char AuraGPURegisterRead(unsigned char reg);
void AuraGPURegisterWrite(unsigned char reg, unsigned char val);
bool direct = false; // Temporary solution to check if we are in "Direct" mode
private:
char device_name[16];
i2c_smbus_interface * bus;
aura_gpu_dev_id dev;
};
@@ -0,0 +1,94 @@
/*-----------------------------------------*\
| AuraGPUControllerDetect.cpp |
| |
| Driver for ASUS Aura RGB on GPUs |
| |
| Jan Rettig (Klapstuhl) 14.02.2020 |
\*-----------------------------------------*/
#include "AuraGPUController.h"
#include "RGBController.h"
#include "RGBController_AuraGPU.h"
#include "i2c_smbus.h"
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#ifdef WIN32
#include <Windows.h>
#else
#include <unistd.h>
static void Sleep(unsigned int milliseconds)
{
usleep(1000 * milliseconds);
}
#endif
/*-------------------------------------------------------------*\
| This list contains the available I2C addresses for Aura GPUs |
\*-------------------------------------------------------------*/
#define AURA_GPU_ADDRESS_COUNT 3
static const unsigned char aura_gpu_addresses[] =
{
0x29,
0x2A,
0x60
};
/******************************************************************************************\
* *
* TestForAuraGPUController *
* *
* Tests the given address to see if an Aura GPU controller exists there. *
* *
\******************************************************************************************/
bool TestForAuraGPUController(i2c_smbus_interface* bus, unsigned char address)
{
bool pass = false;
unsigned char aura_gpu_magic_high = bus->i2c_smbus_read_byte_data(address, 0x20); // High Byte of magic (0x15)
unsigned char aura_gpu_magic_low = bus->i2c_smbus_read_byte_data(address, 0x21); // Low Byte of magic (0x89)
if((aura_gpu_magic_high << 8) + aura_gpu_magic_low == AURA_GPU_MAGIC_VAL)
{
pass = true;
}
return(pass);
} /* TestForAuraGPUController() */
/******************************************************************************************\
* *
* DetectAuraGPUControllers *
* *
* Detect Aura GPU controllers on the enumerated I2C busses. *
* *
\******************************************************************************************/
void DetectAuraGPUControllers(std::vector<i2c_smbus_interface*> &busses, std::vector<RGBController*> &rgb_controllers)
{
AuraGPUController* new_aura_gpu;
RGBController_AuraGPU* new_controller;
for (unsigned int bus = 0; bus < busses.size(); bus++)
{
// Add Aura-enabled GPU controllers
for (unsigned int address_list_idx = 0; address_list_idx < AURA_GPU_ADDRESS_COUNT; address_list_idx++)
{
if (TestForAuraGPUController(busses[bus], aura_gpu_addresses[address_list_idx]))
{
new_aura_gpu = new AuraGPUController(busses[bus], aura_gpu_addresses[address_list_idx]);
new_controller = new RGBController_AuraGPU(new_aura_gpu);
rgb_controllers.push_back(new_controller);
}
Sleep(1);
}
}
} /* DetectAuraGPUControllers() */
@@ -89,7 +89,10 @@ void CorsairCmdrProController::SetChannelEffect(unsigned char channel,
unsigned char blu1, unsigned char blu1,
unsigned char red2, unsigned char red2,
unsigned char grn2, unsigned char grn2,
unsigned char blu2 unsigned char blu2,
unsigned char red3,
unsigned char grn3,
unsigned char blu3
) )
{ {
/*-----------------------------------------------------*\ /*-----------------------------------------------------*\
@@ -125,9 +128,9 @@ void CorsairCmdrProController::SetChannelEffect(unsigned char channel,
red2, red2,
grn2, grn2,
blu2, blu2,
0, red3,
0, grn3,
0, blu3,
0, 0,
0, 0,
0 0
@@ -92,7 +92,10 @@ public:
unsigned char blu1, unsigned char blu1,
unsigned char red2, unsigned char red2,
unsigned char grn2, unsigned char grn2,
unsigned char blu2 unsigned char blu2,
unsigned char red3,
unsigned char grn3,
unsigned char blu3
); );
void SetChannelLEDs(unsigned char channel, std::vector<RGBColor> colors); void SetChannelLEDs(unsigned char channel, std::vector<RGBColor> colors);
@@ -89,7 +89,10 @@ void CorsairNodeProController::SetChannelEffect(unsigned char channel,
unsigned char blu1, unsigned char blu1,
unsigned char red2, unsigned char red2,
unsigned char grn2, unsigned char grn2,
unsigned char blu2 unsigned char blu2,
unsigned char red3,
unsigned char grn3,
unsigned char blu3
) )
{ {
/*-----------------------------------------------------*\ /*-----------------------------------------------------*\
@@ -125,9 +128,9 @@ void CorsairNodeProController::SetChannelEffect(unsigned char channel,
red2, red2,
grn2, grn2,
blu2, blu2,
0, red3,
0, grn3,
0, blu3,
0, 0,
0, 0,
0 0
@@ -99,7 +99,10 @@ public:
unsigned char blu1, unsigned char blu1,
unsigned char red2, unsigned char red2,
unsigned char grn2, unsigned char grn2,
unsigned char blu2 unsigned char blu2,
unsigned char red3,
unsigned char grn3,
unsigned char blu3
); );
void SetChannelLEDs(unsigned char channel, std::vector<RGBColor> colors); void SetChannelLEDs(unsigned char channel, std::vector<RGBColor> colors);
@@ -9,7 +9,7 @@
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <cstring>
#ifdef WIN32 #ifdef WIN32
#include <Windows.h> #include <Windows.h>
@@ -92,43 +92,75 @@ void HuePlusController::SetMode(unsigned char mode, unsigned char speed, bool di
current_direction = direction; current_direction = direction;
} }
void HuePlusController::SetModeColors(unsigned char channel, std::vector<RGBColor> colors)
{
unsigned char serial_buf[125];
for(int color_idx = 0; color_idx < colors.size(); color_idx++)
{
/*-----------------------------------------------------*\
| Zero out buffer |
\*-----------------------------------------------------*/
memset(serial_buf, 0x00, sizeof(serial_buf));
/*-----------------------------------------------------*\
| Set up main packet |
\*-----------------------------------------------------*/
serial_buf[0x00] = 0x4B;
/*-----------------------------------------------------*\
| Set channel in serial packet |
\*-----------------------------------------------------*/
serial_buf[0x01] = channel;
/*-----------------------------------------------------*\
| Set mode in serial packet |
\*-----------------------------------------------------*/
serial_buf[0x02] = current_mode;
/*-----------------------------------------------------*\
| Set options bitfield in serial packet |
\*-----------------------------------------------------*/
serial_buf[0x03] = 0;
serial_buf[0x03] |= current_direction ? ( 1 << 4 ) : 0;
/*-----------------------------------------------------*\
| Set color index and speed in serial packet |
\*-----------------------------------------------------*/
serial_buf[0x04] = ( color_idx << 5 ) | current_speed;
/*-----------------------------------------------------*\
| Fill in color data |
\*-----------------------------------------------------*/
for (std::size_t idx = 0; idx < 40; idx++)
{
int pixel_idx = idx * 3;
RGBColor color = colors[color_idx];
serial_buf[pixel_idx + 0x05] = RGBGetGValue(color);
serial_buf[pixel_idx + 0x06] = RGBGetRValue(color);
serial_buf[pixel_idx + 0x07] = RGBGetBValue(color);
}
serialport->serial_write((char *)serial_buf, HUE_PLUS_PACKET_SIZE);
serialport->serial_flush_tx();
Sleep(10);
}
}
void HuePlusController::SetChannelLEDs(unsigned char channel, std::vector<RGBColor> colors) void HuePlusController::SetChannelLEDs(unsigned char channel, std::vector<RGBColor> colors)
{ {
unsigned char serial_buf[] = unsigned char serial_buf[125];
{
0x4B, 0x00, 0x00, 0x00, /*-----------------------------------------------------*\
0x00, 0x00, 0x00, 0x00, | Zero out buffer |
0x00, 0x00, 0x00, 0x00, \*-----------------------------------------------------*/
0x00, 0x00, 0x00, 0x00, memset(serial_buf, 0x00, sizeof(serial_buf));
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, /*-----------------------------------------------------*\
0x00, 0x00, 0x00, 0x00, | Set up main packet |
0x00, 0x00, 0x00, 0x00, \*-----------------------------------------------------*/
0x00, 0x00, 0x00, 0x00, serial_buf[0x00] = 0x4B;
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00
};
/*-----------------------------------------------------*\ /*-----------------------------------------------------*\
| Set channel in serial packet | | Set channel in serial packet |
@@ -167,4 +199,4 @@ void HuePlusController::SetChannelLEDs(unsigned char channel, std::vector<RGBCol
serialport->serial_flush_tx(); serialport->serial_flush_tx();
Sleep(10); Sleep(10);
} }
@@ -75,6 +75,7 @@ public:
unsigned int GetLEDsOnChannel(unsigned int channel); unsigned int GetLEDsOnChannel(unsigned int channel);
void SetChannelLEDs(unsigned char channel, std::vector<RGBColor> colors); void SetChannelLEDs(unsigned char channel, std::vector<RGBColor> colors);
void SetMode(unsigned char mode, unsigned char speed, bool direction); void SetMode(unsigned char mode, unsigned char speed, bool direction);
void SetModeColors(unsigned char channel, std::vector<RGBColor> colors);
unsigned int channel_leds[HUE_PLUS_NUM_CHANNELS]; unsigned int channel_leds[HUE_PLUS_NUM_CHANNELS];
@@ -46,12 +46,48 @@ HyperXKeyboardController::~HyperXKeyboardController()
} }
void HyperXKeyboardController::SetMode(unsigned char mode, unsigned char direction, unsigned char speed) void HyperXKeyboardController::SetMode
(
unsigned char mode,
unsigned char direction,
unsigned char speed,
std::vector<RGBColor> colors
)
{ {
unsigned char color_mode;
unsigned char mode_colors[9];
active_mode = mode; active_mode = mode;
active_direction = direction; active_direction = direction;
active_speed = speed; active_speed = speed;
memset(mode_colors, 0x00, sizeof(mode_colors));
switch(colors.size())
{
default:
case 0:
color_mode = HYPERX_COLOR_MODE_SPECTRUM;
break;
case 1:
color_mode = HYPERX_COLOR_MODE_SINGLE;
mode_colors[0] = RGBGetRValue(colors[0]);
mode_colors[1] = RGBGetGValue(colors[0]);
mode_colors[2] = RGBGetBValue(colors[0]);
break;
case 2:
color_mode = HYPERX_COLOR_MODE_DUAL;
mode_colors[3] = RGBGetRValue(colors[0]);
mode_colors[4] = RGBGetGValue(colors[0]);
mode_colors[5] = RGBGetBValue(colors[0]);
mode_colors[6] = RGBGetRValue(colors[1]);
mode_colors[7] = RGBGetGValue(colors[1]);
mode_colors[8] = RGBGetBValue(colors[1]);
break;
}
SendEffect SendEffect
( (
0x01, 0x01,
@@ -59,8 +95,19 @@ void HyperXKeyboardController::SetMode(unsigned char mode, unsigned char directi
active_direction, active_direction,
HYPERX_REACTIVE_MODE_NONE, HYPERX_REACTIVE_MODE_NONE,
active_speed, active_speed,
HYPERX_COLOR_MODE_SPECTRUM color_mode,
mode_colors[0],
mode_colors[1],
mode_colors[2],
mode_colors[3],
mode_colors[4],
mode_colors[5],
mode_colors[6],
mode_colors[7],
mode_colors[8]
); );
Sleep(100);
} }
void HyperXKeyboardController::SetLEDsDirect(std::vector<RGBColor> colors) void HyperXKeyboardController::SetLEDsDirect(std::vector<RGBColor> colors)
@@ -90,7 +137,7 @@ void HyperXKeyboardController::SetLEDsDirect(std::vector<RGBColor> colors)
red_color_data red_color_data
); );
Sleep(2); Sleep(5);
SendDirect SendDirect
( (
@@ -98,7 +145,7 @@ void HyperXKeyboardController::SetLEDsDirect(std::vector<RGBColor> colors)
grn_color_data grn_color_data
); );
Sleep(2); Sleep(5);
SendDirect SendDirect
( (
@@ -106,7 +153,7 @@ void HyperXKeyboardController::SetLEDsDirect(std::vector<RGBColor> colors)
blu_color_data blu_color_data
); );
Sleep(2); Sleep(5);
SendDirectExtended SendDirectExtended
( (
@@ -142,6 +189,8 @@ void HyperXKeyboardController::SetLEDs(std::vector<RGBColor> colors)
red_color_data red_color_data
); );
Sleep(5);
SendColor SendColor
( (
0x01, 0x01,
@@ -149,6 +198,8 @@ void HyperXKeyboardController::SetLEDs(std::vector<RGBColor> colors)
grn_color_data grn_color_data
); );
Sleep(5);
SendColor SendColor
( (
0x01, 0x01,
@@ -156,6 +207,8 @@ void HyperXKeyboardController::SetLEDs(std::vector<RGBColor> colors)
blu_color_data blu_color_data
); );
Sleep(5);
SendExtendedColor SendExtendedColor
( (
0x01, 0x01,
@@ -202,7 +255,16 @@ void HyperXKeyboardController::SendEffect
unsigned char direction, unsigned char direction,
unsigned char reactive_mode, unsigned char reactive_mode,
unsigned char speed, unsigned char speed,
unsigned char color_mode unsigned char color_mode,
unsigned char red_single,
unsigned char grn_single,
unsigned char blu_single,
unsigned char red_dual_1,
unsigned char grn_dual_1,
unsigned char blu_dual_1,
unsigned char red_dual_2,
unsigned char grn_dual_2,
unsigned char blu_dual_2
) )
{ {
unsigned char buf[264]; unsigned char buf[264];
@@ -243,6 +305,19 @@ void HyperXKeyboardController::SendEffect
buf[0x21] = reactive_mode; buf[0x21] = reactive_mode;
buf[0x22] = reactive_mode; buf[0x22] = reactive_mode;
/*-----------------------------------------------------*\
| Set mode-specific colors |
\*-----------------------------------------------------*/
buf[0x29] = red_single;
buf[0x41] = grn_single;
buf[0x59] = blu_single;
buf[0x2A] = red_dual_1;
buf[0x42] = grn_dual_1;
buf[0x5A] = blu_dual_1;
buf[0x2B] = red_dual_2;
buf[0x43] = grn_dual_2;
buf[0x5B] = blu_dual_2;
buf[0x6B] = 0x09; buf[0x6B] = 0x09;
buf[0x6C] = 0x09; buf[0x6C] = 0x09;
buf[0x6D] = 0x05; buf[0x6D] = 0x05;
@@ -68,7 +68,14 @@ public:
HyperXKeyboardController(hid_device* dev_handle); HyperXKeyboardController(hid_device* dev_handle);
~HyperXKeyboardController(); ~HyperXKeyboardController();
void SetMode(unsigned char mode, unsigned char direction, unsigned char speed); void SetMode
(
unsigned char mode,
unsigned char direction,
unsigned char speed,
std::vector<RGBColor> colors
);
void SetLEDsDirect(std::vector<RGBColor> colors); void SetLEDsDirect(std::vector<RGBColor> colors);
void SetLEDs(std::vector<RGBColor> colors); void SetLEDs(std::vector<RGBColor> colors);
@@ -90,7 +97,16 @@ private:
unsigned char direction, unsigned char direction,
unsigned char reactive_mode, unsigned char reactive_mode,
unsigned char speed, unsigned char speed,
unsigned char color_mode unsigned char color_mode,
unsigned char red_single,
unsigned char grn_single,
unsigned char blu_single,
unsigned char red_dual_1,
unsigned char grn_dual_1,
unsigned char blu_dual_1,
unsigned char red_dual_2,
unsigned char grn_dual_2,
unsigned char blu_dual_2
); );
void SendColor void SendColor
@@ -0,0 +1,99 @@
/*-----------------------------------------*\
| MSIRGBController.cpp |
| |
| Driver for MSI-RGB lighting controller |
| |
| Logic adapted from: |
| https://github.com/nagisa/msi-rgb |
| |
| Adam Honse (CalcProgrammer1) 2/11/2020 |
\*-----------------------------------------*/
#include "MSIRGBController.h"
#include "super_io.h"
MSIRGBController::MSIRGBController(int sioaddr)
{
msi_sioaddr = sioaddr;
/*-----------------------------------------------------*\
| This setup step isn't well documented |
| Without this, pulsing does not work |
\*-----------------------------------------------------*/
superio_outb(msi_sioaddr, SIO_REG_LOGDEV, 0x09);
int val_at_2c = superio_inb(msi_sioaddr, 0x2C);
val_at_2c &= 0b11110111;
val_at_2c |= 0b00010000;
superio_outb(msi_sioaddr, 0x2C, val_at_2c);
/*-----------------------------------------------------*\
| Set logical device register to RGB controller |
\*-----------------------------------------------------*/
superio_outb(msi_sioaddr, SIO_REG_LOGDEV, MSI_SIO_LOGDEV_RGB);
/*-----------------------------------------------------*\
| Test if RGB is enabled. If it is not, enable it. |
\*-----------------------------------------------------*/
int enable = superio_inb(msi_sioaddr, MSI_SIO_RGB_REG_ENABLE);
if((enable & MSI_SIO_RGB_ENABLE_MASK) != MSI_SIO_RGB_ENABLE_MASK)
{
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_ENABLE, MSI_SIO_RGB_ENABLE_MASK & (enable & !MSI_SIO_RGB_ENABLE_MASK));
}
/*-----------------------------------------------------*\
| Lighting enabled, no pulsing or blinking |
\*-----------------------------------------------------*/
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_CFG_1, 0x00);
/*-----------------------------------------------------*\
| Lighting enabled, RGB non-inverted, header on |
\*-----------------------------------------------------*/
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_CFG_3, 0xE2);
}
MSIRGBController::~MSIRGBController()
{
}
void MSIRGBController::SetColor(unsigned char red, unsigned char green, unsigned char blue)
{
/*-----------------------------------------------------*\
| The MSI RGB controller uses 4 bits per color rather |
| than 8. Shift the values by 4 so that the 4 most |
| significant bits of each color are the new color value|
\*-----------------------------------------------------*/
red = red >> 4;
green = green >> 4;
blue = blue >> 4;
/*-----------------------------------------------------*\
| Set logical device register to RGB controller |
\*-----------------------------------------------------*/
superio_outb(msi_sioaddr, SIO_REG_LOGDEV, MSI_SIO_LOGDEV_RGB);
/*-----------------------------------------------------*\
| Write the colors to the color sequence registers |
| Only static mode is supported right now - all colors |
| are the same. |
\*-----------------------------------------------------*/
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_RED_1_0, (red | (red << 4)));
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_RED_3_2, (red | (red << 4)));
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_RED_5_4, (red | (red << 4)));
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_RED_7_6, (red | (red << 4)));
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_GREEN_1_0, (green | (green << 4)));
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_GREEN_3_2, (green | (green << 4)));
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_GREEN_5_4, (green | (green << 4)));
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_GREEN_7_6, (green | (green << 4)));
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_BLUE_1_0, (blue | (blue << 4)));
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_BLUE_3_2, (blue | (blue << 4)));
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_BLUE_5_4, (blue | (blue << 4)));
superio_outb(msi_sioaddr, MSI_SIO_RGB_REG_BLUE_7_6, (blue | (blue << 4)));
}
@@ -0,0 +1,56 @@
/*-----------------------------------------*\
| MSIRGBController.h |
| |
| Definitions and types for MSI-RGB |
| lighting controller |
| |
| Logic adapted from: |
| https://github.com/nagisa/msi-rgb |
| |
| Adam Honse (CalcProgrammer1) 2/11/2020 |
\*-----------------------------------------*/
#include <string>
#pragma once
#define MSI_SIO_LOGDEV_RGB 0x12
enum
{
MSI_SIO_RGB_REG_ENABLE = 0xE0,
MSI_SIO_RGB_REG_CFG_1 = 0xE4,
MSI_SIO_RGB_REG_RED_1_0 = 0xF0,
MSI_SIO_RGB_REG_RED_3_2 = 0xF1,
MSI_SIO_RGB_REG_RED_5_4 = 0xF2,
MSI_SIO_RGB_REG_RED_7_6 = 0xF3,
MSI_SIO_RGB_REG_GREEN_1_0 = 0xF4,
MSI_SIO_RGB_REG_GREEN_3_2 = 0xF5,
MSI_SIO_RGB_REG_GREEN_5_4 = 0xF6,
MSI_SIO_RGB_REG_GREEN_7_6 = 0xF7,
MSI_SIO_RGB_REG_BLUE_1_0 = 0xF8,
MSI_SIO_RGB_REG_BLUE_3_2 = 0xF9,
MSI_SIO_RGB_REG_BLUE_5_4 = 0xFA,
MSI_SIO_RGB_REG_BLUE_7_6 = 0xFB,
MSI_SIO_RGB_REG_CFG_2 = 0xFE,
MSI_SIO_RGB_REG_CFG_3 = 0xFF,
};
#define MSI_SIO_RGB_ENABLE_MASK 0xE0
class MSIRGBController
{
public:
MSIRGBController(int sioaddr);
~MSIRGBController();
std::string GetDeviceName();
std::string GetDeviceLocation();
unsigned int GetMode();
void SetMode(unsigned char new_mode, unsigned char new_speed);
void SetColor(unsigned char red, unsigned char green, unsigned char blue);
private:
int msi_sioaddr;
};
@@ -0,0 +1,40 @@
#include "MSIRGBController.h"
#include "RGBController.h"
#include "RGBController_MSIRGB.h"
#include "super_io.h"
#include <vector>
#include <stdio.h>
#include <stdlib.h>
/******************************************************************************************\
* *
* DetectMSIRGBControllers *
* *
* Detect MSI-RGB compatible Super-IO chips. *
* *
\******************************************************************************************/
void DetectMSIRGBControllers(std::vector<RGBController*> &rgb_controllers)
{
int sio_addrs[2] = {0x2E, 0x4E};
for(int sioaddr_idx = 0; sioaddr_idx < 2; sioaddr_idx++)
{
int sioaddr = sio_addrs[sioaddr_idx];
superio_enter(sioaddr);
int val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) | superio_inb(sioaddr, SIO_REG_DEVID + 1);
switch (val & SIO_ID_MASK)
{
case SIO_NCT6795_ID:
case SIO_NCT6797_ID:
MSIRGBController* new_msi = new MSIRGBController(sioaddr);
RGBController_MSIRGB* new_rgb = new RGBController_MSIRGB(new_msi);
rgb_controllers.push_back(new_rgb);
break;
}
}
} /* DetectMSIRGBControllers() */
@@ -25,20 +25,20 @@ PolychromeController::PolychromeController(i2c_smbus_interface* bus, polychrome_
case FIRMWARE_VER_2_PT_00: case FIRMWARE_VER_2_PT_00:
led_count = 1; led_count = 1;
asr_led = false; asr_led = true;
strcpy(device_name, "ASRock Polychrome FW 2.00"); strcpy(device_name, "ASRock ASR LED FW 2.00");
break; break;
case FIRMWARE_VER_2_PT_08: case FIRMWARE_VER_2_PT_08:
led_count = 1; led_count = 1;
asr_led = false; asr_led = true;
strcpy(device_name, "ASRock Polychrome FW 2.08"); strcpy(device_name, "ASRock ASR LED FW 2.08");
break; break;
case FIRMWARE_VER_2_PT_10: case FIRMWARE_VER_2_PT_10:
led_count = 1; led_count = 1;
asr_led = true; asr_led = true;
strcpy(device_name, "ASRock Polychrome FW 2.10"); strcpy(device_name, "ASRock ASR LED FW 2.10");
break; break;
case FIRMWARE_VER_3_PT_00: case FIRMWARE_VER_3_PT_00:
@@ -104,6 +104,9 @@ void PoseidonZRGBController::SetLEDsDirect(std::vector<RGBColor> colors)
| Send packets | | Send packets |
\*-----------------------------------------------------*/ \*-----------------------------------------------------*/
hid_send_feature_report(dev, red_grn_buf, 264); hid_send_feature_report(dev, red_grn_buf, 264);
Sleep(5);
hid_send_feature_report(dev, blu_buf, 264); hid_send_feature_report(dev, blu_buf, 264);
} }
@@ -4,118 +4,282 @@
| Driver for Gigabyte Aorus RGB Fusion 2.0 | | Driver for Gigabyte Aorus RGB Fusion 2.0 |
| lighting controller | | lighting controller |
| | | |
| Adam Honse (CalcProgrammer1) 1/15/2020 | | jackun 1/8/2020 |
\*-----------------------------------------*/ \*-----------------------------------------*/
#include "RGBFusion2Controller.h" #include "RGBFusion2Controller.h"
#include <cstring> #include <algorithm>
#include <stdio.h> #include <array>
#include <stdlib.h> #include <thread>
#include <chrono>
RGBFusion2Controller::RGBFusion2Controller(hid_device* dev_handle) static LEDCount LedCountToEnum(unsigned int c)
{ {
dev = dev_handle; if (c <= 32)
return(LEDS_32);
if (c <= 64)
return(LEDS_64);
if (c <= 256)
return(LEDS_256);
if (c <= 512)
return(LEDS_512);
// Set Device name return(LEDS_1024);
strcpy(device_name, "Gigabyte Motherboard"); }
// Set LED count RGBFusion2Controller::RGBFusion2Controller(hid_device* handle, const char *path) : dev(handle)
led_count = 8; {
int res = 0;
char text[64] {};
unsigned char buffer[64] {};
if( dev ) {
SetCalibration();
// hid report read needs 0x60 packet or it gives IO error
SendPacket(0x60, 0x00);
buffer[0] = report_id;
res = hid_get_feature_report(dev, buffer, 64);
if( res > 0 )
{
report = *reinterpret_cast<IT8297Report*>(buffer);
name = std::string(report.str_product, 32);
name.erase(std::find(name.begin(), name.end(), '\0'), name.end());
snprintf(text, 11, "0x%08X", report.fw_ver);
version = text;
snprintf(text, 11, "0x%08X", report.chip_id);
chip_id = text;
}
loc = path;
EnableBeat(false);
}
} }
RGBFusion2Controller::~RGBFusion2Controller() RGBFusion2Controller::~RGBFusion2Controller()
{ {
if( dev ) {
hid_close(dev);
}
}
void RGBFusion2Controller::SetMode(int m)
{
mode = m;
}
// Sets RGB color mapping to LED pins.
// "Custom" RGB packets don't seem to get remapped so use report.byteorderN and do it manually.
// Of course it all depends how we send data to the controller, but bios/rgb fusion 2 itself
// set it up like this.
void RGBFusion2Controller::SetCalibration()
{
uint8_t buffer[64] {};
buffer[0] = report_id;
buffer[1] = 0x33;
// D_LED1 WS2812 GRB, 0x00RRGGBB to 0x00GGRRBB
buffer[2] = 0x02; // B
buffer[3] = 0x00; // G
buffer[4] = 0x01; // R
buffer[5] = 0x00;
// D_LED2 WS2812 GRB
buffer[6] = 0x02;
buffer[7] = 0x00;
buffer[8] = 0x01;
buffer[9] = 0x00;
// LED C1/C2 12vGRB, seems pins already connect to LEDs correctly
buffer[10] = 0x00;
buffer[11] = 0x01;
buffer[12] = 0x02;
buffer[13] = 0x00;
SendPacket(buffer);
}
void RGBFusion2Controller::SetLedCount(unsigned int count)
{
led_count = count;
LEDCount s0 = LedCountToEnum(count);
SendPacket(0x34, s0 | (s0 << 4)); // D_LED1 | D_LED2
}
bool RGBFusion2Controller::DisableBuiltinEffect(int enable_bit, int mask)
{
if(effect_disabled & enable_bit)
return(true);
effect_disabled &= ~mask;
effect_disabled |= enable_bit;
int res = SendPacket(0x32, effect_disabled);
// Sometimes effect doesn't apply at first, delay a little and let MCU to react, if this packet is the cause
std::this_thread::sleep_for(std::chrono::milliseconds(50));
return res;
}
bool RGBFusion2Controller::EnableBeat(bool e)
{
return SendPacket(0x31, e ? 1 : 0);
} }
std::string RGBFusion2Controller::GetDeviceName() std::string RGBFusion2Controller::GetDeviceName()
{ {
return(device_name); return(name);
}
std::string RGBFusion2Controller::GetFWVersion()
{
return(version);
} }
std::string RGBFusion2Controller::GetDeviceLocation() std::string RGBFusion2Controller::GetDeviceLocation()
{ {
return(""); return(loc);
} }
unsigned int RGBFusion2Controller::GetLEDCount() std::string RGBFusion2Controller::GetSerial()
{ {
return(led_count); return(chip_id);
} }
unsigned char RGBFusion2Controller::GetMode() void RGBFusion2Controller::SetStripColors(unsigned int hdr, int start, int end, std::vector<RGBColor>& colors, int single_led)
{ {
return(0); PktRGB pkt;
} pkt.Init(hdr, report_id);
void RGBFusion2Controller::SetAllColors(unsigned char red, unsigned char green, unsigned char blue) // FIXME assuming that LED strips ports are 0x58/0x59 for all boards
{ uint32_t byteorder = hdr == HDR_D_LED1_RGB ? report.byteorder0 : report.byteorder1;
}
void RGBFusion2Controller::SetLEDColor(unsigned int led, unsigned char red, unsigned char green, unsigned char blue) unsigned char bo_r = byteorder >> 16;
{ unsigned char bo_g = byteorder >> 8;
unsigned char usb_buf[] = unsigned char bo_b = byteorder & 0xFF;
int res;
int leds_left = end - start;
int sent_data = 0;
int k = 0;
int leds_in_pkt = sizeof(pkt.s.leds) / sizeof(*pkt.s.leds); /* 19 */
// other leds stay at whatever the builtin effect was doing at that moment
// if breathing/pulse effect faded out then they stay dark
if(single_led > -1)
{ {
0xCC, 0x00, 0x00, 0x00, leds_left = 1;
0x00, 0x00, 0x00, 0x00, k = single_led - start;
0x00, 0x00, 0x00, 0x01, sent_data = k * 3;
0x5A, 0x00, 0x00, 0x00, leds_in_pkt = 1;
0x00, 0x00, 0x00, 0x00, }
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
};
usb_buf[0x01] = (0x20 | led); while(leds_left > 0)
usb_buf[0x02] = (0x01 << led );
usb_buf[0x0E] = blue;
usb_buf[0x0F] = green;
usb_buf[0x10] = red;
hid_send_feature_report(dev, usb_buf, 64);
SendApply();
}
void RGBFusion2Controller::SendApply()
{
unsigned char usb_buf[] =
{ {
0xCC, 0x28, 0xFF, 0x00, leds_in_pkt = (std::min)(leds_in_pkt, leds_left);
0x00, 0x00, 0x00, 0x00, leds_left -= leds_in_pkt;
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
};
hid_send_feature_report(dev, usb_buf, 64); pkt.s.bcount = leds_in_pkt * 3;
pkt.s.boffset = sent_data;
sent_data += pkt.s.bcount;
for(int i = 0; i < leds_in_pkt; i++)
{
RGBColor color = colors[start + k];
unsigned char red = RGBGetRValue(color);
unsigned char grn = RGBGetGValue(color);
unsigned char blu = RGBGetBValue(color);
pkt.buffer[5 + i * 3 + bo_r] = red;
pkt.buffer[5 + i * 3 + bo_g] = grn;
pkt.buffer[5 + i * 3 + bo_b] = blu;
k++;
}
res = SendPacket(pkt.buffer);
if(res < 0)
return;
}
if (hdr == HDR_D_LED1_RGB)
DisableBuiltinEffect(0x01, 0x01);
else
DisableBuiltinEffect(0x02, 0x02);
} }
void RGBFusion2Controller::SetMode(unsigned char mode) static const std::array< std::array<int, 3>, 5> speeds = {
{
{1600, 1600, 200},
{1200, 1200, 200},
{800, 800, 200},
{400, 400, 200},
{200, 200, 200},
},
};
void RGBFusion2Controller::SetLEDEffect(unsigned int led, int mode, unsigned int speed, bool random, unsigned char r, unsigned char g, unsigned char b)
{ {
PktEffect pkt;
pkt.Init(led, report_id);
pkt.e.effect_type = mode;
pkt.e.color0 = r << 16 | g << 8 | b;
if (speed < speeds.size()) {
const auto& s = speeds[speed];
pkt.e.period0 = s[0];
pkt.e.period1 = s[1];
pkt.e.period2 = s[2];
}
switch(mode)
{
case 0: break;
case 1: break; // static
case 2: // breathing
case 3: // blink
if (random)
pkt.e.effect_param0 = 7; // cycle through up to 7 (max?) colors
break;
case 4: // color cycle
pkt.e.effect_param0 = 7; // cycle through up to 7 (max?) colors
break;
// "fake" effects
case 10: // flashing, flashing color cycle
pkt.e.period0 = 200;
pkt.e.period1 = 200;
pkt.e.period2 = 5000 - 1000 * speed; // time between flashing, doesn't seem to be affected by period0/period1
pkt.e.effect_type = 3;
pkt.e.effect_param2 = 2; // flash twice
if (random)
pkt.e.effect_param0 = 7;
break;
}
SendPacket(pkt.buffer);
} }
void RGBFusion2Controller::dump() bool RGBFusion2Controller::ApplyEffect()
{ {
return SendPacket(0x28, 0xFF);
}
bool RGBFusion2Controller::SendPacket(uint8_t a, uint8_t b, uint8_t c)
{
unsigned char buffer[64] {};
buffer[0] = report_id;
buffer[1] = a;
buffer[2] = b;
buffer[3] = c;
return (SendPacket(buffer) == 64);
}
int RGBFusion2Controller::SendPacket(unsigned char* packet)
{
return hid_send_feature_report(dev, packet, 64);
} }
@@ -4,36 +4,187 @@
| Definitions and types for Gigabyte Aorus | | Definitions and types for Gigabyte Aorus |
| RGB Fusion 2.0 lighting controller | | RGB Fusion 2.0 lighting controller |
| | | |
| Adam Honse (CalcProgrammer1) 1/15/2020 | | jackun 1/8/2020 |
\*-----------------------------------------*/ \*-----------------------------------------*/
#include <string> #include "RGBController.h"
#include <cstring>
#include <hidapi/hidapi.h> #include <hidapi/hidapi.h>
#pragma once #pragma once
// LED "headers" 0x20..0x27, As seen on Gigabyte X570 Elite board
const uint8_t HDR_BACK_IO = 0x20;
const uint8_t HDR_CPU = 0x21;
const uint8_t HDR_LED_2 = 0x22;
const uint8_t HDR_PCIE = 0x23;
const uint8_t HDR_LED_C1C2 = 0x24;
const uint8_t HDR_D_LED1 = 0x25;
const uint8_t HDR_D_LED2 = 0x26;
const uint8_t HDR_LED_7 = 0x27;
const uint8_t HDR_D_LED1_RGB = 0x58; // FIXME assuming that it is 0x58 for all boards
const uint8_t HDR_D_LED2_RGB = 0x59;
enum EffectType
{
EFFECT_NONE = 0,
EFFECT_STATIC = 1,
EFFECT_PULSE = 2,
EFFECT_BLINKING = 3,
EFFECT_COLORCYCLE = 4,
// to be continued...
};
enum LEDCount
{
LEDS_32 = 0,
LEDS_64,
LEDS_256,
LEDS_512,
LEDS_1024,
};
struct LEDs
{
uint8_t r;
uint8_t g;
uint8_t b;
};
#pragma pack(push, 1)
union PktRGB
{
unsigned char buffer[64];
struct RGBData
{
uint8_t report_id;
uint8_t header;
uint16_t boffset; // in bytes, absolute
uint8_t bcount;
LEDs leds[19];
uint16_t padding0;
} s;
PktRGB() : s {}
{
}
void Init(uint8_t header, uint8_t report_id)
{
s.report_id = report_id;
s.header = header;
s.boffset = 0;
s.bcount = 0;
memset(s.leds, 0, sizeof(s.leds));
}
};
union PktEffect
{
unsigned char buffer[64];
struct Effect
{
uint8_t report_id;
uint8_t header;
uint32_t zone0; // rgb fusion seems to set it to pow(2, header - 0x20)
uint32_t zone1;
uint8_t reserved0;
uint8_t effect_type;
uint8_t max_brightness;
uint8_t min_brightness;
uint32_t color0;
uint32_t color1;
uint16_t period0; // fade in
uint16_t period1; // fade out
uint16_t period2; // hold
uint16_t period3;
uint8_t effect_param0;
uint8_t effect_param1;
uint8_t effect_param2;
uint8_t effect_param3;
uint8_t padding0[30];
} e;
PktEffect() : e {}
{
}
void Init(int header, uint8_t report_id)
{
memset(buffer, 0, sizeof(buffer));
e.report_id = report_id;
if (header < 8)
e.header = 32 + header; // set as default
else
e.header = header;
e.zone0 = (uint32_t)(1 << (e.header - 32));
e.effect_type = EFFECT_STATIC;
e.max_brightness = 100;
e.min_brightness = 0;
e.color0 = 0x00FF2100; //orange
e.period0 = 1200;
e.period1 = 1200;
e.period2 = 200;
e.period3 = 200;
e.effect_param0 = 0; // ex color count to cycle through (max seems to be 7)
e.effect_param1 = 0;
e.effect_param2 = 1; // ex flash repeat count
e.effect_param3 = 0;
}
};
struct IT8297Report
{
uint8_t report_id;
uint8_t product;
uint8_t device_num;
uint8_t total_leds;
uint32_t fw_ver;
uint16_t curr_led_count;
uint16_t reserved0;
char str_product[32]; // might be 28 and an extra byteorder3
uint32_t byteorder0; // is little-endian 0x00RRGGBB ?
uint32_t byteorder1;
uint32_t byteorder2;
uint32_t chip_id;
uint32_t reserved1;
};
#pragma pack(pop)
class RGBFusion2Controller class RGBFusion2Controller
{ {
public: public:
RGBFusion2Controller(hid_device* dev_handle); RGBFusion2Controller(hid_device* handle, const char *path);
~RGBFusion2Controller(); ~RGBFusion2Controller();
void SetStripColors(unsigned int hdr, int start, int end, std::vector<RGBColor>& colors, int single_led = -1);
void SetLEDEffect(unsigned int led, int mode, unsigned int speed, bool random, unsigned char red, unsigned char green, unsigned char blue);
void SetLedCount(unsigned int count);
void SetMode(int mode);
bool ApplyEffect();
bool DisableBuiltinEffect(int enable_bit, int mask);
void SetCalibration();
std::string GetDeviceName(); std::string GetDeviceName();
std::string GetDeviceLocation(); std::string GetDeviceLocation();
unsigned int GetLEDCount(); std::string GetFWVersion();
unsigned char GetMode(); std::string GetSerial();
void SetAllColors(unsigned char red, unsigned char green, unsigned char blue);
void SetLEDColor(unsigned int led, unsigned char red, unsigned char green, unsigned char blue);
void SetMode(unsigned char mode);
private: private:
void dump(); bool EnableBeat(bool enable);
bool SendPacket(uint8_t a, uint8_t b, uint8_t c = 0);
int SendPacket(unsigned char* packet);
char device_name[32];
unsigned int led_count;
void SendApply();
hid_device* dev; hid_device* dev;
int mode;
unsigned int led_count;
IT8297Report report;
std::string name;
std::string loc;
std::string version;
std::string chip_id;
int effect_disabled = 0;
int report_id = 0xCC;
}; };
@@ -1,36 +1,37 @@
#include "RGBFusion2Controller.h" #include "RGBFusion2Controller.h"
#include "RGBController.h"
#include "RGBController_RGBFusion2.h" #include "RGBController_RGBFusion2.h"
#include <vector>
#include <hidapi/hidapi.h>
#define RGB_FUSION_2_VID 0x048D #define IT8297_VID 0x048D
#define RGB_FUSION_2_PID 0x8297 #define IT8297_PID 0x8297
/******************************************************************************************\ /******************************************************************************************\
* * * *
* DetectRGBFusion2Controllers * * DetectRGBFusion2Controllers *
* * * *
* Detect RGB Fusion 2.0 controllers on the USB interface. * * Detect RGB Fusion 2 devices that use IT8297 RGB controller *
* * * *
\******************************************************************************************/ \******************************************************************************************/
void DetectRGBFusion2Controllers(std::vector<RGBController*>& rgb_controllers) void DetectRGBFusion2Controllers(std::vector<RGBController*> &rgb_controllers)
{ {
hid_device* dev; if (hid_init() < 0)
return;
//Look for RGB Fusion 2.0 Controller hid_device_info * device_list = hid_enumerate(IT8297_VID, IT8297_PID);
hid_init(); if (!device_list)
return;
dev = hid_open(RGB_FUSION_2_VID, RGB_FUSION_2_PID, 0); hid_device_info * device = device_list;
while (device)
if( dev )
{ {
RGBFusion2Controller* controller = new RGBFusion2Controller(dev); hid_device * dev = hid_open_path(device->path);
if (dev) {
RGBController_RGBFusion2* rgb_controller = new RGBController_RGBFusion2(controller); RGBFusion2Controller * controller = new RGBFusion2Controller(dev, device_list->path);
RGBController_RGBFusion2 * rgb_controller = new RGBController_RGBFusion2(controller);
rgb_controllers.push_back(rgb_controller); rgb_controllers.push_back(rgb_controller);
}
device = device->next;
} }
} /* DetectRGBFusionControllers() */ hid_free_enumeration(device_list);
}
@@ -0,0 +1,47 @@
/*-----------------------------------------*\
| RGBFusionGPUController.cpp |
| |
| Driver for Gigabyte Aorus RGB Fusion GPU |
| lighting controller |
| |
| Adam Honse (CalcProgrammer1) 2/20/2020 |
\*-----------------------------------------*/
#include "RGBFusionGPUController.h"
RGBFusionGPUController::RGBFusionGPUController(i2c_smbus_interface* bus, rgb_fusion_dev_id dev)
{
this->bus = bus;
this->dev = dev;
}
RGBFusionGPUController::~RGBFusionGPUController()
{
}
std::string RGBFusionGPUController::GetDeviceLocation()
{
std::string return_string(bus->device_name);
char addr[5];
snprintf(addr, 5, "0x%02X", dev);
return_string.append(", address ");
return_string.append(addr);
return(return_string);
}
void RGBFusionGPUController::SetColor(unsigned char red, unsigned char green, unsigned char blue)
{
bus->i2c_smbus_write_byte(dev, RGB_FUSION_GPU_REG_COLOR);
bus->i2c_smbus_write_byte(dev, red);
bus->i2c_smbus_write_byte(dev, green);
bus->i2c_smbus_write_byte(dev, blue);
}
void RGBFusionGPUController::SetMode(unsigned char mode, unsigned char speed)
{
bus->i2c_smbus_write_byte(dev, RGB_FUSION_GPU_REG_MODE);
bus->i2c_smbus_write_byte(dev, mode);
bus->i2c_smbus_write_byte(dev, speed);
bus->i2c_smbus_write_byte(dev, 0x63);
}
@@ -0,0 +1,54 @@
/*-----------------------------------------*\
| RGBFusionGPUController.h |
| |
| Definitions and types for Gigabyte Aorus |
| RGB Fusion GPU lighting controller |
| |
| Adam Honse (CalcProgrammer1) 2/20/2020 |
\*-----------------------------------------*/
#include <string>
#include "i2c_smbus.h"
#pragma once
typedef unsigned char rgb_fusion_dev_id;
enum
{
RGB_FUSION_GPU_REG_COLOR = 0x40,
RGB_FUSION_GPU_REG_MODE = 0x88
};
enum
{
RGB_FUSION_GPU_MODE_STATIC = 0x01,
RGB_FUSION_GPU_MODE_BREATHING = 0x02,
RGB_FUSION_GPU_MODE_FLASHING = 0x04,
RGB_FUSION_GPU_MODE_DUAL_FLASHING = 0x08,
RGB_FUSION_GPU_MODE_SPECTRUM_CYCLE = 0x11
};
enum
{
RGB_FUSION_GPU_SPEED_SLOWEST = 0x00,
RGB_FUSION_GPU_SPEED_NORMAL = 0x05,
RGB_FUSION_GPU_SPEED_FASTEST = 0x09
};
class RGBFusionGPUController
{
public:
RGBFusionGPUController(i2c_smbus_interface* bus, rgb_fusion_dev_id dev);
~RGBFusionGPUController();
std::string GetDeviceLocation();
void SetColor(unsigned char red, unsigned char green, unsigned char blue);
void SetMode(unsigned char mode, unsigned char speed);
private:
i2c_smbus_interface* bus;
rgb_fusion_dev_id dev;
};
@@ -0,0 +1,83 @@
#include "RGBFusionGPUController.h"
#include "RGBController.h"
#include "RGBController_RGBFusionGPU.h"
#include "i2c_smbus.h"
#include <vector>
#include <stdio.h>
#include <stdlib.h>
/******************************************************************************************\
* *
* TestForRGBFusionGPUController *
* *
* Tests the given address to see if an RGB Fusion controller exists there. First *
* does a quick write to test for a response *
* *
\******************************************************************************************/
bool TestForRGBFusionGPUController(i2c_smbus_interface* bus, unsigned char address)
{
bool pass = false;
int res;
//Write out 0xAB 0x00 0x00 0x00 sequence
res = bus->i2c_smbus_write_byte(address, 0xAB);
if (res >= 0)
{
bus->i2c_smbus_write_byte(address, 0x00);
bus->i2c_smbus_write_byte(address, 0x00);
bus->i2c_smbus_write_byte(address, 0x00);
pass = true;
res = bus->i2c_smbus_read_byte(address);
if (res != 0xAB)
{
pass = false;
}
res = bus->i2c_smbus_read_byte(address);
if(res != 0x14)
{
pass = false;
}
bus->i2c_smbus_read_byte(address);
bus->i2c_smbus_read_byte(address);
}
return(pass);
} /* TestForRGBFusionGPUController() */
/******************************************************************************************\
* *
* DetectRGBFusionGPUControllers *
* *
* Detect RGB Fusion controllers on the enumerated I2C busses at address 0x47. *
* *
* bus - pointer to i2c_smbus_interface where RGB Fusion device is connected *
* dev - I2C address of RGB Fusion device *
* *
\******************************************************************************************/
void DetectRGBFusionGPUControllers(std::vector<i2c_smbus_interface*>& busses, std::vector<RGBController*>& rgb_controllers)
{
RGBFusionGPUController* new_rgb_fusion;
RGBController_RGBFusionGPU* new_controller;
for (unsigned int bus = 0; bus < busses.size(); bus++)
{
// Check for RGB Fusion controller at 0x47
if (TestForRGBFusionGPUController(busses[bus], 0x47))
{
new_rgb_fusion = new RGBFusionGPUController(busses[bus], 0x47);
new_controller = new RGBController_RGBFusionGPU(new_rgb_fusion);
rgb_controllers.push_back(new_controller);
}
}
} /* DetectRGBFusionGPUControllers() */
+43 -14
View File
@@ -17,6 +17,7 @@
#include "i2c_smbus_piix4.h" #include "i2c_smbus_piix4.h"
#include "i2c_smbus_i801.h" #include "i2c_smbus_i801.h"
#include "i2c_smbus_nct6775.h" #include "i2c_smbus_nct6775.h"
#include "i2c_smbus_nvapi.h"
#include "super_io.h" #include "super_io.h"
#include "wmi.h" #include "wmi.h"
#else /* WIN32 */ #else /* WIN32 */
@@ -87,6 +88,33 @@ void DetectNuvotonI2CBusses()
} /* DetectNuvotonI2CBusses() */ } /* DetectNuvotonI2CBusses() */
/******************************************************************************************\
* *
* DetectNvAPII2CBusses (Windows) *
* *
* Detects available NVidia NvAPI I2C adapters and enumerates *
* i2c_smbus_interface objects for them. Only enumerates the first bus for each GPU *
* *
\******************************************************************************************/
void DetectNvAPII2CBusses()
{
static NV_PHYSICAL_GPU_HANDLE gpu_handles[64];
static NV_S32 gpu_count = 0;
NV_STATUS initialize = NvAPI_Initialize();
NvAPI_EnumPhysicalGPUs(gpu_handles, &gpu_count);
for(NV_S32 gpu_idx = 0; gpu_idx < gpu_count; gpu_idx++)
{
i2c_smbus_nvapi * nvapi_bus = new i2c_smbus_nvapi(gpu_handles[gpu_idx]);
sprintf(nvapi_bus->device_name, "NVidia NvAPI I2C on GPU %d", gpu_idx);
busses.push_back(nvapi_bus);
}
} /* DetectNvAPII2CBusses() */
/******************************************************************************************\ /******************************************************************************************\
* * * *
@@ -170,6 +198,9 @@ void DetectI2CBusses()
// Detect Nuvoton Super IO SMBus adapters // Detect Nuvoton Super IO SMBus adapters
DetectNuvotonI2CBusses(); DetectNuvotonI2CBusses();
// Detect NVidia NvAPI I2C adapters
DetectNvAPII2CBusses();
} /* DetectI2CBusses() */ } /* DetectI2CBusses() */
#else /* WIN32 */ #else /* WIN32 */
@@ -218,14 +249,7 @@ void DetectI2CBusses()
{ {
read(test_fd, device_string, sizeof(device_string)); read(test_fd, device_string, sizeof(device_string));
close(test_fd); close(test_fd);
//ignore nvidia adapters for now
if(strncmp(device_string, "NVIDIA", 6) == 0)
{
ent = readdir(dir);
continue;
}
bus = new i2c_smbus_linux(); bus = new i2c_smbus_linux();
strcpy(bus->device_name, device_string); strcpy(bus->device_name, device_string);
@@ -253,6 +277,7 @@ void DetectI2CBusses()
#endif /* WIN32 */ #endif /* WIN32 */
void DetectAuraControllers(std::vector<i2c_smbus_interface*> &busses, std::vector<RGBController*> &rgb_controllers); void DetectAuraControllers(std::vector<i2c_smbus_interface*> &busses, std::vector<RGBController*> &rgb_controllers);
void DetectAuraGPUControllers(std::vector<i2c_smbus_interface*> &busses, std::vector<RGBController*> &rgb_controllers);
void DetectCorsairControllers(std::vector<i2c_smbus_interface*> &busses, std::vector<RGBController*> &rgb_controllers); void DetectCorsairControllers(std::vector<i2c_smbus_interface*> &busses, std::vector<RGBController*> &rgb_controllers);
void DetectCorsairProControllers(std::vector<i2c_smbus_interface*> &busses, std::vector<RGBController*> &rgb_controllers); void DetectCorsairProControllers(std::vector<i2c_smbus_interface*> &busses, std::vector<RGBController*> &rgb_controllers);
void DetectCrucialControllers(std::vector<i2c_smbus_interface*> &busses, std::vector<RGBController*> &rgb_controllers); void DetectCrucialControllers(std::vector<i2c_smbus_interface*> &busses, std::vector<RGBController*> &rgb_controllers);
@@ -260,14 +285,14 @@ void DetectHyperXControllers(std::vector<i2c_smbus_interface*> &busses, std::vec
void DetectPatriotViperControllers(std::vector<i2c_smbus_interface*> &busses, std::vector<RGBController*> &rgb_controllers); void DetectPatriotViperControllers(std::vector<i2c_smbus_interface*> &busses, std::vector<RGBController*> &rgb_controllers);
void DetectPolychromeControllers(std::vector<i2c_smbus_interface*>& busses, std::vector<RGBController*>& rgb_controllers); void DetectPolychromeControllers(std::vector<i2c_smbus_interface*>& busses, std::vector<RGBController*>& rgb_controllers);
void DetectRGBFusionControllers(std::vector<i2c_smbus_interface*>& busses, std::vector<RGBController*>& rgb_controllers); void DetectRGBFusionControllers(std::vector<i2c_smbus_interface*>& busses, std::vector<RGBController*>& rgb_controllers);
void DetectRGBFusionGPUControllers(std::vector<i2c_smbus_interface*>& busses, std::vector<RGBController*>& rgb_controllers);
void DetectMSIRGBControllers(std::vector<RGBController*> &rgb_controllers);
void DetectLEDStripControllers(std::vector<RGBController*> &rgb_controllers); void DetectLEDStripControllers(std::vector<RGBController*> &rgb_controllers);
void DetectHue2Controllers(std::vector<RGBController*> &rgb_controllers); void DetectHue2Controllers(std::vector<RGBController*> &rgb_controllers);
void DetectHuePlusControllers(std::vector<RGBController*> &rgb_controllers); void DetectHuePlusControllers(std::vector<RGBController*> &rgb_controllers);
void DetectOpenRazerControllers(std::vector<RGBController*> &rgb_controllers); void DetectOpenRazerControllers(std::vector<RGBController*> &rgb_controllers);
void DetectRazerChromaSDKControllers(std::vector<RGBController*>& rgb_controllers);
void DetectE131Controllers(std::vector<RGBController*> &rgb_controllers); void DetectE131Controllers(std::vector<RGBController*> &rgb_controllers);
void DetectAMDWraithPrismControllers(std::vector<RGBController*>& rgb_controllers); void DetectAMDWraithPrismControllers(std::vector<RGBController*>& rgb_controllers);
void DetectAorusGPUControllers(std::vector<RGBController*> &rgb_controllers);
void DetectMSI3ZoneControllers(std::vector<RGBController*>& rgb_controllers); void DetectMSI3ZoneControllers(std::vector<RGBController*>& rgb_controllers);
void DetectPoseidonZRGBControllers(std::vector<RGBController*>& rgb_controllers); void DetectPoseidonZRGBControllers(std::vector<RGBController*>& rgb_controllers);
void DetectCorsairCmdrProControllers(std::vector<RGBController*> &rgb_controllers); void DetectCorsairCmdrProControllers(std::vector<RGBController*> &rgb_controllers);
@@ -276,6 +301,7 @@ void DetectCorsairNodeProControllers(std::vector<RGBController*> &rgb_controller
void DetectFaustusControllers(std::vector<RGBController*> &rgb_controllers); void DetectFaustusControllers(std::vector<RGBController*> &rgb_controllers);
void DetectHyperXKeyboardControllers(std::vector<RGBController*>& rgb_controllers); void DetectHyperXKeyboardControllers(std::vector<RGBController*>& rgb_controllers);
void DetectThermaltakeRiingControllers(std::vector<RGBController*>& rgb_controllers); void DetectThermaltakeRiingControllers(std::vector<RGBController*>& rgb_controllers);
void DetectRGBFusion2Controllers(std::vector<RGBController*> &rgb_controllers);
/******************************************************************************************\ /******************************************************************************************\
* * * *
@@ -284,19 +310,23 @@ void DetectThermaltakeRiingControllers(std::vector<RGBController*>& rgb_controll
* Detect and populate RGB Controllers vector * * Detect and populate RGB Controllers vector *
* * * *
\******************************************************************************************/ \******************************************************************************************/
#include "RGBController_Dummy.h"
void DetectRGBControllers(void) void DetectRGBControllers(void)
{ {
DetectI2CBusses(); DetectI2CBusses();
DetectAuraControllers(busses, rgb_controllers); DetectAuraControllers(busses, rgb_controllers);
DetectAuraGPUControllers(busses, rgb_controllers);
DetectCorsairControllers(busses, rgb_controllers); DetectCorsairControllers(busses, rgb_controllers);
DetectCorsairProControllers(busses, rgb_controllers); DetectCorsairProControllers(busses, rgb_controllers);
DetectCrucialControllers(busses, rgb_controllers); DetectCrucialControllers(busses, rgb_controllers);
DetectHyperXControllers(busses, rgb_controllers); DetectHyperXControllers(busses, rgb_controllers);
DetectPatriotViperControllers(busses, rgb_controllers); DetectPatriotViperControllers(busses, rgb_controllers);
DetectPolychromeControllers(busses, rgb_controllers); DetectPolychromeControllers(busses, rgb_controllers);
DetectRGBFusionGPUControllers(busses, rgb_controllers);
DetectRGBFusionControllers(busses, rgb_controllers); DetectRGBFusionControllers(busses, rgb_controllers);
DetectMSIRGBControllers(rgb_controllers);
DetectLEDStripControllers(rgb_controllers); DetectLEDStripControllers(rgb_controllers);
DetectHue2Controllers(rgb_controllers); DetectHue2Controllers(rgb_controllers);
@@ -310,6 +340,7 @@ void DetectRGBControllers(void)
DetectCorsairKeyboardControllers(rgb_controllers); DetectCorsairKeyboardControllers(rgb_controllers);
DetectCorsairNodeProControllers(rgb_controllers); DetectCorsairNodeProControllers(rgb_controllers);
DetectThermaltakeRiingControllers(rgb_controllers); DetectThermaltakeRiingControllers(rgb_controllers);
DetectRGBFusion2Controllers(rgb_controllers);
DetectE131Controllers(rgb_controllers); DetectE131Controllers(rgb_controllers);
@@ -317,9 +348,7 @@ void DetectRGBControllers(void)
| Windows-only devices | | Windows-only devices |
\*-------------------------------------*/ \*-------------------------------------*/
#ifdef WIN32 #ifdef WIN32
DetectRazerChromaSDKControllers(rgb_controllers); DetectOpenRazerControllers(rgb_controllers);
//DetectAorusGPUControllers(rgb_controllers);
/*-------------------------------------*\ /*-------------------------------------*\
| Linux-only devices | | Linux-only devices |
\*-------------------------------------*/ \*-------------------------------------*/
+86 -23
View File
@@ -5,6 +5,22 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = OpenRGB TARGET = OpenRGB
TEMPLATE = app TEMPLATE = app
VERSION = 0.0
win32:BUILDDATE = $$system(date /t)
unix:BUILDDATE = $$system(date -R)
GIT_COMMIT_ID = $$system(git --git-dir $$_PRO_FILE_PWD_/.git --work-tree $$_PRO_FILE_PWD_ rev-parse HEAD)
GIT_COMMIT_DATE = $$system(git --git-dir $$_PRO_FILE_PWD_/.git --work-tree $$_PRO_FILE_PWD_ show -s --format=%ci HEAD)
GIT_BRANCH = $$system(git --git-dir $$_PRO_FILE_PWD_/.git --work-tree $$_PRO_FILE_PWD_ rev-parse --abbrev-ref HEAD)
DEFINES += \
VERSION_STRING=\\"\"\"$$VERSION\\"\"\" \
BUILDDATE_STRING=\\"\"\"$$BUILDDATE\\"\"\" \
GIT_COMMIT_ID=\\"\"\"$$GIT_COMMIT_ID\\"\"\" \
GIT_COMMIT_DATE=\\"\"\"$$GIT_COMMIT_DATE\\"\"\" \
GIT_BRANCH=\\"\"\"$$GIT_BRANCH\\"\"\"
RC_ICONS = qt/OpenRGB.ico
INCLUDEPATH += \ INCLUDEPATH += \
dependencies/libe131/src/ \ dependencies/libe131/src/ \
i2c_smbus/ \ i2c_smbus/ \
@@ -14,6 +30,7 @@ INCLUDEPATH += \
super_io/ \ super_io/ \
Controllers/AMDWraithPrismController/ \ Controllers/AMDWraithPrismController/ \
Controllers/AuraController/ \ Controllers/AuraController/ \
Controllers/AuraGPUController/ \
Controllers/CorsairController/ \ Controllers/CorsairController/ \
Controllers/CorsairCmdrProController/ \ Controllers/CorsairCmdrProController/ \
Controllers/CorsairKeyboardController/ \ Controllers/CorsairKeyboardController/ \
@@ -26,11 +43,13 @@ INCLUDEPATH += \
Controllers/HyperXKeyboardController/ \ Controllers/HyperXKeyboardController/ \
Controllers/LEDStripController/ \ Controllers/LEDStripController/ \
Controllers/MSI3ZoneController/ \ Controllers/MSI3ZoneController/ \
Controllers/MSIRGBController/ \
Controllers/PatriotViperController/ \ Controllers/PatriotViperController/ \
Controllers/PolychromeController/ \ Controllers/PolychromeController/ \
Controllers/PoseidonZRGBController/ \ Controllers/PoseidonZRGBController/ \
Controllers/RGBFusionController/ \ Controllers/RGBFusionController/ \
Controllers/RGBFusion2Controller/ \ Controllers/RGBFusion2Controller/ \
Controllers/RGBFusionGPUController/ \
Controllers/ThermaltakeRiingController/ \ Controllers/ThermaltakeRiingController/ \
RGBController/ \ RGBController/ \
qt/ qt/
@@ -38,6 +57,7 @@ INCLUDEPATH += \
SOURCES += \ SOURCES += \
dependencies/libe131/src/e131.c \ dependencies/libe131/src/e131.c \
main.cpp \ main.cpp \
cli.cpp \
OpenRGB.cpp \ OpenRGB.cpp \
qt/OpenRGBDeviceInfoPage.cpp \ qt/OpenRGBDeviceInfoPage.cpp \
qt/OpenRGBDevicePage.cpp \ qt/OpenRGBDevicePage.cpp \
@@ -46,6 +66,8 @@ SOURCES += \
i2c_tools/i2c_tools.cpp \ i2c_tools/i2c_tools.cpp \
net_port/net_port.cpp \ net_port/net_port.cpp \
qt/OpenRGBDialog2.cpp \ qt/OpenRGBDialog2.cpp \
qt/OpenRGBProfileSaveDialog.cpp \
qt/OpenRGBSoftwareInfoPage.cpp \
qt/OpenRGBSystemInfoPage.cpp \ qt/OpenRGBSystemInfoPage.cpp \
qt/hsv.cpp \ qt/hsv.cpp \
serial_port/serial_port.cpp \ serial_port/serial_port.cpp \
@@ -54,6 +76,8 @@ SOURCES += \
Controllers/AMDWraithPrismController/AMDWraithPrismControllerDetect.cpp \ Controllers/AMDWraithPrismController/AMDWraithPrismControllerDetect.cpp \
Controllers/AuraController/AuraController.cpp \ Controllers/AuraController/AuraController.cpp \
Controllers/AuraController/AuraControllerDetect.cpp \ Controllers/AuraController/AuraControllerDetect.cpp \
Controllers/AuraGPUController/AuraGPUController.cpp \
Controllers/AuraGPUController/AuraGPUControllerDetect.cpp \
Controllers/CorsairController/CorsairController.cpp \ Controllers/CorsairController/CorsairController.cpp \
Controllers/CorsairController/CorsairControllerDetect.cpp \ Controllers/CorsairController/CorsairControllerDetect.cpp \
Controllers/CorsairCmdrProController/CorsairCmdrProController.cpp \ Controllers/CorsairCmdrProController/CorsairCmdrProController.cpp \
@@ -78,6 +102,8 @@ SOURCES += \
Controllers/LEDStripController/LEDStripControllerDetect.cpp \ Controllers/LEDStripController/LEDStripControllerDetect.cpp \
Controllers/MSI3ZoneController/MSI3ZoneController.cpp \ Controllers/MSI3ZoneController/MSI3ZoneController.cpp \
Controllers/MSI3ZoneController/MSI3ZoneControllerDetect.cpp \ Controllers/MSI3ZoneController/MSI3ZoneControllerDetect.cpp \
Controllers/MSIRGBController/MSIRGBController.cpp \
Controllers/MSIRGBController/MSIRGBControllerDetect.cpp \
Controllers/PatriotViperController/PatriotViperController.cpp \ Controllers/PatriotViperController/PatriotViperController.cpp \
Controllers/PatriotViperController/PatriotViperControllerDetect.cpp \ Controllers/PatriotViperController/PatriotViperControllerDetect.cpp \
Controllers/PolychromeController/PolychromeController.cpp \ Controllers/PolychromeController/PolychromeController.cpp \
@@ -88,18 +114,22 @@ SOURCES += \
Controllers/RGBFusionController/RGBFusionControllerDetect.cpp \ Controllers/RGBFusionController/RGBFusionControllerDetect.cpp \
Controllers/RGBFusion2Controller/RGBFusion2Controller.cpp \ Controllers/RGBFusion2Controller/RGBFusion2Controller.cpp \
Controllers/RGBFusion2Controller/RGBFusion2ControllerDetect.cpp \ Controllers/RGBFusion2Controller/RGBFusion2ControllerDetect.cpp \
Controllers/RGBFusionGPUController/RGBFusionGPUController.cpp \
Controllers/RGBFusionGPUController/RGBFusionGPUControllerDetect.cpp \
Controllers/ThermaltakeRiingController/ThermaltakeRiingController.cpp \ Controllers/ThermaltakeRiingController/ThermaltakeRiingController.cpp \
Controllers/ThermaltakeRiingController/ThermaltakeRiingControllerDetect.cpp \ Controllers/ThermaltakeRiingController/ThermaltakeRiingControllerDetect.cpp \
RGBController/RGBController.cpp \ RGBController/RGBController.cpp \
RGBController/E131ControllerDetect.cpp \ RGBController/E131ControllerDetect.cpp \
RGBController/RGBController_AMDWraithPrism.cpp \ RGBController/RGBController_AMDWraithPrism.cpp \
RGBController/RGBController_Aura.cpp \ RGBController/RGBController_Aura.cpp \
RGBController/RGBController_AuraGPU.cpp \
RGBController/RGBController_Corsair.cpp \ RGBController/RGBController_Corsair.cpp \
RGBController/RGBController_CorsairCmdrPro.cpp \ RGBController/RGBController_CorsairCmdrPro.cpp \
RGBController/RGBController_CorsairKeyboard.cpp \ RGBController/RGBController_CorsairKeyboard.cpp \
RGBController/RGBController_CorsairNodePro.cpp \ RGBController/RGBController_CorsairNodePro.cpp \
RGBController/RGBController_CorsairPro.cpp \ RGBController/RGBController_CorsairPro.cpp \
RGBController/RGBController_Crucial.cpp \ RGBController/RGBController_Crucial.cpp \
RGBController/RGBController_Dummy.cpp \
RGBController/RGBController_Hue2.cpp \ RGBController/RGBController_Hue2.cpp \
RGBController/RGBController_HuePlus.cpp \ RGBController/RGBController_HuePlus.cpp \
RGBController/RGBController_HyperX.cpp \ RGBController/RGBController_HyperX.cpp \
@@ -107,11 +137,13 @@ SOURCES += \
RGBController/RGBController_E131.cpp \ RGBController/RGBController_E131.cpp \
RGBController/RGBController_LEDStrip.cpp \ RGBController/RGBController_LEDStrip.cpp \
RGBController/RGBController_MSI3Zone.cpp \ RGBController/RGBController_MSI3Zone.cpp \
RGBController/RGBController_MSIRGB.cpp \
RGBController/RGBController_PatriotViper.cpp \ RGBController/RGBController_PatriotViper.cpp \
RGBController/RGBController_Polychrome.cpp \ RGBController/RGBController_Polychrome.cpp \
RGBController/RGBController_PoseidonZRGB.cpp \ RGBController/RGBController_PoseidonZRGB.cpp \
RGBController/RGBController_RGBFusion.cpp \ RGBController/RGBController_RGBFusion.cpp \
RGBController/RGBController_RGBFusion2.cpp \ RGBController/RGBController_RGBFusion2.cpp \
RGBController/RGBController_RGBFusionGPU.cpp \
RGBController/RGBController_ThermaltakeRiing.cpp \ RGBController/RGBController_ThermaltakeRiing.cpp \
HEADERS += \ HEADERS += \
@@ -122,12 +154,15 @@ HEADERS += \
i2c_tools/i2c_tools.h \ i2c_tools/i2c_tools.h \
net_port/net_port.h \ net_port/net_port.h \
qt/OpenRGBDialog2.h \ qt/OpenRGBDialog2.h \
qt/OpenRGBProfileSaveDialog.h \
qt/OpenRGBSoftwareInfoPage.h \
qt/OpenRGBSystemInfoPage.h \ qt/OpenRGBSystemInfoPage.h \
serial_port/find_usb_serial_port.h \ serial_port/find_usb_serial_port.h \
serial_port/serial_port.h \ serial_port/serial_port.h \
super_io/super_io.h \ super_io/super_io.h \
Controllers/AMDWraithPrismController/AMDWraithPrismController.h \ Controllers/AMDWraithPrismController/AMDWraithPrismController.h \
Controllers/AuraController/AuraController.h \ Controllers/AuraController/AuraController.h \
Controllers/AuraGPUController/AuraGPUController.h \
Controllers/CorsairController/CorsairController.h \ Controllers/CorsairController/CorsairController.h \
Controllers/CorsairCmdrProController/CorsairCmdrProController.h \ Controllers/CorsairCmdrProController/CorsairCmdrProController.h \
Controllers/CorsairKeyboardController/CorsairKeyboardController.h \ Controllers/CorsairKeyboardController/CorsairKeyboardController.h \
@@ -140,20 +175,24 @@ HEADERS += \
Controllers/HyperXKeyboardController/HyperXKeyboardController.h \ Controllers/HyperXKeyboardController/HyperXKeyboardController.h \
Controllers/LEDStripController/LEDStripController.h \ Controllers/LEDStripController/LEDStripController.h \
Controllers/MSI3ZoneController/MSI3ZoneController.h \ Controllers/MSI3ZoneController/MSI3ZoneController.h \
Controllers/MSIRGBController/MSIRGBController.h \
Controllers/PatriotViperController/PatriotViperController.h \ Controllers/PatriotViperController/PatriotViperController.h \
Controllers/PolychromeController/PolychromeController.h \ Controllers/PolychromeController/PolychromeController.h \
Controllers/PoseidonZRGBController/PoseidonZRGBController.h \ Controllers/PoseidonZRGBController/PoseidonZRGBController.h \
Controllers/RGBFusionController/RGBFusionController.h \ Controllers/RGBFusionController/RGBFusionController.h \
Controllers/RGBFusion2Controller/RGBFusion2Controller.h \ Controllers/RGBFusion2Controller/RGBFusion2Controller.h \
Controllers/RGBFusionGPUController/RGBFusionGPUController.h \
Controllers/ThermaltakeRiingController/ThermaltakeRiingController.h \ Controllers/ThermaltakeRiingController/ThermaltakeRiingController.h \
RGBController/RGBController.h \ RGBController/RGBController.h \
RGBController/RGBController_AMDWraithPrism.h \ RGBController/RGBController_AMDWraithPrism.h \
RGBController/RGBController_Aura.h \ RGBController/RGBController_Aura.h \
RGBController/RGBController_AuraGPU.h \
RGBController/RGBController_Corsair.h \ RGBController/RGBController_Corsair.h \
RGBController/RGBController_CorsairCmdrPro.h \ RGBController/RGBController_CorsairCmdrPro.h \
RGBController/RGBController_CorsairNodePro.h \ RGBController/RGBController_CorsairNodePro.h \
RGBController/RGBController_CorsairPro.h \ RGBController/RGBController_CorsairPro.h \
RGBController/RGBController_Crucial.h \ RGBController/RGBController_Crucial.h \
RGBController/RGBController_Dummy.h \
RGBController/RGBController_E131.h \ RGBController/RGBController_E131.h \
RGBController/RGBController_Hue2.h \ RGBController/RGBController_Hue2.h \
RGBController/RGBController_HuePlus.h \ RGBController/RGBController_HuePlus.h \
@@ -161,11 +200,13 @@ HEADERS += \
RGBController/RGBController_HyperXKeyboard.h \ RGBController/RGBController_HyperXKeyboard.h \
RGBController/RGBController_LEDStrip.h \ RGBController/RGBController_LEDStrip.h \
RGBController/RGBController_MSI3Zone.h \ RGBController/RGBController_MSI3Zone.h \
RGBController/RGBController_MSIRGB.h \
RGBController/RGBController_PatriotViper.h \ RGBController/RGBController_PatriotViper.h \
RGBController/RGBController_Polychrome.h \ RGBController/RGBController_Polychrome.h \
RGBController/RGBController_PoseidonZRGB.h \ RGBController/RGBController_PoseidonZRGB.h \
RGBController/RGBController_RGBFusion.h \ RGBController/RGBController_RGBFusion.h \
RGBController/RGBController_RGBFusion2.h \ RGBController/RGBController_RGBFusion2.h \
RGBController/RGBController_RGBFusionGPU.h \
RGBController/RGBController_ThermaltakeRiing.h \ RGBController/RGBController_ThermaltakeRiing.h \
RESOURCES += \ RESOURCES += \
@@ -176,6 +217,8 @@ FORMS += \
qt/OpenRGBDevicePage.ui \ qt/OpenRGBDevicePage.ui \
qt/OpenRGBDialog.ui \ qt/OpenRGBDialog.ui \
qt/OpenRGBDialog2.ui \ qt/OpenRGBDialog2.ui \
qt/OpenRGBProfileSaveDialog.ui \
qt/OpenRGBSoftwareInfoPage.ui \
qt/OpenRGBSystemInfoPage.ui qt/OpenRGBSystemInfoPage.ui
#----------------------------------------------- #-----------------------------------------------
@@ -183,36 +226,47 @@ FORMS += \
#----------------------------------------------- #-----------------------------------------------
win32:INCLUDEPATH += \ win32:INCLUDEPATH += \
dependencies/inpout32_1501/Win32/ \ dependencies/inpout32_1501/Win32/ \
dependencies/razer-chroma-2.9.0/inc \
dependencies/libusb-1.0.22/include \ dependencies/libusb-1.0.22/include \
dependencies/hidapi \ dependencies/hidapi \
dependencies/NVFC \
dependencies/openrazer-win32 \
wmi/ \ wmi/ \
win32:SOURCES += \ win32:SOURCES += \
dependencies/NVFC/nvapi.cpp \
dependencies/hidapi/hid_win.c \
i2c_smbus/i2c_smbus_i801.cpp \ i2c_smbus/i2c_smbus_i801.cpp \
i2c_smbus/i2c_smbus_nct6775.cpp \ i2c_smbus/i2c_smbus_nct6775.cpp \
i2c_smbus/i2c_smbus_nvapi.cpp \
i2c_smbus/i2c_smbus_piix4.cpp \ i2c_smbus/i2c_smbus_piix4.cpp \
serial_port/find_usb_serial_port_win.cpp \ serial_port/find_usb_serial_port_win.cpp \
wmi/wmi.cpp \ wmi/wmi.cpp \
RGBController/AorusGPUDetect.cpp \ RGBController/OpenRazerWindowsDetect.cpp \
RGBController/RGBController_AorusGPU.cpp \ RGBController/RGBController_OpenRazerWindows.cpp \
RGBController/RazerChromaSDKDetect.cpp \
RGBController/RGBController_RazerChromaSDK.cpp \
win32:HEADERS += \ win32:HEADERS += \
dependencies/inpout32_1501/Win32/inpout32.h \ dependencies/inpout32_1501/Win32/inpout32.h \
dependencies/NVFC/nvapi.h \
i2c_smbus/i2c_smbus_i801.h \ i2c_smbus/i2c_smbus_i801.h \
i2c_smbus/i2c_smbus_nct6775.h \ i2c_smbus/i2c_smbus_nct6775.h \
i2c_smbus/i2c_smbus_nvapi.h \
i2c_smbus/i2c_smbus_piix4.h \ i2c_smbus/i2c_smbus_piix4.h \
wmi/wmi.h \ wmi/wmi.h \
RGBController/RGBController_AorusGPU.h \ RGBController/RGBController_OpenRazerWindows.h \
RGBController/RGBController_RazerChromaSDK.h \
win32:LIBS += \ win32:contains(QMAKE_TARGET.arch, x86_64) {
-lws2_32 \ LIBS += \
-L"$$PWD/dependencies/inpout32_1501/Win32/" -linpout32 \ -lws2_32 \
-L"$$PWD/dependencies/libusb-1.0.22/MS32/dll" -llibusb-1.0 \ -L"$$PWD/dependencies/inpout32_1501/x64/" -linpoutx64 \
-L"$$PWD/dependencies/hidapi-win/x86/" -lhidapi -L"$$PWD/dependencies/libusb-1.0.22/MS64/dll" -llibusb-1.0 \
}
win32:contains(QMAKE_TARGET.arch, x86) {
LIBS += \
-lws2_32 \
-L"$$PWD/dependencies/inpout32_1501/Win32/" -linpout32 \
-L"$$PWD/dependencies/libusb-1.0.22/MS32/dll" -llibusb-1.0 \
}
win32:DEFINES -= \ win32:DEFINES -= \
UNICODE UNICODE
@@ -224,10 +278,28 @@ win32:DEFINES += \
_WINSOCK_DEPRECATED_NO_WARNINGS \ _WINSOCK_DEPRECATED_NO_WARNINGS \
WIN32_LEAN_AND_MEAN WIN32_LEAN_AND_MEAN
# Copy OpenRazer.dll to output directory
win32:contains(QMAKE_TARGET.arch, x86_64) {
copydata.commands = $(COPY_FILE) \"$$shell_path($$PWD\\dependencies\\openrazer-win32\\OpenRazer64.dll)\" \"$$shell_path($$OUT_PWD)\"
first.depends = $(first) copydata
export(first.depends)
export(copydata.commands)
QMAKE_EXTRA_TARGETS += first copydata
}
win32:contains(QMAKE_TARGET.arch, x86) {
copydata.commands = $(COPY_FILE) \"$$shell_path($$PWD\\dependencies\\openrazer-win32\\OpenRazer.dll)\" \"$$shell_path($$OUT_PWD)\"
first.depends = $(first) copydata
export(first.depends)
export(copydata.commands)
QMAKE_EXTRA_TARGETS += first copydata
}
#----------------------------------------------- #-----------------------------------------------
# Linux specific project configuration # Linux specific project configuration
#----------------------------------------------- #-----------------------------------------------
unix:INCLUDEPATH += \ unix:INCLUDEPATH += \
dependencies/hidapi \
unix:HEADERS += \ unix:HEADERS += \
i2c_smbus/i2c_smbus_linux.h \ i2c_smbus/i2c_smbus_linux.h \
@@ -235,19 +307,10 @@ unix:HEADERS += \
unix:LIBS += \ unix:LIBS += \
-lusb-1.0 \ -lusb-1.0 \
-lstdc++fs \
packagesExist(hidapi-libusb){
unix:LIBS += -lhidapi-libusb
} else {
packagesExist(hidapi) {
unix:LIBS += -lhidapi
} else {
unix:LIBS += -lhidapi-libusb
}
}
unix:SOURCES += \ unix:SOURCES += \
dependencies/hidapi/hid_win.c \
i2c_smbus/i2c_smbus_linux.cpp \ i2c_smbus/i2c_smbus_linux.cpp \
serial_port/find_usb_serial_port_linux.cpp \ serial_port/find_usb_serial_port_linux.cpp \
RGBController/OpenRazerDetect.cpp \ RGBController/OpenRazerDetect.cpp \
-21
View File
@@ -1,21 +0,0 @@
#include "RGBController.h"
#include "RGBController_AorusGPU.h"
#include <vector>
#include <stdio.h>
#include <stdlib.h>
/******************************************************************************************\
* *
* DetectAorusGPUControllers *
* *
* Detect devices supported by the Aorus GPU driver *
* * *
\******************************************************************************************/
void DetectAorusGPUControllers(std::vector<RGBController*> &rgb_controllers)
{
RGBController_AorusGPU * aorus_rgb = new RGBController_AorusGPU();
rgb_controllers.push_back(aorus_rgb);
} /* DetectLEDStripControllers() */
+2 -2
View File
@@ -58,7 +58,7 @@ void DetectOpenRazerControllers(std::vector<RGBController*> &rgb_controllers)
break; break;
case 7: case 7:
strcpy(driver_path, "/sys/bus/hid/drivers/razerchromahdk/"); strcpy(driver_path, "/sys/bus/hid/drivers/razeraccessory/");
break; break;
} }
@@ -102,7 +102,7 @@ void DetectOpenRazerControllers(std::vector<RGBController*> &rgb_controllers)
RGBController_OpenRazer * razer_rgb = new RGBController_OpenRazer(device_string); RGBController_OpenRazer * razer_rgb = new RGBController_OpenRazer(device_string);
if(razer_rgb->device != -1) if(razer_rgb->device_index != -1)
{ {
rgb_controllers.push_back(razer_rgb); rgb_controllers.push_back(razer_rgb);
} }
File diff suppressed because it is too large Load Diff
+387
View File
@@ -0,0 +1,387 @@
#include "RGBController.h"
#include "RGBController_OpenRazerWindows.h"
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/hid.h>
#ifdef _WIN64
#define OPENRAZERDLL "OpenRazer64.dll"
#elif WIN32
#define OPENRAZERDLL "OpenRazer.dll"
#endif
/******************************************************************************************\
* *
* DetectOpenRazerControllers *
* *
* Detect devices supported by the OpenRazer kernel drivers *
* *
\******************************************************************************************/
void DetectOpenRazerControllers(std::vector<RGBController*> &rgb_controllers)
{
static HMODULE module = LoadLibrary(OPENRAZERDLL);
if(module == nullptr)
{
return;
}
// map DLL calls
typedef unsigned int(*INITRAZERDRIVER)(struct hid_device** hdev);
INITRAZERDRIVER init_razer_kbd_driver = reinterpret_cast<INITRAZERDRIVER>(GetProcAddress(module, "init_razer_kbd_driver"));
static struct device_attribute devkbd_attr_device_type = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkbd_attr_device_type"));
static struct device_attribute devkbd_attr_device_serial = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkbd_attr_device_serial"));
static struct device_attribute devkbd_attr_firmware_version = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkbd_attr_firmware_version"));
static struct device_attribute devkbd_attr_matrix_effect_custom = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkbd_attr_matrix_effect_custom"));
static struct device_attribute devkbd_attr_matrix_custom_frame = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkbd_attr_matrix_custom_frame"));
static struct device_attribute devkbd_attr_matrix_brightness = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkbd_attr_matrix_brightness"));
static struct device_attribute devkbd_attr_matrix_effect_none = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkbd_attr_matrix_effect_none"));
static struct device_attribute devkbd_attr_matrix_effect_static = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkbd_attr_matrix_effect_static"));
static struct device_attribute devkbd_attr_matrix_effect_breath = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkbd_attr_matrix_effect_breath"));
static struct device_attribute devkbd_attr_matrix_effect_spectrum = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkbd_attr_matrix_effect_spectrum"));
static struct device_attribute devkbd_attr_matrix_effect_reactive = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkbd_attr_matrix_effect_reactive"));
static struct device_attribute devkbd_attr_matrix_effect_wave = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkbd_attr_matrix_effect_wave"));
INITRAZERDRIVER init_razer_mousemat_driver = reinterpret_cast<INITRAZERDRIVER>(GetProcAddress(module, "init_razer_mousemat_driver"));
static struct device_attribute devmousemat_attr_device_type = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmousemat_attr_device_type"));
static struct device_attribute devmousemat_attr_device_serial = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmousemat_attr_device_serial"));
static struct device_attribute devmousemat_attr_firmware_version = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmousemat_attr_firmware_version"));
static struct device_attribute devmousemat_attr_matrix_effect_custom = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmousemat_attr_matrix_effect_custom"));
static struct device_attribute devmousemat_attr_matrix_custom_frame = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmousemat_attr_matrix_custom_frame"));
static struct device_attribute devmousemat_attr_matrix_brightness = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmousemat_attr_matrix_brightness"));
static struct device_attribute devmousemat_attr_matrix_effect_none = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmousemat_attr_matrix_effect_none"));
static struct device_attribute devmousemat_attr_matrix_effect_static = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmousemat_attr_matrix_effect_static"));
static struct device_attribute devmousemat_attr_matrix_effect_breath = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmousemat_attr_matrix_effect_breath"));
static struct device_attribute devmousemat_attr_matrix_effect_spectrum = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmousemat_attr_matrix_effect_spectrum"));
static struct device_attribute devmousemat_attr_matrix_effect_reactive = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmousemat_attr_matrix_effect_reactive"));
static struct device_attribute devmousemat_attr_matrix_effect_wave = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmousemat_attr_matrix_effect_wave"));
INITRAZERDRIVER init_razer_mouse_driver = reinterpret_cast<INITRAZERDRIVER>(GetProcAddress(module, "init_razer_mouse_driver"));
static struct device_attribute devmouse_attr_device_type = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_device_type"));
static struct device_attribute devmouse_attr_device_serial = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_device_serial"));
static struct device_attribute devmouse_attr_firmware_version = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_firmware_version"));
static struct device_attribute devmouse_attr_matrix_effect_custom = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_matrix_effect_custom"));
static struct device_attribute devmouse_attr_matrix_custom_frame = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_matrix_custom_frame"));
static struct device_attribute devmouse_attr_matrix_brightness = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_matrix_brightness"));
static struct device_attribute devmouse_attr_logo_led_brightness = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_logo_led_brightness"));
static struct device_attribute devmouse_attr_scroll_led_brightness = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_scroll_led_brightness"));
static struct device_attribute devmouse_attr_matrix_effect_none = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_matrix_effect_none"));
static struct device_attribute devmouse_attr_logo_matrix_effect_none = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_logo_matrix_effect_none"));
static struct device_attribute devmouse_attr_scroll_matrix_effect_none = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_scroll_matrix_effect_none"));
static struct device_attribute devmouse_attr_matrix_effect_static = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_matrix_effect_static"));
static struct device_attribute devmouse_attr_logo_matrix_effect_static = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_logo_matrix_effect_static"));
static struct device_attribute devmouse_attr_scroll_matrix_effect_static = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_scroll_matrix_effect_static"));
static struct device_attribute devmouse_attr_matrix_effect_breath = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_matrix_effect_breath"));
static struct device_attribute devmouse_attr_matrix_effect_spectrum = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_matrix_effect_spectrum"));
static struct device_attribute devmouse_attr_logo_matrix_effect_spectrum = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_logo_matrix_effect_spectrum"));
static struct device_attribute devmouse_attr_scroll_matrix_effect_spectrum = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_scroll_matrix_effect_spectrum"));
static struct device_attribute devmouse_attr_matrix_effect_reactive = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_matrix_effect_reactive"));
static struct device_attribute devmouse_attr_logo_matrix_effect_reactive = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_logo_matrix_effect_reactive"));
static struct device_attribute devmouse_attr_scroll_matrix_effect_reactive = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_scroll_matrix_effect_reactive"));
static struct device_attribute devmouse_attr_scroll_led_effect = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_scroll_led_effect"));
static struct device_attribute devmouse_attr_scroll_led_rgb = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_scroll_led_rgb"));
static struct device_attribute devmouse_attr_scroll_led_state = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_scroll_led_state"));
static struct device_attribute devmouse_attr_matrix_effect_wave = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devmouse_attr_matrix_effect_wave"));
INITRAZERDRIVER init_razer_accessory_driver = reinterpret_cast<INITRAZERDRIVER>(GetProcAddress(module, "init_razer_accessory_driver"));
static struct device_attribute devaccessory_attr_device_type = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devaccessory_attr_device_type"));
static struct device_attribute devaccessory_attr_device_serial = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devaccessory_attr_device_serial"));
static struct device_attribute devaccessory_attr_firmware_version = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devaccessory_attr_firmware_version"));
static struct device_attribute devaccessory_attr_matrix_effect_custom = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devaccessory_attr_matrix_effect_custom"));
static struct device_attribute devaccessory_attr_matrix_custom_frame = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devaccessory_attr_matrix_custom_frame"));
static struct device_attribute devaccessory_attr_matrix_brightness = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devaccessory_attr_matrix_brightness"));
static struct device_attribute devaccessory_attr_matrix_effect_none = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devaccessory_attr_matrix_effect_none"));
static struct device_attribute devaccessory_attr_matrix_effect_static = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devaccessory_attr_matrix_effect_static"));
static struct device_attribute devaccessory_attr_matrix_effect_breath = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devaccessory_attr_matrix_effect_breath"));
static struct device_attribute devaccessory_attr_matrix_effect_spectrum = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devaccessory_attr_matrix_effect_spectrum"));
//static struct device_attribute devaccessory_attr_matrix_effect_reactive = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devaccessory_attr_matrix_effect_reactive"));
static struct device_attribute devaccessory_attr_matrix_effect_wave = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devaccessory_attr_matrix_effect_wave"));
INITRAZERDRIVER init_razer_kraken_driver = reinterpret_cast<INITRAZERDRIVER>(GetProcAddress(module, "init_razer_kraken_driver"));
static struct device_attribute devkraken_attr_device_type = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkraken_attr_device_type"));
static struct device_attribute devkraken_attr_device_serial = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkraken_attr_device_serial"));
static struct device_attribute devkraken_attr_firmware_version = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkraken_attr_firmware_version"));
static struct device_attribute devkraken_attr_matrix_effect_custom = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkraken_attr_matrix_effect_custom"));
//static struct device_attribute devkraken_attr_matrix_custom_frame = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkraken_attr_matrix_custom_frame"));
//static struct device_attribute devkraken_attr_matrix_brightness = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkraken_attr_matrix_brightness"));
static struct device_attribute devkraken_attr_matrix_effect_none = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkraken_attr_matrix_effect_none"));
static struct device_attribute devkraken_attr_matrix_effect_static = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkraken_attr_matrix_effect_static"));
static struct device_attribute devkraken_attr_matrix_effect_breath = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkraken_attr_matrix_effect_breath"));
static struct device_attribute devkraken_attr_matrix_effect_spectrum = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devkraken_attr_matrix_effect_spectrum"));
INITRAZERDRIVER init_razer_core_driver = reinterpret_cast<INITRAZERDRIVER>(GetProcAddress(module, "init_razer_core_driver"));
static struct device_attribute devcore_attr_device_type = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devcore_attr_device_type"));
static struct device_attribute devcore_attr_device_serial = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devcore_attr_device_serial"));
static struct device_attribute devcore_attr_firmware_version = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devcore_attr_firmware_version"));
static struct device_attribute devcore_attr_matrix_effect_custom = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devcore_attr_matrix_effect_custom"));
static struct device_attribute devcore_attr_matrix_custom_frame = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devcore_attr_matrix_custom_frame"));
static struct device_attribute devcore_attr_matrix_brightness = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devcore_attr_matrix_brightness"));
static struct device_attribute devcore_attr_matrix_effect_none = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devcore_attr_matrix_effect_none"));
static struct device_attribute devcore_attr_matrix_effect_static = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devcore_attr_matrix_effect_static"));
static struct device_attribute devcore_attr_matrix_effect_breath = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devcore_attr_matrix_effect_breath"));
static struct device_attribute devcore_attr_matrix_effect_spectrum = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devcore_attr_matrix_effect_spectrum"));
static struct device_attribute devcore_attr_matrix_effect_reactive = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devcore_attr_matrix_effect_reactive"));
static struct device_attribute devcore_attr_matrix_effect_wave = *(struct device_attribute*)reinterpret_cast<void*>(GetProcAddress(module, "devcore_attr_matrix_effect_wave"));
struct hid_device* hdev;
unsigned int num;
hdev = NULL;
num = init_razer_kbd_driver(&hdev);
for (unsigned int i = 0; i < num; i++)
{
device_fn_type* device_fn = new device_fn_type;
device_fn->device_type = &devkbd_attr_device_type;
device_fn->device_serial = &devkbd_attr_device_serial;
device_fn->firmware_version = &devkbd_attr_firmware_version;
device_fn->matrix_effect_custom = &devkbd_attr_matrix_effect_custom;
device_fn->matrix_custom_frame = &devkbd_attr_matrix_custom_frame;
device_fn->matrix_brightness = &devkbd_attr_matrix_brightness;
device_fn->matrix_effect_none = &devkbd_attr_matrix_effect_none;
device_fn->matrix_effect_static = &devkbd_attr_matrix_effect_static;
device_fn->matrix_effect_breath = &devkbd_attr_matrix_effect_breath;
device_fn->matrix_effect_spectrum = &devkbd_attr_matrix_effect_spectrum;
device_fn->matrix_effect_reactive = &devkbd_attr_matrix_effect_reactive;
device_fn->matrix_effect_wave = &devkbd_attr_matrix_effect_wave;
device_fn->logo_led_brightness = NULL;
device_fn->logo_matrix_effect_none = NULL;
device_fn->logo_matrix_effect_static = NULL;
device_fn->logo_matrix_effect_spectrum = NULL;
device_fn->logo_matrix_effect_reactive = NULL;
device_fn->scroll_led_brightness = NULL;
device_fn->scroll_matrix_effect_none = NULL;
device_fn->scroll_matrix_effect_static = NULL;
device_fn->scroll_matrix_effect_spectrum = NULL;
device_fn->scroll_matrix_effect_reactive = NULL;
device_fn->scroll_led_effect = NULL;
device_fn->scroll_led_rgb = NULL;
RGBController_OpenRazer * razer_rgb = new RGBController_OpenRazer(&hdev[i].dev, device_fn);
if(razer_rgb->device_index != -1)
{
rgb_controllers.push_back(razer_rgb);
}
else
{
delete razer_rgb;
}
}
hdev = NULL;
num = init_razer_mouse_driver(&hdev);
for (unsigned int i = 0; i < num; i++)
{
device_fn_type* device_fn = new device_fn_type;
device_fn->device_type = &devmouse_attr_device_type;
device_fn->device_serial = &devmouse_attr_device_serial;
device_fn->firmware_version = &devmouse_attr_firmware_version;
device_fn->matrix_effect_custom = &devmouse_attr_matrix_effect_custom;
device_fn->matrix_custom_frame = &devmouse_attr_matrix_custom_frame;
device_fn->matrix_brightness = &devmouse_attr_matrix_brightness;
device_fn->matrix_effect_none = &devmouse_attr_matrix_effect_none;
device_fn->matrix_effect_static = &devmouse_attr_matrix_effect_static;
device_fn->matrix_effect_breath = &devmouse_attr_matrix_effect_breath;
device_fn->matrix_effect_spectrum = &devmouse_attr_matrix_effect_spectrum;
device_fn->matrix_effect_reactive = &devmouse_attr_matrix_effect_reactive;
device_fn->matrix_effect_wave = &devmouse_attr_matrix_effect_wave;
device_fn->logo_led_brightness = NULL;
device_fn->logo_matrix_effect_none = NULL;
device_fn->logo_matrix_effect_static = NULL;
device_fn->logo_matrix_effect_spectrum = NULL;
device_fn->logo_matrix_effect_reactive = NULL;
device_fn->scroll_led_brightness = NULL;
device_fn->scroll_matrix_effect_none = NULL;
device_fn->scroll_matrix_effect_static = NULL;
device_fn->scroll_matrix_effect_spectrum = NULL;
device_fn->scroll_matrix_effect_reactive = NULL;
device_fn->scroll_led_effect = NULL;
device_fn->scroll_led_rgb = NULL;
RGBController_OpenRazer * razer_rgb = new RGBController_OpenRazer(&hdev[i].dev, device_fn);
if(razer_rgb->device_index != -1)
{
rgb_controllers.push_back(razer_rgb);
}
else
{
delete razer_rgb;
}
}
hdev = NULL;
num = init_razer_mousemat_driver(&hdev);
for (unsigned int i = 0; i < num; i++)
{
device_fn_type* device_fn = new device_fn_type;
device_fn->device_type = &devmousemat_attr_device_type;
device_fn->device_serial = &devmousemat_attr_device_serial;
device_fn->firmware_version = &devmousemat_attr_firmware_version;
device_fn->matrix_effect_custom = &devmousemat_attr_matrix_effect_custom;
device_fn->matrix_custom_frame = &devmousemat_attr_matrix_custom_frame;
device_fn->matrix_brightness = &devmousemat_attr_matrix_brightness;
device_fn->matrix_effect_none = &devmousemat_attr_matrix_effect_none;
device_fn->matrix_effect_static = &devmousemat_attr_matrix_effect_static;
device_fn->matrix_effect_breath = &devmousemat_attr_matrix_effect_breath;
device_fn->matrix_effect_spectrum = &devmousemat_attr_matrix_effect_spectrum;
device_fn->matrix_effect_reactive = &devmousemat_attr_matrix_effect_reactive;
device_fn->matrix_effect_wave = &devmousemat_attr_matrix_effect_wave;
device_fn->logo_led_brightness = NULL;
device_fn->logo_matrix_effect_none = NULL;
device_fn->logo_matrix_effect_static = NULL;
device_fn->logo_matrix_effect_spectrum = NULL;
device_fn->logo_matrix_effect_reactive = NULL;
device_fn->scroll_led_brightness = NULL;
device_fn->scroll_matrix_effect_none = NULL;
device_fn->scroll_matrix_effect_static = NULL;
device_fn->scroll_matrix_effect_spectrum = NULL;
device_fn->scroll_matrix_effect_reactive = NULL;
device_fn->scroll_led_effect = NULL;
device_fn->scroll_led_rgb = NULL;
RGBController_OpenRazer * razer_rgb = new RGBController_OpenRazer(&hdev[i].dev, device_fn);
if(razer_rgb->device_index != -1)
{
rgb_controllers.push_back(razer_rgb);
}
else
{
delete razer_rgb;
}
}
hdev = NULL;
num = init_razer_accessory_driver(&hdev);
for (unsigned int i = 0; i < num; i++)
{
device_fn_type* device_fn = new device_fn_type;
device_fn->device_type = &devaccessory_attr_device_type;
device_fn->device_serial = &devaccessory_attr_device_serial;
device_fn->firmware_version = &devaccessory_attr_firmware_version;
device_fn->matrix_effect_custom = &devaccessory_attr_matrix_effect_custom;
device_fn->matrix_custom_frame = &devaccessory_attr_matrix_custom_frame;
device_fn->matrix_brightness = &devaccessory_attr_matrix_brightness;
device_fn->matrix_effect_none = &devaccessory_attr_matrix_effect_none;
device_fn->matrix_effect_static = &devaccessory_attr_matrix_effect_static;
device_fn->matrix_effect_breath = &devaccessory_attr_matrix_effect_breath;
device_fn->matrix_effect_spectrum = &devaccessory_attr_matrix_effect_spectrum;
device_fn->matrix_effect_reactive = NULL;//&devaccessory_attr_matrix_effect_reactive;
device_fn->matrix_effect_wave = &devaccessory_attr_matrix_effect_wave;
device_fn->logo_led_brightness = NULL;
device_fn->logo_matrix_effect_none = NULL;
device_fn->logo_matrix_effect_static = NULL;
device_fn->logo_matrix_effect_spectrum = NULL;
device_fn->logo_matrix_effect_reactive = NULL;
device_fn->scroll_led_brightness = NULL;
device_fn->scroll_matrix_effect_none = NULL;
device_fn->scroll_matrix_effect_static = NULL;
device_fn->scroll_matrix_effect_spectrum = NULL;
device_fn->scroll_matrix_effect_reactive = NULL;
device_fn->scroll_led_effect = NULL;
device_fn->scroll_led_rgb = NULL;
RGBController_OpenRazer * razer_rgb = new RGBController_OpenRazer(&hdev[i].dev, device_fn);
if(razer_rgb->device_index != -1)
{
rgb_controllers.push_back(razer_rgb);
}
else
{
delete razer_rgb;
}
}
hdev = NULL;
num = init_razer_kraken_driver(&hdev);
for (unsigned int i = 0; i < num; i++)
{
device_fn_type* device_fn = new device_fn_type;
device_fn->device_type = &devkraken_attr_device_type;
device_fn->device_serial = &devkraken_attr_device_serial;
device_fn->firmware_version = &devkraken_attr_firmware_version;
device_fn->matrix_effect_custom = &devkraken_attr_matrix_effect_custom;
device_fn->matrix_custom_frame = NULL;//&devkraken_attr_matrix_custom_frame;
device_fn->matrix_brightness = NULL;//&devkraken_attr_matrix_brightness;
device_fn->matrix_effect_none = &devkraken_attr_matrix_effect_none;
device_fn->matrix_effect_static = &devkraken_attr_matrix_effect_static;
device_fn->matrix_effect_breath = &devkraken_attr_matrix_effect_breath;
device_fn->matrix_effect_spectrum = &devkraken_attr_matrix_effect_spectrum;
device_fn->matrix_effect_reactive = NULL;//&devkraken_attr_matrix_effect_reactive;
device_fn->matrix_effect_wave = NULL;//&devkraken_attr_matrix_effect_wave;
device_fn->logo_led_brightness = NULL;
device_fn->logo_matrix_effect_none = NULL;
device_fn->logo_matrix_effect_static = NULL;
device_fn->logo_matrix_effect_spectrum = NULL;
device_fn->logo_matrix_effect_reactive = NULL;
device_fn->scroll_led_brightness = NULL;
device_fn->scroll_matrix_effect_none = NULL;
device_fn->scroll_matrix_effect_static = NULL;
device_fn->scroll_matrix_effect_spectrum = NULL;
device_fn->scroll_matrix_effect_reactive = NULL;
device_fn->scroll_led_effect = NULL;
device_fn->scroll_led_rgb = NULL;
RGBController_OpenRazer * razer_rgb = new RGBController_OpenRazer(&hdev[i].dev, device_fn);
if(razer_rgb->device_index != -1)
{
rgb_controllers.push_back(razer_rgb);
}
else
{
delete razer_rgb;
}
}
hdev = NULL;
num = init_razer_core_driver(&hdev);
for (unsigned int i = 0; i < num; i++)
{
device_fn_type* device_fn = new device_fn_type;
device_fn->device_type = &devcore_attr_device_type;
device_fn->device_serial = &devcore_attr_device_serial;
device_fn->firmware_version = &devcore_attr_firmware_version;
device_fn->matrix_effect_custom = &devcore_attr_matrix_effect_custom;
device_fn->matrix_custom_frame = &devcore_attr_matrix_custom_frame;
device_fn->matrix_brightness = &devcore_attr_matrix_brightness;
device_fn->matrix_effect_none = &devcore_attr_matrix_effect_none;
device_fn->matrix_effect_static = &devcore_attr_matrix_effect_static;
device_fn->matrix_effect_breath = &devcore_attr_matrix_effect_breath;
device_fn->matrix_effect_spectrum = &devcore_attr_matrix_effect_spectrum;
device_fn->matrix_effect_reactive = &devcore_attr_matrix_effect_reactive;
device_fn->matrix_effect_wave = &devcore_attr_matrix_effect_wave;
device_fn->logo_led_brightness = NULL;
device_fn->logo_matrix_effect_none = NULL;
device_fn->logo_matrix_effect_static = NULL;
device_fn->logo_matrix_effect_spectrum = NULL;
device_fn->logo_matrix_effect_reactive = NULL;
device_fn->scroll_led_brightness = NULL;
device_fn->scroll_matrix_effect_none = NULL;
device_fn->scroll_matrix_effect_static = NULL;
device_fn->scroll_matrix_effect_spectrum = NULL;
device_fn->scroll_matrix_effect_reactive = NULL;
device_fn->scroll_led_effect = NULL;
device_fn->scroll_led_rgb = NULL;
RGBController_OpenRazer * razer_rgb = new RGBController_OpenRazer(&hdev[i].dev, device_fn);
if(razer_rgb->device_index != -1)
{
rgb_controllers.push_back(razer_rgb);
}
else
{
delete razer_rgb;
}
}
} /* DetectOpenRazerControllers() */
+684 -1
View File
@@ -1,4 +1,660 @@
#include "RGBController.h" #include "RGBController.h"
#include <cstring>
unsigned char * RGBController::GetDeviceDescription()
{
unsigned int data_ptr = 0;
unsigned int data_size = 0;
/*---------------------------------------------------------*\
| Calculate data size |
\*---------------------------------------------------------*/
unsigned short name_len = strlen(name.c_str()) + 1;
unsigned short description_len = strlen(description.c_str()) + 1;
unsigned short version_len = strlen(version.c_str()) + 1;
unsigned short serial_len = strlen(serial.c_str()) + 1;
unsigned short location_len = strlen(location.c_str()) + 1;
unsigned short num_modes = modes.size();
unsigned short num_zones = zones.size();
unsigned short num_leds = leds.size();
unsigned short num_colors = colors.size();
unsigned short *mode_name_len = new unsigned short[num_modes];
unsigned short *zone_name_len = new unsigned short[num_zones];
unsigned short *led_name_len = new unsigned short[num_leds];
unsigned short *mode_num_colors = new unsigned short[num_modes];
unsigned short *zone_map_rows = new unsigned short[num_zones];
data_size += sizeof(data_size);
data_size += sizeof(device_type);
data_size += name_len + sizeof(name_len);
data_size += description_len + sizeof(description_len);
data_size += version_len + sizeof(version_len);
data_size += serial_len + sizeof(serial_len);
data_size += location_len + sizeof(location_len);
data_size += sizeof(num_modes);
data_size += sizeof(active_mode);
for(int mode_index = 0; mode_index < num_modes; mode_index++)
{
mode_name_len[mode_index] = strlen(modes[mode_index].name.c_str()) + 1;
mode_num_colors[mode_index] = modes[mode_index].colors.size();
data_size += mode_name_len[mode_index] + sizeof(mode_name_len[mode_index]);
data_size += sizeof(modes[mode_index].value);
data_size += sizeof(modes[mode_index].flags);
data_size += sizeof(modes[mode_index].speed_min);
data_size += sizeof(modes[mode_index].speed_max);
data_size += sizeof(modes[mode_index].colors_min);
data_size += sizeof(modes[mode_index].colors_max);
data_size += sizeof(modes[mode_index].speed);
data_size += sizeof(modes[mode_index].direction);
data_size += sizeof(modes[mode_index].color_mode);
data_size += sizeof(mode_num_colors[mode_index]);
data_size += (mode_num_colors[mode_index] * sizeof(RGBColor));
}
data_size += sizeof(num_zones);
for(int zone_index = 0; zone_index < num_zones; zone_index++)
{
zone_name_len[zone_index] = strlen(zones[zone_index].name.c_str()) + 1;
zone_map_rows[zone_index] = zones[zone_index].map.size();
data_size += zone_name_len[zone_index] + sizeof(zone_name_len[zone_index]);
data_size += sizeof(zones[zone_index].type);
data_size += sizeof(zone_map_rows[zone_index]);
for(int row_index = 0; row_index < zone_map_rows[zone_index]; row_index++)
{
data_size += sizeof(unsigned short);
for(int row_led_index = 0; row_led_index < zones[zone_index].map[row_index].size(); row_led_index++)
{
data_size += sizeof(int);
}
}
}
data_size += sizeof(num_leds);
for(int led_index = 0; led_index < num_leds; led_index++)
{
led_name_len[led_index] = strlen(leds[led_index].name.c_str()) + 1;
data_size += led_name_len[led_index] + sizeof(led_name_len[led_index]);
}
data_size += sizeof(num_colors);
data_size += num_colors * sizeof(RGBColor);
/*---------------------------------------------------------*\
| Create data buffer |
\*---------------------------------------------------------*/
unsigned char *data_buf = new unsigned char[data_size];
/*---------------------------------------------------------*\
| Copy in data size |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &data_size, sizeof(data_size));
data_ptr += sizeof(data_size);
/*---------------------------------------------------------*\
| Copy in type |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &type, sizeof(device_type));
data_ptr += sizeof(device_type);
/*---------------------------------------------------------*\
| Copy in name (size+data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &name_len, sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
strcpy((char *)&data_buf[data_ptr], name.c_str());
data_ptr += name_len;
/*---------------------------------------------------------*\
| Copy in description (size+data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &description_len, sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
strcpy((char *)&data_buf[data_ptr], description.c_str());
data_ptr += description_len;
/*---------------------------------------------------------*\
| Copy in version (size+data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &version_len, sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
strcpy((char *)&data_buf[data_ptr], version.c_str());
data_ptr += version_len;
/*---------------------------------------------------------*\
| Copy in serial (size+data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &serial_len, sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
strcpy((char *)&data_buf[data_ptr], serial.c_str());
data_ptr += serial_len;
/*---------------------------------------------------------*\
| Copy in location (size+data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &location_len, sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
strcpy((char *)&data_buf[data_ptr], location.c_str());
data_ptr += location_len;
/*---------------------------------------------------------*\
| Copy in number of modes (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &num_modes, sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in active mode (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &active_mode, sizeof(active_mode));
data_ptr += sizeof(active_mode);
/*---------------------------------------------------------*\
| Copy in modes |
\*---------------------------------------------------------*/
for(int mode_index = 0; mode_index < num_modes; mode_index++)
{
/*---------------------------------------------------------*\
| Copy in mode name (size+data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &mode_name_len[mode_index], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
strcpy((char *)&data_buf[data_ptr], modes[mode_index].name.c_str());
data_ptr += mode_name_len[mode_index];
/*---------------------------------------------------------*\
| Copy in mode value (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &modes[mode_index].value, sizeof(modes[mode_index].value));
data_ptr += sizeof(modes[mode_index].value);
/*---------------------------------------------------------*\
| Copy in mode flags (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &modes[mode_index].flags, sizeof(modes[mode_index].flags));
data_ptr += sizeof(modes[mode_index].flags);
/*---------------------------------------------------------*\
| Copy in mode speed_min (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &modes[mode_index].speed_min, sizeof(modes[mode_index].speed_min));
data_ptr += sizeof(modes[mode_index].speed_min);
/*---------------------------------------------------------*\
| Copy in mode speed_max (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &modes[mode_index].speed_max, sizeof(modes[mode_index].speed_max));
data_ptr += sizeof(modes[mode_index].speed_max);
/*---------------------------------------------------------*\
| Copy in mode colors_min (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &modes[mode_index].colors_min, sizeof(modes[mode_index].colors_min));
data_ptr += sizeof(modes[mode_index].colors_min);
/*---------------------------------------------------------*\
| Copy in mode colors_max (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &modes[mode_index].colors_max, sizeof(modes[mode_index].colors_max));
data_ptr += sizeof(modes[mode_index].colors_max);
/*---------------------------------------------------------*\
| Copy in mode speed (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &modes[mode_index].speed, sizeof(modes[mode_index].speed));
data_ptr += sizeof(modes[mode_index].speed);
/*---------------------------------------------------------*\
| Copy in mode direction (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &modes[mode_index].direction, sizeof(modes[mode_index].direction));
data_ptr += sizeof(modes[mode_index].direction);
/*---------------------------------------------------------*\
| Copy in mode color_mode (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &modes[mode_index].color_mode, sizeof(modes[mode_index].color_mode));
data_ptr += sizeof(modes[mode_index].color_mode);
/*---------------------------------------------------------*\
| Copy in mode number of colors |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &mode_num_colors[mode_index], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in mode mode colors |
\*---------------------------------------------------------*/
for(int color_index = 0; color_index < mode_num_colors[mode_index]; color_index++)
{
/*---------------------------------------------------------*\
| Copy in color (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &modes[mode_index].colors[color_index], sizeof(modes[mode_index].colors[color_index]));
data_ptr += sizeof(modes[mode_index].colors[color_index]);
}
}
/*---------------------------------------------------------*\
| Copy in number of zones (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &num_zones, sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in zones |
\*---------------------------------------------------------*/
for(int zone_index = 0; zone_index < num_zones; zone_index++)
{
/*---------------------------------------------------------*\
| Copy in zone name (size+data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &zone_name_len[zone_index], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
strcpy((char *)&data_buf[data_ptr], zones[zone_index].name.c_str());
data_ptr += zone_name_len[zone_index];
/*---------------------------------------------------------*\
| Copy in zone type (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &zones[zone_index].type, sizeof(zones[zone_index].type));
data_ptr += sizeof(zones[zone_index].type);
/*---------------------------------------------------------*\
| Copy in zone map number of rows |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &zone_map_rows[zone_index], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in rows |
\*---------------------------------------------------------*/
for(int row_index = 0; row_index < zone_map_rows[zone_index]; row_index++)
{
/*---------------------------------------------------------*\
| Copy row size |
\*---------------------------------------------------------*/
unsigned short zone_map_row_size = zones[zone_index].map[row_index].size();
memcpy(&data_buf[data_ptr], &zone_map_row_size, sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in row LEDs |
\*---------------------------------------------------------*/
for(int row_led_index = 0; row_led_index < zone_map_row_size; row_led_index++)
{
/*---------------------------------------------------------*\
| Copy row size |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &zones[zone_index].map[row_index][row_led_index], sizeof(zones[zone_index].map[row_index][row_led_index]));
data_ptr += sizeof(zones[zone_index].map[row_index][row_led_index]);
}
}
}
/*---------------------------------------------------------*\
| Copy in number of LEDs (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &num_leds, sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in LEDs |
\*---------------------------------------------------------*/
for(int led_index = 0; led_index < num_leds; led_index++)
{
/*---------------------------------------------------------*\
| Copy in LED name (size+data) |
\*---------------------------------------------------------*/
unsigned short ledname_len = strlen(leds[led_index].name.c_str()) + 1;
memcpy(&data_buf[data_ptr], &ledname_len, sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
strcpy((char *)&data_buf[data_ptr], leds[led_index].name.c_str());
data_ptr += ledname_len;
}
/*---------------------------------------------------------*\
| Copy in number of colors (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &num_colors, sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in colors |
\*---------------------------------------------------------*/
for(int color_index = 0; color_index < num_colors; color_index++)
{
/*---------------------------------------------------------*\
| Copy in color (data) |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &colors[color_index], sizeof(colors[color_index]));
data_ptr += sizeof(colors[color_index]);
}
delete[] mode_name_len;
delete[] zone_name_len;
delete[] led_name_len;
delete[] mode_num_colors;
delete[] zone_map_rows;
return(data_buf);
}
void RGBController::ReadDeviceDescription(unsigned char* data_buf)
{
unsigned int data_ptr = 0;
data_ptr += sizeof(unsigned int);
/*---------------------------------------------------------*\
| Copy in type |
\*---------------------------------------------------------*/
memcpy(&type, &data_buf[data_ptr], sizeof(device_type));
data_ptr += sizeof(device_type);
/*---------------------------------------------------------*\
| Copy in name |
\*---------------------------------------------------------*/
unsigned short name_len;
memcpy(&name_len, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
name = (char *)&data_buf[data_ptr];
data_ptr += name_len;
/*---------------------------------------------------------*\
| Copy in description |
\*---------------------------------------------------------*/
unsigned short description_len;
memcpy(&description_len, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
description = (char *)&data_buf[data_ptr];
data_ptr += description_len;
/*---------------------------------------------------------*\
| Copy in version |
\*---------------------------------------------------------*/
unsigned short version_len;
memcpy(&version_len, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
version = (char *)&data_buf[data_ptr];
data_ptr += version_len;
/*---------------------------------------------------------*\
| Copy in serial |
\*---------------------------------------------------------*/
unsigned short serial_len;
memcpy(&serial_len, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
serial = (char *)&data_buf[data_ptr];
data_ptr += serial_len;
/*---------------------------------------------------------*\
| Copy in location |
\*---------------------------------------------------------*/
unsigned short location_len;
memcpy(&location_len, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
location = (char *)&data_buf[data_ptr];
data_ptr += location_len;
/*---------------------------------------------------------*\
| Copy in number of modes (data) |
\*---------------------------------------------------------*/
unsigned short num_modes;
memcpy(&num_modes, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in active mode (data) |
\*---------------------------------------------------------*/
memcpy(&active_mode, &data_buf[data_ptr], sizeof(active_mode));
data_ptr += sizeof(active_mode);
/*---------------------------------------------------------*\
| Copy in modes |
\*---------------------------------------------------------*/
for(int mode_index = 0; mode_index < num_modes; mode_index++)
{
mode new_mode;
/*---------------------------------------------------------*\
| Copy in mode name (size+data) |
\*---------------------------------------------------------*/
unsigned short modename_len;
memcpy(&modename_len, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
new_mode.name = (char *)&data_buf[data_ptr];
data_ptr += modename_len;
/*---------------------------------------------------------*\
| Copy in mode value (data) |
\*---------------------------------------------------------*/
memcpy(&new_mode.value, &data_buf[data_ptr], sizeof(new_mode.value));
data_ptr += sizeof(new_mode.value);
/*---------------------------------------------------------*\
| Copy in mode flags (data) |
\*---------------------------------------------------------*/
memcpy(&new_mode.flags, &data_buf[data_ptr], sizeof(new_mode.flags));
data_ptr += sizeof(new_mode.flags);
/*---------------------------------------------------------*\
| Copy in mode speed_min (data) |
\*---------------------------------------------------------*/
memcpy(&new_mode.speed_min, &data_buf[data_ptr], sizeof(new_mode.speed_min));
data_ptr += sizeof(new_mode.speed_min);
/*---------------------------------------------------------*\
| Copy in mode speed_max (data) |
\*---------------------------------------------------------*/
memcpy(&new_mode.speed_max, &data_buf[data_ptr], sizeof(new_mode.speed_max));
data_ptr += sizeof(new_mode.speed_max);
/*---------------------------------------------------------*\
| Copy in mode colors_min (data) |
\*---------------------------------------------------------*/
memcpy(&new_mode.colors_min, &data_buf[data_ptr], sizeof(new_mode.colors_min));
data_ptr += sizeof(new_mode.colors_min);
/*---------------------------------------------------------*\
| Copy in mode colors_max (data) |
\*---------------------------------------------------------*/
memcpy(&new_mode.colors_max, &data_buf[data_ptr], sizeof(new_mode.colors_max));
data_ptr += sizeof(new_mode.colors_max);
/*---------------------------------------------------------*\
| Copy in mode speed (data) |
\*---------------------------------------------------------*/
memcpy(&new_mode.speed, &data_buf[data_ptr], sizeof(new_mode.speed));
data_ptr += sizeof(new_mode.speed);
/*---------------------------------------------------------*\
| Copy in mode direction (data) |
\*---------------------------------------------------------*/
memcpy(&new_mode.direction, &data_buf[data_ptr], sizeof(new_mode.direction));
data_ptr += sizeof(new_mode.direction);
/*---------------------------------------------------------*\
| Copy in mode color_mode (data) |
\*---------------------------------------------------------*/
memcpy(&new_mode.color_mode, &data_buf[data_ptr], sizeof(new_mode.color_mode));
data_ptr += sizeof(new_mode.color_mode);
/*---------------------------------------------------------*\
| Copy in mode number of colors |
\*---------------------------------------------------------*/
unsigned short mode_num_colors;
memcpy(&mode_num_colors, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in mode mode colors |
\*---------------------------------------------------------*/
for(int color_index = 0; color_index < mode_num_colors; color_index++)
{
/*---------------------------------------------------------*\
| Copy in color (data) |
\*---------------------------------------------------------*/
RGBColor new_color;
memcpy(&new_color, &data_buf[data_ptr], sizeof(RGBColor));
data_ptr += sizeof(modes[mode_index].colors[color_index]);
new_mode.colors.push_back(new_color);
}
modes.push_back(new_mode);
}
/*---------------------------------------------------------*\
| Copy in number of zones (data) |
\*---------------------------------------------------------*/
unsigned short num_zones;
memcpy(&num_zones, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in zones |
\*---------------------------------------------------------*/
for(int zone_index = 0; zone_index < num_zones; zone_index++)
{
zone new_zone;
/*---------------------------------------------------------*\
| Copy in zone name (size+data) |
\*---------------------------------------------------------*/
unsigned short zonename_len;
memcpy(&zonename_len, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
new_zone.name = (char *)&data_buf[data_ptr];
data_ptr += zonename_len;
/*---------------------------------------------------------*\
| Copy in zone type (data) |
\*---------------------------------------------------------*/
memcpy(&new_zone.type, &data_buf[data_ptr], sizeof(new_zone.type));
data_ptr += sizeof(new_zone.type);
/*---------------------------------------------------------*\
| Copy in zone map number of rows |
\*---------------------------------------------------------*/
unsigned short zone_map_rows;
memcpy(&zone_map_rows, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in rows |
\*---------------------------------------------------------*/
for(int row_index = 0; row_index < zone_map_rows; row_index++)
{
std::vector<int> new_zone_map_row;
/*---------------------------------------------------------*\
| Copy row size |
\*---------------------------------------------------------*/
unsigned short zone_map_row_size;
memcpy(&zone_map_row_size, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in row LEDs |
\*---------------------------------------------------------*/
for(int row_led_index = 0; row_led_index < zone_map_row_size; row_led_index++)
{
int new_index;
/*---------------------------------------------------------*\
| Copy row size |
\*---------------------------------------------------------*/
memcpy(&new_index, &data_buf[data_ptr], sizeof(int));
data_ptr += sizeof(int);
new_zone_map_row.push_back(new_index);
}
new_zone.map.push_back(new_zone_map_row);
}
zones.push_back(new_zone);
}
/*---------------------------------------------------------*\
| Copy in number of LEDs (data) |
\*---------------------------------------------------------*/
unsigned short num_leds;
memcpy(&num_leds, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in LEDs |
\*---------------------------------------------------------*/
for(int led_index = 0; led_index < num_leds; led_index++)
{
led new_led;
/*---------------------------------------------------------*\
| Copy in LED name (size+data) |
\*---------------------------------------------------------*/
unsigned short ledname_len;
memcpy(&ledname_len, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
new_led.name = (char *)&data_buf[data_ptr];
data_ptr += ledname_len;
leds.push_back(new_led);
}
/*---------------------------------------------------------*\
| Copy in number of colors (data) |
\*---------------------------------------------------------*/
unsigned short num_colors;
memcpy(&num_colors, &data_buf[data_ptr], sizeof(unsigned short));
data_ptr += sizeof(unsigned short);
/*---------------------------------------------------------*\
| Copy in colors |
\*---------------------------------------------------------*/
for(int color_index = 0; color_index < num_colors; color_index++)
{
RGBColor new_color;
/*---------------------------------------------------------*\
| Copy in color (data) |
\*---------------------------------------------------------*/
memcpy(&new_color, &data_buf[data_ptr], sizeof(RGBColor));
data_ptr += sizeof(RGBColor);
colors.push_back(new_color);
}
}
RGBColor RGBController::GetLED(int led) RGBColor RGBController::GetLED(int led)
{ {
@@ -55,4 +711,31 @@ void RGBController::SetMode(int mode)
active_mode = mode; active_mode = mode;
UpdateMode(); UpdateMode();
} }
std::string device_type_to_str(device_type type)
{
switch(type)
{
case DEVICE_TYPE_MOTHERBOARD:
return "Motherboard";
case DEVICE_TYPE_DRAM:
return "DRAM";
case DEVICE_TYPE_GPU:
return "GPU";
case DEVICE_TYPE_COOLER:
return "Cooler";
case DEVICE_TYPE_LEDSTRIP:
return "LED Strip";
case DEVICE_TYPE_KEYBOARD:
return "Keyboard";
case DEVICE_TYPE_MOUSE:
return "Mouse";
case DEVICE_TYPE_MOUSEMAT:
return "Mousemat";
case DEVICE_TYPE_HEADSET:
return "Headset";
default:
return "Unknown";
}
}
+26 -9
View File
@@ -25,14 +25,14 @@ typedef unsigned int RGBColor;
\*------------------------------------------------------------------*/ \*------------------------------------------------------------------*/
enum enum
{ {
MODE_FLAG_HAS_SPEED = (1 << 0), /* Mode has speed parameter */ MODE_FLAG_HAS_SPEED = (1 << 0), /* Mode has speed parameter */
MODE_FLAG_HAS_DIRECTION_LR = (1 << 1), /* Mode has left/right parameter */ MODE_FLAG_HAS_DIRECTION_LR = (1 << 1), /* Mode has left/right parameter */
MODE_FLAG_HAS_DIRECTION_UD = (1 << 2), /* Mode has up/down parameter */ MODE_FLAG_HAS_DIRECTION_UD = (1 << 2), /* Mode has up/down parameter */
MODE_FLAG_HAS_DIRECTION_HV = (1 << 3), /* Mode has horiz/vert parameter */ MODE_FLAG_HAS_DIRECTION_HV = (1 << 3), /* Mode has horiz/vert parameter */
MODE_FLAG_HAS_BRIGHTNESS = (1 << 4), /* Mode has brightness parameter */ MODE_FLAG_HAS_BRIGHTNESS = (1 << 4), /* Mode has brightness parameter */
MODE_FLAG_HAS_COLOR = (1 << 5), /* Mode has custom color parameter */ MODE_FLAG_HAS_PER_LED_COLOR = (1 << 5), /* Mode has per-LED colors */
MODE_FLAG_RANDOM_COLOR = (1 << 6), /* Mode has random color option */ MODE_FLAG_HAS_MODE_SPECIFIC_COLOR = (1 << 6), /* Mode has mode specific colors */
MODE_FLAG_PER_LED_COLOR = (1 << 7), /* Mode uses device LED colors */ MODE_FLAG_HAS_RANDOM_COLOR = (1 << 7), /* Mode has random color option */
}; };
/*------------------------------------------------------------------*\ /*------------------------------------------------------------------*\
@@ -48,6 +48,14 @@ enum
MODE_DIRECTION_VERTICAL = 5, /* Mode direction vertical */ MODE_DIRECTION_VERTICAL = 5, /* Mode direction vertical */
}; };
enum
{
MODE_COLORS_NONE = 0, /* Mode has no colors */
MODE_COLORS_PER_LED = 1, /* Mode has per LED colors selected */
MODE_COLORS_MODE_SPECIFIC = 2, /* Mode specific colors selected */
MODE_COLORS_RANDOM = 3, /* Mode has random colors selected */
};
/*------------------------------------------------------------------*\ /*------------------------------------------------------------------*\
| Mode Type | | Mode Type |
\*------------------------------------------------------------------*/ \*------------------------------------------------------------------*/
@@ -61,13 +69,17 @@ typedef struct
unsigned int flags; /* Mode flags bitfield */ unsigned int flags; /* Mode flags bitfield */
unsigned int speed_min; /* speed minimum value */ unsigned int speed_min; /* speed minimum value */
unsigned int speed_max; /* speed maximum value */ unsigned int speed_max; /* speed maximum value */
unsigned int colors_min; /* minimum number of mode colors*/
unsigned int colors_max; /* maximum numver of mode colors*/
/*--------------------------------------------------------------*\ /*--------------------------------------------------------------*\
| Mode Settings | | Mode Settings |
\*--------------------------------------------------------------*/ \*--------------------------------------------------------------*/
unsigned int speed; /* Mode speed parameter value */ unsigned int speed; /* Mode speed parameter value */
unsigned int direction; /* Mode direction value */ unsigned int direction; /* Mode direction value */
bool random; /* Random color mode enabled */ unsigned int color_mode; /* Mode color selection */
std::vector<RGBColor>
colors; /* mode-specific colors */
} mode; } mode;
typedef struct typedef struct
@@ -100,6 +112,8 @@ enum
DEVICE_TYPE_UNKNOWN DEVICE_TYPE_UNKNOWN
}; };
std::string device_type_to_str(device_type type);
typedef struct typedef struct
{ {
std::string name; /* Zone name */ std::string name; /* Zone name */
@@ -136,6 +150,9 @@ public:
int GetMode(); int GetMode();
void SetMode(int mode); void SetMode(int mode);
unsigned char * GetDeviceDescription();
void ReadDeviceDescription(unsigned char* data_buf);
/*---------------------------------------------------------*\ /*---------------------------------------------------------*\
| Functions to be implemented in device implementation | | Functions to be implemented in device implementation |
\*---------------------------------------------------------*/ \*---------------------------------------------------------*/
+59 -57
View File
@@ -18,70 +18,70 @@ RGBController_AMDWraithPrism::RGBController_AMDWraithPrism(AMDWraithPrismControl
version = wraith->GetFirmwareVersionString(); version = wraith->GetFirmwareVersionString();
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_STATIC; Static.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_STATIC;
Static.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Static.random = false; Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static); modes.push_back(Static);
mode Breathing; mode Breathing;
Breathing.name = "Breathing"; Breathing.name = "Breathing";
Breathing.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_BREATHING; Breathing.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_BREATHING;
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR | MODE_FLAG_RANDOM_COLOR; Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Breathing.speed_min = AMD_WRAITH_PRISM_SPEED_SLOWEST; Breathing.speed_min = AMD_WRAITH_PRISM_SPEED_SLOWEST;
Breathing.speed_max = AMD_WRAITH_PRISM_SPEED_FASTEST; Breathing.speed_max = AMD_WRAITH_PRISM_SPEED_FASTEST;
Breathing.random = false; Breathing.color_mode = MODE_COLORS_PER_LED;
Breathing.speed = AMD_WRAITH_PRISM_SPEED_NORMAL; Breathing.speed = AMD_WRAITH_PRISM_SPEED_NORMAL;
modes.push_back(Breathing); modes.push_back(Breathing);
mode ColorCycle; mode ColorCycle;
ColorCycle.name = "Color Cycle"; ColorCycle.name = "Color Cycle";
ColorCycle.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_COLOR_CYCLE; ColorCycle.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_COLOR_CYCLE;
ColorCycle.flags = MODE_FLAG_HAS_SPEED; ColorCycle.flags = MODE_FLAG_HAS_SPEED;
ColorCycle.speed_min = AMD_WRAITH_PRISM_SPEED_SLOWEST; ColorCycle.speed_min = AMD_WRAITH_PRISM_SPEED_SLOWEST;
ColorCycle.speed_max = AMD_WRAITH_PRISM_SPEED_FASTEST; ColorCycle.speed_max = AMD_WRAITH_PRISM_SPEED_FASTEST;
ColorCycle.random = false; ColorCycle.color_mode = MODE_COLORS_NONE;
ColorCycle.speed = AMD_WRAITH_PRISM_SPEED_NORMAL; ColorCycle.speed = AMD_WRAITH_PRISM_SPEED_NORMAL;
modes.push_back(ColorCycle); modes.push_back(ColorCycle);
mode Rainbow; mode Rainbow;
Rainbow.name = "Rainbow"; Rainbow.name = "Rainbow";
Rainbow.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_RAINBOW; Rainbow.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_RAINBOW;
Rainbow.flags = MODE_FLAG_HAS_SPEED; Rainbow.flags = MODE_FLAG_HAS_SPEED;
Rainbow.speed_min = AMD_WRAITH_PRISM_SPEED_SLOWEST; Rainbow.speed_min = AMD_WRAITH_PRISM_SPEED_SLOWEST;
Rainbow.speed_max = AMD_WRAITH_PRISM_SPEED_FASTEST; Rainbow.speed_max = AMD_WRAITH_PRISM_SPEED_FASTEST;
Rainbow.random = false; Rainbow.color_mode = MODE_COLORS_NONE;
Rainbow.speed = AMD_WRAITH_PRISM_SPEED_NORMAL; Rainbow.speed = AMD_WRAITH_PRISM_SPEED_NORMAL;
modes.push_back(Rainbow); modes.push_back(Rainbow);
mode Bounce; mode Bounce;
Bounce.name = "Bounce"; Bounce.name = "Bounce";
Bounce.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_BOUNCE; Bounce.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_BOUNCE;
Bounce.flags = MODE_FLAG_HAS_SPEED; Bounce.flags = MODE_FLAG_HAS_SPEED;
Bounce.speed_min = AMD_WRAITH_PRISM_SPEED_SLOWEST; Bounce.speed_min = AMD_WRAITH_PRISM_SPEED_SLOWEST;
Bounce.speed_max = AMD_WRAITH_PRISM_SPEED_FASTEST; Bounce.speed_max = AMD_WRAITH_PRISM_SPEED_FASTEST;
Bounce.random = true; Bounce.color_mode = MODE_COLORS_NONE;
Bounce.speed = AMD_WRAITH_PRISM_SPEED_NORMAL; Bounce.speed = AMD_WRAITH_PRISM_SPEED_NORMAL;
modes.push_back(Bounce); modes.push_back(Bounce);
mode Chase; mode Chase;
Chase.name = "Chase"; Chase.name = "Chase";
Chase.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_CHASE; Chase.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_CHASE;
Chase.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR | MODE_FLAG_RANDOM_COLOR; Chase.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Chase.speed_min = AMD_WRAITH_PRISM_SPEED_SLOWEST; Chase.speed_min = AMD_WRAITH_PRISM_SPEED_SLOWEST;
Chase.speed_max = AMD_WRAITH_PRISM_SPEED_FASTEST; Chase.speed_max = AMD_WRAITH_PRISM_SPEED_FASTEST;
Chase.random = false; Chase.color_mode = MODE_COLORS_PER_LED;
Chase.speed = AMD_WRAITH_PRISM_SPEED_NORMAL; Chase.speed = AMD_WRAITH_PRISM_SPEED_NORMAL;
modes.push_back(Chase); modes.push_back(Chase);
mode Swirl; mode Swirl;
Swirl.name = "Swirl"; Swirl.name = "Swirl";
Swirl.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_SWIRL; Swirl.value = AMD_WRAITH_PRISM_EFFECT_CHANNEL_SWIRL;
Swirl.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR | MODE_FLAG_RANDOM_COLOR; Swirl.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Swirl.speed_min = AMD_WRAITH_PRISM_SPEED_SLOWEST; Swirl.speed_min = AMD_WRAITH_PRISM_SPEED_SLOWEST;
Swirl.speed_max = AMD_WRAITH_PRISM_SPEED_FASTEST; Swirl.speed_max = AMD_WRAITH_PRISM_SPEED_FASTEST;
Swirl.random = false; Swirl.color_mode = MODE_COLORS_PER_LED;
Swirl.speed = AMD_WRAITH_PRISM_SPEED_NORMAL; Swirl.speed = AMD_WRAITH_PRISM_SPEED_NORMAL;
modes.push_back(Swirl); modes.push_back(Swirl);
led logo_led; led logo_led;
@@ -180,35 +180,37 @@ void RGBController_AMDWraithPrism::SetCustomMode()
void RGBController_AMDWraithPrism::UpdateMode() void RGBController_AMDWraithPrism::UpdateMode()
{ {
wraith->SetRingMode(modes[active_mode].value, modes[active_mode].speed, modes[active_mode].direction, modes[active_mode].random); bool random = (modes[active_mode].color_mode == MODE_COLORS_RANDOM);
wraith->SetRingMode(modes[active_mode].value, modes[active_mode].speed, modes[active_mode].direction, random);
switch(modes[active_mode].value) switch(modes[active_mode].value)
{ {
case AMD_WRAITH_PRISM_EFFECT_CHANNEL_COLOR_CYCLE: case AMD_WRAITH_PRISM_EFFECT_CHANNEL_COLOR_CYCLE:
case AMD_WRAITH_PRISM_EFFECT_CHANNEL_RAINBOW: case AMD_WRAITH_PRISM_EFFECT_CHANNEL_RAINBOW:
case AMD_WRAITH_PRISM_EFFECT_CHANNEL_BOUNCE: case AMD_WRAITH_PRISM_EFFECT_CHANNEL_BOUNCE:
wraith->SetFanMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_COLOR_CYCLE, modes[active_mode].speed, modes[active_mode].random); wraith->SetFanMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_COLOR_CYCLE, modes[active_mode].speed, random);
wraith->SetLogoMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_COLOR_CYCLE, modes[active_mode].speed, modes[active_mode].random); wraith->SetLogoMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_COLOR_CYCLE, modes[active_mode].speed, random);
break; break;
case AMD_WRAITH_PRISM_EFFECT_CHANNEL_BREATHING: case AMD_WRAITH_PRISM_EFFECT_CHANNEL_BREATHING:
wraith->SetFanMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_BREATHING, modes[active_mode].speed, modes[active_mode].random); wraith->SetFanMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_BREATHING, modes[active_mode].speed, random);
wraith->SetLogoMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_BREATHING, modes[active_mode].speed, modes[active_mode].random); wraith->SetLogoMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_BREATHING, modes[active_mode].speed, random);
break; break;
default: default:
if(modes[active_mode].random) if(random)
{ {
wraith->SetFanMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_COLOR_CYCLE, modes[active_mode].speed, modes[active_mode].random); wraith->SetFanMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_COLOR_CYCLE, modes[active_mode].speed, random);
wraith->SetLogoMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_COLOR_CYCLE, modes[active_mode].speed, modes[active_mode].random); wraith->SetLogoMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_COLOR_CYCLE, modes[active_mode].speed, random);
} }
else else
{ {
wraith->SetFanMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_STATIC, modes[active_mode].speed, modes[active_mode].random); wraith->SetFanMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_STATIC, modes[active_mode].speed, random);
wraith->SetLogoMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_STATIC, modes[active_mode].speed, modes[active_mode].random); wraith->SetLogoMode(AMD_WRAITH_PRISM_FAN_LOGO_MODE_STATIC, modes[active_mode].speed, random);
} }
break; break;
} }
UpdateLEDs(); UpdateLEDs();
} }
-83
View File
@@ -1,83 +0,0 @@
/*-----------------------------------------*\
| RGBController_AorusGPU.cpp |
| |
| Generic RGB Interface for OpenAuraSDK |
| Aorus GPU |
| |
| Adam Honse (CalcProgrammer1) 6/17/2019 |
\*-----------------------------------------*/
#include "RGBController_AorusGPU.h"
#include <Windows.h>
static HMODULE handle;
static unsigned char data[] = { 0x8E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00,
0x64, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00 };
void RGBController_AorusGPU::UpdateLEDs()
{
RGBColor color = colors[0];
data[9] = RGBGetRValue(color);
data[10] = RGBGetGValue(color);
data[11] = RGBGetBValue(color);
GvWriteI2C(0x00000000, data, 0x00000000);
}
void RGBController_AorusGPU::UpdateZoneLEDs(int zone)
{
UpdateLEDs();
}
void RGBController_AorusGPU::UpdateSingleLED(int led)
{
UpdateLEDs();
}
RGBController_AorusGPU::RGBController_AorusGPU()
{
name = "Aorus GPU";
type = DEVICE_TYPE_GPU;
handle = LoadLibrary("GvDisplay.dll");
GvWriteI2C = (_GvWriteI2C)GetProcAddress(handle, "GvWriteI2C");
GvFreeDispLib = (_GvFreeDispLib)GetProcAddress(handle, "GvFreeDispLib");
GvInitDispLib = (_GvInitDispLib)GetProcAddress(handle, "GvInitDispLib");
GvFreeDispLib();
GvInitDispLib();
colors.push_back(0x00000000);
mode aorus_mode;
aorus_mode.name = "Static";
modes.push_back(aorus_mode);
led aorus_led;
aorus_led.name = "GPU LED";
leds.push_back(aorus_led);
zone aorus_zone;
aorus_zone.name = "GPU LED";
std::vector<int> aorus_zone_map;
aorus_zone_map.push_back(0);
aorus_zone.map.push_back(aorus_zone_map);
zones.push_back(aorus_zone);
}
void RGBController_AorusGPU::SetCustomMode()
{
}
void RGBController_AorusGPU::UpdateMode()
{
}
-33
View File
@@ -1,33 +0,0 @@
/*-----------------------------------------*\
| RGBController_AorusGPU.h |
| |
| Generic RGB Interface for OpenAuraSDK |
| Aorus GPU |
| |
| Adam Honse (CalcProgrammer1) 6/17/2019 |
\*-----------------------------------------*/
#pragma once
#include "RGBController.h"
typedef unsigned int uint32;
typedef uint32(*_GvWriteI2C)(uint32, void*, uint32);
typedef void (*_GvFreeDispLib)();
typedef void (*_GvInitDispLib)();
class RGBController_AorusGPU : public RGBController
{
public:
RGBController_AorusGPU();
void UpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void SetCustomMode();
void UpdateMode();
private:
_GvWriteI2C GvWriteI2C;
_GvFreeDispLib GvFreeDispLib;
_GvInitDispLib GvInitDispLib;
};
+72 -54
View File
@@ -11,38 +11,45 @@
int RGBController_Aura::GetDeviceMode() int RGBController_Aura::GetDeviceMode()
{ {
int dev_mode = aura->AuraRegisterRead(AURA_REG_MODE); int dev_mode = aura->AuraRegisterRead(AURA_REG_MODE);
bool random = false; int color_mode = MODE_COLORS_PER_LED;
switch(dev_mode)
{
case AURA_MODE_SPECTRUM_CYCLE_CHASE:
dev_mode = AURA_MODE_CHASE;
random = true;
break;
case AURA_MODE_SPECTRUM_CYCLE_BREATHING:
dev_mode = AURA_MODE_BREATHING;
random = true;
break;
case AURA_MODE_SPECTRUM_CYCLE_CHASE_FADE:
dev_mode = AURA_MODE_CHASE_FADE;
random = true;
break;
}
if (aura->AuraRegisterRead(AURA_REG_DIRECT)) if (aura->AuraRegisterRead(AURA_REG_DIRECT))
{ {
dev_mode = 0xFFFF; dev_mode = 0xFFFF;
} }
switch(dev_mode)
{
case AURA_MODE_OFF:
case AURA_MODE_RAINBOW:
case AURA_MODE_SPECTRUM_CYCLE:
case AURA_MODE_RANDOM_FLICKER:
color_mode = MODE_COLORS_NONE;
break;
case AURA_MODE_SPECTRUM_CYCLE_CHASE:
dev_mode = AURA_MODE_CHASE;
color_mode = MODE_COLORS_RANDOM;
break;
case AURA_MODE_SPECTRUM_CYCLE_BREATHING:
dev_mode = AURA_MODE_BREATHING;
color_mode = MODE_COLORS_RANDOM;
break;
case AURA_MODE_SPECTRUM_CYCLE_CHASE_FADE:
dev_mode = AURA_MODE_CHASE_FADE;
color_mode = MODE_COLORS_RANDOM;
break;
}
for(int mode = 0; mode < modes.size(); mode++) for(int mode = 0; mode < modes.size(); mode++)
{ {
if(modes[mode].value == dev_mode) if(modes[mode].value == dev_mode)
{ {
active_mode = mode; active_mode = mode;
modes[mode].random = random; modes[mode].color_mode = color_mode;
} }
} }
@@ -129,63 +136,73 @@ RGBController_Aura::RGBController_Aura(AuraController * aura_ptr)
} }
mode Direct; mode Direct;
Direct.name = "Direct"; Direct.name = "Direct";
Direct.value = 0xFFFF; Direct.value = 0xFFFF;
Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct); modes.push_back(Direct);
mode Off; mode Off;
Off.name = "Off"; Off.name = "Off";
Off.value = AURA_MODE_OFF; Off.value = AURA_MODE_OFF;
Off.flags = 0; Off.flags = 0;
Off.color_mode = MODE_COLORS_NONE;
modes.push_back(Off); modes.push_back(Off);
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = AURA_MODE_STATIC; Static.value = AURA_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static); modes.push_back(Static);
mode Breathing; mode Breathing;
Breathing.name = "Breathing"; Breathing.name = "Breathing";
Breathing.value = AURA_MODE_BREATHING; Breathing.value = AURA_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR | MODE_FLAG_PER_LED_COLOR; Breathing.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_PER_LED_COLOR;
Breathing.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Breathing); modes.push_back(Breathing);
mode Flashing; mode Flashing;
Flashing.name = "Flashing"; Flashing.name = "Flashing";
Flashing.value = AURA_MODE_FLASHING; Flashing.value = AURA_MODE_FLASHING;
Flashing.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Flashing.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Flashing.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Flashing); modes.push_back(Flashing);
mode SpectrumCycle; mode SpectrumCycle;
SpectrumCycle.name = "Spectrum Cycle"; SpectrumCycle.name = "Spectrum Cycle";
SpectrumCycle.value = AURA_MODE_SPECTRUM_CYCLE; SpectrumCycle.value = AURA_MODE_SPECTRUM_CYCLE;
SpectrumCycle.flags = 0; SpectrumCycle.flags = 0;
SpectrumCycle.color_mode = MODE_COLORS_NONE;
modes.push_back(SpectrumCycle); modes.push_back(SpectrumCycle);
mode Rainbow; mode Rainbow;
Rainbow.name = "Rainbow"; Rainbow.name = "Rainbow";
Rainbow.value = AURA_MODE_RAINBOW; Rainbow.value = AURA_MODE_RAINBOW;
Rainbow.flags = 0; Rainbow.flags = 0;
Rainbow.color_mode = MODE_COLORS_NONE;
modes.push_back(Rainbow); modes.push_back(Rainbow);
mode ChaseFade; mode ChaseFade;
ChaseFade.name = "Chase Fade"; ChaseFade.name = "Chase Fade";
ChaseFade.value = AURA_MODE_CHASE_FADE; ChaseFade.value = AURA_MODE_CHASE_FADE;
ChaseFade.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR | MODE_FLAG_PER_LED_COLOR; ChaseFade.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_PER_LED_COLOR;
ChaseFade.color_mode = MODE_COLORS_PER_LED;
modes.push_back(ChaseFade); modes.push_back(ChaseFade);
mode Chase; mode Chase;
Chase.name = "Chase"; Chase.name = "Chase";
Chase.value = AURA_MODE_CHASE; Chase.value = AURA_MODE_CHASE;
Chase.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR | MODE_FLAG_PER_LED_COLOR; Chase.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_PER_LED_COLOR;
Chase.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Chase); modes.push_back(Chase);
mode RandomFlicker; mode RandomFlicker;
RandomFlicker.name = "Random Flicker"; RandomFlicker.name = "Random Flicker";
RandomFlicker.value = AURA_MODE_RANDOM_FLICKER; RandomFlicker.value = AURA_MODE_RANDOM_FLICKER;
RandomFlicker.flags = 0; RandomFlicker.flags = 0;
RandomFlicker.color_mode = MODE_COLORS_NONE;
modes.push_back(RandomFlicker); modes.push_back(RandomFlicker);
colors.resize(aura->GetLEDCount()); colors.resize(aura->GetLEDCount());
@@ -197,6 +214,7 @@ RGBController_Aura::RGBController_Aura(AuraController * aura_ptr)
led* new_led = new led(); led* new_led = new led();
new_led->name = aura->GetChannelName(i); new_led->name = aura->GetChannelName(i);
new_led->name.append(std::to_string(i));
leds.push_back(*new_led); leds.push_back(*new_led);
@@ -272,7 +290,7 @@ void RGBController_Aura::UpdateMode()
{ {
int new_mode = modes[active_mode].value; int new_mode = modes[active_mode].value;
if(modes[active_mode].random == true) if(modes[active_mode].color_mode == MODE_COLORS_RANDOM)
{ {
switch(new_mode) switch(new_mode)
{ {
@@ -291,4 +309,4 @@ void RGBController_Aura::UpdateMode()
aura->SetMode(new_mode); aura->SetMode(new_mode);
aura->SetDirect(false); aura->SetDirect(false);
} }
} }
+176
View File
@@ -0,0 +1,176 @@
/*-----------------------------------------*\
| RGBController_AuraGPU.h |
| |
| Generic RGB Interface for Asus Aura GPU |
| |
| Jan Rettig (Klapstuhl) 14.02.2020 |
\*-----------------------------------------*/
#include "RGBController_AuraGPU.h"
int RGBController_AuraGPU::GetDeviceMode()
{
int dev_mode = aura_gpu->AuraGPURegisterRead(AURA_GPU_REG_MODE);
int color_mode = MODE_COLORS_PER_LED;
if(dev_mode == AURA_GPU_MODE_STATIC)
{
if (aura_gpu->direct)
{
dev_mode = AURA_GPU_MODE_DIRECT;
}
}
switch(dev_mode)
{
case AURA_GPU_MODE_OFF:
case AURA_GPU_MODE_SPECTRUM_CYCLE:
color_mode = MODE_COLORS_NONE;
break;
}
for(int mode = 0; mode < modes.size(); mode++)
{
if(modes[mode].value == dev_mode)
{
active_mode = mode;
modes[mode].color_mode = color_mode;
}
}
return(active_mode);
}
void RGBController_AuraGPU::UpdateLEDs()
{
for(std::size_t led = 0; led < colors.size(); led++)
{
unsigned char red = RGBGetRValue(colors[led]);
unsigned char grn = RGBGetGValue(colors[led]);
unsigned char blu = RGBGetBValue(colors[led]);
if (GetMode() == 0)
{
aura_gpu->SetLEDColorsDirect(red, grn, blu);
}
else
{
aura_gpu->SetLEDColorsEffect(red, grn, blu);
}
}
}
void RGBController_AuraGPU::UpdateZoneLEDs(int zone)
{
UpdateLEDs();
}
void RGBController_AuraGPU::UpdateSingleLED(int led)
{
UpdateLEDs();
}
RGBController_AuraGPU::RGBController_AuraGPU(AuraGPUController * aura_gpu_ptr)
{
aura_gpu = aura_gpu_ptr;
name = aura_gpu->GetDeviceName();
version = "0.00.1";
location = aura_gpu->GetDeviceLocation();
type = DEVICE_TYPE_GPU;
mode Direct;
Direct.name = "Direct";
Direct.value = AURA_GPU_MODE_DIRECT;
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct);
mode Off;
Off.name = "Off";
Off.value = AURA_GPU_MODE_OFF;
Off.flags = 0;
Off.color_mode = MODE_COLORS_NONE;
modes.push_back(Off);
mode Static;
Static.name = "Static";
Static.value = AURA_GPU_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static);
mode Breathing;
Breathing.name = "Breathing";
Breathing.value = AURA_GPU_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Breathing.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Breathing);
mode Flashing;
Flashing.name = "Flashing";
Flashing.value = AURA_GPU_MODE_FLASHING;
Flashing.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Flashing.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Flashing);
mode Spectrum_Cycle;
Spectrum_Cycle.name = "Spectrum Cycle";
Spectrum_Cycle.value = AURA_GPU_MODE_SPECTRUM_CYCLE;
Spectrum_Cycle.flags = 0;
Spectrum_Cycle.color_mode = MODE_COLORS_NONE;
modes.push_back(Spectrum_Cycle);
colors.resize(1);
led aura_gpu_led;
aura_gpu_led.name = "GPU";
leds.push_back(aura_gpu_led);
zone aura_gpu_zone;
aura_gpu_zone.name = "GPU";
aura_gpu_zone.type = ZONE_TYPE_SINGLE;
std::vector<int> aura_gpu_zone_map;
aura_gpu_zone_map.push_back(0);
aura_gpu_zone.map.push_back(aura_gpu_zone_map);
zones.push_back(aura_gpu_zone);
unsigned char red = aura_gpu->GetLEDRed();
unsigned char grn = aura_gpu->GetLEDGreen();
unsigned char blu = aura_gpu->GetLEDBlue();
colors[0] = ToRGBColor(red, grn, blu);
active_mode = GetDeviceMode();
}
void RGBController_AuraGPU::SetCustomMode()
{
active_mode = 0;
}
void RGBController_AuraGPU::UpdateMode()
{
int new_mode = modes[active_mode].value;
aura_gpu->direct = false;
switch(new_mode)
{
// Set all LEDs to 0 and Mode to static as a workaround for the non existing Off Mode
case AURA_GPU_MODE_OFF:
aura_gpu->SetLEDColorsEffect(0, 0, 0);
new_mode = AURA_GPU_MODE_STATIC;
break;
// Direct mode is done by switching to Static and not applying color changes
case AURA_GPU_MODE_DIRECT:
aura_gpu->direct = true;
new_mode = AURA_GPU_MODE_STATIC;
break;
}
aura_gpu->SetMode(new_mode);
}
+29
View File
@@ -0,0 +1,29 @@
/*-----------------------------------------*\
| RGBController_AuraGPU.h |
| |
| Generic RGB Interface for Asus Aura GPU |
| |
| Jan Rettig (Klapstuhl) 14.02.2020 |
\*-----------------------------------------*/
#pragma once
#include "RGBController.h"
#include "AuraGPUController.h"
class RGBController_AuraGPU : public RGBController
{
public:
RGBController_AuraGPU(AuraGPUController* aura_gpu_ptr);
void UpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void SetCustomMode();
void UpdateMode();
private:
AuraGPUController* aura_gpu;
int GetDeviceMode();
};
+13 -10
View File
@@ -39,21 +39,24 @@ RGBController_Corsair::RGBController_Corsair(CorsairController* corsair_ptr)
type = DEVICE_TYPE_DRAM; type = DEVICE_TYPE_DRAM;
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = CORSAIR_VENGEANCE_RGB_MODE_SINGLE; Static.value = CORSAIR_VENGEANCE_RGB_MODE_SINGLE;
Static.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static); modes.push_back(Static);
mode Fade; mode Fade;
Fade.name = "Fade"; Fade.name = "Fade";
Fade.value = CORSAIR_VENGEANCE_RGB_MODE_FADE; Fade.value = CORSAIR_VENGEANCE_RGB_MODE_FADE;
Fade.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Fade.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Fade.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Fade); modes.push_back(Fade);
mode Pulse; mode Pulse;
Pulse.name = "Pulse"; Pulse.name = "Pulse";
Pulse.value = CORSAIR_VENGEANCE_RGB_MODE_PULSE; Pulse.value = CORSAIR_VENGEANCE_RGB_MODE_PULSE;
Pulse.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Pulse.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Pulse.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Pulse); modes.push_back(Pulse);
for (unsigned int i = 0; i < corsair->GetLEDCount(); i++) for (unsigned int i = 0; i < corsair->GetLEDCount(); i++)
@@ -91,4 +94,4 @@ void RGBController_Corsair::SetCustomMode()
void RGBController_Corsair::UpdateMode() void RGBController_Corsair::UpdateMode()
{ {
corsair->SetMode(modes[active_mode].value); corsair->SetMode(modes[active_mode].value);
} }
+126 -71
View File
@@ -19,106 +19,145 @@ RGBController_CorsairCmdrPro::RGBController_CorsairCmdrPro(CorsairCmdrProControl
type = DEVICE_TYPE_LEDSTRIP; type = DEVICE_TYPE_LEDSTRIP;
mode Direct; mode Direct;
Direct.name = "Direct"; Direct.name = "Direct";
Direct.value = 0xFFFF; Direct.value = 0xFFFF;
Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct); modes.push_back(Direct);
mode RainbowWave; mode RainbowWave;
RainbowWave.name = "Rainbow Wave"; RainbowWave.name = "Rainbow Wave";
RainbowWave.value = CORSAIR_CMDR_PRO_MODE_RAINBOW_WAVE; RainbowWave.value = CORSAIR_CMDR_PRO_MODE_RAINBOW_WAVE;
RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR;
RainbowWave.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; RainbowWave.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
RainbowWave.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; RainbowWave.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
RainbowWave.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; RainbowWave.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
RainbowWave.direction = MODE_DIRECTION_RIGHT; RainbowWave.direction = MODE_DIRECTION_RIGHT;
RainbowWave.color_mode = MODE_COLORS_NONE;
modes.push_back(RainbowWave); modes.push_back(RainbowWave);
mode ColorShift; mode ColorShift;
ColorShift.name = "Color Shift"; ColorShift.name = "Color Shift";
ColorShift.value = CORSAIR_CMDR_PRO_MODE_COLOR_SHIFT; ColorShift.value = CORSAIR_CMDR_PRO_MODE_COLOR_SHIFT;
ColorShift.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; ColorShift.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
ColorShift.colors_min = 2;
ColorShift.colors_max = 2;
ColorShift.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; ColorShift.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
ColorShift.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; ColorShift.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
ColorShift.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; ColorShift.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
ColorShift.color_mode = MODE_COLORS_MODE_SPECIFIC;
ColorShift.colors.resize(2);
modes.push_back(ColorShift); modes.push_back(ColorShift);
mode ColorPulse; mode ColorPulse;
ColorPulse.name = "Color Pulse"; ColorPulse.name = "Color Pulse";
ColorPulse.value = CORSAIR_CMDR_PRO_MODE_COLOR_PULSE; ColorPulse.value = CORSAIR_CMDR_PRO_MODE_COLOR_PULSE;
ColorPulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; ColorPulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
ColorPulse.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; ColorPulse.colors_min = 2;
ColorPulse.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; ColorPulse.colors_max = 2;
ColorPulse.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; ColorPulse.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
ColorPulse.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
ColorPulse.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
ColorPulse.color_mode = MODE_COLORS_MODE_SPECIFIC;
ColorPulse.colors.resize(2);
modes.push_back(ColorPulse); modes.push_back(ColorPulse);
mode ColorWave; mode ColorWave;
ColorWave.name = "Color Wave"; ColorWave.name = "Color Wave";
ColorWave.value = CORSAIR_CMDR_PRO_MODE_COLOR_WAVE; ColorWave.value = CORSAIR_CMDR_PRO_MODE_COLOR_WAVE;
ColorWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; ColorWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
ColorWave.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; ColorWave.colors_min = 2;
ColorWave.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; ColorWave.colors_max = 2;
ColorWave.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; ColorWave.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
ColorWave.direction = MODE_DIRECTION_RIGHT; ColorWave.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
ColorWave.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
ColorWave.direction = MODE_DIRECTION_RIGHT;
ColorWave.color_mode = MODE_COLORS_MODE_SPECIFIC;
ColorWave.colors.resize(2);
modes.push_back(ColorWave); modes.push_back(ColorWave);
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = CORSAIR_CMDR_PRO_MODE_STATIC; Static.value = CORSAIR_CMDR_PRO_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_COLOR; Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Static.colors_min = 1;
Static.colors_max = 1;
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
Static.colors.resize(1);
modes.push_back(Static); modes.push_back(Static);
mode Temperature; mode Temperature;
Temperature.name = "Temperature"; Temperature.name = "Temperature";
Temperature.value = CORSAIR_CMDR_PRO_MODE_TEMPERATURE; Temperature.value = CORSAIR_CMDR_PRO_MODE_TEMPERATURE;
Temperature.flags = MODE_FLAG_HAS_COLOR; Temperature.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Temperature.colors_min = 3;
Temperature.colors_max = 3;
Temperature.color_mode = MODE_COLORS_MODE_SPECIFIC;
Temperature.colors.resize(3);
modes.push_back(Temperature); modes.push_back(Temperature);
mode Visor; mode Visor;
Visor.name = "Visor"; Visor.name = "Visor";
Visor.value = CORSAIR_CMDR_PRO_MODE_VISOR; Visor.value = CORSAIR_CMDR_PRO_MODE_VISOR;
Visor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Visor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Visor.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; Visor.colors_min = 2;
Visor.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; Visor.colors_max = 2;
Visor.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; Visor.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
Visor.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
Visor.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
Visor.color_mode = MODE_COLORS_MODE_SPECIFIC;
Visor.colors.resize(2);
modes.push_back(Visor); modes.push_back(Visor);
mode Marquee; mode Marquee;
Marquee.name = "Marquee"; Marquee.name = "Marquee";
Marquee.value = CORSAIR_CMDR_PRO_MODE_MARQUEE; Marquee.value = CORSAIR_CMDR_PRO_MODE_MARQUEE;
Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Marquee.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; Marquee.colors_min = 1;
Marquee.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; Marquee.colors_max = 1;
Marquee.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; Marquee.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
Marquee.direction = MODE_DIRECTION_RIGHT; Marquee.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
Marquee.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
Marquee.direction = MODE_DIRECTION_RIGHT;
Marquee.color_mode = MODE_COLORS_MODE_SPECIFIC;
Marquee.colors.resize(1);
modes.push_back(Marquee); modes.push_back(Marquee);
mode Blink; mode Blink;
Blink.name = "Blink"; Blink.name = "Blink";
Blink.value = CORSAIR_CMDR_PRO_MODE_BLINK; Blink.value = CORSAIR_CMDR_PRO_MODE_BLINK;
Blink.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Blink.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Blink.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; Blink.colors_min = 2;
Blink.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; Blink.colors_max = 2;
Blink.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; Blink.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
Blink.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
Blink.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
Blink.color_mode = MODE_COLORS_MODE_SPECIFIC;
Blink.colors.resize(2);
modes.push_back(Blink); modes.push_back(Blink);
mode Sequential; mode Sequential;
Sequential.name = "Sequential"; Sequential.name = "Sequential";
Sequential.value = CORSAIR_CMDR_PRO_MODE_SEQUENTIAL; Sequential.value = CORSAIR_CMDR_PRO_MODE_SEQUENTIAL;
Sequential.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Sequential.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Sequential.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; Sequential.colors_min = 1;
Sequential.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; Sequential.colors_max = 1;
Sequential.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; Sequential.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
Sequential.direction = MODE_DIRECTION_RIGHT; Sequential.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
Sequential.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
Sequential.direction = MODE_DIRECTION_RIGHT;
Sequential.color_mode = MODE_COLORS_MODE_SPECIFIC;
Sequential.colors.resize(1);
modes.push_back(Sequential); modes.push_back(Sequential);
mode Rainbow; mode Rainbow;
Rainbow.name = "Rainbow"; Rainbow.name = "Rainbow";
Rainbow.value = CORSAIR_CMDR_PRO_MODE_RAINBOW; Rainbow.value = CORSAIR_CMDR_PRO_MODE_RAINBOW;
Rainbow.flags = MODE_FLAG_HAS_SPEED; Rainbow.flags = MODE_FLAG_HAS_SPEED;
Rainbow.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; Rainbow.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
Rainbow.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; Rainbow.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
Rainbow.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; Rainbow.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
Rainbow.color_mode = MODE_COLORS_NONE;
modes.push_back(Rainbow); modes.push_back(Rainbow);
/*-------------------------------------------------*\ /*-------------------------------------------------*\
@@ -240,7 +279,7 @@ void RGBController_CorsairCmdrPro::UpdateSingleLED(int led)
void RGBController_CorsairCmdrPro::SetCustomMode() void RGBController_CorsairCmdrPro::SetCustomMode()
{ {
active_mode = 9; active_mode = 0;
} }
void RGBController_CorsairCmdrPro::UpdateMode() void RGBController_CorsairCmdrPro::UpdateMode()
@@ -254,23 +293,39 @@ void RGBController_CorsairCmdrPro::UpdateMode()
for(int channel = 0; channel < CORSAIR_CMDR_PRO_NUM_CHANNELS; channel++) for(int channel = 0; channel < CORSAIR_CMDR_PRO_NUM_CHANNELS; channel++)
{ {
unsigned int direction = 0; unsigned int direction = 0;
bool random = (modes[active_mode].color_mode == MODE_COLORS_RANDOM);
if(modes[active_mode].direction == MODE_DIRECTION_RIGHT) if(modes[active_mode].direction == MODE_DIRECTION_RIGHT)
{ {
direction = 1; direction = 1;
} }
unsigned char mode_colors[9];
if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC)
{
for(int i = 0; i < modes[active_mode].colors.size(); i++)
{
mode_colors[(3 * i) + 0] = RGBGetRValue(modes[active_mode].colors[i]);
mode_colors[(3 * i) + 1] = RGBGetGValue(modes[active_mode].colors[i]);
mode_colors[(3 * i) + 2] = RGBGetBValue(modes[active_mode].colors[i]);
}
}
corsair->SetChannelEffect(channel, corsair->SetChannelEffect(channel,
modes[active_mode].value, modes[active_mode].value,
modes[active_mode].speed, modes[active_mode].speed,
direction, direction,
modes[active_mode].random, random,
RGBGetRValue(colors[0]), mode_colors[0],
RGBGetGValue(colors[0]), mode_colors[1],
RGBGetBValue(colors[0]), mode_colors[2],
RGBGetRValue(colors[1]), mode_colors[3],
RGBGetGValue(colors[1]), mode_colors[4],
RGBGetBValue(colors[1])); mode_colors[5],
mode_colors[6],
mode_colors[7],
mode_colors[8]);
} }
} }
} }
@@ -145,9 +145,10 @@ RGBController_CorsairKeyboard::RGBController_CorsairKeyboard(CorsairKeyboardCont
type = DEVICE_TYPE_KEYBOARD; type = DEVICE_TYPE_KEYBOARD;
mode Direct; mode Direct;
Direct.name = "Direct"; Direct.name = "Direct";
Direct.value = 0; Direct.value = 0;
Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct); modes.push_back(Direct);
colors.resize(111); colors.resize(111);
+126 -71
View File
@@ -19,106 +19,145 @@ RGBController_CorsairNodePro::RGBController_CorsairNodePro(CorsairNodeProControl
type = DEVICE_TYPE_LEDSTRIP; type = DEVICE_TYPE_LEDSTRIP;
mode Direct; mode Direct;
Direct.name = "Direct"; Direct.name = "Direct";
Direct.value = 0xFFFF; Direct.value = 0xFFFF;
Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct); modes.push_back(Direct);
mode RainbowWave; mode RainbowWave;
RainbowWave.name = "Rainbow Wave"; RainbowWave.name = "Rainbow Wave";
RainbowWave.value = CORSAIR_CMDR_PRO_MODE_RAINBOW_WAVE; RainbowWave.value = CORSAIR_CMDR_PRO_MODE_RAINBOW_WAVE;
RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR;
RainbowWave.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; RainbowWave.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
RainbowWave.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; RainbowWave.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
RainbowWave.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; RainbowWave.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
RainbowWave.direction = MODE_DIRECTION_RIGHT; RainbowWave.direction = MODE_DIRECTION_RIGHT;
RainbowWave.color_mode = MODE_COLORS_NONE;
modes.push_back(RainbowWave); modes.push_back(RainbowWave);
mode ColorShift; mode ColorShift;
ColorShift.name = "Color Shift"; ColorShift.name = "Color Shift";
ColorShift.value = CORSAIR_CMDR_PRO_MODE_COLOR_SHIFT; ColorShift.value = CORSAIR_CMDR_PRO_MODE_COLOR_SHIFT;
ColorShift.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; ColorShift.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
ColorShift.colors_min = 2;
ColorShift.colors_max = 2;
ColorShift.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; ColorShift.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
ColorShift.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; ColorShift.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
ColorShift.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; ColorShift.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
ColorShift.color_mode = MODE_COLORS_MODE_SPECIFIC;
ColorShift.colors.resize(2);
modes.push_back(ColorShift); modes.push_back(ColorShift);
mode ColorPulse; mode ColorPulse;
ColorPulse.name = "Color Pulse"; ColorPulse.name = "Color Pulse";
ColorPulse.value = CORSAIR_CMDR_PRO_MODE_COLOR_PULSE; ColorPulse.value = CORSAIR_CMDR_PRO_MODE_COLOR_PULSE;
ColorPulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; ColorPulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
ColorPulse.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; ColorPulse.colors_min = 2;
ColorPulse.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; ColorPulse.colors_max = 2;
ColorPulse.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; ColorPulse.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
ColorPulse.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
ColorPulse.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
ColorPulse.color_mode = MODE_COLORS_MODE_SPECIFIC;
ColorPulse.colors.resize(2);
modes.push_back(ColorPulse); modes.push_back(ColorPulse);
mode ColorWave; mode ColorWave;
ColorWave.name = "Color Wave"; ColorWave.name = "Color Wave";
ColorWave.value = CORSAIR_CMDR_PRO_MODE_COLOR_WAVE; ColorWave.value = CORSAIR_CMDR_PRO_MODE_COLOR_WAVE;
ColorWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; ColorWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
ColorWave.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; ColorWave.colors_min = 2;
ColorWave.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; ColorWave.colors_max = 2;
ColorWave.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; ColorWave.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
ColorWave.direction = MODE_DIRECTION_RIGHT; ColorWave.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
ColorWave.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
ColorWave.direction = MODE_DIRECTION_RIGHT;
ColorWave.color_mode = MODE_COLORS_MODE_SPECIFIC;
ColorWave.colors.resize(2);
modes.push_back(ColorWave); modes.push_back(ColorWave);
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = CORSAIR_CMDR_PRO_MODE_STATIC; Static.value = CORSAIR_CMDR_PRO_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_COLOR; Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Static.colors_min = 1;
Static.colors_max = 1;
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
Static.colors.resize(1);
modes.push_back(Static); modes.push_back(Static);
mode Temperature; mode Temperature;
Temperature.name = "Temperature"; Temperature.name = "Temperature";
Temperature.value = CORSAIR_CMDR_PRO_MODE_TEMPERATURE; Temperature.value = CORSAIR_CMDR_PRO_MODE_TEMPERATURE;
Temperature.flags = MODE_FLAG_HAS_COLOR; Temperature.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Temperature.colors_min = 3;
Temperature.colors_max = 3;
Temperature.color_mode = MODE_COLORS_MODE_SPECIFIC;
Temperature.colors.resize(3);
modes.push_back(Temperature); modes.push_back(Temperature);
mode Visor; mode Visor;
Visor.name = "Visor"; Visor.name = "Visor";
Visor.value = CORSAIR_CMDR_PRO_MODE_VISOR; Visor.value = CORSAIR_CMDR_PRO_MODE_VISOR;
Visor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Visor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Visor.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; Visor.colors_min = 2;
Visor.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; Visor.colors_max = 2;
Visor.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; Visor.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
Visor.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
Visor.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
Visor.color_mode = MODE_COLORS_MODE_SPECIFIC;
Visor.colors.resize(2);
modes.push_back(Visor); modes.push_back(Visor);
mode Marquee; mode Marquee;
Marquee.name = "Marquee"; Marquee.name = "Marquee";
Marquee.value = CORSAIR_CMDR_PRO_MODE_MARQUEE; Marquee.value = CORSAIR_CMDR_PRO_MODE_MARQUEE;
Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Marquee.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; Marquee.colors_min = 1;
Marquee.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; Marquee.colors_max = 1;
Marquee.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; Marquee.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
Marquee.direction = MODE_DIRECTION_RIGHT; Marquee.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
Marquee.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
Marquee.direction = MODE_DIRECTION_RIGHT;
Marquee.color_mode = MODE_COLORS_MODE_SPECIFIC;
Marquee.colors.resize(1);
modes.push_back(Marquee); modes.push_back(Marquee);
mode Blink; mode Blink;
Blink.name = "Blink"; Blink.name = "Blink";
Blink.value = CORSAIR_CMDR_PRO_MODE_BLINK; Blink.value = CORSAIR_CMDR_PRO_MODE_BLINK;
Blink.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Blink.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Blink.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; Blink.colors_min = 2;
Blink.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; Blink.colors_max = 2;
Blink.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; Blink.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
Blink.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
Blink.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
Blink.color_mode = MODE_COLORS_MODE_SPECIFIC;
Blink.colors.resize(2);
modes.push_back(Blink); modes.push_back(Blink);
mode Sequential; mode Sequential;
Sequential.name = "Sequential"; Sequential.name = "Sequential";
Sequential.value = CORSAIR_CMDR_PRO_MODE_SEQUENTIAL; Sequential.value = CORSAIR_CMDR_PRO_MODE_SEQUENTIAL;
Sequential.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Sequential.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Sequential.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; Sequential.colors_min = 1;
Sequential.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; Sequential.colors_max = 1;
Sequential.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; Sequential.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
Sequential.direction = MODE_DIRECTION_RIGHT; Sequential.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
Sequential.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
Sequential.direction = MODE_DIRECTION_RIGHT;
Sequential.color_mode = MODE_COLORS_MODE_SPECIFIC;
Sequential.colors.resize(1);
modes.push_back(Sequential); modes.push_back(Sequential);
mode Rainbow; mode Rainbow;
Rainbow.name = "Rainbow"; Rainbow.name = "Rainbow";
Rainbow.value = CORSAIR_CMDR_PRO_MODE_RAINBOW; Rainbow.value = CORSAIR_CMDR_PRO_MODE_RAINBOW;
Rainbow.flags = MODE_FLAG_HAS_SPEED; Rainbow.flags = MODE_FLAG_HAS_SPEED;
Rainbow.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW; Rainbow.speed_min = CORSAIR_CMDR_PRO_SPEED_SLOW;
Rainbow.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST; Rainbow.speed_max = CORSAIR_CMDR_PRO_SPEED_FAST;
Rainbow.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM; Rainbow.speed = CORSAIR_CMDR_PRO_SPEED_MEDIUM;
Rainbow.color_mode = MODE_COLORS_NONE;
modes.push_back(Rainbow); modes.push_back(Rainbow);
/*-------------------------------------------------*\ /*-------------------------------------------------*\
@@ -240,7 +279,7 @@ void RGBController_CorsairNodePro::UpdateSingleLED(int led)
void RGBController_CorsairNodePro::SetCustomMode() void RGBController_CorsairNodePro::SetCustomMode()
{ {
active_mode = 9; active_mode = 0;
} }
void RGBController_CorsairNodePro::UpdateMode() void RGBController_CorsairNodePro::UpdateMode()
@@ -254,23 +293,39 @@ void RGBController_CorsairNodePro::UpdateMode()
for(int channel = 0; channel < CORSAIR_CMDR_PRO_NUM_CHANNELS; channel++) for(int channel = 0; channel < CORSAIR_CMDR_PRO_NUM_CHANNELS; channel++)
{ {
unsigned int direction = 0; unsigned int direction = 0;
bool random = (modes[active_mode].color_mode == MODE_COLORS_RANDOM);
if(modes[active_mode].direction == MODE_DIRECTION_RIGHT) if(modes[active_mode].direction == MODE_DIRECTION_RIGHT)
{ {
direction = 1; direction = 1;
} }
unsigned char mode_colors[9];
if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC)
{
for(int i = 0; i < modes[active_mode].colors.size(); i++)
{
mode_colors[(3 * i) + 0] = RGBGetRValue(modes[active_mode].colors[i]);
mode_colors[(3 * i) + 1] = RGBGetGValue(modes[active_mode].colors[i]);
mode_colors[(3 * i) + 2] = RGBGetBValue(modes[active_mode].colors[i]);
}
}
corsair->SetChannelEffect(channel, corsair->SetChannelEffect(channel,
modes[active_mode].value, modes[active_mode].value,
modes[active_mode].speed, modes[active_mode].speed,
direction, direction,
modes[active_mode].random, random,
RGBGetRValue(colors[0]), mode_colors[0],
RGBGetGValue(colors[0]), mode_colors[1],
RGBGetBValue(colors[0]), mode_colors[2],
RGBGetRValue(colors[1]), mode_colors[3],
RGBGetGValue(colors[1]), mode_colors[4],
RGBGetBValue(colors[1])); mode_colors[5],
mode_colors[6],
mode_colors[7],
mode_colors[8]);
} }
} }
} }
+120 -83
View File
@@ -49,108 +49,129 @@ RGBController_CorsairPro::RGBController_CorsairPro(CorsairProController* corsair
type = DEVICE_TYPE_DRAM; type = DEVICE_TYPE_DRAM;
mode ColorShift; mode ColorShift;
ColorShift.name = "Color Shift"; ColorShift.name = "Color Shift";
ColorShift.value = CORSAIR_PRO_MODE_COLOR_SHIFT; ColorShift.value = CORSAIR_PRO_MODE_COLOR_SHIFT;
ColorShift.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; ColorShift.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
ColorShift.speed_min = CORSAIR_PRO_SPEED_SLOW; ColorShift.speed_min = CORSAIR_PRO_SPEED_SLOW;
ColorShift.speed_max = CORSAIR_PRO_SPEED_FAST; ColorShift.speed_max = CORSAIR_PRO_SPEED_FAST;
ColorShift.random = false; ColorShift.colors_min = 2;
ColorShift.speed = CORSAIR_PRO_SPEED_SLOW; ColorShift.colors_max = 2;
ColorShift.speed = CORSAIR_PRO_SPEED_SLOW;
ColorShift.color_mode = MODE_COLORS_MODE_SPECIFIC;
ColorShift.colors.resize(2);
modes.push_back(ColorShift); modes.push_back(ColorShift);
mode ColorPulse; mode ColorPulse;
ColorPulse.name = "Color Pulse"; ColorPulse.name = "Color Pulse";
ColorPulse.value = CORSAIR_PRO_MODE_COLOR_PULSE; ColorPulse.value = CORSAIR_PRO_MODE_COLOR_PULSE;
ColorPulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; ColorPulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
ColorPulse.speed_min = CORSAIR_PRO_SPEED_SLOW; ColorPulse.speed_min = CORSAIR_PRO_SPEED_SLOW;
ColorPulse.speed_max = CORSAIR_PRO_SPEED_FAST; ColorPulse.speed_max = CORSAIR_PRO_SPEED_FAST;
ColorPulse.random = false; ColorPulse.colors_min = 2;
ColorPulse.speed = CORSAIR_PRO_SPEED_SLOW; ColorPulse.colors_max = 2;
ColorPulse.speed = CORSAIR_PRO_SPEED_SLOW;
ColorPulse.color_mode = MODE_COLORS_MODE_SPECIFIC;
ColorPulse.colors.resize(2);
modes.push_back(ColorPulse); modes.push_back(ColorPulse);
mode RainbowWave; mode RainbowWave;
RainbowWave.name = "Rainbow Wave"; RainbowWave.name = "Rainbow Wave";
RainbowWave.value = CORSAIR_PRO_MODE_RAINBOW_WAVE; RainbowWave.value = CORSAIR_PRO_MODE_RAINBOW_WAVE;
RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD; RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD;
RainbowWave.speed_min = CORSAIR_PRO_SPEED_SLOW; RainbowWave.speed_min = CORSAIR_PRO_SPEED_SLOW;
RainbowWave.speed_max = CORSAIR_PRO_SPEED_FAST; RainbowWave.speed_max = CORSAIR_PRO_SPEED_FAST;
RainbowWave.random = false; RainbowWave.speed = CORSAIR_PRO_SPEED_SLOW;
RainbowWave.speed = CORSAIR_PRO_SPEED_SLOW; RainbowWave.direction = MODE_DIRECTION_DOWN;
RainbowWave.direction = MODE_DIRECTION_DOWN; RainbowWave.color_mode = MODE_COLORS_NONE;
modes.push_back(RainbowWave); modes.push_back(RainbowWave);
mode ColorWave; mode ColorWave;
ColorWave.name = "Color Wave"; ColorWave.name = "Color Wave";
ColorWave.value = CORSAIR_PRO_MODE_COLOR_WAVE; ColorWave.value = CORSAIR_PRO_MODE_COLOR_WAVE;
ColorWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; ColorWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
ColorWave.speed_min = CORSAIR_PRO_SPEED_SLOW; ColorWave.speed_min = CORSAIR_PRO_SPEED_SLOW;
ColorWave.speed_max = CORSAIR_PRO_SPEED_FAST; ColorWave.speed_max = CORSAIR_PRO_SPEED_FAST;
ColorWave.random = false; ColorWave.colors_min = 2;
ColorWave.speed = CORSAIR_PRO_SPEED_SLOW; ColorWave.colors_max = 2;
ColorWave.direction = MODE_DIRECTION_DOWN; ColorWave.speed = CORSAIR_PRO_SPEED_SLOW;
ColorWave.direction = MODE_DIRECTION_DOWN;
ColorWave.color_mode = MODE_COLORS_MODE_SPECIFIC;
ColorWave.colors.resize(2);
modes.push_back(ColorWave); modes.push_back(ColorWave);
mode Visor; mode Visor;
Visor.name = "Visor"; Visor.name = "Visor";
Visor.value = CORSAIR_PRO_MODE_VISOR; Visor.value = CORSAIR_PRO_MODE_VISOR;
Visor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_HV | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Visor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_HV | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Visor.speed_min = CORSAIR_PRO_SPEED_SLOW; Visor.speed_min = CORSAIR_PRO_SPEED_SLOW;
Visor.speed_max = CORSAIR_PRO_SPEED_FAST; Visor.speed_max = CORSAIR_PRO_SPEED_FAST;
Visor.random = false; Visor.colors_min = 2;
Visor.speed = CORSAIR_PRO_SPEED_SLOW; Visor.colors_max = 2;
Visor.direction = MODE_DIRECTION_VERTICAL; Visor.speed = CORSAIR_PRO_SPEED_SLOW;
Visor.direction = MODE_DIRECTION_VERTICAL;
Visor.color_mode = MODE_COLORS_MODE_SPECIFIC;
Visor.colors.resize(2);
modes.push_back(Visor); modes.push_back(Visor);
mode Rain; mode Rain;
Rain.name = "Rain"; Rain.name = "Rain";
Rain.value = CORSAIR_PRO_MODE_RAIN; Rain.value = CORSAIR_PRO_MODE_RAIN;
Rain.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Rain.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Rain.speed_min = CORSAIR_PRO_SPEED_SLOW; Rain.speed_min = CORSAIR_PRO_SPEED_SLOW;
Rain.speed_max = CORSAIR_PRO_SPEED_FAST; Rain.speed_max = CORSAIR_PRO_SPEED_FAST;
Rain.random = false; Rain.colors_min = 2;
Rain.speed = CORSAIR_PRO_SPEED_SLOW; Rain.colors_max = 2;
Rain.direction = MODE_DIRECTION_DOWN; Rain.speed = CORSAIR_PRO_SPEED_SLOW;
Rain.direction = MODE_DIRECTION_DOWN;
Rain.color_mode = MODE_COLORS_MODE_SPECIFIC;
Rain.colors.resize(2);
modes.push_back(Rain); modes.push_back(Rain);
mode Marquee; mode Marquee;
Marquee.name = "Marquee"; Marquee.name = "Marquee";
Marquee.value = CORSAIR_PRO_MODE_MARQUEE; Marquee.value = CORSAIR_PRO_MODE_MARQUEE;
Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Marquee.speed_min = CORSAIR_PRO_SPEED_SLOW; Marquee.speed_min = CORSAIR_PRO_SPEED_SLOW;
Marquee.speed_max = CORSAIR_PRO_SPEED_FAST; Marquee.speed_max = CORSAIR_PRO_SPEED_FAST;
Marquee.random = false; Marquee.colors_min = 1;
Marquee.speed = CORSAIR_PRO_SPEED_SLOW; Marquee.colors_max = 1;
Marquee.speed = CORSAIR_PRO_SPEED_SLOW;
Marquee.color_mode = MODE_COLORS_MODE_SPECIFIC;
Marquee.colors.resize(1);
modes.push_back(Marquee); modes.push_back(Marquee);
mode Rainbow; mode Rainbow;
Rainbow.name = "Rainbow"; Rainbow.name = "Rainbow";
Rainbow.value = CORSAIR_PRO_MODE_RAINBOW; Rainbow.value = CORSAIR_PRO_MODE_RAINBOW;
Rainbow.flags = MODE_FLAG_HAS_SPEED; Rainbow.flags = MODE_FLAG_HAS_SPEED;
Rainbow.speed_min = CORSAIR_PRO_SPEED_SLOW; Rainbow.speed_min = CORSAIR_PRO_SPEED_SLOW;
Rainbow.speed_max = CORSAIR_PRO_SPEED_FAST; Rainbow.speed_max = CORSAIR_PRO_SPEED_FAST;
Rainbow.random = false; Rainbow.speed = CORSAIR_PRO_SPEED_SLOW;
Rainbow.speed = CORSAIR_PRO_SPEED_SLOW; Rainbow.color_mode = MODE_COLORS_NONE;
modes.push_back(Rainbow); modes.push_back(Rainbow);
mode Sequential; mode Sequential;
Sequential.name = "Sequential"; Sequential.name = "Sequential";
Sequential.value = CORSAIR_PRO_MODE_SEQUENTIAL; Sequential.value = CORSAIR_PRO_MODE_SEQUENTIAL;
Sequential.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Sequential.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Sequential.speed_min = CORSAIR_PRO_SPEED_SLOW; Sequential.speed_min = CORSAIR_PRO_SPEED_SLOW;
Sequential.speed_max = CORSAIR_PRO_SPEED_FAST; Sequential.speed_max = CORSAIR_PRO_SPEED_FAST;
Sequential.random = false; Sequential.colors_min = 1;
Sequential.speed = CORSAIR_PRO_SPEED_SLOW; Sequential.colors_max = 1;
Sequential.direction = MODE_DIRECTION_DOWN; Sequential.speed = CORSAIR_PRO_SPEED_SLOW;
Sequential.direction = MODE_DIRECTION_DOWN;
Sequential.color_mode = MODE_COLORS_MODE_SPECIFIC;
Sequential.colors.resize(1);
modes.push_back(Sequential); modes.push_back(Sequential);
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = CORSAIR_PRO_MODE_STATIC; Static.value = CORSAIR_PRO_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Static.speed_min = 0; Static.speed_min = 0;
Static.speed_max = 0; Static.speed_max = 0;
Static.random = false; Static.speed = 0;
Static.speed = 0; Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static); modes.push_back(Static);
active_mode = 9; active_mode = 9;
@@ -191,6 +212,8 @@ void RGBController_CorsairPro::SetCustomMode()
void RGBController_CorsairPro::UpdateMode() void RGBController_CorsairPro::UpdateMode()
{ {
unsigned int corsair_direction; unsigned int corsair_direction;
bool random = (modes[active_mode].color_mode == MODE_COLORS_RANDOM);
unsigned char mode_colors[6];
switch(modes[active_mode].direction) switch(modes[active_mode].direction)
{ {
@@ -214,14 +237,28 @@ void RGBController_CorsairPro::UpdateMode()
break; break;
} }
if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC)
{
mode_colors[0] = RGBGetRValue(modes[active_mode].colors[0]);
mode_colors[1] = RGBGetGValue(modes[active_mode].colors[0]);
mode_colors[2] = RGBGetBValue(modes[active_mode].colors[0]);
if(modes[active_mode].colors.size() == 2)
{
mode_colors[3] = RGBGetRValue(modes[active_mode].colors[1]);
mode_colors[4] = RGBGetGValue(modes[active_mode].colors[1]);
mode_colors[5] = RGBGetBValue(modes[active_mode].colors[1]);
}
}
corsair->SetEffect(modes[active_mode].value, corsair->SetEffect(modes[active_mode].value,
modes[active_mode].speed, modes[active_mode].speed,
corsair_direction, corsair_direction,
modes[active_mode].random, random,
RGBGetRValue(colors[0]), mode_colors[0],
RGBGetGValue(colors[0]), mode_colors[1],
RGBGetBValue(colors[0]), mode_colors[2],
RGBGetRValue(colors[1]), mode_colors[3],
RGBGetGValue(colors[1]), mode_colors[4],
RGBGetBValue(colors[1])); mode_colors[5]);
} }
+39 -16
View File
@@ -11,17 +11,24 @@
void RGBController_Crucial::UpdateLEDs() void RGBController_Crucial::UpdateLEDs()
{ {
crucial->SetAllColorsDirect(&colors[0]); if(modes[active_mode].value == 0xFFFF)
{
crucial->SetAllColorsDirect(&colors[0]);
}
else
{
}
} }
void RGBController_Crucial::UpdateZoneLEDs(int zone) void RGBController_Crucial::UpdateZoneLEDs(int zone)
{ {
crucial->SetAllColorsDirect(&colors[0]); UpdateLEDs();
} }
void RGBController_Crucial::UpdateSingleLED(int led) void RGBController_Crucial::UpdateSingleLED(int led)
{ {
crucial->SetAllColorsDirect(&colors[0]); UpdateLEDs();
} }
RGBController_Crucial::RGBController_Crucial(CrucialController * crucial_ptr) RGBController_Crucial::RGBController_Crucial(CrucialController * crucial_ptr)
@@ -32,28 +39,43 @@ RGBController_Crucial::RGBController_Crucial(CrucialController * crucial_ptr)
type = DEVICE_TYPE_DRAM; type = DEVICE_TYPE_DRAM;
name = "Crucial DRAM"; name = "Crucial DRAM";
mode Direct;
Direct.name = "Direct";
Direct.value = 0xFFFF;
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct);
#if 0
mode Shift; mode Shift;
Shift.name = "Shift"; Shift.name = "Shift";
Shift.value = CRUCIAL_MODE_SHIFT; Shift.value = CRUCIAL_MODE_SHIFT;
Shift.flags = 0; Shift.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Shift.colors_min = 1;
Shift.colors_max = 1;
Shift.color_mode = MODE_COLORS_MODE_SPECIFIC;
Shift.colors.resize(1);
modes.push_back(Shift); modes.push_back(Shift);
mode GradientShift; mode GradientShift;
GradientShift.name = "Gradient Shift"; GradientShift.name = "Gradient Shift";
GradientShift.value = CRUCIAL_MODE_GRADIENT_SHIFT; GradientShift.value = CRUCIAL_MODE_GRADIENT_SHIFT;
GradientShift.flags = 0; GradientShift.flags = 0;
GradientShift.color_mode = MODE_COLORS_NONE;
modes.push_back(GradientShift); modes.push_back(GradientShift);
mode Fill; mode Fill;
Fill.name = "Fill"; Fill.name = "Fill";
Fill.value = CRUCIAL_MODE_FILL; Fill.value = CRUCIAL_MODE_FILL;
Fill.flags = 0; Fill.flags = 0;
Fill.color_mode = MODE_COLORS_NONE;
modes.push_back(Fill); modes.push_back(Fill);
mode Stack; mode Stack;
Stack.name = "Stack"; Stack.name = "Stack";
Stack.value = CRUCIAL_MODE_STACK; Stack.value = CRUCIAL_MODE_STACK;
Stack.flags = 0; Stack.flags = 0;
Stack.color_mode = MODE_COLORS_NONE;
modes.push_back(Stack); modes.push_back(Stack);
mode DoubleStack; mode DoubleStack;
@@ -103,6 +125,7 @@ RGBController_Crucial::RGBController_Crucial(CrucialController * crucial_ptr)
Static.value = CRUCIAL_MODE_STATIC; Static.value = CRUCIAL_MODE_STATIC;
Static.flags = 0; Static.flags = 0;
modes.push_back(Static); modes.push_back(Static);
#endif
zone new_zone; zone new_zone;
new_zone.name = "DRAM"; new_zone.name = "DRAM";
@@ -134,4 +157,4 @@ void RGBController_Crucial::SetCustomMode()
void RGBController_Crucial::UpdateMode() void RGBController_Crucial::UpdateMode()
{ {
crucial->SetMode(modes[active_mode].value); crucial->SetMode(modes[active_mode].value);
} }
+39
View File
@@ -0,0 +1,39 @@
/*-----------------------------------------*\
| RGBController_Dummy.cpp |
| |
| Generic RGB Interface Dummy Class |
| |
| Adam Honse (CalcProgrammer1) 2/25/2020 |
\*-----------------------------------------*/
#include "RGBController_Dummy.h"
RGBController_Dummy::RGBController_Dummy()
{
}
void RGBController_Dummy::UpdateLEDs()
{
}
void RGBController_Dummy::UpdateZoneLEDs(int zone)
{
}
void RGBController_Dummy::UpdateSingleLED(int led)
{
}
void RGBController_Dummy::SetCustomMode()
{
}
void RGBController_Dummy::UpdateMode()
{
}
+23
View File
@@ -0,0 +1,23 @@
/*-----------------------------------------*\
| RGBController_Dummy.h |
| |
| Generic RGB Interface Dummy Class |
| |
| Adam Honse (CalcProgrammer1) 2/25/2020 |
\*-----------------------------------------*/
#pragma once
#include "RGBController.h"
class RGBController_Dummy : public RGBController
{
public:
RGBController_Dummy();
void UpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void SetCustomMode();
void UpdateMode();
};
+8 -4
View File
@@ -18,9 +18,13 @@ RGBController_E131::RGBController_E131(std::vector<E131Device> device_list)
devices = device_list; devices = device_list;
unsigned int led_zone_idx = 0; unsigned int led_zone_idx = 0;
mode led_mode;
led_mode.name = "Custom"; mode Direct;
modes.push_back(led_mode); Direct.name = "Direct";
Direct.value = 0;
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct);
sockfd = e131_socket(); sockfd = e131_socket();
@@ -172,4 +176,4 @@ void RGBController_E131::SetCustomMode()
void RGBController_E131::UpdateMode() void RGBController_E131::UpdateMode()
{ {
} }
+25 -25
View File
@@ -10,34 +10,34 @@ RGBController_Faustus::RGBController_Faustus(const std::string& dev_path)
type = DEVICE_TYPE_KEYBOARD; type = DEVICE_TYPE_KEYBOARD;
modes.resize(4); modes.resize(4);
modes[0].name = "Static"; modes[0].name = "Static";
modes[0].value = FAUSTUS_MODE_STATIC; modes[0].value = FAUSTUS_MODE_STATIC;
modes[0].flags = MODE_FLAG_HAS_COLOR; modes[0].flags = MODE_FLAG_HAS_PER_LED_COLOR;
modes[0].random = false; modes[0].color_mode = MODE_COLORS_PER_LED;
modes[1].name = "Breathing"; modes[1].name = "Breathing";
modes[1].value = FAUSTUS_MODE_BREATHING; modes[1].value = FAUSTUS_MODE_BREATHING;
modes[1].flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; modes[1].flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
modes[1].speed_min = FAUSTUS_SPEED_SLOWEST; modes[1].speed_min = FAUSTUS_SPEED_SLOWEST;
modes[1].speed_max = FAUSTUS_SPEED_FASTEST; modes[1].speed_max = FAUSTUS_SPEED_FASTEST;
modes[1].random = false; modes[1].color_mode = MODE_COLORS_PER_LED;
modes[1].speed = FAUSTUS_SPEED_NORMAL; modes[1].speed = FAUSTUS_SPEED_NORMAL;
modes[2].name = "Color Cycle"; modes[2].name = "Color Cycle";
modes[2].value = FAUSTUS_MODE_COLOR_CYCLE; modes[2].value = FAUSTUS_MODE_COLOR_CYCLE;
modes[2].flags = MODE_FLAG_HAS_SPEED; modes[2].flags = MODE_FLAG_HAS_SPEED;
modes[2].speed_min = FAUSTUS_SPEED_SLOWEST; modes[2].speed_min = FAUSTUS_SPEED_SLOWEST;
modes[2].speed_max = FAUSTUS_SPEED_FASTEST; modes[2].speed_max = FAUSTUS_SPEED_FASTEST;
modes[2].random = false; modes[2].color_mode = MODE_COLORS_NONE;
modes[2].speed = FAUSTUS_SPEED_NORMAL; modes[2].speed = FAUSTUS_SPEED_NORMAL;
modes[3].name = "Strobe"; modes[3].name = "Strobe";
modes[3].value = FAUSTUS_MODE_STROBE; modes[3].value = FAUSTUS_MODE_STROBE;
modes[3].flags = MODE_FLAG_HAS_SPEED; modes[3].flags = MODE_FLAG_HAS_SPEED;
modes[3].speed_min = FAUSTUS_SPEED_SLOWEST; modes[3].speed_min = FAUSTUS_SPEED_SLOWEST;
modes[3].speed_max = FAUSTUS_SPEED_FASTEST; modes[3].speed_max = FAUSTUS_SPEED_FASTEST;
modes[3].random = false; modes[3].color_mode = MODE_COLORS_NONE;
modes[3].speed = FAUSTUS_SPEED_NORMAL; modes[3].speed = FAUSTUS_SPEED_NORMAL;
colors.resize(1); colors.resize(1);
leds.resize(1); leds.resize(1);
+92 -51
View File
@@ -18,76 +18,102 @@ RGBController_Hue2::RGBController_Hue2(Hue2Controller* hue2_ptr)
type = DEVICE_TYPE_LEDSTRIP; type = DEVICE_TYPE_LEDSTRIP;
mode Direct; mode Direct;
Direct.name = "Direct"; Direct.name = "Direct";
Direct.value = HUE_2_MODE_FIXED; Direct.value = HUE_2_MODE_FIXED;
Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct); modes.push_back(Direct);
mode Fading; mode Fading;
Fading.name = "Fading"; Fading.name = "Fading";
Fading.value = HUE_2_MODE_FADING; Fading.value = HUE_2_MODE_FADING;
Fading.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Fading.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Fading.speed_min = HUE_2_SPEED_SLOWEST; Fading.speed_min = HUE_2_SPEED_SLOWEST;
Fading.speed_max = HUE_2_SPEED_FASTEST; Fading.speed_max = HUE_2_SPEED_FASTEST;
Fading.speed = HUE_2_SPEED_NORMAL; Fading.colors_min = 1;
Fading.colors_max = 8;
Fading.speed = HUE_2_SPEED_NORMAL;
Fading.color_mode = MODE_COLORS_MODE_SPECIFIC;
Fading.colors.resize(1);
modes.push_back(Fading); modes.push_back(Fading);
mode SpectrumCycle; mode SpectrumCycle;
SpectrumCycle.name = "Spectrum Cycle"; SpectrumCycle.name = "Spectrum Cycle";
SpectrumCycle.value = HUE_2_MODE_SPECTRUM; SpectrumCycle.value = HUE_2_MODE_SPECTRUM;
SpectrumCycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; SpectrumCycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR;
SpectrumCycle.speed_min = HUE_2_SPEED_SLOWEST; SpectrumCycle.speed_min = HUE_2_SPEED_SLOWEST;
SpectrumCycle.speed_max = HUE_2_SPEED_FASTEST; SpectrumCycle.speed_max = HUE_2_SPEED_FASTEST;
SpectrumCycle.speed = HUE_2_SPEED_NORMAL; SpectrumCycle.speed = HUE_2_SPEED_NORMAL;
SpectrumCycle.direction = MODE_DIRECTION_RIGHT; SpectrumCycle.direction = MODE_DIRECTION_RIGHT;
SpectrumCycle.color_mode = MODE_COLORS_NONE;
modes.push_back(SpectrumCycle); modes.push_back(SpectrumCycle);
mode Marquee; mode Marquee;
Marquee.name = "Marquee"; Marquee.name = "Marquee";
Marquee.value = HUE_2_MODE_MARQUEE; Marquee.value = HUE_2_MODE_MARQUEE;
Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Marquee.speed_min = HUE_2_SPEED_SLOWEST; Marquee.speed_min = HUE_2_SPEED_SLOWEST;
Marquee.speed_max = HUE_2_SPEED_FASTEST; Marquee.speed_max = HUE_2_SPEED_FASTEST;
Marquee.speed = HUE_2_SPEED_NORMAL; Marquee.colors_min = 1;
Marquee.direction = MODE_DIRECTION_RIGHT; Marquee.colors_max = 1;
Marquee.speed = HUE_2_SPEED_NORMAL;
Marquee.direction = MODE_DIRECTION_RIGHT;
Marquee.color_mode = MODE_COLORS_MODE_SPECIFIC;
Marquee.colors.resize(1);
modes.push_back(Marquee); modes.push_back(Marquee);
mode CoverMarquee; mode CoverMarquee;
CoverMarquee.name = "Cover Marquee"; CoverMarquee.name = "Cover Marquee";
CoverMarquee.value = HUE_2_MODE_COVER_MARQUEE; CoverMarquee.value = HUE_2_MODE_COVER_MARQUEE;
CoverMarquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; CoverMarquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
CoverMarquee.speed_min = HUE_2_SPEED_SLOWEST; CoverMarquee.speed_min = HUE_2_SPEED_SLOWEST;
CoverMarquee.speed_max = HUE_2_SPEED_FASTEST; CoverMarquee.speed_max = HUE_2_SPEED_FASTEST;
CoverMarquee.speed = HUE_2_SPEED_NORMAL; CoverMarquee.colors_min = 1;
CoverMarquee.direction = MODE_DIRECTION_RIGHT; CoverMarquee.colors_max = 8;
CoverMarquee.speed = HUE_2_SPEED_NORMAL;
CoverMarquee.direction = MODE_DIRECTION_RIGHT;
CoverMarquee.color_mode = MODE_COLORS_MODE_SPECIFIC;
CoverMarquee.colors.resize(1);
modes.push_back(CoverMarquee); modes.push_back(CoverMarquee);
mode Alternating; mode Alternating;
Alternating.name = "Alternating"; Alternating.name = "Alternating";
Alternating.value = HUE_2_MODE_ALTERNATING; Alternating.value = HUE_2_MODE_ALTERNATING;
Alternating.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Alternating.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Alternating.speed_min = HUE_2_SPEED_SLOWEST; Alternating.speed_min = HUE_2_SPEED_SLOWEST;
Alternating.speed_max = HUE_2_SPEED_FASTEST; Alternating.speed_max = HUE_2_SPEED_FASTEST;
Alternating.speed = HUE_2_SPEED_NORMAL; Alternating.colors_min = 1;
Alternating.direction = MODE_DIRECTION_RIGHT; Alternating.colors_max = 2;
Alternating.speed = HUE_2_SPEED_NORMAL;
Alternating.direction = MODE_DIRECTION_RIGHT;
Alternating.color_mode = MODE_COLORS_MODE_SPECIFIC;
Alternating.colors.resize(1);
modes.push_back(Alternating); modes.push_back(Alternating);
mode Pulsing; mode Pulsing;
Pulsing.name = "Pulsing"; Pulsing.name = "Pulsing";
Pulsing.value = HUE_2_MODE_PULSING; Pulsing.value = HUE_2_MODE_PULSING;
Pulsing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Pulsing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Pulsing.speed_min = HUE_2_SPEED_SLOWEST; Pulsing.speed_min = HUE_2_SPEED_SLOWEST;
Pulsing.speed_max = HUE_2_SPEED_FASTEST; Pulsing.speed_max = HUE_2_SPEED_FASTEST;
Pulsing.speed = HUE_2_SPEED_NORMAL; Pulsing.colors_min = 1;
Pulsing.colors_max = 8;
Pulsing.speed = HUE_2_SPEED_NORMAL;
Pulsing.color_mode = MODE_COLORS_MODE_SPECIFIC;
Pulsing.colors.resize(1);
modes.push_back(Pulsing); modes.push_back(Pulsing);
mode Breathing; mode Breathing;
Breathing.name = "Breathing"; Breathing.name = "Breathing";
Breathing.value = HUE_2_MODE_BREATHING; Breathing.value = HUE_2_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_PER_LED_COLOR;
Breathing.speed_min = HUE_2_SPEED_SLOWEST; Breathing.speed_min = HUE_2_SPEED_SLOWEST;
Breathing.speed_max = HUE_2_SPEED_FASTEST; Breathing.speed_max = HUE_2_SPEED_FASTEST;
Breathing.speed = HUE_2_SPEED_NORMAL; Breathing.colors_min = 1;
Breathing.colors_max = 8;
Breathing.speed = HUE_2_SPEED_NORMAL;
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
Breathing.colors.resize(1);
modes.push_back(Breathing); modes.push_back(Breathing);
/*-------------------------------------------------*\ /*-------------------------------------------------*\
@@ -238,7 +264,22 @@ void RGBController_Hue2::UpdateMode()
} }
hue2->SetMode(modes[active_mode].value, modes[active_mode].speed, direction); hue2->SetMode(modes[active_mode].value, modes[active_mode].speed, direction);
hue2->SetChannelLEDs(channel, channel_colors);
if(modes[active_mode].color_mode == MODE_COLORS_PER_LED)
{
hue2->SetChannelLEDs(channel, channel_colors);
}
else if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC)
{
hue2->SetChannelLEDs(channel, modes[active_mode].colors);
}
else if(modes[active_mode].color_mode == MODE_COLORS_NONE)
{
std::vector<RGBColor> temp_colors;
temp_colors.push_back(0x00000000);
hue2->SetChannelLEDs(channel, temp_colors);
}
} }
} }
} }
+125 -75
View File
@@ -20,109 +20,143 @@ RGBController_HuePlus::RGBController_HuePlus(HuePlusController* hueplus_ptr)
location = hueplus->GetLocation(); location = hueplus->GetLocation();
mode Direct; mode Direct;
Direct.name = "Direct"; Direct.name = "Direct";
Direct.value = HUE_PLUS_MODE_FIXED; Direct.value = HUE_PLUS_MODE_FIXED;
Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct); modes.push_back(Direct);
// Fading mode is currently disabled because it doesn't appear to work mode Fading;
// mode Fading; Fading.name = "Fading";
// Fading.name = "Fading"; Fading.value = HUE_PLUS_MODE_FADING;
// Fading.value = HUE_PLUS_MODE_FADING; Fading.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
// Fading.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Fading.speed_min = HUE_PLUS_SPEED_SLOWEST;
// Fading.speed_min = HUE_PLUS_SPEED_SLOWEST; Fading.speed_max = HUE_PLUS_SPEED_FASTEST;
// Fading.speed_max = HUE_PLUS_SPEED_FASTEST; Fading.colors_min = 1;
// Fading.speed = HUE_PLUS_SPEED_NORMAL; Fading.colors_max = 8;
// modes.push_back(Fading); Fading.speed = HUE_PLUS_SPEED_NORMAL;
Fading.color_mode = MODE_COLORS_MODE_SPECIFIC;
Fading.colors.resize(2);
modes.push_back(Fading);
mode SpectrumCycle; mode SpectrumCycle;
SpectrumCycle.name = "Spectrum Cycle"; SpectrumCycle.name = "Spectrum Cycle";
SpectrumCycle.value = HUE_PLUS_MODE_SPECTRUM; SpectrumCycle.value = HUE_PLUS_MODE_SPECTRUM;
SpectrumCycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; SpectrumCycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR;
SpectrumCycle.speed_min = HUE_PLUS_SPEED_SLOWEST; SpectrumCycle.speed_min = HUE_PLUS_SPEED_SLOWEST;
SpectrumCycle.speed_max = HUE_PLUS_SPEED_FASTEST; SpectrumCycle.speed_max = HUE_PLUS_SPEED_FASTEST;
SpectrumCycle.speed = HUE_PLUS_SPEED_NORMAL; SpectrumCycle.speed = HUE_PLUS_SPEED_NORMAL;
SpectrumCycle.direction = MODE_DIRECTION_RIGHT; SpectrumCycle.direction = MODE_DIRECTION_RIGHT;
SpectrumCycle.color_mode = MODE_COLORS_NONE;
modes.push_back(SpectrumCycle); modes.push_back(SpectrumCycle);
mode Marquee; mode Marquee;
Marquee.name = "Marquee"; Marquee.name = "Marquee";
Marquee.value = HUE_PLUS_MODE_MARQUEE; Marquee.value = HUE_PLUS_MODE_MARQUEE;
Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Marquee.speed_min = HUE_PLUS_SPEED_SLOWEST; Marquee.speed_min = HUE_PLUS_SPEED_SLOWEST;
Marquee.speed_max = HUE_PLUS_SPEED_FASTEST; Marquee.speed_max = HUE_PLUS_SPEED_FASTEST;
Marquee.speed = HUE_PLUS_SPEED_NORMAL; Marquee.colors_min = 1;
Marquee.direction = MODE_DIRECTION_RIGHT; Marquee.colors_max = 1;
Marquee.speed = HUE_PLUS_SPEED_NORMAL;
Marquee.direction = MODE_DIRECTION_RIGHT;
Marquee.color_mode = MODE_COLORS_MODE_SPECIFIC;
Marquee.colors.resize(1);
modes.push_back(Marquee); modes.push_back(Marquee);
mode CoverMarquee; mode CoverMarquee;
CoverMarquee.name = "Cover Marquee"; CoverMarquee.name = "Cover Marquee";
CoverMarquee.value = HUE_PLUS_MODE_COVER_MARQUEE; CoverMarquee.value = HUE_PLUS_MODE_COVER_MARQUEE;
CoverMarquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; CoverMarquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
CoverMarquee.speed_min = HUE_PLUS_SPEED_SLOWEST; CoverMarquee.speed_min = HUE_PLUS_SPEED_SLOWEST;
CoverMarquee.speed_max = HUE_PLUS_SPEED_FASTEST; CoverMarquee.speed_max = HUE_PLUS_SPEED_FASTEST;
CoverMarquee.speed = HUE_PLUS_SPEED_NORMAL; CoverMarquee.colors_min = 1;
CoverMarquee.direction = MODE_DIRECTION_RIGHT; CoverMarquee.colors_max = 8;
CoverMarquee.speed = HUE_PLUS_SPEED_NORMAL;
CoverMarquee.direction = MODE_DIRECTION_RIGHT;
CoverMarquee.color_mode = MODE_COLORS_MODE_SPECIFIC;
CoverMarquee.colors.resize(2);
modes.push_back(CoverMarquee); modes.push_back(CoverMarquee);
mode Alternating; mode Alternating;
Alternating.name = "Alternating"; Alternating.name = "Alternating";
Alternating.value = HUE_PLUS_MODE_ALTERNATING; Alternating.value = HUE_PLUS_MODE_ALTERNATING;
Alternating.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Alternating.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Alternating.speed_min = HUE_PLUS_SPEED_SLOWEST; Alternating.speed_min = HUE_PLUS_SPEED_SLOWEST;
Alternating.speed_max = HUE_PLUS_SPEED_FASTEST; Alternating.speed_max = HUE_PLUS_SPEED_FASTEST;
Alternating.speed = HUE_PLUS_SPEED_NORMAL; Alternating.colors_min = 1;
Alternating.direction = MODE_DIRECTION_RIGHT; Alternating.colors_max = 2;
Alternating.speed = HUE_PLUS_SPEED_NORMAL;
Alternating.direction = MODE_DIRECTION_RIGHT;
Alternating.color_mode = MODE_COLORS_MODE_SPECIFIC;
Alternating.colors.resize(2);
modes.push_back(Alternating); modes.push_back(Alternating);
mode Pulsing; mode Pulsing;
Pulsing.name = "Pulsing"; Pulsing.name = "Pulsing";
Pulsing.value = HUE_PLUS_MODE_PULSING; Pulsing.value = HUE_PLUS_MODE_PULSING;
Pulsing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Pulsing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Pulsing.speed_min = HUE_PLUS_SPEED_SLOWEST; Pulsing.speed_min = HUE_PLUS_SPEED_SLOWEST;
Pulsing.speed_max = HUE_PLUS_SPEED_FASTEST; Pulsing.speed_max = HUE_PLUS_SPEED_FASTEST;
Pulsing.speed = HUE_PLUS_SPEED_NORMAL; Pulsing.colors_min = 1;
Pulsing.colors_max = 8;
Pulsing.speed = HUE_PLUS_SPEED_NORMAL;
Pulsing.color_mode = MODE_COLORS_MODE_SPECIFIC;
Pulsing.colors.resize(2);
modes.push_back(Pulsing); modes.push_back(Pulsing);
mode Breathing; mode Breathing;
Breathing.name = "Breathing"; Breathing.name = "Breathing";
Breathing.value = HUE_PLUS_MODE_BREATHING; Breathing.value = HUE_PLUS_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_PER_LED_COLOR;
Breathing.speed_min = HUE_PLUS_SPEED_SLOWEST; Breathing.speed_min = HUE_PLUS_SPEED_SLOWEST;
Breathing.speed_max = HUE_PLUS_SPEED_FASTEST; Breathing.speed_max = HUE_PLUS_SPEED_FASTEST;
Breathing.speed = HUE_PLUS_SPEED_NORMAL; Breathing.colors_min = 1;
Breathing.colors_max = 8;
Breathing.speed = HUE_PLUS_SPEED_NORMAL;
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
Breathing.colors.resize(2);
modes.push_back(Breathing); modes.push_back(Breathing);
mode Alert; mode Alert;
Alert.name = "Alert"; Alert.name = "Alert";
Alert.value = HUE_PLUS_MODE_ALERT; Alert.value = HUE_PLUS_MODE_ALERT;
Alert.flags = 0; Alert.flags = 0;
Alert.color_mode = MODE_COLORS_NONE;
modes.push_back(Alert); modes.push_back(Alert);
mode Candlelight; mode Candlelight;
Candlelight.name = "Candlelight"; Candlelight.name = "Candlelight";
Candlelight.value = HUE_PLUS_MODE_CANDLELIGHT; Candlelight.value = HUE_PLUS_MODE_CANDLELIGHT;
Candlelight.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Candlelight.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Candlelight.colors_min = 1;
Candlelight.colors_max = 1;
Candlelight.color_mode = MODE_COLORS_MODE_SPECIFIC;
Candlelight.colors.resize(1);
modes.push_back(Candlelight); modes.push_back(Candlelight);
mode Wings; mode Wings;
Wings.name = "Wings"; Wings.name = "Wings";
Wings.value = HUE_PLUS_MODE_WINGS; Wings.value = HUE_PLUS_MODE_WINGS;
Wings.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Wings.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Wings.speed_min = HUE_PLUS_SPEED_SLOWEST; Wings.speed_min = HUE_PLUS_SPEED_SLOWEST;
Wings.speed_max = HUE_PLUS_SPEED_FASTEST; Wings.speed_max = HUE_PLUS_SPEED_FASTEST;
Wings.speed = HUE_PLUS_SPEED_NORMAL; Wings.colors_min = 1;
Wings.colors_max = 1;
Wings.speed = HUE_PLUS_SPEED_NORMAL;
Wings.color_mode = MODE_COLORS_MODE_SPECIFIC;
Wings.colors.resize(1);
modes.push_back(Wings); modes.push_back(Wings);
// Wave mode is currently disabled because it doesn't appear to work mode Wave;
// mode Wave; Wave.name = "Wave";
// Wave.name = "Wave"; Wave.value = HUE_PLUS_MODE_WAVE;
// Wave.value = HUE_PLUS_MODE_WAVE; Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
// Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Wave.speed_min = HUE_PLUS_SPEED_SLOWEST;
// Wave.speed_min = HUE_PLUS_SPEED_SLOWEST; Wave.speed_max = HUE_PLUS_SPEED_FASTEST;
// Wave.speed_max = HUE_PLUS_SPEED_FASTEST; Wave.speed = HUE_PLUS_SPEED_NORMAL;
// Wave.speed = HUE_PLUS_SPEED_NORMAL; Wave.color_mode = MODE_COLORS_PER_LED;
// modes.push_back(Wave); modes.push_back(Wave);
/*-------------------------------------------------*\ /*-------------------------------------------------*\
| Set size of colors array | | Set size of colors array |
@@ -272,7 +306,23 @@ void RGBController_HuePlus::UpdateMode()
} }
hueplus->SetMode(modes[active_mode].value, modes[active_mode].speed, direction); hueplus->SetMode(modes[active_mode].value, modes[active_mode].speed, direction);
hueplus->SetChannelLEDs(channel, channel_colors);
if(modes[active_mode].color_mode == MODE_COLORS_PER_LED)
{
hueplus->SetChannelLEDs(channel, channel_colors);
}
else if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC)
{
hueplus->SetModeColors(channel, modes[active_mode].colors);
}
else if(modes[active_mode].color_mode == MODE_COLORS_NONE)
{
std::vector<RGBColor> temp_colors;
temp_colors.push_back(0x00000000);
hueplus->SetModeColors(channel, temp_colors);
}
} }
} }
} }
+87 -54
View File
@@ -92,83 +92,105 @@ RGBController_HyperX::RGBController_HyperX(HyperXController* hyperx_ptr)
type = DEVICE_TYPE_DRAM; type = DEVICE_TYPE_DRAM;
mode Direct; mode Direct;
Direct.name = "Direct"; Direct.name = "Direct";
Direct.value = HYPERX_MODE_DIRECT; Direct.value = HYPERX_MODE_DIRECT;
Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct); modes.push_back(Direct);
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = HYPERX_MODE_STATIC; Static.value = HYPERX_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_COLOR; Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Static.colors_min = 1;
Static.colors_max = 1;
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
Static.colors.resize(1);
modes.push_back(Static); modes.push_back(Static);
mode Rainbow; mode Rainbow;
Rainbow.name = "Rainbow"; Rainbow.name = "Rainbow";
Rainbow.value = HYPERX_MODE_RAINBOW; Rainbow.value = HYPERX_MODE_RAINBOW;
Rainbow.flags = MODE_FLAG_HAS_SPEED; Rainbow.flags = MODE_FLAG_HAS_SPEED;
Rainbow.speed_min = HYPERX_SPEED_RAINBOW_SLOW; Rainbow.speed_min = HYPERX_SPEED_RAINBOW_SLOW;
Rainbow.speed_max = HYPERX_SPEED_RAINBOW_FAST; Rainbow.speed_max = HYPERX_SPEED_RAINBOW_FAST;
Rainbow.speed = HYPERX_SPEED_RAINBOW_NORMAL; Rainbow.speed = HYPERX_SPEED_RAINBOW_NORMAL;
Rainbow.color_mode = MODE_COLORS_NONE;
modes.push_back(Rainbow); modes.push_back(Rainbow);
mode Comet; mode Comet;
Comet.name = "Comet"; Comet.name = "Comet";
Comet.value = HYPERX_MODE_COMET; Comet.value = HYPERX_MODE_COMET;
Comet.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Comet.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Comet.speed_min = HYPERX_SPEED_COMET_SLOW; Comet.speed_min = HYPERX_SPEED_COMET_SLOW;
Comet.speed_max = HYPERX_SPEED_COMET_FAST; Comet.speed_max = HYPERX_SPEED_COMET_FAST;
Comet.random = false; Comet.colors_min = 1;
Comet.speed = HYPERX_SPEED_COMET_NORMAL; Comet.colors_max = 1;
Comet.speed = HYPERX_SPEED_COMET_NORMAL;
Comet.color_mode = MODE_COLORS_MODE_SPECIFIC;
Comet.colors.resize(1);
modes.push_back(Comet); modes.push_back(Comet);
mode Heartbeat; mode Heartbeat;
Heartbeat.name = "Heartbeat"; Heartbeat.name = "Heartbeat";
Heartbeat.value = HYPERX_MODE_HEARTBEAT; Heartbeat.value = HYPERX_MODE_HEARTBEAT;
Heartbeat.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Heartbeat.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Heartbeat.speed_min = HYPERX_SPEED_COMET_SLOW; Heartbeat.speed_min = HYPERX_SPEED_COMET_SLOW;
Heartbeat.speed_max = HYPERX_SPEED_COMET_FAST; Heartbeat.speed_max = HYPERX_SPEED_COMET_FAST;
Heartbeat.random = false; Heartbeat.colors_min = 1;
Heartbeat.speed = HYPERX_SPEED_COMET_NORMAL; Heartbeat.colors_max = 1;
Heartbeat.speed = HYPERX_SPEED_COMET_NORMAL;
Heartbeat.color_mode = MODE_COLORS_MODE_SPECIFIC;
Heartbeat.colors.resize(1);
modes.push_back(Heartbeat); modes.push_back(Heartbeat);
mode SpectrumCycle; mode SpectrumCycle;
SpectrumCycle.name = "Spectrum Cycle"; SpectrumCycle.name = "Spectrum Cycle";
SpectrumCycle.value = HYPERX_MODE_CYCLE; SpectrumCycle.value = HYPERX_MODE_CYCLE;
SpectrumCycle.flags = MODE_FLAG_HAS_SPEED; SpectrumCycle.flags = MODE_FLAG_HAS_SPEED;
SpectrumCycle.speed_min = HYPERX_SPEED_CYCLE_SLOW; SpectrumCycle.speed_min = HYPERX_SPEED_CYCLE_SLOW;
SpectrumCycle.speed_max = HYPERX_SPEED_CYCLE_FAST; SpectrumCycle.speed_max = HYPERX_SPEED_CYCLE_FAST;
SpectrumCycle.speed = HYPERX_SPEED_CYCLE_NORMAL; SpectrumCycle.speed = HYPERX_SPEED_CYCLE_NORMAL;
SpectrumCycle.color_mode = MODE_COLORS_NONE;
modes.push_back(SpectrumCycle); modes.push_back(SpectrumCycle);
mode Breathing; mode Breathing;
Breathing.name = "Breathing"; Breathing.name = "Breathing";
Breathing.value = HYPERX_MODE_BREATHING; Breathing.value = HYPERX_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Breathing.speed_min = HYPERX_SPEED_BREATHING_SLOW; Breathing.speed_min = HYPERX_SPEED_BREATHING_SLOW;
Breathing.speed_max = HYPERX_SPEED_BREATHING_FAST; Breathing.speed_max = HYPERX_SPEED_BREATHING_FAST;
Breathing.random = false; Breathing.colors_min = 1;
Breathing.speed = HYPERX_SPEED_BREATHING_NORMAL; Breathing.colors_max = 1;
Breathing.speed = HYPERX_SPEED_BREATHING_NORMAL;
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
Breathing.colors.resize(1);
modes.push_back(Breathing); modes.push_back(Breathing);
mode Bounce; mode Bounce;
Bounce.name = "Bounce"; Bounce.name = "Bounce";
Bounce.value = HYPERX_MODE_BOUNCE; Bounce.value = HYPERX_MODE_BOUNCE;
Bounce.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Bounce.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Bounce.speed_min = HYPERX_SPEED_BOUNCE_SLOW; Bounce.speed_min = HYPERX_SPEED_BOUNCE_SLOW;
Bounce.speed_max = HYPERX_SPEED_BOUNCE_FAST; Bounce.speed_max = HYPERX_SPEED_BOUNCE_FAST;
Bounce.random = false; Bounce.colors_min = 1;
Bounce.speed = HYPERX_SPEED_BOUNCE_NORMAL; Bounce.colors_max = 1;
Bounce.speed = HYPERX_SPEED_BOUNCE_NORMAL;
Bounce.color_mode = MODE_COLORS_MODE_SPECIFIC;
Bounce.colors.resize(1);
modes.push_back(Bounce); modes.push_back(Bounce);
mode Blink; mode Blink;
Blink.name = "Blink"; Blink.name = "Blink";
Blink.value = HYPERX_MODE_BLINK; Blink.value = HYPERX_MODE_BLINK;
Blink.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_RANDOM_COLOR; Blink.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Blink.speed_min = HYPERX_SPEED_BLINK_SLOW; Blink.speed_min = HYPERX_SPEED_BLINK_SLOW;
Blink.speed_max = HYPERX_SPEED_BLINK_FAST; Blink.speed_max = HYPERX_SPEED_BLINK_FAST;
Blink.random = false; Blink.colors_min = 1;
Blink.speed = HYPERX_SPEED_BLINK_NORMAL; Blink.colors_max = 1;
Blink.speed = HYPERX_SPEED_BLINK_NORMAL;
Blink.color_mode = MODE_COLORS_MODE_SPECIFIC;
Blink.colors.resize(1);
modes.push_back(Blink); modes.push_back(Blink);
colors.resize(hyperx->GetLEDCount()); colors.resize(hyperx->GetLEDCount());
@@ -217,6 +239,17 @@ void RGBController_HyperX::SetCustomMode()
void RGBController_HyperX::UpdateMode() void RGBController_HyperX::UpdateMode()
{ {
hyperx->SetMode(modes[active_mode].value, modes[active_mode].random, modes[active_mode].speed); bool random = (modes[active_mode].color_mode == MODE_COLORS_RANDOM);
hyperx->SetMode(modes[active_mode].value, random, modes[active_mode].speed);
if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC)
{
unsigned char red = RGBGetRValue(modes[active_mode].colors[0]);
unsigned char grn = RGBGetGValue(modes[active_mode].colors[0]);
unsigned char blu = RGBGetBValue(modes[active_mode].colors[0]);
hyperx->SetEffectColor(red, grn, blu);
}
} }
+95 -24
View File
@@ -9,6 +9,41 @@
#include "RGBController_HyperXKeyboard.h" #include "RGBController_HyperXKeyboard.h"
//Include thread libraries for Windows or Linux
#ifdef WIN32
#include <process.h>
#else
#include "pthread.h"
#include "unistd.h"
#endif
//Thread functions have different types in Windows and Linux
#ifdef WIN32
#define THREAD static void
#define THREADRETURN
#else
#define THREAD static void*
#define THREADRETURN return(NULL);
#endif
#ifdef WIN32
#include <Windows.h>
#else
#include <unistd.h>
static void Sleep(unsigned int milliseconds)
{
usleep(1000 * milliseconds);
}
#endif
THREAD keepalive_thread(void *param)
{
RGBController_HyperXKeyboard* controller = static_cast<RGBController_HyperXKeyboard*>(param);
controller->KeepaliveThread();
THREADRETURN
}
static const char* zone_names[] = static const char* zone_names[] =
{ {
"Keyboard", "Keyboard",
@@ -161,38 +196,41 @@ RGBController_HyperXKeyboard::RGBController_HyperXKeyboard(HyperXKeyboardControl
type = DEVICE_TYPE_KEYBOARD; type = DEVICE_TYPE_KEYBOARD;
mode Direct; mode Direct;
Direct.name = "Direct"; Direct.name = "Direct";
Direct.value = HYPERX_MODE_STATIC; Direct.value = HYPERX_MODE_STATIC;
Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.random = false; Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct); modes.push_back(Direct);
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = HYPERX_MODE_STATIC; Static.value = HYPERX_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Static.random = false; Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static); modes.push_back(Static);
mode Wave; mode Wave;
Wave.name = "Wave"; Wave.name = "Wave";
Wave.value = HYPERX_MODE_WAVE; Wave.value = HYPERX_MODE_WAVE;
Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR;
Wave.speed_min = 0x00; Wave.speed_min = 0x00;
Wave.speed_max = 0x09; Wave.speed_max = 0x09;
Wave.random = false; Wave.color_mode = MODE_COLORS_NONE;
Wave.speed = 0x09; Wave.speed = 0x09;
Wave.direction = MODE_DIRECTION_LEFT; Wave.direction = MODE_DIRECTION_LEFT;
modes.push_back(Wave); modes.push_back(Wave);
mode Breathing; mode Breathing;
Breathing.name = "Breathing"; Breathing.name = "Breathing";
Breathing.value = HYPERX_MODE_BREATHING; Breathing.value = HYPERX_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_SPEED; Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Breathing.speed_min = 0x00; Breathing.speed_min = 0x00;
Breathing.speed_max = 0x09; Breathing.speed_max = 0x09;
Breathing.random = false; Breathing.colors_min = 1;
Breathing.speed = 0x09; Breathing.colors_max = 2;
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
Breathing.speed = 0x09;
Breathing.colors.resize(2);
modes.push_back(Breathing); modes.push_back(Breathing);
colors.resize(126); colors.resize(126);
@@ -220,6 +258,19 @@ RGBController_HyperXKeyboard::RGBController_HyperXKeyboard(HyperXKeyboardControl
zones.push_back(new_zone); zones.push_back(new_zone);
} }
/*-----------------------------------------------------*\
| The Corsair Lighting Node Pro requires a packet within|
| 20 seconds of sending the lighting change in order |
| to not revert back into rainbow mode. Start a thread |
| to continuously send a keepalive packet every 5s |
\*-----------------------------------------------------*/
#ifdef WIN32
_beginthread(keepalive_thread, 0, this);
#else
pthread_t thread;
pthread_create(&thread, NULL, &keepalive_thread, this);
#endif
} }
RGBController_HyperXKeyboard::~RGBController_HyperXKeyboard() RGBController_HyperXKeyboard::~RGBController_HyperXKeyboard()
@@ -256,5 +307,25 @@ void RGBController_HyperXKeyboard::SetCustomMode()
void RGBController_HyperXKeyboard::UpdateMode() void RGBController_HyperXKeyboard::UpdateMode()
{ {
hyperx->SetMode(modes[active_mode].value, modes[active_mode].direction, modes[active_mode].speed); if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC)
{
hyperx->SetMode(modes[active_mode].value, modes[active_mode].direction, modes[active_mode].speed, modes[active_mode].colors);
}
else
{
std::vector<RGBColor> temp_colors;
hyperx->SetMode(modes[active_mode].value, modes[active_mode].direction, modes[active_mode].speed, temp_colors);
}
} }
void RGBController_HyperXKeyboard::KeepaliveThread()
{
while(1)
{
if(active_mode == 0)
{
hyperx->SetLEDsDirect(colors);
}
Sleep(200);
}
}
@@ -23,6 +23,8 @@ public:
void SetCustomMode(); void SetCustomMode();
void UpdateMode(); void UpdateMode();
void KeepaliveThread();
private: private:
HyperXKeyboardController* hyperx; HyperXKeyboardController* hyperx;
}; };
+7 -4
View File
@@ -18,9 +18,12 @@ RGBController_LEDStrip::RGBController_LEDStrip(LEDStripController* ledstrip_ptr)
type = DEVICE_TYPE_LEDSTRIP; type = DEVICE_TYPE_LEDSTRIP;
mode led_mode; mode Direct;
led_mode.name = "Custom"; Direct.name = "Direct";
modes.push_back(led_mode); Direct.value = 0;
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct);
colors.resize(strip->num_leds); colors.resize(strip->num_leds);
@@ -70,4 +73,4 @@ void RGBController_LEDStrip::SetCustomMode()
void RGBController_LEDStrip::UpdateMode() void RGBController_LEDStrip::UpdateMode()
{ {
} }
+7 -4
View File
@@ -16,9 +16,12 @@ RGBController_MSI3Zone::RGBController_MSI3Zone(MSI3ZoneController* msi_ptr)
name = "MSI 3-Zone Keyboard"; name = "MSI 3-Zone Keyboard";
type = DEVICE_TYPE_KEYBOARD; type = DEVICE_TYPE_KEYBOARD;
mode led_mode; mode Direct;
led_mode.name = "Custom"; Direct.name = "Direct";
modes.push_back(led_mode); Direct.value = 0;
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct);
led left_led; led left_led;
left_led.name = "Keyboard Left"; left_led.name = "Keyboard Left";
@@ -87,4 +90,4 @@ void RGBController_MSI3Zone::SetCustomMode()
void RGBController_MSI3Zone::UpdateMode() void RGBController_MSI3Zone::UpdateMode()
{ {
} }
+75
View File
@@ -0,0 +1,75 @@
/*-----------------------------------------*\
| RGBController_MSIRGB.cpp |
| |
| Generic RGB Interface for MSI-RGB |
| |
| Adam Honse (CalcProgrammer1) 2/14/2020 |
\*-----------------------------------------*/
#include "RGBController_MSIRGB.h"
RGBController_MSIRGB::RGBController_MSIRGB(MSIRGBController* msi_ptr)
{
msi = msi_ptr;
name = "MSI Motherboard";
description = "MSI-RGB Device";
type = DEVICE_TYPE_MOTHERBOARD;
mode Direct;
Direct.name = "Direct";
Direct.value = 0;
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct);
led msi_led;
msi_led.name = "MSI LED";
leds.push_back(msi_led);
zone msi_zone;
msi_zone.name = "MSI Zone";
msi_zone.type = ZONE_TYPE_SINGLE;
std::vector<int> msi_zone_map;
msi_zone_map.push_back(0);
msi_zone.map.push_back(msi_zone_map);
zones.push_back(msi_zone);
colors.push_back(0x00000000);
}
RGBController_MSIRGB::~RGBController_MSIRGB()
{
}
void RGBController_MSIRGB::UpdateLEDs()
{
RGBColor color = colors[0];
unsigned char red = RGBGetRValue(color);
unsigned char grn = RGBGetGValue(color);
unsigned char blu = RGBGetBValue(color);
msi->SetColor(red, grn, blu);
}
void RGBController_MSIRGB::UpdateZoneLEDs(int zone)
{
UpdateLEDs();
}
void RGBController_MSIRGB::UpdateSingleLED(int led)
{
UpdateLEDs();
}
void RGBController_MSIRGB::SetCustomMode()
{
}
void RGBController_MSIRGB::UpdateMode()
{
}
+27
View File
@@ -0,0 +1,27 @@
/*-----------------------------------------*\
| RGBController_MSIRGB.h |
| |
| Generic RGB Interface for MSI-RGB |
| |
| Adam Honse (CalcProgrammer1) 2/14/2020 |
\*-----------------------------------------*/
#pragma once
#include "RGBController.h"
#include "MSIRGBController.h"
class RGBController_MSIRGB : public RGBController
{
public:
RGBController_MSIRGB(MSIRGBController* msi_ptr);
~RGBController_MSIRGB();
void UpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void SetCustomMode();
void UpdateMode();
private:
MSIRGBController* msi;
};
+181 -87
View File
@@ -12,7 +12,6 @@
#include <fstream> #include <fstream>
#include <unistd.h> #include <unistd.h>
void RGBController_OpenRazer::UpdateLEDs() void RGBController_OpenRazer::UpdateLEDs()
{ {
switch(matrix_type) switch(matrix_type)
@@ -81,7 +80,7 @@ void RGBController_OpenRazer::UpdateLEDs()
} }
} }
break; break;
#if 0
case RAZER_TYPE_NOMATRIX: case RAZER_TYPE_NOMATRIX:
{ {
unsigned int output_array_size = 3; unsigned int output_array_size = 3;
@@ -107,6 +106,7 @@ void RGBController_OpenRazer::UpdateLEDs()
scroll_led_effect.flush(); scroll_led_effect.flush();
} }
break; break;
#endif
} }
} }
@@ -120,59 +120,8 @@ void RGBController_OpenRazer::UpdateSingleLED(int led)
UpdateLEDs(); UpdateLEDs();
} }
static std::string GetDeviceTypeString(std::string dev_path)
{
// Read device_type for device name string
std::string dev_type_path = dev_path + "/device_type";
std::ifstream dev_type_file;
std::string ret_str;
dev_type_file.open(dev_type_path);
std::getline(dev_type_file, ret_str);
dev_type_file.close();
return(ret_str);
}
static std::string GetFirmwareVersionString(std::string dev_path)
{
// Read firmware_version for firmware version string
std::string firm_ver_path = dev_path + "/firmware_version";
std::ifstream firm_ver_file;
std::string ret_str;
firm_ver_file.open(firm_ver_path);
std::getline(firm_ver_file, ret_str);
firm_ver_file.close();
return(ret_str);
}
static std::string GetSerialNumberString(std::string dev_path)
{
// Read device_serial for serial number string
std::string ser_num_path = dev_path + "/device_serial";
std::ifstream ser_num_file;
std::string ret_str;
ser_num_file.open(ser_num_path);
std::getline(ser_num_file, ret_str);
ser_num_file.close();
return(ret_str);
}
void RGBController_OpenRazer::SetupMatrixDevice(std::string dev_path, unsigned int rows, unsigned int cols) void RGBController_OpenRazer::SetupMatrixDevice(std::string dev_path, unsigned int rows, unsigned int cols)
{ {
matrix_custom_frame.open(dev_path + "/matrix_custom_frame");
matrix_effect_custom.open(dev_path + "/matrix_effect_custom");
matrix_effect_breath.open(dev_path + "/matrix_effect_breath");
matrix_effect_none.open(dev_path + "/matrix_effect_none");
matrix_effect_reactive.open(dev_path + "/matrix_effect_reactive");
matrix_effect_spectrum.open(dev_path + "/matrix_effect_spectrum");
matrix_effect_static.open(dev_path + "/matrix_effect_static");
matrix_effect_wave.open(dev_path + "/matrix_effect_wave");
if(!matrix_custom_frame) if(!matrix_custom_frame)
{ {
if(!matrix_effect_custom) if(!matrix_effect_custom)
@@ -198,27 +147,60 @@ void RGBController_OpenRazer::SetupMatrixDevice(std::string dev_path, unsigned i
void RGBController_OpenRazer::SetupNonMatrixDevice(std::string dev_path) void RGBController_OpenRazer::SetupNonMatrixDevice(std::string dev_path)
{ {
logo_led_effect.open(dev_path + "/logo_led_effect");
logo_led_rgb.open(dev_path + "/logo_led_rgb");
scroll_led_effect.open(dev_path + "/scroll_led_effect");
scroll_led_rgb.open(dev_path + "/scroll_led_rgb");
matrix_type = RAZER_TYPE_NOMATRIX; matrix_type = RAZER_TYPE_NOMATRIX;
} }
void RGBController_OpenRazer::OpenFunctions(std::string dev_path)
{
device_type.open( dev_path + "/device_type");
device_serial.open( dev_path + "/device_serial");
firmware_version.open( dev_path + "/firmware_version");
matrix_custom_frame.open( dev_path + "/matrix_custom_frame");
matrix_brightness.open( dev_path + "/matrix_brightness");
matrix_effect_custom.open( dev_path + "/matrix_effect_custom");
matrix_effect_none.open( dev_path + "/matrix_effect_none");
matrix_effect_static.open( dev_path + "/matrix_effect_static");
matrix_effect_breath.open( dev_path + "/matrix_effect_breath");
matrix_effect_spectrum.open( dev_path + "/matrix_effect_spectrum");
matrix_effect_reactive.open( dev_path + "/matrix_effect_reactive");
matrix_effect_wave.open( dev_path + "/matrix_effect_wave");
logo_led_brightness.open( dev_path + "/logo_led_brightness");
logo_matrix_effect_none.open( dev_path + "/logo_matrix_effect_none");
logo_matrix_effect_static.open( dev_path + "/logo_matrix_effect_static");
logo_matrix_effect_spectrum.open( dev_path + "/logo_matrix_effect_spectrum");
logo_matrix_effect_reactive.open( dev_path + "/logo_matrix_effect_reactive");
scroll_led_brightness.open( dev_path + "/scroll_led_brightness");
scroll_matrix_effect_none.open( dev_path + "/scroll_matrix_effect_none");
scroll_matrix_effect_static.open( dev_path + "/scroll_matrix_effect_static");
scroll_matrix_effect_spectrum.open(dev_path + "/scroll_matrix_effect_spectrum");
scroll_matrix_effect_reactive.open(dev_path + "/scroll_matrix_effect_reactive");
scroll_led_effect.open( dev_path + "/scroll_led_effect");
scroll_led_rgb.open( dev_path + "/scroll_led_rgb");
}
RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path) RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
{ {
unsigned int led_count = 0; unsigned int led_count = 0;
/*-----------------------------------------------------------------*\
| Open the OpenRazer device functions |
\*-----------------------------------------------------------------*/
OpenFunctions(dev_path);
/*-----------------------------------------------------------------*\ /*-----------------------------------------------------------------*\
| Start device at -1. This indicates the device was not detected | | Start device at -1. This indicates the device was not detected |
\*-----------------------------------------------------------------*/ \*-----------------------------------------------------------------*/
device = -1; device_index = -1;
/*-----------------------------------------------------------------*\ /*-----------------------------------------------------------------*\
| Get the device name from the OpenRazer driver | | Get the device name from the OpenRazer driver |
\*-----------------------------------------------------------------*/ \*-----------------------------------------------------------------*/
name = GetDeviceTypeString(dev_path); std::getline(device_type, name);
/*-----------------------------------------------------------------*\ /*-----------------------------------------------------------------*\
| Set the description to indicate this is an OpenRazer device | | Set the description to indicate this is an OpenRazer device |
@@ -233,12 +215,12 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
/*-----------------------------------------------------------------*\ /*-----------------------------------------------------------------*\
| Get the serial number from the dev path | | Get the serial number from the dev path |
\*-----------------------------------------------------------------*/ \*-----------------------------------------------------------------*/
serial = GetSerialNumberString(dev_path); std::getline(device_serial, serial);
/*-----------------------------------------------------------------*\ /*-----------------------------------------------------------------*\
| Get the firmware version from the dev path | | Get the firmware version from the dev path |
\*-----------------------------------------------------------------*/ \*-----------------------------------------------------------------*/
version = GetFirmwareVersionString(dev_path); std::getline(firmware_version, version);
/*-----------------------------------------------------------------*\ /*-----------------------------------------------------------------*\
| Loop through all known devices to look for a name match | | Loop through all known devices to look for a name match |
@@ -250,7 +232,7 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
/*---------------------------------------------------------*\ /*---------------------------------------------------------*\
| Set device ID | | Set device ID |
\*---------------------------------------------------------*/ \*---------------------------------------------------------*/
device = i; device_index = i;
/*---------------------------------------------------------*\ /*---------------------------------------------------------*\
| Set device type | | Set device type |
@@ -260,19 +242,81 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
/*---------------------------------------------------------*\ /*---------------------------------------------------------*\
| Initialize modes | | Initialize modes |
\*---------------------------------------------------------*/ \*---------------------------------------------------------*/
mode razer_modes[RAZER_NUM_MODES]; if(matrix_effect_custom)
razer_modes[0].name = "Custom";
razer_modes[1].name = "Off";
razer_modes[2].name = "Static";
razer_modes[3].name = "Breathing";
razer_modes[4].name = "Spectrum Cycle";
razer_modes[5].name = "Wave";
razer_modes[6].name = "Reactive";
for (int i = 0; i < RAZER_NUM_MODES; i++)
{ {
modes.push_back(razer_modes[i]); mode Custom;
Custom.name = "Custom";
Custom.value = RAZER_MODE_CUSTOM;
Custom.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Custom.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Custom);
}
if(matrix_effect_none)
{
mode Off;
Off.name = "Off";
Off.value = RAZER_MODE_OFF;
Off.flags = 0;
Off.color_mode = MODE_COLORS_NONE;
modes.push_back(Off);
}
if(matrix_effect_static)
{
mode Static;
Static.name = "Static";
Static.value = RAZER_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Static.colors_min = 1;
Static.colors_max = 1;
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
Static.colors.resize(1);
modes.push_back(Static);
}
if(matrix_effect_breath)
{
mode Breathing;
Breathing.name = "Breathing";
Breathing.value = RAZER_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Breathing.colors_min = 1;
Breathing.colors_max = 2;
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
Breathing.colors.resize(1);
modes.push_back(Breathing);
}
if(matrix_effect_spectrum)
{
mode SpectrumCycle;
SpectrumCycle.name = "Spectrum Cycle";
SpectrumCycle.value = RAZER_MODE_SPECTRUM_CYCLE;
SpectrumCycle.flags = 0;
SpectrumCycle.color_mode = MODE_COLORS_NONE;
modes.push_back(SpectrumCycle);
}
if(matrix_effect_wave)
{
mode Wave;
Wave.name = "Wave";
Wave.value = RAZER_MODE_WAVE;
Wave.flags = MODE_FLAG_HAS_DIRECTION_LR;
Wave.direction = MODE_DIRECTION_RIGHT;
Wave.color_mode = MODE_COLORS_NONE;
modes.push_back(Wave);
}
if(matrix_effect_reactive)
{
mode Reactive;
Reactive.name = "Reactive";
Reactive.value = RAZER_MODE_REACTIVE;
Reactive.flags = 0;
Reactive.color_mode = MODE_COLORS_NONE;
modes.push_back(Reactive);
} }
/*---------------------------------------------------------*\ /*---------------------------------------------------------*\
@@ -304,11 +348,15 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path)
for (unsigned int col_id = 0; col_id < device_list[i]->zones[zone_id]->cols; col_id++) for (unsigned int col_id = 0; col_id < device_list[i]->zones[zone_id]->cols; col_id++)
{ {
char id_buf[8];
snprintf(id_buf, 8, "%d", col_id + 1);
RGBColor new_color = 0x00000000; RGBColor new_color = 0x00000000;
colors.push_back(new_color); colors.push_back(new_color);
led* new_led = new led(); led* new_led = new led();
new_led->name = device_list[i]->zones[zone_id]->name; new_led->name = device_list[i]->zones[zone_id]->name + " LED ";
new_led->name.append(id_buf);
leds.push_back(*new_led); leds.push_back(*new_led);
new_zone_map.push_back(led_count); new_zone_map.push_back(led_count);
@@ -332,49 +380,94 @@ void RGBController_OpenRazer::SetCustomMode()
void RGBController_OpenRazer::UpdateMode() void RGBController_OpenRazer::UpdateMode()
{ {
char update_value = 1; char update_value[6];
update_value[0] = 1;
switch(matrix_type) switch(matrix_type)
{ {
case RAZER_TYPE_MATRIX_FRAME: case RAZER_TYPE_MATRIX_FRAME:
case RAZER_TYPE_MATRIX_NOFRAME: case RAZER_TYPE_MATRIX_NOFRAME:
{ {
switch(active_mode) switch(modes[active_mode].value)
{ {
case RAZER_MODE_CUSTOM: case RAZER_MODE_CUSTOM:
matrix_effect_custom.write(&update_value, 1); matrix_effect_custom.write(update_value, 1);
matrix_effect_custom.flush(); matrix_effect_custom.flush();
break; break;
case RAZER_MODE_OFF: case RAZER_MODE_OFF:
matrix_effect_none.write(&update_value, 1); matrix_effect_none.write(update_value, 1);
matrix_effect_none.flush(); matrix_effect_none.flush();
break; break;
case RAZER_MODE_STATIC: case RAZER_MODE_STATIC:
update_value[0] = RGBGetRValue(modes[RAZER_MODE_STATIC].colors[0]);
update_value[1] = RGBGetGValue(modes[RAZER_MODE_STATIC].colors[0]);
update_value[2] = RGBGetBValue(modes[RAZER_MODE_STATIC].colors[0]);
matrix_effect_static.write(update_value, 3);
matrix_effect_static.flush();
break; break;
case RAZER_MODE_BREATHING: case RAZER_MODE_BREATHING:
switch(modes[RAZER_MODE_BREATHING].color_mode)
{
case MODE_COLORS_MODE_SPECIFIC:
update_value[0] = RGBGetRValue(modes[RAZER_MODE_BREATHING].colors[0]);
update_value[1] = RGBGetGValue(modes[RAZER_MODE_BREATHING].colors[0]);
update_value[2] = RGBGetBValue(modes[RAZER_MODE_BREATHING].colors[0]);
if(modes[RAZER_MODE_BREATHING].colors.size() == 2)
{
update_value[3] = RGBGetRValue(modes[RAZER_MODE_BREATHING].colors[1]);
update_value[4] = RGBGetGValue(modes[RAZER_MODE_BREATHING].colors[1]);
update_value[5] = RGBGetBValue(modes[RAZER_MODE_BREATHING].colors[1]);
matrix_effect_breath.write(update_value, 6);
matrix_effect_breath.flush();
}
else
{
matrix_effect_breath.write(update_value, 3);
matrix_effect_breath.flush();
}
break;
case MODE_COLORS_RANDOM:
matrix_effect_breath.write(update_value, 1);
matrix_effect_breath.flush();
break;
}
break; break;
case RAZER_MODE_SPECTRUM_CYCLE: case RAZER_MODE_SPECTRUM_CYCLE:
matrix_effect_spectrum.write(&update_value, 1); matrix_effect_spectrum.write(update_value, 1);
matrix_effect_spectrum.flush(); matrix_effect_spectrum.flush();
break; break;
case RAZER_MODE_WAVE: case RAZER_MODE_WAVE:
matrix_effect_wave.write(&update_value, 1); switch(modes[active_mode].direction)
{
case MODE_DIRECTION_LEFT:
update_value[0] = '2';
break;
default:
update_value[0] = '1';
break;
}
matrix_effect_wave.write(update_value, 1);
matrix_effect_wave.flush(); matrix_effect_wave.flush();
break; break;
case RAZER_MODE_REACTIVE: case RAZER_MODE_REACTIVE:
matrix_effect_reactive.write(&update_value, 1); matrix_effect_reactive.write(update_value, 1);
matrix_effect_reactive.flush(); matrix_effect_reactive.flush();
break; break;
} }
} }
break; break;
#if 0
case RAZER_TYPE_NOMATRIX: case RAZER_TYPE_NOMATRIX:
{ {
switch(active_mode) switch(active_mode)
@@ -396,5 +489,6 @@ void RGBController_OpenRazer::UpdateMode()
break; break;
} }
} }
#endif
} }
} }
+26 -890
View File
@@ -10,890 +10,10 @@
#pragma once #pragma once
#include "RGBController.h" #include "RGBController.h"
#include "OpenRazerDevices.h"
#include <fstream> #include <fstream>
#define RAZER_MAX_ZONES 6
typedef struct
{
std::string name;
unsigned int type;
unsigned int rows;
unsigned int cols;
} razer_zone;
typedef struct
{
std::string name;
device_type type;
bool matrix_type;
unsigned int rows;
unsigned int cols;
const razer_zone* zones[RAZER_MAX_ZONES];
} razer_device;
/*-------------------------------------------------------------------------*\
| KEYBOARDS |
\*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------*\
| Razer BlackWidow Chroma |
| |
| Zone "Keyboard" |
| Matrix |
| 6 Rows, 22 Columns |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_chroma_zone =
{
"Keyboard",
ZONE_TYPE_MATRIX,
6,
22
};
static const razer_device blackwidow_chroma_device =
{
"Razer BlackWidow Chroma",
DEVICE_TYPE_KEYBOARD,
true,
6,
22,
{
&blackwidow_chroma_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer BlackWidow Chroma Tournament Edition |
| |
| Zone "Keyboard" |
| Matrix |
| 6 Rows, 22 Columns |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_chroma_te_zone =
{
"Keyboard",
ZONE_TYPE_MATRIX,
6,
22
};
static const razer_device blackwidow_chroma_te_device =
{
"Razer BlackWidow Chroma Tournament Edition",
DEVICE_TYPE_KEYBOARD,
true,
6,
22,
{
&blackwidow_chroma_te_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer Ornata Chroma |
| |
| Zone "Keyboard" |
| Matrix |
| 6 Rows, 22 Columns |
\*-------------------------------------------------------------*/
static const razer_zone ornata_chroma_zone =
{
"Keyboard",
ZONE_TYPE_MATRIX,
6,
22
};
static const razer_device ornata_chroma_device =
{
"Razer Ornata Chroma",
DEVICE_TYPE_KEYBOARD,
true,
6,
22,
{
&ornata_chroma_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer DeathStalker Chroma |
| |
| Zone "Keyboard" |
| Linear |
| 12 LEDs |
\*-------------------------------------------------------------*/
static const razer_zone deathstalker_chroma_zone =
{
"Keyboard",
ZONE_TYPE_LINEAR,
1,
12
};
static const razer_device deathstalker_chroma_device =
{
"Razer DeathStalker Chroma",
DEVICE_TYPE_KEYBOARD,
true,
1,
12,
{
&deathstalker_chroma_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------------------*\
| LAPTOPS |
\*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------*\
| Razer Blade Stealth |
| |
| Zone "Keyboard" |
| Matrix |
| 6 Rows, 16 Columns |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_zone =
{
"Keyboard",
ZONE_TYPE_MATRIX,
6,
16
};
static const razer_device blade_stealth_device =
{
"Razer Blade Stealth",
DEVICE_TYPE_KEYBOARD,
true,
6,
16,
{
&blade_stealth_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer Blade Pro (Late 2016) |
| |
| Zone "Keyboard" |
| Matrix |
| 6 Rows, 25 Columns |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_late_2016_zone =
{
"Keyboard",
ZONE_TYPE_MATRIX,
6,
25
};
static const razer_device blade_pro_late_2016_device =
{
"Razer Blade Pro (Late 2016)",
DEVICE_TYPE_KEYBOARD,
true,
6,
25,
{
&blade_pro_late_2016_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer Blade Pro (2017) |
| |
| Zone "Keyboard" |
| Matrix |
| 6 Rows, 25 Columns |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_2017_zone =
{
"Keyboard",
ZONE_TYPE_MATRIX,
6,
25
};
static const razer_device blade_pro_2017_device =
{
"Razer Blade Pro (2017)",
DEVICE_TYPE_KEYBOARD,
true,
6,
25,
{
&blade_pro_2017_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------------------*\
| MICE |
\*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------*\
| Razer Mamba Tournament Edition |
| |
| Zone "Left" |
| Linear |
| 7 LEDs |
| |
| Zone "Right" |
| Linear |
| 7 LEDs |
| |
| Zone "Logo" |
| Single |
| 1 LED |
| |
| Zone "Scroll Wheel" |
| Single |
| 1 LED |
\*-------------------------------------------------------------*/
static const razer_zone mamba_te_left_zone =
{
"Left LED Strip",
ZONE_TYPE_LINEAR,
1,
7
};
static const razer_zone mamba_te_right_zone =
{
"Right LED Strip",
ZONE_TYPE_LINEAR,
1,
7
};
static const razer_zone mamba_te_logo_zone =
{
"Logo",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_zone mamba_te_scroll_wheel_zone =
{
"Scroll Wheel",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_device mamba_te_device =
{
"Razer Mamba Tournament Edition",
DEVICE_TYPE_MOUSE,
true,
1,
16,
{
&mamba_te_left_zone,
&mamba_te_right_zone,
&mamba_te_logo_zone,
&mamba_te_scroll_wheel_zone,
NULL,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer Diamondback Chroma |
| |
| Zone "Right" |
| Linear |
| 7 LEDs |
| |
| Zone "Bottom" |
| Linear |
| 5 LEDs |
| |
| Zone "Left" |
| Linear |
| 7 LEDs |
| |
| Zone "Logo" |
| Single |
| 1 LED |
| |
| Zone "Scroll Wheel" |
| Single |
| 1 LED |
\*-------------------------------------------------------------*/
static const razer_zone diamondback_chroma_right_zone =
{
"Right LED Strip",
ZONE_TYPE_LINEAR,
1,
7
};
static const razer_zone diamondback_chroma_bottom_zone =
{
"Bottom LED Strip",
ZONE_TYPE_LINEAR,
1,
5
};
static const razer_zone diamondback_chroma_left_zone =
{
"Left LED Strip",
ZONE_TYPE_LINEAR,
1,
7
};
static const razer_zone diamondback_chroma_logo_zone =
{
"Logo",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_zone diamondback_chroma_scroll_wheel_zone =
{
"Scroll Wheel",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_device diamondback_chroma_device =
{
"Razer Diamondback Chroma",
DEVICE_TYPE_MOUSE,
true,
1,
21,
{
&diamondback_chroma_right_zone,
&diamondback_chroma_bottom_zone,
&diamondback_chroma_left_zone,
&diamondback_chroma_logo_zone,
&diamondback_chroma_scroll_wheel_zone,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer DeathAdder Chroma |
| |
| Zone "Logo" |
| Single |
| 1 LED |
| |
| Zone "Scroll Wheel" |
| Single |
| 1 LED |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_chroma_logo_zone =
{
"Logo",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_zone deathadder_chroma_scroll_wheel_zone =
{
"Scroll Wheel",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_device deathadder_chroma_device =
{
"Razer DeathAdder Chroma",
DEVICE_TYPE_MOUSE,
false,
1,
2,
{
&deathadder_chroma_logo_zone,
&deathadder_chroma_scroll_wheel_zone,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer Naga Chroma |
| |
| Zone "Logo" |
| Single |
| 1 LED |
| |
| Zone "Scroll Wheel" |
| Single |
| 1 LED |
| |
| Zone "Numpad" |
| Single |
| 1 LED |
\*-------------------------------------------------------------*/
static const razer_zone naga_chroma_logo_zone =
{
"Logo",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_zone naga_chroma_scroll_wheel_zone =
{
"Scroll Wheel",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_zone naga_chroma_numpad_zone =
{
"Numpad",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_device naga_chroma_device =
{
"Razer Naga Chroma",
DEVICE_TYPE_MOUSE,
false,
1,
3,
{
&naga_chroma_logo_zone,
&naga_chroma_scroll_wheel_zone,
&naga_chroma_numpad_zone,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------------------*\
| KEYPADS |
\*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------*\
| Razer Orbweaver Chroma |
| |
| Zone "Keypad" |
| Matrix |
| 4 Rows, 5 Columns |
\*-------------------------------------------------------------*/
static const razer_zone orbweaver_chroma_zone =
{
"Keypad",
ZONE_TYPE_MATRIX,
4,
5
};
static const razer_device orbweaver_chroma_device =
{
"Razer Orbweaver Chroma",
DEVICE_TYPE_KEYBOARD,
true,
6,
25,
{
&orbweaver_chroma_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer Tartarus Chroma |
| |
| Zone "Keypad" |
| Single |
| 1 LED |
\*-------------------------------------------------------------*/
static const razer_zone tartarus_chroma_zone =
{
"Keypad",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_device tartarus_chroma_device =
{
"Razer Tartarus Chroma",
DEVICE_TYPE_KEYBOARD,
true,
1,
1,
{
&tartarus_chroma_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------------------*\
| MOUSEMATS |
\*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------*\
| Razer Firefly |
| |
| Zone "LED Strip" |
| Linear |
| 15 LEDs |
\*-------------------------------------------------------------*/
static const razer_zone firefly_zone =
{
"LED Strip",
ZONE_TYPE_LINEAR,
1,
15
};
static const razer_device firefly_device =
{
"Razer Firefly",
DEVICE_TYPE_MOUSEMAT,
true,
1,
15,
{
&firefly_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer Goliathus Extended |
| |
| Zone "LED Strip" |
| Single |
| 1 LED |
\*-------------------------------------------------------------*/
static const razer_zone goliathus_extended_zone =
{
"LED Strip",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_device goliathus_extended_device =
{
"Razer Goliathus Extended",
DEVICE_TYPE_MOUSEMAT,
true,
1,
1,
{
&goliathus_extended_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------------------*\
| HEADSETS |
\*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------*\
| Razer Kraken 7.1 Chroma |
| |
| Zone "Headset" |
| Single |
| 1 LED |
\*-------------------------------------------------------------*/
static const razer_zone kraken_chroma_zone =
{
"Headset",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_device kraken_chroma_device =
{
"Razer Kraken 7.1 Chroma",
DEVICE_TYPE_HEADSET,
true,
1,
1,
{
&kraken_chroma_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer Kraken 7.1 V2 |
| |
| Zone "Headset" |
| Single |
| 1 LED |
\*-------------------------------------------------------------*/
static const razer_zone kraken_v2_zone =
{
"Headset",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_device kraken_v2_device =
{
"Razer Kraken 7.1 V2",
DEVICE_TYPE_HEADSET,
true,
1,
1,
{
&kraken_v2_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------------------*\
| OTHER |
\*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------*\
| Razer Core |
| |
| Zone "Side Window Lights" |
| Single |
| 1 LED |
| |
| Zone "LED Strip" |
| Linear |
| 8 LEDs |
\*-------------------------------------------------------------*/
static const razer_zone core_side_zone =
{
"Side Window Lights",
ZONE_TYPE_SINGLE,
1,
1
};
static const razer_zone core_led_strip_zone =
{
"LED Strip",
ZONE_TYPE_LINEAR,
1,
8
};
static const razer_device core_device =
{
"Razer Core",
DEVICE_TYPE_UNKNOWN,
true,
1,
9,
{
&core_side_zone,
&core_led_strip_zone,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer Chroma Mug Holder |
| |
| Zone "LED Strip" |
| Linear |
| 15 LEDs |
\*-------------------------------------------------------------*/
static const razer_zone mug_holder_zone =
{
"LED Strip",
ZONE_TYPE_LINEAR,
1,
15
};
static const razer_device mug_holder_device =
{
"Razer Chroma Mug Holder",
DEVICE_TYPE_UNKNOWN,
true,
1,
15,
{
&mug_holder_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*-------------------------------------------------------------*\
| Razer Chroma HDK |
| |
| Zone "LED Strip" |
| Linear |
| 16 LEDs |
| |
| Zone "LED Strip" |
| Linear |
| 16 LEDs |
| |
| Zone "LED Strip" |
| Linear |
| 16 LEDs |
| |
| Zone "LED Strip" |
| Linear |
| 16 LEDs |
\*-------------------------------------------------------------*/
static const razer_zone chromahdk_zone =
{
"LED Strip",
ZONE_TYPE_LINEAR,
1,
16
};
static const razer_device chromahdk_device =
{
"Razer Chroma HDK",
DEVICE_TYPE_LEDSTRIP,
true,
4,
16,
{
&chromahdk_zone,
&chromahdk_zone,
&chromahdk_zone,
&chromahdk_zone,
NULL,
NULL
}
};
/*-------------------------------------------------------------------------*\
| DEVICE MASTER LIST |
\*-------------------------------------------------------------------------*/
#define RAZER_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ]))
static const razer_device* device_list[] =
{
/*-----------------------------------------------------------------*\
| KEYBOARDS |
\*-----------------------------------------------------------------*/
&blackwidow_chroma_device,
&blackwidow_chroma_te_device,
&ornata_chroma_device,
&deathstalker_chroma_device,
/*-----------------------------------------------------------------*\
| LAPTOPS |
\*-----------------------------------------------------------------*/
&blade_stealth_device,
&blade_pro_late_2016_device,
&blade_pro_2017_device,
/*-----------------------------------------------------------------*\
| MICE |
\*-----------------------------------------------------------------*/
&mamba_te_device,
&diamondback_chroma_device,
&deathadder_chroma_device,
/*-----------------------------------------------------------------*\
| KEYPADS |
\*-----------------------------------------------------------------*/
&orbweaver_chroma_device,
&tartarus_chroma_device,
/*-----------------------------------------------------------------*\
| MOUSEMATS |
\*-----------------------------------------------------------------*/
&firefly_device,
&goliathus_extended_device,
/*-----------------------------------------------------------------*\
| HEADSETS |
\*-----------------------------------------------------------------*/
&kraken_chroma_device,
&kraken_v2_device,
/*-----------------------------------------------------------------*\
| OTHER |
\*-----------------------------------------------------------------*/
&core_device,
&mug_holder_device,
&chromahdk_device
};
class RGBController_OpenRazer : public RGBController class RGBController_OpenRazer : public RGBController
{ {
public: public:
@@ -927,7 +47,7 @@ public:
void SetCustomMode(); void SetCustomMode();
void UpdateMode(); void UpdateMode();
int device; int device_index;
private: private:
void SetupMatrixDevice(std::string dev_path, unsigned int rows, unsigned int cols); void SetupMatrixDevice(std::string dev_path, unsigned int rows, unsigned int cols);
@@ -937,19 +57,35 @@ private:
unsigned int matrix_rows; unsigned int matrix_rows;
unsigned int matrix_cols; unsigned int matrix_cols;
//OpenRazer Sysfs Entries for Matrix Devices void OpenFunctions(std::string dev_path);
std::ifstream device_type;
std::ifstream device_serial;
std::ifstream firmware_version;
std::ofstream matrix_custom_frame; std::ofstream matrix_custom_frame;
std::ofstream matrix_brightness;
std::ofstream matrix_effect_custom; std::ofstream matrix_effect_custom;
std::ofstream matrix_effect_breath;
std::ofstream matrix_effect_none; std::ofstream matrix_effect_none;
std::ofstream matrix_effect_reactive;
std::ofstream matrix_effect_spectrum;
std::ofstream matrix_effect_static; std::ofstream matrix_effect_static;
std::ofstream matrix_effect_breath;
std::ofstream matrix_effect_spectrum;
std::ofstream matrix_effect_reactive;
std::ofstream matrix_effect_wave; std::ofstream matrix_effect_wave;
//OpenRazer Sysfs Entries for Non-Matrix Devices std::ofstream logo_led_brightness;
std::ofstream logo_led_effect; std::ofstream logo_matrix_effect_none;
std::ofstream logo_led_rgb; std::ofstream logo_matrix_effect_static;
std::ofstream logo_matrix_effect_spectrum;
std::ofstream logo_matrix_effect_reactive;
std::ofstream scroll_led_brightness;
std::ofstream scroll_matrix_effect_none;
std::ofstream scroll_matrix_effect_static;
std::ofstream scroll_matrix_effect_spectrum;
std::ofstream scroll_matrix_effect_reactive;
std::ofstream scroll_led_effect; std::ofstream scroll_led_effect;
std::ofstream scroll_led_rgb; std::ofstream scroll_led_rgb;
}; };
@@ -0,0 +1,476 @@
/*-----------------------------------------*\
| RGBController_OpenRazer.cpp |
| |
| Generic RGB Interface for OpenRazer |
| kernel drivers for Chroma peripherals |
| |
| Adam Honse (CalcProgrammer1) 6/15/2019 |
\*-----------------------------------------*/
#include "RGBController_OpenRazerWindows.h"
#include <algorithm>
#include <fstream>
#include <string.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/hid.h>
void RGBController_OpenRazer::UpdateLEDs()
{
switch(matrix_type)
{
case RAZER_TYPE_MATRIX_FRAME:
case RAZER_TYPE_MATRIX_NOFRAME:
case RAZER_TYPE_MATRIX_STATIC:
{
char update_value = 1;
for (unsigned int row = 0; row < matrix_rows; row++)
{
unsigned int output_array_size;
unsigned int output_offset;
unsigned int row_offset = (row * matrix_cols);
if(matrix_type == RAZER_TYPE_MATRIX_FRAME)
{
output_array_size = 3 + (matrix_cols* 3);
output_offset = 3;
}
else
{
output_array_size = 3;
output_offset = 0;
}
char* output_array = new char[output_array_size];
if(matrix_type == RAZER_TYPE_MATRIX_FRAME)
{
output_array[0] = row;
output_array[1] = 0;
output_array[2] = matrix_cols - 1;
}
for(unsigned int col = 0; col < matrix_cols; col++)
{
unsigned int color_idx = col + row_offset;
output_array[(col * 3) + 0 + output_offset] = (char)RGBGetRValue(colors[color_idx]);
output_array[(col * 3) + 1 + output_offset] = (char)RGBGetGValue(colors[color_idx]);
output_array[(col * 3) + 2 + output_offset] = (char)RGBGetBValue(colors[color_idx]);
}
if(matrix_type == RAZER_TYPE_MATRIX_FRAME)
{
razer_functions->matrix_custom_frame->store(razer_device, NULL, output_array, output_array_size);
}
else if(matrix_type == RAZER_TYPE_MATRIX_NOFRAME)
{
razer_functions->matrix_effect_custom->store(razer_device, NULL, output_array, output_array_size);
}
else
{
razer_functions->matrix_effect_static->store(razer_device, NULL, output_array, output_array_size);
}
}
if(matrix_type == RAZER_TYPE_MATRIX_FRAME)
{
razer_functions->matrix_effect_custom->store(razer_device, NULL, &update_value, 1);
}
}
break;
#if 0
case RAZER_TYPE_NOMATRIX:
{
unsigned int output_array_size = 3;
char output_array[output_array_size];
char update_value = 0;
output_array[0] = (char)RGBGetRValue(colors[0]);
output_array[1] = (char)RGBGetGValue(colors[0]);
output_array[2] = (char)RGBGetBValue(colors[0]);
logo_led_rgb.write(output_array, output_array_size);
output_array[0] = (char)RGBGetRValue(colors[1]);
output_array[1] = (char)RGBGetGValue(colors[1]);
output_array[2] = (char)RGBGetBValue(colors[1]);
scroll_led_rgb.write(output_array, output_array_size);
logo_led_rgb.flush();
scroll_led_rgb.flush();
logo_led_effect.write(&update_value, 1);
scroll_led_effect.write(&update_value, 1);
logo_led_effect.flush();
scroll_led_effect.flush();
}
break;
#endif
}
}
void RGBController_OpenRazer::UpdateZoneLEDs(int zone)
{
UpdateLEDs();
}
void RGBController_OpenRazer::UpdateSingleLED(int led)
{
UpdateLEDs();
}
void RGBController_OpenRazer::SetupMatrixDevice(device * razer_device, device_fn_type* razer_functions, unsigned int rows, unsigned int cols)
{
if(!razer_functions->matrix_custom_frame)
{
if(!razer_functions->matrix_effect_custom)
{
matrix_type = RAZER_TYPE_MATRIX_STATIC;
}
else
{
matrix_type = RAZER_TYPE_MATRIX_NOFRAME;
}
matrix_rows = 1;
matrix_cols = 1;
}
else
{
matrix_type = RAZER_TYPE_MATRIX_FRAME;
matrix_rows = rows;
matrix_cols = cols;
}
}
void RGBController_OpenRazer::SetupNonMatrixDevice(device * razer_device, device_fn_type* razer_functions)
{
matrix_type = RAZER_TYPE_NOMATRIX;
}
RGBController_OpenRazer::RGBController_OpenRazer(device * razer_device, device_fn_type* razer_functions)
{
char string_buf[1024];
this->razer_device = razer_device;
this->razer_functions = razer_functions;
unsigned int led_count = 0;
/*-----------------------------------------------------------------*\
| Initialize buffer |
\*-----------------------------------------------------------------*/
memset(string_buf, 0xFF, sizeof(string_buf));
string_buf[1023] = '\0';
/*-----------------------------------------------------------------*\
| Start device at -1. This indicates the device was not detected |
\*-----------------------------------------------------------------*/
device_index = -1;
/*-----------------------------------------------------------------*\
| Get the device name from the OpenRazer driver |
\*-----------------------------------------------------------------*/
razer_functions->device_type->show(razer_device, NULL, string_buf);
name = string_buf;
name.erase(std::remove(name.begin(), name.end(), '\n'), name.end());
name.erase(std::remove(name.begin(), name.end(), '\r'), name.end());
/*-----------------------------------------------------------------*\
| Set the description to indicate this is an OpenRazer device |
\*-----------------------------------------------------------------*/
description = "OpenRazer Device";
/*-----------------------------------------------------------------*\
| Set the device path as the location |
\*-----------------------------------------------------------------*/
location = "";
/*-----------------------------------------------------------------*\
| Initialize buffer |
\*-----------------------------------------------------------------*/
//memset(string_buf, 0xFF, sizeof(string_buf));
//string_buf[1023] = '\0';
/*-----------------------------------------------------------------*\
| Get the serial number from the dev path |
\*-----------------------------------------------------------------*/
//razer_functions->device_serial->show(razer_device, NULL, string_buf);
//serial = string_buf;
/*-----------------------------------------------------------------*\
| Initialize buffer |
\*-----------------------------------------------------------------*/
//memset(string_buf, 0xFF, sizeof(string_buf));
//string_buf[1023] = '\0';
/*-----------------------------------------------------------------*\
| Get the firmware version from the dev path |
\*-----------------------------------------------------------------*/
//razer_functions->firmware_version->show(razer_device, NULL, string_buf);
//version = string_buf;
/*-----------------------------------------------------------------*\
| Loop through all known devices to look for a name match |
\*-----------------------------------------------------------------*/
for (unsigned int i = 0; i < RAZER_NUM_DEVICES; i++)
{
if (device_list[i]->name == name)
{
/*---------------------------------------------------------*\
| Set device ID |
\*---------------------------------------------------------*/
device_index = i;
/*---------------------------------------------------------*\
| Set device type |
\*---------------------------------------------------------*/
type = device_list[i]->type;
/*---------------------------------------------------------*\
| Initialize modes |
\*---------------------------------------------------------*/
if(razer_functions->matrix_effect_custom)
{
mode Custom;
Custom.name = "Custom";
Custom.value = RAZER_MODE_CUSTOM;
Custom.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Custom.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Custom);
}
if(razer_functions->matrix_effect_none)
{
mode Off;
Off.name = "Off";
Off.value = RAZER_MODE_OFF;
Off.flags = 0;
Off.color_mode = MODE_COLORS_NONE;
modes.push_back(Off);
}
if(razer_functions->matrix_effect_static)
{
mode Static;
Static.name = "Static";
Static.value = RAZER_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Static.colors_min = 1;
Static.colors_max = 1;
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
Static.colors.resize(1);
modes.push_back(Static);
}
if(razer_functions->matrix_effect_breath)
{
mode Breathing;
Breathing.name = "Breathing";
Breathing.value = RAZER_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Breathing.colors_min = 1;
Breathing.colors_max = 2;
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
Breathing.colors.resize(2);
modes.push_back(Breathing);
}
if(razer_functions->matrix_effect_spectrum)
{
mode SpectrumCycle;
SpectrumCycle.name = "Spectrum Cycle";
SpectrumCycle.value = RAZER_MODE_SPECTRUM_CYCLE;
SpectrumCycle.flags = 0;
SpectrumCycle.color_mode = MODE_COLORS_NONE;
modes.push_back(SpectrumCycle);
}
if(razer_functions->matrix_effect_wave)
{
mode Wave;
Wave.name = "Wave";
Wave.value = RAZER_MODE_WAVE;
Wave.flags = MODE_FLAG_HAS_DIRECTION_LR;
Wave.direction = MODE_DIRECTION_RIGHT;
Wave.color_mode = MODE_COLORS_NONE;
modes.push_back(Wave);
}
if(razer_functions->matrix_effect_reactive)
{
mode Reactive;
Reactive.name = "Reactive";
Reactive.value = RAZER_MODE_REACTIVE;
Reactive.flags = 0;
Reactive.color_mode = MODE_COLORS_NONE;
modes.push_back(Reactive);
}
/*---------------------------------------------------------*\
| Initialize file descriptors |
\*---------------------------------------------------------*/
if(device_list[i]->matrix_type == true)
{
SetupMatrixDevice(razer_device, razer_functions, device_list[i]->rows, device_list[i]->cols);
}
else
{
SetupNonMatrixDevice(razer_device, razer_functions);
}
/*---------------------------------------------------------*\
| Fill in zone information based on device table |
\*---------------------------------------------------------*/
for (int zone_id = 0; zone_id < RAZER_MAX_ZONES; zone_id++)
{
if (device_list[i]->zones[zone_id] != NULL)
{
zone new_zone;
new_zone.name = device_list[i]->zones[zone_id]->name;
new_zone.type = device_list[i]->zones[zone_id]->type;
for (unsigned int row_id = 0; row_id < device_list[i]->zones[zone_id]->rows; row_id++)
{
std::vector<int> new_zone_map;
for (unsigned int col_id = 0; col_id < device_list[i]->zones[zone_id]->cols; col_id++)
{
char id_buf[8];
snprintf(id_buf, 8, "%d", col_id + 1);
RGBColor new_color = 0x00000000;
colors.push_back(new_color);
led* new_led = new led();
new_led->name = device_list[i]->zones[zone_id]->name + " LED ";
new_led->name.append(id_buf);
leds.push_back(*new_led);
new_zone_map.push_back(led_count);
led_count++;
}
new_zone.map.push_back(new_zone_map);
}
zones.push_back(new_zone);
}
}
}
}
}
void RGBController_OpenRazer::SetCustomMode()
{
SetMode(RAZER_MODE_CUSTOM);
}
void RGBController_OpenRazer::UpdateMode()
{
char update_value[6];
update_value[0] = 1;
switch(matrix_type)
{
case RAZER_TYPE_MATRIX_FRAME:
case RAZER_TYPE_MATRIX_NOFRAME:
{
switch(modes[active_mode].value)
{
case RAZER_MODE_CUSTOM:
razer_functions->matrix_effect_custom->store(razer_device, NULL, update_value, 1);
break;
case RAZER_MODE_OFF:
razer_functions->matrix_effect_none->store(razer_device, NULL, update_value, 1);
break;
case RAZER_MODE_STATIC:
update_value[0] = RGBGetRValue(modes[RAZER_MODE_STATIC].colors[0]);
update_value[1] = RGBGetGValue(modes[RAZER_MODE_STATIC].colors[0]);
update_value[2] = RGBGetBValue(modes[RAZER_MODE_STATIC].colors[0]);
razer_functions->matrix_effect_static->store(razer_device, NULL, update_value, 3);
break;
case RAZER_MODE_BREATHING:
switch(modes[RAZER_MODE_BREATHING].color_mode)
{
case MODE_COLORS_MODE_SPECIFIC:
update_value[0] = RGBGetRValue(modes[RAZER_MODE_BREATHING].colors[0]);
update_value[1] = RGBGetGValue(modes[RAZER_MODE_BREATHING].colors[0]);
update_value[2] = RGBGetBValue(modes[RAZER_MODE_BREATHING].colors[0]);
if(modes[RAZER_MODE_BREATHING].colors.size() == 2)
{
update_value[3] = RGBGetRValue(modes[RAZER_MODE_BREATHING].colors[1]);
update_value[4] = RGBGetGValue(modes[RAZER_MODE_BREATHING].colors[1]);
update_value[5] = RGBGetBValue(modes[RAZER_MODE_BREATHING].colors[1]);
razer_functions->matrix_effect_breath->store(razer_device, NULL, update_value, 6);
}
else
{
razer_functions->matrix_effect_breath->store(razer_device, NULL, update_value, 3);
}
break;
case MODE_COLORS_RANDOM:
razer_functions->matrix_effect_breath->store(razer_device, NULL, update_value, 1);
break;
}
break;
case RAZER_MODE_SPECTRUM_CYCLE:
razer_functions->matrix_effect_spectrum->store(razer_device, NULL, update_value, 1);
break;
case RAZER_MODE_WAVE:
switch(modes[active_mode].direction)
{
case MODE_DIRECTION_LEFT:
update_value[0] = '2';
break;
default:
update_value[0] = '1';
break;
}
razer_functions->matrix_effect_wave->store(razer_device, NULL, update_value, 1);
break;
case RAZER_MODE_REACTIVE:
razer_functions->matrix_effect_reactive->store(razer_device, NULL, update_value, 1);
break;
}
}
break;
#if 0
case RAZER_TYPE_NOMATRIX:
{
switch(modes[active_mode].value)
{
case RAZER_MODE_CUSTOM:
update_value = 0;
logo_led_effect.write(&update_value, 1);
scroll_led_effect.write(&update_value, 1);
logo_led_effect.flush();
scroll_led_effect.flush();
break;
case RAZER_MODE_SPECTRUM_CYCLE:
update_value = '4';
logo_led_effect.write(&update_value, 1);
scroll_led_effect.write(&update_value, 1);
logo_led_effect.flush();
scroll_led_effect.flush();
break;
}
}
#endif
}
}
@@ -0,0 +1,112 @@
/*-----------------------------------------*\
| RGBController_OpenRazerWindows.h |
| |
| Generic RGB Interface for OpenRazer |
| kernel drivers for Chroma peripherals |
| |
| Adam Honse (CalcProgrammer1) 6/15/2019 |
\*-----------------------------------------*/
#include "RGBController.h"
#include "OpenRazerDevices.h"
#include <fstream>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/hid.h>
typedef struct
{
struct device_attribute * device_type;
struct device_attribute * device_serial;
struct device_attribute * firmware_version;
struct device_attribute * matrix_custom_frame;
struct device_attribute * matrix_brightness;
struct device_attribute * matrix_effect_custom;
struct device_attribute * matrix_effect_none;
struct device_attribute * matrix_effect_static;
struct device_attribute * matrix_effect_breath;
struct device_attribute * matrix_effect_spectrum;
struct device_attribute * matrix_effect_reactive;
struct device_attribute * matrix_effect_wave;
struct device_attribute * logo_led_brightness;
struct device_attribute * logo_matrix_effect_none;
struct device_attribute * logo_matrix_effect_static;
struct device_attribute * logo_matrix_effect_spectrum;
struct device_attribute * logo_matrix_effect_reactive;
struct device_attribute * scroll_led_brightness;
struct device_attribute * scroll_matrix_effect_none;
struct device_attribute * scroll_matrix_effect_static;
struct device_attribute * scroll_matrix_effect_spectrum;
struct device_attribute * scroll_matrix_effect_reactive;
struct device_attribute * scroll_led_effect;
struct device_attribute * scroll_led_rgb;
} device_fn_type;
class RGBController_OpenRazer : public RGBController
{
public:
enum
{
RAZER_MODE_CUSTOM,
RAZER_MODE_OFF,
RAZER_MODE_STATIC,
RAZER_MODE_BREATHING,
RAZER_MODE_SPECTRUM_CYCLE,
RAZER_MODE_WAVE,
RAZER_MODE_REACTIVE,
RAZER_NUM_MODES
};
enum
{
RAZER_TYPE_MATRIX_FRAME,
RAZER_TYPE_MATRIX_NOFRAME,
RAZER_TYPE_MATRIX_STATIC,
RAZER_TYPE_NOMATRIX,
RAZER_NUM_TYPES
};
public:
RGBController_OpenRazer(device * razer_device, device_fn_type* razer_functions);
void UpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void SetCustomMode();
void UpdateMode();
int device_index;
private:
void SetupMatrixDevice(device * razer_device, device_fn_type* razer_functions, unsigned int rows, unsigned int cols);
void SetupNonMatrixDevice(device * razer_device, device_fn_type* razer_functions);
unsigned int matrix_type;
unsigned int matrix_rows;
unsigned int matrix_cols;
device* razer_device;
device_fn_type* razer_functions;
//OpenRazer Sysfs Entries for Matrix Devices
std::ofstream matrix_custom_frame;
std::ofstream matrix_effect_custom;
std::ofstream matrix_effect_breath;
std::ofstream matrix_effect_none;
std::ofstream matrix_effect_reactive;
std::ofstream matrix_effect_spectrum;
std::ofstream matrix_effect_static;
std::ofstream matrix_effect_wave;
//OpenRazer Sysfs Entries for Non-Matrix Devices
std::ofstream logo_led_effect;
std::ofstream logo_led_rgb;
std::ofstream scroll_led_effect;
std::ofstream scroll_led_rgb;
};
+57 -57
View File
@@ -67,83 +67,83 @@ RGBController_PatriotViper::RGBController_PatriotViper(PatriotViperController* v
type = DEVICE_TYPE_DRAM; type = DEVICE_TYPE_DRAM;
mode Direct; mode Direct;
Direct.name = "Direct"; Direct.name = "Direct";
Direct.value = 0xFFFF; Direct.value = 0xFFFF;
Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.speed_min = 0; Direct.speed_min = 0;
Direct.speed_max = 0; Direct.speed_max = 0;
Direct.random = false; Direct.color_mode = MODE_COLORS_PER_LED;
Direct.speed = 0; Direct.speed = 0;
modes.push_back(Direct); modes.push_back(Direct);
mode Dark; mode Dark;
Dark.name = "Dark"; Dark.name = "Dark";
Dark.value = VIPER_MODE_DARK; Dark.value = VIPER_MODE_DARK;
Dark.flags = 0; Dark.flags = 0;
Dark.speed_min = 0; Dark.speed_min = 0;
Dark.speed_max = 0; Dark.speed_max = 0;
Dark.random = false; Dark.color_mode = MODE_COLORS_NONE;
Dark.speed = 0; Dark.speed = 0;
modes.push_back(Dark); modes.push_back(Dark);
mode Breathing; mode Breathing;
Breathing.name = "Breathing"; Breathing.name = "Breathing";
Breathing.value = VIPER_MODE_BREATHING; Breathing.value = VIPER_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Breathing.speed_min = VIPER_SPEED_BREATHING_MIN; Breathing.speed_min = VIPER_SPEED_BREATHING_MIN;
Breathing.speed_max = VIPER_SPEED_BREATHING_MAX; Breathing.speed_max = VIPER_SPEED_BREATHING_MAX;
Breathing.random = false; Breathing.color_mode = MODE_COLORS_PER_LED;
Breathing.speed = VIPER_SPEED_BREATHING_DEFAULT; Breathing.speed = VIPER_SPEED_BREATHING_DEFAULT;
modes.push_back(Breathing); modes.push_back(Breathing);
mode Viper; mode Viper;
Viper.name = "Viper"; Viper.name = "Viper";
Viper.value = VIPER_MODE_VIPER; Viper.value = VIPER_MODE_VIPER;
Viper.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Viper.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Viper.speed_min = VIPER_SPEED_MIN; Viper.speed_min = VIPER_SPEED_MIN;
Viper.speed_max = VIPER_SPEED_MAX; Viper.speed_max = VIPER_SPEED_MAX;
Viper.random = false; Viper.color_mode = MODE_COLORS_PER_LED;
Viper.speed = VIPER_SPEED_DEFAULT; Viper.speed = VIPER_SPEED_DEFAULT;
modes.push_back(Viper); modes.push_back(Viper);
mode Heartbeat; mode Heartbeat;
Heartbeat.name = "Heartbeat"; Heartbeat.name = "Heartbeat";
Heartbeat.value = VIPER_MODE_HEARTBEAT; Heartbeat.value = VIPER_MODE_HEARTBEAT;
Heartbeat.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Heartbeat.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Heartbeat.speed_min = VIPER_SPEED_MIN; Heartbeat.speed_min = VIPER_SPEED_MIN;
Heartbeat.speed_max = VIPER_SPEED_MAX; Heartbeat.speed_max = VIPER_SPEED_MAX;
Heartbeat.random = false; Heartbeat.color_mode = MODE_COLORS_PER_LED;
Heartbeat.speed = VIPER_SPEED_DEFAULT; Heartbeat.speed = VIPER_SPEED_DEFAULT;
modes.push_back(Heartbeat); modes.push_back(Heartbeat);
mode Marquee; mode Marquee;
Marquee.name = "Marquee"; Marquee.name = "Marquee";
Marquee.value = VIPER_MODE_MARQUEE; Marquee.value = VIPER_MODE_MARQUEE;
Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Marquee.speed_min = VIPER_SPEED_MIN; Marquee.speed_min = VIPER_SPEED_MIN;
Marquee.speed_max = VIPER_SPEED_MAX; Marquee.speed_max = VIPER_SPEED_MAX;
Marquee.random = false; Marquee.color_mode = MODE_COLORS_PER_LED;
Marquee.speed = VIPER_SPEED_DEFAULT; Marquee.speed = VIPER_SPEED_DEFAULT;
modes.push_back(Marquee); modes.push_back(Marquee);
mode Raindrop; mode Raindrop;
Raindrop.name = "Raindrop"; Raindrop.name = "Raindrop";
Raindrop.value = VIPER_MODE_RAINDROP; Raindrop.value = VIPER_MODE_RAINDROP;
Raindrop.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Raindrop.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Raindrop.speed_min = VIPER_SPEED_MIN; Raindrop.speed_min = VIPER_SPEED_MIN;
Raindrop.speed_max = VIPER_SPEED_MAX; Raindrop.speed_max = VIPER_SPEED_MAX;
Raindrop.random = false; Raindrop.color_mode = MODE_COLORS_PER_LED;
Raindrop.speed = VIPER_SPEED_DEFAULT; Raindrop.speed = VIPER_SPEED_DEFAULT;
modes.push_back(Raindrop); modes.push_back(Raindrop);
mode Aurora; mode Aurora;
Aurora.name = "Aurora"; Aurora.name = "Aurora";
Aurora.value = VIPER_MODE_AURORA; Aurora.value = VIPER_MODE_AURORA;
Aurora.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Aurora.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Aurora.speed_min = VIPER_SPEED_MIN; Aurora.speed_min = VIPER_SPEED_MIN;
Aurora.speed_max = VIPER_SPEED_MAX; Aurora.speed_max = VIPER_SPEED_MAX;
Aurora.random = false; Aurora.color_mode = MODE_COLORS_PER_LED;
Aurora.speed = VIPER_SPEED_DEFAULT; Aurora.speed = VIPER_SPEED_DEFAULT;
modes.push_back(Aurora); modes.push_back(Aurora);
colors.resize(viper->GetLEDCount()); colors.resize(viper->GetLEDCount());
@@ -199,4 +199,4 @@ void RGBController_PatriotViper::UpdateMode()
{ {
viper->SetMode(modes[active_mode].value, modes[active_mode].speed); viper->SetMode(modes[active_mode].value, modes[active_mode].speed);
} }
} }
+88 -66
View File
@@ -46,137 +46,159 @@ RGBController_Polychrome::RGBController_Polychrome(PolychromeController* polychr
if(polychrome->IsAsrLed()) if(polychrome->IsAsrLed())
{ {
mode Off; mode Off;
Off.name = "Off"; Off.name = "Off";
Off.value = ASRLED_MODE_OFF; Off.value = ASRLED_MODE_OFF;
Off.flags = 0; Off.flags = 0;
Off.color_mode = MODE_COLORS_NONE;
modes.push_back(Off); modes.push_back(Off);
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = ASRLED_MODE_STATIC; Static.value = ASRLED_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_COLOR; Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static); modes.push_back(Static);
mode Breathing; mode Breathing;
Breathing.name = "Breathing"; Breathing.name = "Breathing";
Breathing.value = ASRLED_MODE_BREATHING; Breathing.value = ASRLED_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Breathing.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Breathing); modes.push_back(Breathing);
mode Strobe; mode Strobe;
Strobe.name = "Strobe"; Strobe.name = "Strobe";
Strobe.value = ASRLED_MODE_FLASHING; Strobe.value = ASRLED_MODE_FLASHING;
Strobe.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; Strobe.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Strobe.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Strobe); modes.push_back(Strobe);
mode SpectrumCycle; mode SpectrumCycle;
SpectrumCycle.name = "Spectrum Cycle"; SpectrumCycle.name = "Spectrum Cycle";
SpectrumCycle.value = ASRLED_MODE_SPECTRUM_CYCLE; SpectrumCycle.value = ASRLED_MODE_SPECTRUM_CYCLE;
SpectrumCycle.flags = MODE_FLAG_HAS_SPEED; SpectrumCycle.flags = MODE_FLAG_HAS_SPEED;
SpectrumCycle.color_mode = MODE_COLORS_NONE;
modes.push_back(SpectrumCycle); modes.push_back(SpectrumCycle);
mode Random; mode Random;
Random.name = "Random"; Random.name = "Random";
Random.value = ASRLED_MODE_RANDOM; Random.value = ASRLED_MODE_RANDOM;
Random.flags = MODE_FLAG_HAS_SPEED; Random.flags = MODE_FLAG_HAS_SPEED;
Random.color_mode = MODE_COLORS_NONE;
modes.push_back(Random); modes.push_back(Random);
mode Music; mode Music;
Music.name = "Music"; Music.name = "Music";
Music.value = ASRLED_MODE_MUSIC; Music.value = ASRLED_MODE_MUSIC;
Music.flags = MODE_FLAG_HAS_COLOR; Music.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Music.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Music); modes.push_back(Music);
mode Wave; mode Wave;
Wave.name = "Wave"; Wave.name = "Wave";
Wave.value = ASRLED_MODE_WAVE; Wave.value = ASRLED_MODE_WAVE;
Wave.flags = MODE_FLAG_HAS_SPEED; Wave.flags = MODE_FLAG_HAS_SPEED;
Wave.color_mode = MODE_COLORS_NONE;
modes.push_back(Wave); modes.push_back(Wave);
} }
else else
{ {
mode Off; mode Off;
Off.name = "Off"; Off.name = "Off";
Off.value = POLYCHROME_MODE_OFF; Off.value = POLYCHROME_MODE_OFF;
Off.flags = 0; Off.flags = 0;
Off.color_mode = MODE_COLORS_NONE;
modes.push_back(Off); modes.push_back(Off);
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = POLYCHROME_MODE_STATIC; Static.value = POLYCHROME_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_COLOR; Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static); modes.push_back(Static);
mode Breathing; mode Breathing;
Breathing.name = "Breathing"; Breathing.name = "Breathing";
Breathing.value = POLYCHROME_MODE_BREATHING; Breathing.value = POLYCHROME_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Breathing.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Breathing); modes.push_back(Breathing);
mode Strobe; mode Strobe;
Strobe.name = "Strobe"; Strobe.name = "Strobe";
Strobe.value = POLYCHROME_MODE_FLASHING; Strobe.value = POLYCHROME_MODE_FLASHING;
Strobe.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; Strobe.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Strobe.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Strobe); modes.push_back(Strobe);
mode SpectrumCycle; mode SpectrumCycle;
SpectrumCycle.name = "Spectrum Cycle"; SpectrumCycle.name = "Spectrum Cycle";
SpectrumCycle.value = POLYCHROME_MODE_SPECTRUM_CYCLE; SpectrumCycle.value = POLYCHROME_MODE_SPECTRUM_CYCLE;
SpectrumCycle.flags = MODE_FLAG_HAS_SPEED; SpectrumCycle.flags = MODE_FLAG_HAS_SPEED;
SpectrumCycle.color_mode = MODE_COLORS_NONE;
modes.push_back(SpectrumCycle); modes.push_back(SpectrumCycle);
mode Random; mode Random;
Random.name = "Random"; Random.name = "Random";
Random.value = POLYCHROME_MODE_RANDOM; Random.value = POLYCHROME_MODE_RANDOM;
Random.flags = MODE_FLAG_HAS_SPEED; Random.flags = MODE_FLAG_HAS_SPEED;
Random.color_mode = MODE_COLORS_NONE;
modes.push_back(Random); modes.push_back(Random);
mode Wave; mode Wave;
Wave.name = "Wave"; Wave.name = "Wave";
Wave.value = POLYCHROME_MODE_WAVE; Wave.value = POLYCHROME_MODE_WAVE;
Wave.flags = MODE_FLAG_HAS_SPEED; Wave.flags = MODE_FLAG_HAS_SPEED;
Wave.color_mode = MODE_COLORS_NONE;
modes.push_back(Wave); modes.push_back(Wave);
mode Spring; mode Spring;
Spring.name = "Spring"; Spring.name = "Spring";
Spring.value = POLYCHROME_MODE_SPRING; Spring.value = POLYCHROME_MODE_SPRING;
Spring.flags = MODE_FLAG_HAS_SPEED; Spring.flags = MODE_FLAG_HAS_SPEED;
Spring.color_mode = MODE_COLORS_NONE;
modes.push_back(Spring); modes.push_back(Spring);
mode Stack; mode Stack;
Stack.name = "Stack"; Stack.name = "Stack";
Stack.value = POLYCHROME_MODE_STACK; Stack.value = POLYCHROME_MODE_STACK;
Stack.flags = MODE_FLAG_HAS_SPEED; Stack.flags = MODE_FLAG_HAS_SPEED;
Stack.color_mode = MODE_COLORS_NONE;
modes.push_back(Stack); modes.push_back(Stack);
mode Cram; mode Cram;
Cram.name = "Cram"; Cram.name = "Cram";
Cram.value = POLYCHROME_MODE_CRAM; Cram.value = POLYCHROME_MODE_CRAM;
Cram.flags = MODE_FLAG_HAS_SPEED; Cram.flags = MODE_FLAG_HAS_SPEED;
Cram.color_mode = MODE_COLORS_NONE;
modes.push_back(Cram); modes.push_back(Cram);
mode Scan; mode Scan;
Scan.name = "Scan"; Scan.name = "Scan";
Scan.value = POLYCHROME_MODE_SCAN; Scan.value = POLYCHROME_MODE_SCAN;
Scan.flags = MODE_FLAG_HAS_SPEED; Scan.flags = MODE_FLAG_HAS_SPEED;
Scan.color_mode = MODE_COLORS_NONE;
modes.push_back(Scan); modes.push_back(Scan);
mode Neon; mode Neon;
Neon.name = "Neon"; Neon.name = "Neon";
Neon.value = POLYCHROME_MODE_NEON; Neon.value = POLYCHROME_MODE_NEON;
Neon.flags = 0; Neon.flags = 0;
Neon.color_mode = MODE_COLORS_NONE;
modes.push_back(Neon); modes.push_back(Neon);
mode Water; mode Water;
Water.name = "Water"; Water.name = "Water";
Water.value = POLYCHROME_MODE_WATER; Water.value = POLYCHROME_MODE_WATER;
Water.flags = MODE_FLAG_HAS_SPEED; Water.flags = MODE_FLAG_HAS_SPEED;
Water.color_mode = MODE_COLORS_NONE;
modes.push_back(Water); modes.push_back(Water);
mode Rainbow; mode Rainbow;
Rainbow.name = "Rainbow"; Rainbow.name = "Rainbow";
Rainbow.value = POLYCHROME_MODE_RAINBOW; Rainbow.value = POLYCHROME_MODE_RAINBOW;
Rainbow.flags = MODE_FLAG_HAS_SPEED; Rainbow.flags = MODE_FLAG_HAS_SPEED;
Rainbow.color_mode = MODE_COLORS_NONE;
modes.push_back(Rainbow); modes.push_back(Rainbow);
} }
+24 -24
View File
@@ -135,42 +135,42 @@ RGBController_PoseidonZRGB::RGBController_PoseidonZRGB(PoseidonZRGBController* p
type = DEVICE_TYPE_KEYBOARD; type = DEVICE_TYPE_KEYBOARD;
mode Direct; mode Direct;
Direct.name = "Direct"; Direct.name = "Direct";
Direct.value = POSEIDONZ_MODE_STATIC; Direct.value = POSEIDONZ_MODE_STATIC;
Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.random = false; Direct.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Direct); modes.push_back(Direct);
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = POSEIDONZ_MODE_STATIC; Static.value = POSEIDONZ_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Static.random = false; Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static); modes.push_back(Static);
mode Wave; mode Wave;
Wave.name = "Wave"; Wave.name = "Wave";
Wave.value = POSEIDONZ_MODE_WAVE; Wave.value = POSEIDONZ_MODE_WAVE;
Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR;
Wave.speed_min = POSEIDONZ_SPEED_SLOW; Wave.speed_min = POSEIDONZ_SPEED_SLOW;
Wave.speed_max = POSEIDONZ_SPEED_FAST; Wave.speed_max = POSEIDONZ_SPEED_FAST;
Wave.random = false; Wave.color_mode = MODE_COLORS_NONE;
Wave.speed = POSEIDONZ_SPEED_FAST; Wave.speed = POSEIDONZ_SPEED_FAST;
Wave.direction = MODE_DIRECTION_LEFT; Wave.direction = MODE_DIRECTION_LEFT;
modes.push_back(Wave); modes.push_back(Wave);
mode Ripple; mode Ripple;
Ripple.name = "Ripple"; Ripple.name = "Ripple";
Ripple.value = POSEIDONZ_MODE_RIPPLE; Ripple.value = POSEIDONZ_MODE_RIPPLE;
Ripple.flags = 0; Ripple.flags = 0;
Ripple.random = false; Ripple.color_mode = MODE_COLORS_NONE;
modes.push_back(Ripple); modes.push_back(Ripple);
mode Reactive; mode Reactive;
Reactive.name = "Reactive"; Reactive.name = "Reactive";
Reactive.value = POSEIDONZ_MODE_REACTIVE; Reactive.value = POSEIDONZ_MODE_REACTIVE;
Reactive.flags = 0; Reactive.flags = 0;
Reactive.random = false; Reactive.color_mode = MODE_COLORS_NONE;
modes.push_back(Reactive); modes.push_back(Reactive);
colors.resize(104); colors.resize(104);
+18 -15
View File
@@ -55,27 +55,30 @@ RGBController_RGBFusion::RGBController_RGBFusion(RGBFusionController* rgb_fusion
type = DEVICE_TYPE_MOTHERBOARD; type = DEVICE_TYPE_MOTHERBOARD;
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = RGB_FUSION_MODE_STATIC; Static.value = RGB_FUSION_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static); modes.push_back(Static);
mode Breathing; mode Breathing;
Breathing.name = "Breathing"; Breathing.name = "Breathing";
Breathing.value = RGB_FUSION_MODE_BREATHING; Breathing.value = RGB_FUSION_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Breathing.speed_min = RGB_FUSION_SPEED_SLOW; Breathing.speed_min = RGB_FUSION_SPEED_SLOW;
Breathing.speed_max = RGB_FUSION_SPEED_FAST; Breathing.speed_max = RGB_FUSION_SPEED_FAST;
Breathing.speed = RGB_FUSION_SPEED_NORMAL; Breathing.speed = RGB_FUSION_SPEED_NORMAL;
Breathing.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Breathing); modes.push_back(Breathing);
mode Flashing; mode Flashing;
Flashing.name = "Flashing"; Flashing.name = "Flashing";
Flashing.value = RGB_FUSION_MODE_FLASHING; Flashing.value = RGB_FUSION_MODE_FLASHING;
Flashing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Flashing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Flashing.speed_min = RGB_FUSION_SPEED_SLOW; Flashing.speed_min = RGB_FUSION_SPEED_SLOW;
Flashing.speed_max = RGB_FUSION_SPEED_FAST; Flashing.speed_max = RGB_FUSION_SPEED_FAST;
Flashing.speed = RGB_FUSION_SPEED_NORMAL; Flashing.speed = RGB_FUSION_SPEED_NORMAL;
Flashing.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Flashing); modes.push_back(Flashing);
colors.resize(rgb_fusion->GetLEDCount()); colors.resize(rgb_fusion->GetLEDCount());
+252 -58
View File
@@ -4,83 +4,187 @@
| Generic RGB Interface for OpenRGB | | Generic RGB Interface for OpenRGB |
| Gigabyte RGB Fusion 2.0 Driver | | Gigabyte RGB Fusion 2.0 Driver |
| | | |
| Adam Honse (CalcProgrammer1) 1/15/2020 | | jackun 1/8/2020 |
\*-----------------------------------------*/ \*-----------------------------------------*/
#include "RGBController_RGBFusion2.h" #include "RGBController_RGBFusion2.h"
#include <sstream>
#include <array>
void RGBController_RGBFusion2::UpdateLEDs() enum
{
ZONE_MB,
ZONE_STRIP1,
ZONE_STRIP2,
};
static const std::array<const char *, 3> led_zones
{
"Motherboard",
"LED Strip 1", // WS2812(B) strips
"LED Strip 2",
};
static const KnownChannels known_channels
{ {
for (std::size_t led = 0; led < colors.size(); led++)
{ {
RGBColor color = colors[led]; "Generic",
unsigned char red = RGBGetRValue(color); {
unsigned char grn = RGBGetGValue(color); {
unsigned char blu = RGBGetBValue(color); { "Led 1", 0x20 },
{ "Led 2", 0x21 },
{ "Led 3", 0x22 },
{ "Led 4", 0x23 },
{ "Led 5", 0x24 },
{ "Led 6", 0x25 },
{ "Led 7", 0x26 },
{ "Led 8", 0x27 },
},
// Zone 1
{
{ "LED Strip 1, LED 0", HDR_D_LED1 },
},
// Zone 2
{
{ "LED Strip 2, LED 0", HDR_D_LED2 },
}
}
},
{
"IT8297BX-GBX570",
{
// Zone 0
{
{ "Back I/O", HDR_BACK_IO },
{ "CPU", HDR_CPU },
{ "PCIe", HDR_PCIE },
{ "LED C1/C2", HDR_LED_C1C2 }, // 12VGRB headers seem to be connected
},
// Zone 1
{
{ "LED Strip 1, LED 0", HDR_D_LED1 },
},
// Zone 2
{
{ "LED Strip 2, LED 0", HDR_D_LED2 },
}
}
},
};
rgb_fusion->SetLEDColor(led, red, grn, blu); RGBController_RGBFusion2::RGBController_RGBFusion2(RGBFusion2Controller* controller_ptr)
}
}
void RGBController_RGBFusion2::UpdateZoneLEDs(int zone)
{ {
RGBColor color = colors[zone]; controller = controller_ptr;
unsigned char red = RGBGetRValue(color);
unsigned char grn = RGBGetGValue(color);
unsigned char blu = RGBGetBValue(color);
rgb_fusion->SetLEDColor(zone, red, grn, blu);
}
void RGBController_RGBFusion2::UpdateSingleLED(int led)
{
UpdateZoneLEDs(led);
}
RGBController_RGBFusion2::RGBController_RGBFusion2(RGBFusion2Controller* rgb_fusion_ptr)
{
rgb_fusion = rgb_fusion_ptr;
name = rgb_fusion->GetDeviceName();
description = "RGB Fusion 2.0";
location = rgb_fusion->GetDeviceLocation();
name = "RGB Fusion 2 Controller";
type = DEVICE_TYPE_MOTHERBOARD; type = DEVICE_TYPE_MOTHERBOARD;
description = controller->GetDeviceName();
version = controller->GetFWVersion();
location = controller->GetDeviceLocation();
serial = controller->GetSerial();
mode rgb_fusion_modes[1]; auto it = known_channels.find(controller->GetDeviceName());
if (it == known_channels.end())
rgb_fusion_modes[0].name = "Static";
for (int i = 0; i < 1; i++)
{ {
modes.push_back(rgb_fusion_modes[i]); it = known_channels.find("Generic");
} }
colors.resize(rgb_fusion->GetLEDCount()); size_t mb_led_cnt = it->second[0].size();
// Search through all LEDs and create zones for each channel type mode Static;
for (unsigned int i = 0; i < rgb_fusion->GetLEDCount(); i++) Static.name = "Static";
Static.value = EFFECT_STATIC;
Static.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_PER_LED_COLOR;
Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static);
mode Breathing;
Breathing.name = "Breathing";
Breathing.value = EFFECT_PULSE;
Breathing.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Breathing.speed_min = 0;
Breathing.speed_max = 4;
Breathing.color_mode = MODE_COLORS_PER_LED;
Breathing.speed = 2;
modes.push_back(Breathing);
mode Blinking;
Blinking.name = "Blinking";
Blinking.value = EFFECT_BLINKING;
Blinking.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Blinking.speed_min = 0;
Blinking.speed_max = 4;
Blinking.color_mode = MODE_COLORS_PER_LED;
Blinking.speed = 2;
modes.push_back(Blinking);
mode ColorCycle;
ColorCycle.name = "Color Cycle";
ColorCycle.value = EFFECT_COLORCYCLE;
ColorCycle.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
ColorCycle.speed_min = 0;
ColorCycle.speed_max = 4;
ColorCycle.color_mode = MODE_COLORS_NONE;
ColorCycle.speed = 2;
modes.push_back(ColorCycle);
mode Flashing;
Flashing.name = "Flashing";
Flashing.value = 10;
Flashing.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_RANDOM_COLOR;
Flashing.speed_min = 0;
Flashing.speed_max = 4;
Flashing.color_mode = MODE_COLORS_PER_LED;
Flashing.speed = 2;
modes.push_back(Flashing);
per_strip_led_cnt = 64; // TODO needs GUI option
colors.resize(mb_led_cnt + per_strip_led_cnt * 2, 0x000021FF);
controller->SetLedCount(per_strip_led_cnt);
controller->DisableBuiltinEffect(0, 0x3);
unsigned int led_idx = 0;
std::stringstream ss;
for(size_t i = 0; i < led_zones.size(); i++)
{ {
zone* new_zone = new zone(); std::vector<int> new_zone_map;
led* new_led = new led(); zone new_zone;
new_zone.name = led_zones[i];
new_zone.type = ZONE_TYPE_LINEAR; // TODO
std::vector<int>* zone_row = new std::vector<int>(); unsigned int zone_led_cnt = mb_led_cnt;
if( i > 0 )
{
zone_led_cnt = per_strip_led_cnt;
}
// Set zone name to channel name for(unsigned int zone_led_idx = 0; zone_led_idx < zone_led_cnt; zone_led_idx++)
new_zone->name = "Zone"; {
new_led->name = "LED"; led new_led;
zone_row->push_back(i); if( it != known_channels.end() && i < it->second.size() && zone_led_idx < it->second[i].size())
{
new_led.name = it->second[i][zone_led_idx].name;
}
else
{
ss.clear(); ss.str("");
ss << led_zones[i];
if (zone_led_cnt > 1)
{
ss << ", LED " << zone_led_idx;
}
new_led.name = ss.str();
}
// Aura devices can be either single or linear, never matrix leds.push_back(new_led);
// That means only one row is needed new_zone_map.push_back(led_idx);
new_zone->map.push_back(*zone_row); led_idx++;
}
// Push new LED to LEDs vector new_zone.map.push_back(new_zone_map);
leds.push_back(*new_led); zones.push_back(new_zone);
// Push new zone to zones vector
zones.push_back(*new_zone);
} }
} }
@@ -89,7 +193,97 @@ void RGBController_RGBFusion2::SetCustomMode()
active_mode = 0; active_mode = 0;
} }
void RGBController_RGBFusion2::UpdateLEDs()
{
for(size_t i = 0; i < led_zones.size(); i++)
{
UpdateZoneLEDs(i);
}
}
void RGBController_RGBFusion2::UpdateZoneLEDs(int zone)
{
bool random = (modes[active_mode].color_mode == MODE_COLORS_RANDOM);
auto it = known_channels.find(controller->GetDeviceName());
if (it == known_channels.end())
{
it = known_channels.find("Generic");
}
if (it == known_channels.end() || zone >= (int)it->second.size())
{
return;
}
if(zone == ZONE_MB)
{
std::vector<int>& leds = zones[zone].map[0];
for(size_t i = 0; i < leds.size(); i++)
{
unsigned char red = RGBGetRValue(colors[leds[i]]);
unsigned char grn = RGBGetGValue(colors[leds[i]]);
unsigned char blu = RGBGetBValue(colors[leds[i]]);
controller->SetLEDEffect(it->second[zone][i].header, modes[active_mode].value, modes[active_mode].speed, random, red, grn, blu);
}
controller->ApplyEffect();
}
else // assuming other two zones are LED strips
{
int led = zones[zone].map[0][0];
unsigned char red = RGBGetRValue(colors[led]);
unsigned char grn = RGBGetGValue(colors[led]);
unsigned char blu = RGBGetBValue(colors[led]);
int hdr = it->second[zone].size() ? it->second[zone].front().header : led;
// apply built-in effects to LED strips
controller->DisableBuiltinEffect(0, zone == 1 ? 0x01 : 0x02);
controller->SetLEDEffect(hdr, modes[active_mode].value, modes[active_mode].speed, random, red, grn, blu);
controller->ApplyEffect();
}
}
void RGBController_RGBFusion2::UpdateSingleLED(int led)
{
bool random = (modes[active_mode].color_mode == MODE_COLORS_RANDOM);
if (led >= zones[ZONE_STRIP1].map[0].front() && led <= zones[ZONE_STRIP1].map[0].back())
{
controller->SetStripColors(HDR_D_LED1_RGB,
zones[ZONE_STRIP1].map[0].front(),
zones[ZONE_STRIP1].map[0].back(),
colors, led);
}
else if (led >= zones[ZONE_STRIP2].map[0].front() && led <= zones[ZONE_STRIP2].map[0].back())
{
controller->SetStripColors(HDR_D_LED2_RGB,
zones[ZONE_STRIP2].map[0].front(),
zones[ZONE_STRIP2].map[0].back(),
colors, led);
}
else
{
int header = led;
auto it = known_channels.find(controller->GetDeviceName());
if (it == known_channels.end() || it->second.size() == 0)
header = it->second[ZONE_MB][led].header;
unsigned char red = RGBGetRValue(colors[led]);
unsigned char grn = RGBGetGValue(colors[led]);
unsigned char blu = RGBGetBValue(colors[led]);
controller->SetLEDEffect(header, modes[active_mode].value, modes[active_mode].speed, random, red, grn, blu);
controller->ApplyEffect();
}
}
void RGBController_RGBFusion2::UpdateMode() void RGBController_RGBFusion2::UpdateMode()
{ {
rgb_fusion->SetMode(modes[active_mode].value); // XXX Comment out to allow each zone or motherboard LED have different modes
} UpdateLEDs();
}
+18 -7
View File
@@ -4,25 +4,36 @@
| Generic RGB Interface for OpenRGB | | Generic RGB Interface for OpenRGB |
| Gigabyte RGB Fusion 2.0 Driver | | Gigabyte RGB Fusion 2.0 Driver |
| | | |
| Adam Honse (CalcProgrammer1) 1/15/2020 | | jackun 1/8/2020 |
\*-----------------------------------------*/ \*-----------------------------------------*/
#pragma once #pragma once
#include "RGBController.h" #include "RGBController.h"
#include "RGBFusion2Controller.h" #include "RGBFusion2Controller.h"
#include <map>
#include <vector>
class RGBController_RGBFusion2 : public RGBController struct LedPort
{
const char* name;
int header;
};
typedef std::vector< std::vector<LedPort> > ZoneLeds;
typedef std::map< std::string, ZoneLeds > KnownChannels;
class RGBController_RGBFusion2: public RGBController
{ {
public: public:
RGBController_RGBFusion2(RGBFusion2Controller* rgb_fusion_ptr); RGBController_RGBFusion2(RGBFusion2Controller* controller_ptr);
void SetCustomMode();
void UpdateLEDs(); void UpdateLEDs();
void UpdateZoneLEDs(int zone); void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led); void UpdateSingleLED(int led);
void SetCustomMode();
void UpdateMode(); void UpdateMode();
private: private:
RGBFusion2Controller* rgb_fusion; RGBFusion2Controller* controller;
IT8297Report report;
unsigned int per_strip_led_cnt;
}; };
@@ -0,0 +1,125 @@
/*-----------------------------------------*\
| RGBController_RGBFusionGPU.cpp |
| |
| Generic RGB Interface for OpenRGB |
| Gigabyte RGB Fusion GPU Driver |
| |
| Adam Honse (CalcProgrammer1) 2/23/2020 |
\*-----------------------------------------*/
#include "RGBController_RGBFusionGPU.h"
void RGBController_RGBFusionGPU::UpdateLEDs()
{
RGBColor color = colors[0];
unsigned char red = RGBGetRValue(color);
unsigned char grn = RGBGetGValue(color);
unsigned char blu = RGBGetBValue(color);
rgb_fusion->SetColor(red, grn, blu);
}
void RGBController_RGBFusionGPU::UpdateZoneLEDs(int zone)
{
UpdateLEDs();
}
void RGBController_RGBFusionGPU::UpdateSingleLED(int led)
{
UpdateLEDs();
}
RGBController_RGBFusionGPU::RGBController_RGBFusionGPU(RGBFusionGPUController* rgb_fusion_ptr)
{
rgb_fusion = rgb_fusion_ptr;
name = "Gigabyte GPU";
description = "RGB Fusion GPU";
location = rgb_fusion->GetDeviceLocation();
type = DEVICE_TYPE_GPU;
mode Static;
Static.name = "Static";
Static.value = RGB_FUSION_GPU_MODE_STATIC;
Static.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Static.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Static);
mode Breathing;
Breathing.name = "Breathing";
Breathing.value = RGB_FUSION_GPU_MODE_BREATHING;
Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Breathing.speed_min = RGB_FUSION_GPU_SPEED_SLOWEST;
Breathing.speed_max = RGB_FUSION_GPU_SPEED_FASTEST;
Breathing.speed = RGB_FUSION_GPU_SPEED_NORMAL;
Breathing.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Breathing);
mode Flashing;
Flashing.name = "Flashing";
Flashing.value = RGB_FUSION_GPU_MODE_FLASHING;
Flashing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Flashing.speed_min = RGB_FUSION_GPU_SPEED_SLOWEST;
Flashing.speed_max = RGB_FUSION_GPU_SPEED_FASTEST;
Flashing.speed = RGB_FUSION_GPU_SPEED_NORMAL;
Flashing.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Flashing);
mode DualFlashing;
DualFlashing.name = "Dual Flashing";
DualFlashing.value = RGB_FUSION_GPU_MODE_DUAL_FLASHING;
DualFlashing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
DualFlashing.speed_min = RGB_FUSION_GPU_SPEED_SLOWEST;
DualFlashing.speed_max = RGB_FUSION_GPU_SPEED_FASTEST;
DualFlashing.speed = RGB_FUSION_GPU_SPEED_NORMAL;
DualFlashing.color_mode = MODE_COLORS_PER_LED;
modes.push_back(DualFlashing);
mode SpectrumCycle;
SpectrumCycle.name = "Spectrum Cycle";
SpectrumCycle.value = RGB_FUSION_GPU_MODE_SPECTRUM_CYCLE;
SpectrumCycle.flags = MODE_FLAG_HAS_SPEED;
SpectrumCycle.speed_min = RGB_FUSION_GPU_SPEED_SLOWEST;
SpectrumCycle.speed_max = RGB_FUSION_GPU_SPEED_FASTEST;
SpectrumCycle.speed = RGB_FUSION_GPU_SPEED_NORMAL;
SpectrumCycle.color_mode = MODE_COLORS_NONE;
modes.push_back(SpectrumCycle);
colors.resize(1);
zone* new_zone = new zone();
led* new_led = new led();
std::vector<int>* zone_row = new std::vector<int>();
// Set zone name to channel name
new_zone->name = "GPU Zone";
new_led->name = "GPU LED";
zone_row->push_back(0);
// Aura devices can be either single or linear, never matrix
// That means only one row is needed
new_zone->map.push_back(*zone_row);
// Push new LED to LEDs vector
leds.push_back(*new_led);
// Push new zone to zones vector
zones.push_back(*new_zone);
// Initialize active mode
active_mode = 0;
}
void RGBController_RGBFusionGPU::SetCustomMode()
{
active_mode = 0;
}
void RGBController_RGBFusionGPU::UpdateMode()
{
rgb_fusion->SetMode(modes[active_mode].value, modes[active_mode].speed);
}
@@ -0,0 +1,28 @@
/*-----------------------------------------*\
| RGBController_RGBFusionGPU.h |
| |
| Generic RGB Interface for OpenRGB |
| Gigabyte RGB Fusion GPU Driver |
| |
| Adam Honse (CalcProgrammer1) 2/23/2020 |
\*-----------------------------------------*/
#pragma once
#include "RGBController.h"
#include "RGBFusionGPUController.h"
class RGBController_RGBFusionGPU : public RGBController
{
public:
RGBController_RGBFusionGPU(RGBFusionGPUController* rgb_fusion_ptr);
void UpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void SetCustomMode();
void UpdateMode();
private:
RGBFusionGPUController* rgb_fusion;
};
@@ -1,166 +0,0 @@
/*-----------------------------------------*\
| RGBController_RazerChromaSDK.h |
| |
| Generic RGB Interface for official Razer |
| Chroma SDK |
| |
| Adam Honse (CalcProgrammer1) 9/2/2019 |
\*-----------------------------------------*/
#include "RGBController_RazerChromaSDK.h"
CREATEEFFECT RGBController_RazerChromaSDK::CreateEffect = NULL;
CREATEKEYBOARDEFFECT RGBController_RazerChromaSDK::CreateKeyboardEffect = NULL;
CREATEMOUSEEFFECT RGBController_RazerChromaSDK::CreateMouseEffect = NULL;
CREATEMOUSEPADEFFECT RGBController_RazerChromaSDK::CreateMousepadEffect = NULL;
CREATEHEADSETEFFECT RGBController_RazerChromaSDK::CreateHeadsetEffect = NULL;
CREATECHROMALINKEFFECT RGBController_RazerChromaSDK::CreateChromaLinkEffect = NULL;
RGBController_RazerChromaSDK::RGBController_RazerChromaSDK(unsigned int device_type, HMODULE* hModule)
{
unsigned int led_count = 0;
for (int i = 0; i < RAZER_NUM_DEVICES; i++)
{
if (device_list[i]->razer_type == device_type)
{
name = device_list[i]->name;
type = device_list[i]->type;
location = "Razer Chroma SDK";
for (int zone_id = 0; zone_id < RAZER_MAX_ZONES; zone_id++)
{
if (device_list[i]->zones[zone_id] != NULL)
{
device = device_list[i];
zone* new_zone = new zone();
new_zone->name = device_list[i]->zones[zone_id]->name;
new_zone->type = device_list[i]->zones[zone_id]->type;
std::vector<int> new_zone_map;
for (int led_id = 0; led_id < device_list[i]->zones[zone_id]->leds; led_id++)
{
RGBColor new_color = 0x00000000;
colors.push_back(new_color);
led* new_led = new led();
new_led->name = device_list[i]->zones[zone_id]->name;
leds.push_back(*new_led);
new_zone_map.push_back(led_count);
led_count++;
}
new_zone->map.push_back(new_zone_map);
zones.push_back(*new_zone);
}
}
}
}
if(CreateEffect == NULL) CreateEffect = (CREATEEFFECT)GetProcAddress(*hModule, "CreateEffect");
if(CreateKeyboardEffect == NULL) CreateKeyboardEffect = (CREATEKEYBOARDEFFECT)GetProcAddress(*hModule, "CreateKeyboardEffect");
if(CreateMouseEffect == NULL) CreateMouseEffect = (CREATEMOUSEEFFECT)GetProcAddress(*hModule, "CreateMouseEffect");
if(CreateMousepadEffect == NULL) CreateMousepadEffect = (CREATEMOUSEPADEFFECT)GetProcAddress(*hModule, "CreateMousepadEffect");
if(CreateHeadsetEffect == NULL) CreateHeadsetEffect = (CREATEHEADSETEFFECT)GetProcAddress(*hModule, "CreateHeadsetEffect");
if(CreateChromaLinkEffect == NULL) CreateChromaLinkEffect = (CREATECHROMALINKEFFECT)GetProcAddress(*hModule, "CreateChromaLinkEffect");
}
void RGBController_RazerChromaSDK::UpdateLEDs()
{
switch (device->razer_type)
{
case RAZER_GENERIC_MOUSE:
{
ChromaSDK::Mouse::CUSTOM_EFFECT_TYPE2 MouseEffect = {};
std::vector<int> left_zone_map = zones[0].map[0];
for (int left = 1; left < 8; left++)
{
MouseEffect.Color[left][0] = colors[left_zone_map[left - 1]];
}
std::vector<int> right_zone_map = zones[1].map[0];
for (int right = 1; right < 8; right++)
{
MouseEffect.Color[right][6] = colors[right_zone_map[right - 1]];
}
std::vector<int> bottom_zone_map = zones[2].map[0];
for (int bottom = 1; bottom < 6; bottom++)
{
MouseEffect.Color[8][bottom] = colors[bottom_zone_map[bottom - 1]];
}
std::vector<int> scroll_wheel_zone_map = zones[3].map[0];
MouseEffect.Color[2][3] = colors[scroll_wheel_zone_map[0]];
std::vector<int> logo_zone_map = zones[4].map[0];
MouseEffect.Color[7][3] = colors[logo_zone_map[0]];
std::vector<int> numpad_backlight_zone_map = zones[5].map[0];
MouseEffect.Color[4][3] = colors[numpad_backlight_zone_map[0]];
CreateMouseEffect(ChromaSDK::Mouse::CHROMA_CUSTOM2, &MouseEffect, NULL);
}
break;
case RAZER_GENERIC_MOUSEPAD:
{
ChromaSDK::Mousepad::CUSTOM_EFFECT_TYPE MousepadEffect = {};
for (int x = 0; x < 15; x++)
{
MousepadEffect.Color[x] = colors[x];
}
CreateMousepadEffect(ChromaSDK::Mousepad::CHROMA_CUSTOM, &MousepadEffect, NULL);
}
break;
case RAZER_CHROMA_HDK:
{
ChromaSDK::CUSTOM_EFFECT_TYPE ChromaBoxEffect = {};
for (int x = 0; x < 16; x++)
{
for (int y = 0; y < 4; y++)
{
ChromaBoxEffect.Color[y][x] = colors[(y*16) + x];
}
}
CreateEffect(ChromaSDK::CHROMABOX, ChromaSDK::CHROMA_CUSTOM, &ChromaBoxEffect, NULL);
}
break;
}
}
void RGBController_RazerChromaSDK::UpdateZoneLEDs(int zone)
{
UpdateLEDs();
}
void RGBController_RazerChromaSDK::UpdateSingleLED(int led)
{
UpdateLEDs();
}
void RGBController_RazerChromaSDK::SetCustomMode()
{
}
void RGBController_RazerChromaSDK::UpdateMode()
{
}
@@ -1,248 +0,0 @@
/*-----------------------------------------*\
| RGBController_RazerChromaSDK.h |
| |
| Generic RGB Interface for official Razer |
| Chroma SDK |
| |
| Adam Honse (CalcProgrammer1) 9/2/2019 |
\*-----------------------------------------*/
#pragma once
#include "RGBController.h"
#include <Windows.h>
#include "RzChromaSDKDefines.h"
#include "RzChromaSDKTypes.h"
#include "RzErrors.h"
using namespace ChromaSDK::Keyboard;
typedef RZRESULT(*INIT)(void);
typedef RZRESULT(*UNINIT)(void);
typedef RZRESULT(*CREATEEFFECT)(RZDEVICEID DeviceId, ChromaSDK::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT(*CREATEKEYBOARDEFFECT)(ChromaSDK::Keyboard::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT(*CREATEMOUSEEFFECT)(ChromaSDK::Mouse::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT(*CREATEMOUSEPADEFFECT)(ChromaSDK::Mousepad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT(*CREATEHEADSETEFFECT)(ChromaSDK::Headset::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT(*CREATECHROMALINKEFFECT)(ChromaSDK::ChromaLink::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
#define RAZER_MAX_ZONES 6
#define RAZER_NUM_DEVICES 3
enum
{
RAZER_GENERIC_KEYBOARD,
RAZER_GENERIC_MOUSE,
RAZER_GENERIC_MOUSEPAD,
RAZER_CHROMA_HDK
};
enum
{
RAZER_MODE_CUSTOM,
RAZER_MODE_OFF,
RAZER_MODE_STATIC,
RAZER_MODE_BREATHING,
RAZER_MODE_SPECTRUM_CYCLE,
RAZER_MODE_WAVE,
RAZER_MODE_REACTIVE,
RAZER_NUM_MODES
};
typedef struct
{
std::string name;
unsigned int type;
unsigned int leds;
} razer_zone;
typedef struct
{
std::string name;
unsigned int razer_type;
unsigned int type;
const razer_zone* zones[RAZER_MAX_ZONES];
} razer_device;
/*------------------------------------------------------------ *\
| Razer Generic Mouse |
| |
| Zone "Left" |
| Linear |
| 7 LEDs |
| |
| Zone "Right" |
| Linear |
| 7 LEDs |
| |
| Zone "Bottom" |
| Linear |
| 5 LEDs |
| |
| Zone "Scroll Wheel" |
| Single |
| 1 LED |
| |
| Zone "Logo" |
| Single |
| 1 LED |
| |
| Zone "Numpad/Backlight" |
| Single |
| 1 LED |
\*-------------------------------------------------------------*/
static const razer_zone mouse_left_zone =
{
"Left LED Strip",
ZONE_TYPE_LINEAR,
7
};
static const razer_zone mouse_right_zone =
{
"Right LED Strip",
ZONE_TYPE_LINEAR,
7
};
static const razer_zone mouse_bottom_zone =
{
"Bottom LED Strip",
ZONE_TYPE_LINEAR,
5
};
static const razer_zone mouse_scroll_wheel_zone =
{
"Scroll Wheel",
ZONE_TYPE_SINGLE,
1
};
static const razer_zone mouse_logo_zone =
{
"Logo",
ZONE_TYPE_SINGLE,
1
};
static const razer_zone mouse_numpad_backlight_zone =
{
"Numpad/Backlight",
ZONE_TYPE_SINGLE,
1
};
static const razer_device mouse_device =
{
"Razer Generic Mouse",
RAZER_GENERIC_MOUSE,
DEVICE_TYPE_MOUSE,
{
&mouse_left_zone,
&mouse_right_zone,
&mouse_bottom_zone,
&mouse_scroll_wheel_zone,
&mouse_logo_zone,
&mouse_numpad_backlight_zone
}
};
/*------------------------------------------------------------ *\
| Razer Generic Mousepad (Firefly, Mug Holder) |
| |
| Zone "LED Strip" |
| Linear |
| 15 LEDs |
\*-------------------------------------------------------------*/
static const razer_zone mousepad_zone =
{
"LED Strip",
ZONE_TYPE_LINEAR,
15
};
static const razer_device mousepad_device =
{
"Razer Generic Mousepad",
RAZER_GENERIC_MOUSEPAD,
DEVICE_TYPE_MOUSE,
{
&mousepad_zone,
NULL,
NULL,
NULL,
NULL,
NULL
}
};
/*------------------------------------------------------------ *\
| Razer Chroma HDK |
| |
| Zone "LED Strip" |
| Linear |
| 16 LEDs |
| |
| Zone "LED Strip" |
| Linear |
| 16 LEDs |
| |
| Zone "LED Strip" |
| Linear |
| 16 LEDs |
| |
| Zone "LED Strip" |
| Linear |
| 16 LEDs |
\*-------------------------------------------------------------*/
static const razer_zone chromahdk_zone =
{
"LED Strip",
ZONE_TYPE_LINEAR,
16
};
static const razer_device chromahdk_device =
{
"Razer Chroma HDK",
RAZER_CHROMA_HDK,
DEVICE_TYPE_LEDSTRIP,
{
&chromahdk_zone,
&chromahdk_zone,
&chromahdk_zone,
&chromahdk_zone,
NULL,
NULL
}
};
static const razer_device* device_list[RAZER_NUM_DEVICES] =
{
&mouse_device,
&mousepad_device,
&chromahdk_device
};
class RGBController_RazerChromaSDK : public RGBController
{
public:
RGBController_RazerChromaSDK(unsigned int device_type, HMODULE* hModule);
void UpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void SetCustomMode();
void UpdateMode();
private:
const razer_device* device;
static CREATEEFFECT CreateEffect;
static CREATEKEYBOARDEFFECT CreateKeyboardEffect;
static CREATEMOUSEEFFECT CreateMouseEffect;
static CREATEMOUSEPADEFFECT CreateMousepadEffect;
static CREATEHEADSETEFFECT CreateHeadsetEffect;
static CREATECHROMALINKEFFECT CreateChromaLinkEffect;
};
@@ -19,75 +19,86 @@ RGBController_ThermaltakeRiing::RGBController_ThermaltakeRiing(ThermaltakeRiingC
type = DEVICE_TYPE_COOLER; type = DEVICE_TYPE_COOLER;
mode Flow; mode Flow;
Flow.name = "Flow"; Flow.name = "Flow";
Flow.value = THERMALTAKE_MODE_FLOW; Flow.value = THERMALTAKE_MODE_FLOW;
Flow.flags = MODE_FLAG_HAS_SPEED; Flow.flags = MODE_FLAG_HAS_SPEED;
Flow.speed_min = THERMALTAKE_SPEED_SLOW; Flow.speed_min = THERMALTAKE_SPEED_SLOW;
Flow.speed_max = THERMALTAKE_SPEED_EXTREME; Flow.speed_max = THERMALTAKE_SPEED_EXTREME;
Flow.speed = THERMALTAKE_SPEED_NORMAL; Flow.speed = THERMALTAKE_SPEED_NORMAL;
Flow.color_mode = MODE_COLORS_NONE;
modes.push_back(Flow); modes.push_back(Flow);
mode Spectrum; mode Spectrum;
Spectrum.name = "Spectrum"; Spectrum.name = "Spectrum";
Spectrum.value = THERMALTAKE_MODE_SPECTRUM; Spectrum.value = THERMALTAKE_MODE_SPECTRUM;
Spectrum.flags = MODE_FLAG_HAS_SPEED; Spectrum.flags = MODE_FLAG_HAS_SPEED;
Spectrum.speed_min = THERMALTAKE_SPEED_SLOW; Spectrum.speed_min = THERMALTAKE_SPEED_SLOW;
Spectrum.speed_max = THERMALTAKE_SPEED_EXTREME; Spectrum.speed_max = THERMALTAKE_SPEED_EXTREME;
Spectrum.speed = THERMALTAKE_SPEED_NORMAL; Spectrum.speed = THERMALTAKE_SPEED_NORMAL;
Spectrum.color_mode = MODE_COLORS_NONE;
modes.push_back(Spectrum); modes.push_back(Spectrum);
mode Ripple; mode Ripple;
Ripple.name = "Ripple"; Ripple.name = "Ripple";
Ripple.value = THERMALTAKE_MODE_RIPPLE; Ripple.value = THERMALTAKE_MODE_RIPPLE;
Ripple.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; Ripple.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Ripple.speed_min = THERMALTAKE_SPEED_SLOW; Ripple.speed_min = THERMALTAKE_SPEED_SLOW;
Ripple.speed_max = THERMALTAKE_SPEED_EXTREME; Ripple.speed_max = THERMALTAKE_SPEED_EXTREME;
Ripple.speed = THERMALTAKE_SPEED_NORMAL; Ripple.speed = THERMALTAKE_SPEED_NORMAL;
Ripple.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Ripple); modes.push_back(Ripple);
mode Blink; mode Blink;
Blink.name = "Blink"; Blink.name = "Blink";
Blink.value = THERMALTAKE_MODE_BLINK; Blink.value = THERMALTAKE_MODE_BLINK;
Blink.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Blink.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Blink.speed_min = THERMALTAKE_SPEED_SLOW; Blink.speed_min = THERMALTAKE_SPEED_SLOW;
Blink.speed_max = THERMALTAKE_SPEED_EXTREME; Blink.speed_max = THERMALTAKE_SPEED_EXTREME;
Blink.speed = THERMALTAKE_SPEED_NORMAL; Blink.speed = THERMALTAKE_SPEED_NORMAL;
Blink.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Blink); modes.push_back(Blink);
mode Pulse; mode Pulse;
Pulse.name = "Pulse"; Pulse.name = "Pulse";
Pulse.value = THERMALTAKE_MODE_PULSE; Pulse.value = THERMALTAKE_MODE_PULSE;
Pulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Pulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Pulse.speed_min = THERMALTAKE_SPEED_SLOW; Pulse.speed_min = THERMALTAKE_SPEED_SLOW;
Pulse.speed_max = THERMALTAKE_SPEED_EXTREME; Pulse.speed_max = THERMALTAKE_SPEED_EXTREME;
Pulse.speed = THERMALTAKE_SPEED_NORMAL; Pulse.speed = THERMALTAKE_SPEED_NORMAL;
Pulse.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Pulse); modes.push_back(Pulse);
mode Wave; mode Wave;
Wave.name = "Wave"; Wave.name = "Wave";
Wave.value = THERMALTAKE_MODE_WAVE; Wave.value = THERMALTAKE_MODE_WAVE;
Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR;
Wave.speed_min = THERMALTAKE_SPEED_SLOW; Wave.speed_min = THERMALTAKE_SPEED_SLOW;
Wave.speed_max = THERMALTAKE_SPEED_EXTREME; Wave.speed_max = THERMALTAKE_SPEED_EXTREME;
Wave.speed = THERMALTAKE_SPEED_NORMAL; Wave.speed = THERMALTAKE_SPEED_NORMAL;
Wave.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Wave); modes.push_back(Wave);
mode Direct; mode Direct;
Direct.name = "Direct"; Direct.name = "Direct";
Direct.value = THERMALTAKE_MODE_PER_LED; Direct.value = THERMALTAKE_MODE_PER_LED;
Direct.flags = MODE_FLAG_HAS_COLOR | MODE_FLAG_PER_LED_COLOR; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Direct.speed_min = 0; Direct.speed_min = 0;
Direct.speed_max = 0; Direct.speed_max = 0;
Direct.speed = 0; Direct.speed = 0;
Direct.color_mode = MODE_FLAG_HAS_PER_LED_COLOR;
modes.push_back(Direct); modes.push_back(Direct);
mode Static; mode Static;
Static.name = "Static"; Static.name = "Static";
Static.value = THERMALTAKE_MODE_FULL; Static.value = THERMALTAKE_MODE_FULL;
Static.flags = MODE_FLAG_HAS_COLOR; Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
Static.speed_min = 0; Static.colors_min = 1;
Static.speed_max = 0; Static.colors_max = 1;
Static.speed = 0; Static.speed_min = 0;
Static.speed_max = 0;
Static.speed = 0;
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
Static.colors.resize(1);
modes.push_back(Static); modes.push_back(Static);
/*-------------------------------------------------*\ /*-------------------------------------------------*\
-70
View File
@@ -1,70 +0,0 @@
#include "RGBController.h"
#include "RGBController_RazerChromaSDK.h"
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
static HMODULE hModule;
#include "RzChromaSDKDefines.h"
#include "RzChromaSDKTypes.h"
#include "RzErrors.h"
using namespace ChromaSDK::Keyboard;
typedef RZRESULT(*INIT)(void);
typedef RZRESULT(*UNINIT)(void);
typedef RZRESULT(*CREATEEFFECT)(RZDEVICEID DeviceId, ChromaSDK::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT(*CREATEKEYBOARDEFFECT)(ChromaSDK::Keyboard::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT(*CREATEMOUSEEFFECT)(ChromaSDK::Mouse::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT(*CREATEMOUSEPADEFFECT)(ChromaSDK::Mousepad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT(*CREATEHEADSETEFFECT)(ChromaSDK::Headset::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT(*CREATECHROMALINKEFFECT)(ChromaSDK::ChromaLink::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
#ifdef _WIN64
#define CHROMASDKDLL ("RzChromaSDK64.dll")
#else
#define CHROMASDKDLL ("RzChromaSDK.dll")
#endif
/******************************************************************************************\
* *
* DetectRazerChromaSDKControllers *
* *
* Detect devices supported by the Razer Chroma SDK *
* * *
\******************************************************************************************/
void DetectRazerChromaSDKControllers(std::vector<RGBController*>& rgb_controllers)
{
RGBController_RazerChromaSDK* razer_rgb;
// Dynamically loads the Chroma SDK library.
hModule = LoadLibrary(CHROMASDKDLL);
if (hModule)
{
INIT Init = (INIT)GetProcAddress(hModule, "Init");
if (Init)
{
//Initialize the SDK
Init();
}
}
razer_rgb = new RGBController_RazerChromaSDK(RAZER_GENERIC_MOUSE, &hModule);
rgb_controllers.push_back(razer_rgb);
razer_rgb = new RGBController_RazerChromaSDK(RAZER_GENERIC_MOUSEPAD, &hModule);
rgb_controllers.push_back(razer_rgb);
razer_rgb = new RGBController_RazerChromaSDK(RAZER_CHROMA_HDK, &hModule);
rgb_controllers.push_back(razer_rgb);
} /* DetectRazerChromaSDKControllers() */
+368
View File
@@ -0,0 +1,368 @@
#include <vector>
#include <cstring>
#include <string>
#include <tuple>
#include <iostream>
#include "OpenRGB.h"
#include "RGBController.h"
#include "i2c_smbus.h"
extern std::vector<i2c_smbus_interface*> busses;
extern std::vector<RGBController*> rgb_controllers;
struct DeviceOptions
{
int device;
std::vector<std::tuple<unsigned char, unsigned char, unsigned char>> colors;
std::string mode;
bool hasOption;
};
struct Options
{
std::vector<DeviceOptions> devices;
// if hasDevice is false, devices above is empty and allDeviceOptions
// shall be applied to all available devices
bool hasDevice;
DeviceOptions allDeviceOptions;
};
void PrintHelp()
{
std::string help_text;
help_text += "OpenRGB ";
help_text += VERSION_STRING;
help_text += ", for controlling RGB lighting.\n";
help_text += "Usage: OpenRGB (--device [--mode] [--color])...\n";
help_text += "\nOptions:\n";
help_text += "--gui\t\t\t\t\t Show GUI, also appears when not passing any parameters\n";
help_text += "-l, --list-devices\t\t\t Lists every compatible device with their number\n";
help_text += "-d, --device [0-9]\t\t\t Selects device to apply colors and/or effect to, or applies to all devices if omitted\n";
help_text += "\t\t\t\t\t Can be specified multiple times with different modes and colors\n";
help_text += "-c, --color \"FFFFFF,00AAFF...\"\t\t Sets colors on each device directly if no effect is specified, and sets the effect color if an effect is specified\n";
help_text += "\t\t\t\t\t If there are more LEDs than colors given, the last color will be applied to the remaining LEDs\n";
help_text += "-m, --mode [breathing | static | ...] Sets the mode to be applied, check --list-devices to see which modes are supported on your device\n";
help_text += "-v, --version\t\t\t\t Display version and software build information\n";
std::cout << help_text << std::endl;
}
void PrintVersion()
{
std::string version_text;
version_text += "OpenRGB ";
version_text += VERSION_STRING;
version_text += ", for controlling RGB lighting.\n";
version_text += " Version:\t\t ";
version_text += VERSION_STRING;
version_text += "\n Build Date\t\t ";
version_text += BUILDDATE_STRING;
version_text += "\n Git Commit ID\t\t ";
version_text += GIT_COMMIT_ID;
version_text += "\n Git Commit Date\t ";
version_text += GIT_COMMIT_DATE;
version_text += "\n Git Branch\t\t ";
version_text += GIT_BRANCH;
version_text += "\n";
std::cout << version_text << std::endl;
}
bool ParseColors(std::string colors_string, DeviceOptions *options)
{
while (colors_string.length() >= 6)
{
int rgb_end = colors_string.find_first_of(',');
std::string color = colors_string.substr(0, rgb_end);
if (color.length() != 6)
break;
try
{
unsigned char r = std::stoi(color.substr(0, 2), nullptr, 16);
unsigned char g = std::stoi(color.substr(2, 2), nullptr, 16);
unsigned char b = std::stoi(color.substr(4, 2), nullptr, 16);
options->colors.push_back(std::make_tuple(r, g, b));
}
catch (...)
{
break;
}
// If there are no more colors
if (rgb_end == std::string::npos)
break;
// Remove the current color and the next color's leading comma
colors_string = colors_string.substr(color.length() + 1);
}
return options->colors.size() > 0;
}
int ParseMode(DeviceOptions& options)
{
auto availableModes = rgb_controllers[options.device]->modes;
for (int i = 0; i < availableModes.size(); i++)
{
if (availableModes[i].name == options.mode)
{
return i;
}
}
std::cout << "Error: Mode '" + options.mode + "' not available for device '" +
rgb_controllers[options.device]->name + "'" << std::endl;
return false;
}
DeviceOptions* GetDeviceOptionsForDevID(Options *opts, int device)
{
if (device == -1)
{
return &opts->allDeviceOptions;
}
for (int i = 0; i < opts->devices.size(); i++)
{
if (opts->devices[i].device == device)
{
return &opts->devices[i];
}
}
// should never happen
std::cout << "Internal error: Tried setting an option on a device that wasn't specified" << std::endl;
abort();
}
std::string QuoteIfNecessary(std::string str)
{
if (str.find(' ') == std::string::npos)
{
return str;
}
else
{
return "'" + str + "'";
}
}
bool ProcessOptions(int argc, char *argv[], Options *res)
{
int arg_index = 1;
int currentDev = -1;
while (arg_index < argc)
{
std::string option = argv[arg_index];
// Handle options that take no arguments
if (option == "--list-devices" || option == "-l")
{
for (int i = 0; i < rgb_controllers.size(); i++)
{
RGBController *c = rgb_controllers[i];
std::cout << i << ": " << c->name << std::endl;
std::cout << " Type: " << device_type_to_str(c->type) << std::endl;
if (!c->serial.empty())
{
std::cout << " Serial: " << c->serial << std::endl;
}
if (!c->description.empty())
{
std::cout << " Description: " << c->description << std::endl;
}
if (!c->modes.empty())
{
std::cout << " Modes:";
int curMode = c->GetMode();
for (int i = 0; i < c->modes.size(); i++)
{
std::string modeStr = QuoteIfNecessary(c->modes[i].name);
if (curMode == i) {
modeStr = "[" + modeStr + "]";
}
std::cout << " " << modeStr;
}
std::cout << std::endl;
}
if (!c->zones.empty())
{
std::cout << " Zones:";
for (int i = 0; i < c->zones.size(); i++)
{
std::cout << " " << QuoteIfNecessary(c->zones[i].name);
}
std::cout << std::endl;
}
if (!c->leds.empty())
{
std::cout << " LEDs:";
for (int i = 0; i < c->leds.size(); i++)
{
std::cout << " " << QuoteIfNecessary(c->leds[i].name);
}
std::cout << std::endl;
}
std::cout << std::endl;
}
exit(0);
}
else if (arg_index + 1 < argc) // Handle options that take an argument
{
std::string argument = argv[arg_index + 1];
if (option == "--device" || option == "-d")
{
try
{
currentDev = std::stoi(argument);
if (rgb_controllers.size() <= currentDev || currentDev < 0)
{
throw;
}
DeviceOptions newDev;
newDev.device = currentDev;
if (!res->hasDevice)
{
res->hasDevice = true;
}
res->devices.push_back(newDev);
}
catch (...)
{
std::cout << "Error: Invalid device ID: " + argument << std::endl;
return false;
}
}
else if (option == "--color" || option == "-c")
{
DeviceOptions* currentDevOpts = GetDeviceOptionsForDevID(res, currentDev);
if (ParseColors(argument, currentDevOpts))
{
currentDevOpts->hasOption = true;
}
else
{
std::cout << "Error: Invalid argument to " + option + ": " + argument << std::endl;
return false;
}
}
else if (option == "--mode" || option == "-m")
{
DeviceOptions* currentDevOpts = GetDeviceOptionsForDevID(res, currentDev);
currentDevOpts->mode = argument;
currentDevOpts->hasOption = true;
}
else
{
std::cout << "Error: Invalid option: " + option << std::endl;
return false;
}
arg_index++;
}
else
{
return false;
}
arg_index++;
}
if (res->hasDevice)
{
for (int i = 0; i < res->devices.size(); i++)
{
if (!res->devices[i].hasOption)
{
std::cout << "Error: Device " + std::to_string(i) + " specified, but neither mode nor color given" << std::endl;
return false;
}
}
}
else
{
return res->allDeviceOptions.hasOption;
}
return true;
}
void ApplyOptions(DeviceOptions& options)
{
RGBController *device = rgb_controllers[options.device];
// Set mode first, in case it's 'direct' (which affects SetLED below)
int mode = ParseMode(options);
device->SetMode(mode);
if (options.colors.size() != 0)
{
int last_set_color;
for (int i = 0; i < device->leds.size(); i++)
{
if (i < options.colors.size())
{
last_set_color = i;
}
device->SetLED(i, ToRGBColor(std::get<0>(options.colors[last_set_color]),
std::get<1>(options.colors[last_set_color]),
std::get<2>(options.colors[last_set_color])));
}
}
}
int cli_main(int argc, char *argv[])
{
if (argc == 2 && (!strcmp(argv[1], "--help") || !strcmp(argv[1], "-h")))
{
PrintHelp();
return 0;
}
if (argc == 2 && (!strcmp(argv[1], "--version") || !strcmp(argv[1], "-v")))
{
PrintVersion();
return 0;
}
DetectRGBControllers();
Options options;
if (!ProcessOptions(argc, argv, &options))
{
PrintHelp();
return -1;
}
if (options.hasDevice)
{
for (int i = 0; i < options.devices.size(); i++)
{
ApplyOptions(options.devices[i]);
}
}
else
{
for (int i = 0; i < rgb_controllers.size(); i++)
{
options.allDeviceOptions.device = i;
ApplyOptions(options.allDeviceOptions);
}
}
return 0;
}
+560
View File
@@ -0,0 +1,560 @@
#define _WIN32_LEAN_AND_MEAN
#include <windows.h>
#include "nvapi.h"
// Constructors for NvAPI structures that just zero the memory and set the right version
NV_DELTA_ENTRY::NV_DELTA_ENTRY()
{
memset(this, 0, sizeof *this);
}
NV_GPU_PSTATES20_V2::NV_GPU_PSTATES20_V2()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_GPU_PSTATES20_V2, 2);
}
NV_CLOCK_FREQUENCIES_V2::NV_CLOCK_FREQUENCIES_V2()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_CLOCK_FREQUENCIES_V2, 2);
}
NV_GPU_PERFORMANCE_TABLE_V1::NV_GPU_PERFORMANCE_TABLE_V1()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_GPU_PERFORMANCE_TABLE_V1, 1);
}
NV_DYNAMIC_PSTATES_V1::NV_DYNAMIC_PSTATES_V1()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_DYNAMIC_PSTATES_V1, 1);
}
NV_GPU_POWER_POLICIES_INFO_V1::NV_GPU_POWER_POLICIES_INFO_V1()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_GPU_POWER_POLICIES_INFO_V1, 1);
}
NV_GPU_POWER_POLICIES_STATUS_V1::NV_GPU_POWER_POLICIES_STATUS_V1()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_GPU_POWER_POLICIES_STATUS_V1, 1);
}
NV_GPU_VOLTAGE_DOMAINS_STATUS_V1::NV_GPU_VOLTAGE_DOMAINS_STATUS_V1()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_GPU_VOLTAGE_DOMAINS_STATUS_V1, 1);
}
NV_GPU_THERMAL_SETTINGS_V2::NV_GPU_THERMAL_SETTINGS_V2()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_GPU_THERMAL_SETTINGS_V2, 2);
}
NV_GPU_THERMAL_POLICIES_INFO_V2::NV_GPU_THERMAL_POLICIES_INFO_V2()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_GPU_THERMAL_POLICIES_INFO_V2, 2);
}
NV_GPU_THERMAL_POLICIES_STATUS_V2::NV_GPU_THERMAL_POLICIES_STATUS_V2()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_GPU_THERMAL_POLICIES_STATUS_V2, 2);
}
NV_GPU_COOLER_SETTINGS_V2::NV_GPU_COOLER_SETTINGS_V2()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_GPU_COOLER_SETTINGS_V2, 2);
}
NV_GPU_COOLER_LEVELS_V1::NV_GPU_COOLER_LEVELS_V1()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_GPU_COOLER_LEVELS_V1, 1);
}
NV_MEMORY_INFO_V2::NV_MEMORY_INFO_V2()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_MEMORY_INFO_V2, 2);
}
NV_DISPLAY_DRIVER_VERSION_V1::NV_DISPLAY_DRIVER_VERSION_V1()
{
memset(this, 0, sizeof *this);
version = NV_STRUCT_VERSION(NV_DISPLAY_DRIVER_VERSION_V1, 1);
}
NV_I2C_INFO_V3::NV_I2C_INFO_V3()
{
memset(this, 0, sizeof * this);
version = NV_STRUCT_VERSION(NV_I2C_INFO_V3, 3);
}
// Interface: 0150E828
static NV_STATUS (*pNvAPI_Initialize)();
// Interface: D22BDD7E
static NV_STATUS (*pNvAPI_Unload)();
// Interface: 9ABDD40D
static NV_STATUS (*pNvAPI_EnumDisplayHandle)(
NV_S32 this_enum,
NV_DISPLAY_HANDLE *display_handle);
// Interface: E5AC921F
static NV_STATUS (*pNvAPI_EnumPhysicalGPUs)(
NV_PHYSICAL_GPU_HANDLE *physical_gpu_handles,
NV_S32 *gpu_count);
// Interface: F951A4D1
static NV_STATUS (*pNvAPI_GetDisplayDriverVersion)(
NV_DISPLAY_HANDLE display_handle,
NV_DISPLAY_DRIVER_VERSION_V1 *display_driver_version);
// Interface: 01053FA5
static NV_STATUS (*pNvAPI_GetInterfaceVersionString)(
NV_SHORT_STRING version);
// Interface: 34EF9506
static NV_STATUS (*pNvAPI_GetPhysicalGPUsFromDisplay)(
NV_DISPLAY_HANDLE display_handle,
NV_PHYSICAL_GPU_HANDLE *gpu_handles,
NV_U32 *gpu_count);
// Interface: 774AA982
static NV_STATUS (*pNvAPI_GetMemoryInfo)(
NV_DISPLAY_HANDLE display_handle,
NV_MEMORY_INFO_V2 *memory_info);
// Interface: 0CEEE8E9F
static NV_STATUS (*pNvAPI_GPU_GetFullName)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_SHORT_STRING name);
// Interface: 6FF81213
static NV_STATUS (*pNvAPI_GPU_GetPStates20)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_PSTATES20_V2 *pstates);
// Interface: 0F4DAE6B
static NV_STATUS (*pNvAPI_GPU_SetPStates20)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_PSTATES20_V2 *pstates);
// Interface: DCB616C3
static NV_STATUS (*pNvAPI_GPU_GetAllClockFrequencies)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_CLOCK_FREQUENCIES_V2 *frequencies);
// Interface: 60DED2ED
static NV_STATUS (*pNvAPI_GPU_GetDynamicPStates)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_DYNAMIC_PSTATES_V1 *dynamic_pstates);
// Interface: 34206D86
static NV_STATUS (*pNvAPI_GPU_GetPowerPoliciesInfo)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_POWER_POLICIES_INFO_V1 *policies_info);
// Interface: 70916171
static NV_STATUS (*pNvAPI_GPU_GetPowerPoliciesStatus)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_POWER_POLICIES_STATUS_V1 *policies_status);
// Interface: 0C16C7E2C
static NV_STATUS (*pNvAPI_GPU_GetVoltageDomainStatus)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_VOLTAGE_DOMAINS_STATUS_V1 *voltage_domains_status);
// Interface: 0E3640A56
static NV_STATUS (*pNvAPI_GPU_GetThermalSettings)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_THERMAL_TARGET sensor_index,
NV_GPU_THERMAL_SETTINGS_V2 *thermal_settings);
// Interface: 014B83A5F
static NV_STATUS (*pNvAPI_GPU_GetSerialNumber)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_SHORT_STRING serial_number);
// Interface: 0AD95F5ED
static NV_STATUS (*pNvAPI_GPU_SetPowerPoliciesStatus)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_POWER_POLICIES_STATUS_V1* policies_status);
// Interface: 00D258BB5
static NV_STATUS (*pNvAPI_GPU_GetThermalPoliciesInfo)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_THERMAL_POLICIES_INFO_V2* thermal_info);
// Interface: 0E9C425A1
static NV_STATUS (*pNvAPI_GPU_GetThermalPoliciesStatus)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_THERMAL_POLICIES_STATUS_V2* thermal_status);
// Interface: 034C0B13D
static NV_STATUS (*pNvAPI_GPU_SetThermalPoliciesStatus)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_THERMAL_POLICIES_STATUS_V2* thermal_status);
// Interface: DA141340
static NV_STATUS (*pNvAPI_GPU_GetCoolerSettings)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_S32 cooler_index,
NV_GPU_COOLER_SETTINGS_V2 *cooler_settings);
// Interface: 891FA0AE
static NV_STATUS (*pNvAPI_GPU_SetCoolerLevels)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_S32 cooler_index,
NV_GPU_COOLER_LEVELS_V1 *cooler_levels);
// Interface: 2DDFB66E
static NV_STATUS (*pNvAPI_GPU_GetPCIIdentifiers)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_U32 *device_id,
NV_U32 *sub_system_id,
NV_U32 *revision_id,
NV_U32 *ext_device_id);
// Interface: 283AC65A
static NV_STATUS (*pNvAPI_I2CWriteEx)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_I2C_INFO_V3* i2c_info,
NV_U32 *unknown);
// Interface: 4D7B0709
static NV_STATUS(*pNvAPI_I2CReadEx)(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_I2C_INFO_V3* i2c_info,
NV_U32 *unknown);
static bool QueryInterfaceOpaque(FARPROC query_interface, NV_U32 id, void **result)
{
void *address = ((void *(*)(NV_U32))query_interface)(id);
if (address) {
*result = address;
return true;
}
return false;
}
template<typename F>
static void QueryInterfaceCast(FARPROC query_interface, NV_U32 id, const char *function_name, F &function_pointer)
{
const bool result = QueryInterfaceOpaque(query_interface, id, (void **)&function_pointer);
////Log::write("%s querying interface '0x%08x' '%s'", result ? "success" : "failure", id, function_name);
}
#define QueryInterface(query_interface, id, function) \
QueryInterfaceCast((query_interface), (id), #function, p ## function)
static void QueryInterfaces(FARPROC query_interface)
{
//Log::write("querying interfaces with '0x%p'", query_interface);
QueryInterface(query_interface, 0x0150E828, NvAPI_Initialize);
QueryInterface(query_interface, 0xD22BDD7E, NvAPI_Unload);
QueryInterface(query_interface, 0x9ABDD40D, NvAPI_EnumDisplayHandle);
QueryInterface(query_interface, 0xE5AC921F, NvAPI_EnumPhysicalGPUs);
QueryInterface(query_interface, 0xF951A4D1, NvAPI_GetDisplayDriverVersion);
QueryInterface(query_interface, 0x01053FA5, NvAPI_GetInterfaceVersionString);
QueryInterface(query_interface, 0x34EF9506, NvAPI_GetPhysicalGPUsFromDisplay);
QueryInterface(query_interface, 0x774AA982, NvAPI_GetMemoryInfo);
QueryInterface(query_interface, 0x0CEEE8E9F, NvAPI_GPU_GetFullName);
QueryInterface(query_interface, 0x6FF81213, NvAPI_GPU_GetPStates20);
QueryInterface(query_interface, 0x0F4DAE6B, NvAPI_GPU_SetPStates20);
QueryInterface(query_interface, 0xDCB616C3, NvAPI_GPU_GetAllClockFrequencies);
QueryInterface(query_interface, 0x60DED2ED, NvAPI_GPU_GetDynamicPStates);
QueryInterface(query_interface, 0x34206D86, NvAPI_GPU_GetPowerPoliciesInfo);
QueryInterface(query_interface, 0x70916171, NvAPI_GPU_GetPowerPoliciesStatus);
QueryInterface(query_interface, 0x0C16C7E2C, NvAPI_GPU_GetVoltageDomainStatus);
QueryInterface(query_interface, 0x0E3640A56, NvAPI_GPU_GetThermalSettings);
QueryInterface(query_interface, 0x014B83A5F, NvAPI_GPU_GetSerialNumber);
QueryInterface(query_interface, 0x0AD95F5ED, NvAPI_GPU_SetPowerPoliciesStatus);
QueryInterface(query_interface, 0x00D258BB5, NvAPI_GPU_GetThermalPoliciesInfo);
QueryInterface(query_interface, 0x0E9C425A1, NvAPI_GPU_GetThermalPoliciesStatus);
QueryInterface(query_interface, 0x034C0B13D, NvAPI_GPU_SetThermalPoliciesStatus);
QueryInterface(query_interface, 0xDA141340, NvAPI_GPU_GetCoolerSettings);
QueryInterface(query_interface, 0x891FA0AE, NvAPI_GPU_SetCoolerLevels);
QueryInterface(query_interface, 0x2DDFB66E, NvAPI_GPU_GetPCIIdentifiers);
QueryInterface(query_interface, 0x283AC65A, NvAPI_I2CWriteEx);
QueryInterface(query_interface, 0x4D7B0709, NvAPI_I2CReadEx);
}
NV_STATUS NvAPI_Initialize()
{
if (!pNvAPI_Initialize) {
const char *name = sizeof(void*) == 4 ? "nvapi.dll" : "nvapi64.dll";
HMODULE nvapi = LoadLibraryA(name);
if (!nvapi) {
//Log::write("failed to load '%s'", name);
return -1;
}
//Log::write("loaded '%s' '0x%p'", name, nvapi);
FARPROC query_interface = GetProcAddress(nvapi, "nvapi_QueryInterface");
if (!query_interface) {
//Log::write("failed to find 'nvapi_QueryInterface'");
return -1;
}
QueryInterfaces(query_interface);
}
return pNvAPI_Initialize
? (*pNvAPI_Initialize)()
: -1;
}
NV_STATUS NvAPI_Unload()
{
return pNvAPI_Unload
? (*pNvAPI_Unload)()
: -1;
}
NV_STATUS NvAPI_EnumDisplayHandle(
NV_S32 this_enum,
NV_DISPLAY_HANDLE *display_handle)
{
return pNvAPI_EnumDisplayHandle
? (*pNvAPI_EnumDisplayHandle)(this_enum, display_handle)
: -1;
}
NV_STATUS NvAPI_EnumPhysicalGPUs(
NV_PHYSICAL_GPU_HANDLE *physical_gpu_handles,
NV_S32 *gpu_count)
{
return pNvAPI_EnumPhysicalGPUs
? (*pNvAPI_EnumPhysicalGPUs)(physical_gpu_handles, gpu_count)
: -1;
}
NV_STATUS NvAPI_GetDisplayDriverVersion(
NV_DISPLAY_HANDLE display_handle,
NV_DISPLAY_DRIVER_VERSION_V1 *display_driver_version)
{
return pNvAPI_GetDisplayDriverVersion
? (*pNvAPI_GetDisplayDriverVersion)(display_handle, display_driver_version)
: -1;
}
NV_STATUS NvAPI_GetInterfaceVersionString(
NV_SHORT_STRING version)
{
return pNvAPI_GetInterfaceVersionString
? (*pNvAPI_GetInterfaceVersionString)(version)
: -1;
}
NV_STATUS NvAPI_GetPhysicalGPUsFromDisplay(
NV_DISPLAY_HANDLE display_handle,
NV_PHYSICAL_GPU_HANDLE *gpu_handles,
NV_U32 *gpu_count)
{
return pNvAPI_GetPhysicalGPUsFromDisplay
? (*pNvAPI_GetPhysicalGPUsFromDisplay)(display_handle, gpu_handles, gpu_count)
: -1;
}
NV_STATUS NvAPI_GetMemoryInfo(
NV_DISPLAY_HANDLE display_handle,
NV_MEMORY_INFO_V2 *memory_info)
{
return pNvAPI_GetMemoryInfo
? (*pNvAPI_GetMemoryInfo)(display_handle, memory_info)
: -1;
}
NV_STATUS NvAPI_GPU_GetFullName(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_SHORT_STRING name)
{
return pNvAPI_GPU_GetFullName
? (*pNvAPI_GPU_GetFullName)(physical_gpu_handle, name)
: -1;
}
NV_STATUS NvAPI_GPU_GetPStates20(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_PSTATES20_V2 *pstates)
{
return pNvAPI_GPU_GetPStates20
? (*pNvAPI_GPU_GetPStates20)(physical_gpu_handle, pstates)
: -1;
}
NV_STATUS NvAPI_GPU_SetPStates20(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_PSTATES20_V2 *pstates)
{
return pNvAPI_GPU_SetPStates20
? (*pNvAPI_GPU_GetPStates20)(physical_gpu_handle, pstates)
: -1;
}
NV_STATUS NvAPI_GPU_GetAllClockFrequencies(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_CLOCK_FREQUENCIES_V2 *frequencies)
{
return pNvAPI_GPU_GetAllClockFrequencies
? (*pNvAPI_GPU_GetAllClockFrequencies)(physical_gpu_handle, frequencies)
: -1;
}
NV_STATUS NvAPI_GPU_GetDynamicPStates(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_DYNAMIC_PSTATES_V1 *dynamic_pstates)
{
return pNvAPI_GPU_GetDynamicPStates
? (*pNvAPI_GPU_GetDynamicPStates)(physical_gpu_handle, dynamic_pstates)
: -1;
}
NV_STATUS NvAPI_GPU_GetPowerPoliciesInfo(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_POWER_POLICIES_INFO_V1 *policies_info)
{
return pNvAPI_GPU_GetPowerPoliciesInfo
? (*pNvAPI_GPU_GetPowerPoliciesInfo)(physical_gpu_handle, policies_info)
: -1;
}
NV_STATUS NvAPI_GPU_GetPowerPoliciesStatus(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_POWER_POLICIES_STATUS_V1 *policies_status)
{
return pNvAPI_GPU_GetPowerPoliciesStatus
? (*NvAPI_GPU_GetPowerPoliciesStatus)(physical_gpu_handle, policies_status)
: -1;
}
NV_STATUS NvAPI_GPU_GetVoltageDomainStatus(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_VOLTAGE_DOMAINS_STATUS_V1 *voltage_domains_status)
{
return pNvAPI_GPU_GetVoltageDomainStatus
? (*pNvAPI_GPU_GetVoltageDomainStatus)(physical_gpu_handle, voltage_domains_status)
: -1;
}
NV_STATUS NvAPI_GPU_GetThermalSettings(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_THERMAL_TARGET sensor_index,
NV_GPU_THERMAL_SETTINGS_V2 *thermal_settings)
{
return pNvAPI_GPU_GetThermalSettings
? (*pNvAPI_GPU_GetThermalSettings)(physical_gpu_handle, sensor_index, thermal_settings)
: -1;
}
NV_STATUS NvAPI_GPU_GetSerialNumber(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_SHORT_STRING serial_number)
{
return pNvAPI_GPU_GetSerialNumber
? (*pNvAPI_GPU_GetSerialNumber)(physical_gpu_handle, serial_number)
: -1;
}
NV_STATUS NvAPI_GPU_SetPowerPoliciesStatus(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_POWER_POLICIES_STATUS_V1* policies_status)
{
return pNvAPI_GPU_SetPowerPoliciesStatus
? (*pNvAPI_GPU_SetPowerPoliciesStatus)(physical_gpu_handle, policies_status)
: -1;
}
NV_STATUS NvAPI_GPU_GetThermalPoliciesInfo(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_THERMAL_POLICIES_INFO_V2* thermal_info)
{
return pNvAPI_GPU_GetThermalPoliciesInfo
? (*pNvAPI_GPU_GetThermalPoliciesInfo)(physical_gpu_handle, thermal_info)
: -1;
}
NV_STATUS NvAPI_GPU_GetThermalPoliciesStatus(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_THERMAL_POLICIES_STATUS_V2* thermal_status)
{
return pNvAPI_GPU_GetThermalPoliciesStatus
? (*pNvAPI_GPU_GetThermalPoliciesStatus)(physical_gpu_handle, thermal_status)
: -1;
}
NV_STATUS NvAPI_GPU_SetThermalPoliciesStatus(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_THERMAL_POLICIES_STATUS_V2* thermal_status)
{
return pNvAPI_GPU_SetThermalPoliciesStatus
? (*pNvAPI_GPU_SetThermalPoliciesStatus)(physical_gpu_handle, thermal_status)
: -1;
}
NV_STATUS NvAPI_GPU_GetCoolerSettings(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_S32 cooler_index,
NV_GPU_COOLER_SETTINGS_V2 *cooler_settings)
{
return pNvAPI_GPU_GetCoolerSettings
? (*pNvAPI_GPU_GetCoolerSettings)(physical_gpu_handle, cooler_index, cooler_settings)
: -1;
}
NV_STATUS NvAPI_GPU_SetCoolerLevels(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_S32 cooler_index,
NV_GPU_COOLER_LEVELS_V1 *cooler_levels)
{
return pNvAPI_GPU_SetCoolerLevels
? (*pNvAPI_GPU_SetCoolerLevels)(physical_gpu_handle, cooler_index, cooler_levels)
: -1;
}
NV_STATUS NvAPI_GPU_GetPCIIdentifiers(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_U32 *device_id,
NV_U32 *sub_system_id,
NV_U32 *revision_id,
NV_U32 *ext_device_id)
{
return pNvAPI_GPU_GetPCIIdentifiers
? (*pNvAPI_GPU_GetPCIIdentifiers)(physical_gpu_handle, device_id, sub_system_id, revision_id, ext_device_id)
: -1;
}
NV_STATUS NvAPI_I2CWriteEx(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_I2C_INFO_V3* i2c_info,
NV_U32 *unknown)
{
return pNvAPI_I2CWriteEx
? (*pNvAPI_I2CWriteEx)(physical_gpu_handle, i2c_info, unknown)
: -1;
}
NV_STATUS NvAPI_I2CReadEx(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_I2C_INFO_V3* i2c_info,
NV_U32 *unknown)
{
return pNvAPI_I2CReadEx
? (*pNvAPI_I2CReadEx)(physical_gpu_handle, i2c_info, unknown)
: -1;
}
+465
View File
@@ -0,0 +1,465 @@
#ifndef NVAPI_H
#define NVAPI_H
#include <stdint.h>
typedef int32_t NV_S32;
typedef uint32_t NV_U32;
typedef uint8_t NV_U8;
typedef NV_S32* NV_HANDLE;
typedef NV_HANDLE NV_PHYSICAL_GPU_HANDLE;
typedef NV_HANDLE NV_VIRTUAL_GPU_HANDLE;
typedef NV_HANDLE NV_UNATTACHED_DISPLAY_HANDLE;
typedef NV_HANDLE NV_DISPLAY_HANDLE;
typedef char NV_SHORT_STRING[64];
typedef NV_S32 NV_STATUS;
#define NV_STRUCT_VERSION(STRUCT, VERSION) \
(((VERSION) << 16) | sizeof(STRUCT))
enum class NV_CLOCK_SYSTEM : NV_S32 {
GPU,
MEMORY,
SHADER
};
enum class NV_DYNAMIC_PSTATES_SYSTEM : NV_S32 {
GPU,
FB,
VID,
BUS
};
struct NV_DELTA_ENTRY {
NV_DELTA_ENTRY();
NV_S32 value;
NV_S32 value_min;
NV_S32 value_max;
};
struct NV_GPU_PSTATES20_V2 {
NV_GPU_PSTATES20_V2();
NV_U32 version;
NV_U32 flags;
NV_U32 state_count;
NV_U32 clock_count;
NV_U32 voltage_count;
struct {
NV_U32 state_num;
NV_U32 flags;
struct {
NV_U32 domain;
NV_U32 type; // NOTE(dweiler): 0 = single frequency, 1 = dynamic frequencu
NV_U32 flags; // NOTE(dweiler): flags don't appear to be enforced by NVAPI
NV_DELTA_ENTRY frequency_delta; // NOTE(dweiler): only valid when type == 1
NV_U32 min_or_single_frequency; // NOTE(dweiler): only valid when type == 0
NV_U32 max_frequency; // NOTE(dweiler): only valid when type == 1
NV_U32 voltage_domain; // NOTE(dweiler): only valid when type == 1
NV_U32 min_voltage; // NOTE(dweiler): only valid when type == 1
NV_U32 max_voltage; // NOTE(dweiler): only valid when type == 1
} clocks[8];
struct {
NV_U32 domain;
NV_U32 flags; // NOTE(dweiler): base voltage can only be changed if bit 0 is set
NV_U32 voltage;
NV_DELTA_ENTRY voltage_delta;
} base_voltages[4]; // NOTE(dweiler): base voltage (resting voltage wheen given a pstate) for all available voltage domains
} states[16];
struct {
NV_U32 voltage_count;
struct {
NV_U32 domain;
NV_U32 flags;
NV_U32 voltage;
NV_DELTA_ENTRY voltage_delta;
} voltages[4];
} over_voltage;
};
enum class NV_CLOCK_FREQUENCY_TYPE : NV_S32 {
CURRENT,
BASE,
BOOST,
LAST
};
struct NV_CLOCK_FREQUENCIES_V2 {
NV_CLOCK_FREQUENCIES_V2();
NV_U32 version;
NV_U32 clock_type;
struct {
NV_U32 present;
NV_U32 frequency;
} entries[32];
};
struct NV_GPU_PERFORMANCE_TABLE_V1 {
NV_GPU_PERFORMANCE_TABLE_V1();
NV_U32 version;
NV_U32 plevel_count;
NV_U32 : 32; // NOTE(dweiler): unknown value
NV_U32 domain_entries;
NV_U32 : 32; // NOTE(dweiler): unknown value
NV_U32 pstate_level;
NV_U32 : 32; // NOTE(dweiler): unknown value
struct {
struct {
NV_U32 domain;
NV_U32 : 32; // NOTE(dweiler): unknown value
NV_U32 clock;
NV_U32 default_clock;
NV_U32 min_clock;
NV_U32 max_clock;
NV_U32 : 32; // NOTE(dweiler): unknown value
} domains[32];
NV_U32 : 32; // NOTE(dweiler): unknown value
NV_U32 setting_flags;
} entries[10];
NV_U32 unknown[450]; // NOTE(dweiler): the following block of memory is completely unknown
};
struct NV_DYNAMIC_PSTATES_V1 {
NV_DYNAMIC_PSTATES_V1();
NV_U32 version;
NV_U32 flags;
struct {
NV_U32 present;
NV_U32 value;
} pstates[8];
};
struct NV_GPU_POWER_POLICIES_INFO_V1 {
NV_GPU_POWER_POLICIES_INFO_V1();
NV_U32 version;
NV_U32 flags;
struct {
NV_U32 pstate;
NV_U32 : 32; // NOTE(dweiler): unknown value
NV_U32 : 32; // NOTE(dweiler): unknown value
NV_U32 min_power;
NV_U32 : 32; // NOTE(dweiler): unknown value
NV_U32 : 32; // NOTE(dweiler): unknown value
NV_U32 default_power;
NV_U32 : 32; // NOTE(dweiler): unknown value
NV_U32 : 32; // NOTE(dweiler): unknown value
NV_U32 max_power;
NV_U32 : 32; // NOTE(dweiler): unknown value
} entries[4];
};
struct NV_GPU_POWER_POLICIES_STATUS_V1 {
NV_GPU_POWER_POLICIES_STATUS_V1();
NV_U32 version;
NV_U32 count;
struct {
NV_U32 pstate; // NOTE(dweiler): assumed?
NV_U32 : 32; // NOTE(dweiler): unknown value
NV_U32 power;
NV_U32 : 32; // NOTE(dweiler): unknown value
} entries[4];
};
struct NV_GPU_VOLTAGE_DOMAINS_STATUS_V1 {
NV_GPU_VOLTAGE_DOMAINS_STATUS_V1();
NV_U32 version;
NV_U32 flags;
NV_U32 count;
struct {
NV_U32 voltage_domain;
NV_U32 current_voltage;
} entries[16];
};
enum class NV_THERMAL_CONTROLLER : NV_S32 {
NONE,
GPU_INTERNAL,
ADM103,
MAX6649,
MAX1617,
LM99,
LM89,
LM64,
ADT7473,
SBMAX6649,
VBIOSEVT,
OS,
UNKNOWN = -1
};
enum class NV_THERMAL_TARGET : NV_S32 {
NONE = 0,
GPU = 1,
MEMORY = 2,
POWER_SUPPLY = 4,
BOARD = 8,
ALL = 15,
UNKNOWN = -1
};
enum class NV_I2C_SPEED : NV_U32 {
NVAPI_I2C_SPEED_DEFAULT,
NVAPI_I2C_SPEED_3KHZ,
NVAPI_I2C_SPEED_10KHZ,
NVAPI_I2C_SPEED_33KHZ,
NVAPI_I2C_SPEED_100KHZ,
NVAPI_I2C_SPEED_200KHZ,
NVAPI_I2C_SPEED_400KHZ
};
struct NV_GPU_THERMAL_SETTINGS_V2 {
NV_GPU_THERMAL_SETTINGS_V2();
NV_U32 version;
NV_U32 count;
struct {
NV_THERMAL_CONTROLLER controller;
NV_S32 default_min;
NV_S32 default_max;
NV_S32 current_temperature;
NV_THERMAL_TARGET target;
} sensor[3];
};
struct NV_GPU_THERMAL_POLICIES_INFO_V2 {
NV_GPU_THERMAL_POLICIES_INFO_V2();
NV_U32 version;
NV_U32 flags;
struct {
NV_U32 controller; // NOTE(dweiler): can't be NV_THERMAL_CONTROLLER since this needs to be unsigned
NV_U32 : 32; // NOTE(dweiler): unknown value
NV_S32 min; // NOTE(dweiler): stored as multiples of 256
NV_S32 default_; // NOTE(dweiler): stored as multiples of 256
NV_S32 max; // NOTE(dweiler): stored as multiples of 256
NV_U32 default_flags; // NOTE(dweiler): bit zero of the flags indicates the thermal priority
} entries[4];
};
struct NV_GPU_THERMAL_POLICIES_STATUS_V2 {
NV_GPU_THERMAL_POLICIES_STATUS_V2();
NV_U32 version;
NV_U32 count;
struct {
NV_U32 controller;
NV_U32 value; // NOTE(dweiler): stored as multiples of 256
NV_U32 flags; // NOTE(dweiler): bit zero of the flags indicates the thermal priority
} entries[4];
};
struct NV_GPU_COOLER_SETTINGS_V2 {
NV_GPU_COOLER_SETTINGS_V2();
NV_U32 version;
NV_U32 count;
struct {
NV_S32 type;
NV_S32 controller;
NV_S32 default_min;
NV_S32 default_max;
NV_S32 current_min;
NV_S32 current_max;
NV_S32 current_level;
NV_S32 default_policy;
NV_S32 current_policy;
NV_S32 target;
NV_S32 control_type;
NV_S32 active;
} coolers[20];
};
struct NV_GPU_COOLER_LEVELS_V1 {
NV_GPU_COOLER_LEVELS_V1();
NV_U32 version;
struct {
NV_S32 level;
NV_S32 policy; // NOTE(dweiler): 0x20 is default policy, 0x01 is user supplied policy
// TODO(dweiler): figure out what other policy values are valid
} levels[20];
};
struct NV_MEMORY_INFO_V2 {
NV_MEMORY_INFO_V2();
NV_U32 version;
NV_U32 values[5];
};
struct NV_DISPLAY_DRIVER_VERSION_V1 {
NV_DISPLAY_DRIVER_VERSION_V1();
NV_U32 version;
NV_U32 driver_version; // NOTE(dweiler): major = (driver_version / 100), minor = (driver_version % 100)
NV_U32 : 32; // NOTE(dweiler): unknown vaue
NV_SHORT_STRING build_branch;
NV_SHORT_STRING adapter;
};
struct NV_I2C_INFO_V3 {
NV_I2C_INFO_V3();
NV_U32 version;
NV_U32 display_mask;
NV_U8 is_ddc_port;
NV_U8 i2c_dev_address;
NV_U8* i2c_reg_address;
NV_U32 reg_addr_size;
NV_U8* data;
NV_U32 size;
NV_U32 i2c_speed;
NV_I2C_SPEED i2c_speed_khz;
NV_U8 port_id;
NV_U32 is_port_id_set;
};
// Interface: 0150E828
NV_STATUS NvAPI_Initialize();
// Interface: D22BDD7E
NV_STATUS NvAPI_Unload();
// Interface: 9ABDD40D
NV_STATUS NvAPI_EnumDisplayHandle(
NV_S32 this_enum,
NV_DISPLAY_HANDLE *display_handle);
// Interface: E5AC921F
NV_STATUS NvAPI_EnumPhysicalGPUs(
NV_PHYSICAL_GPU_HANDLE *physical_gpu_handles,
NV_S32 *gpu_count);
// Interface: F951A4D1
NV_STATUS NvAPI_GetDisplayDriverVersion(
NV_DISPLAY_HANDLE display_handle,
NV_DISPLAY_DRIVER_VERSION_V1 *display_driver_version);
// Interface: 01053FA5
NV_STATUS NvAPI_GetInterfaceVersionString(
NV_SHORT_STRING version);
// Interface: 34EF9506
NV_STATUS NvAPI_GetPhysicalGPUsFromDisplay(
NV_DISPLAY_HANDLE display_handle,
NV_PHYSICAL_GPU_HANDLE *gpu_handles,
NV_U32 *gpu_count);
// Interface: 774AA982
NV_STATUS NvAPI_GetMemoryInfo(
NV_DISPLAY_HANDLE display_handle,
NV_MEMORY_INFO_V2 *memory_info);
// Interface: 0CEEE8E9F
NV_STATUS NvAPI_GPU_GetFullName(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_SHORT_STRING name);
// Interface: 6FF81213
NV_STATUS NvAPI_GPU_GetPStates20(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_PSTATES20_V2 *pstates);
// Interface: 0F4DAE6B
NV_STATUS NvAPI_GPU_SetPStates20(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_PSTATES20_V2 *pstates);
// Get frequencies of all clocks of the GPU
//
// The actual frequencies (current, base, boost) returned is based on the value
// set in frequencies->clock_type before calling this function. The value values
// are part of the NV_CLOCK_FREQUENCY_TYPE enumeration.
//
// Interface: DCB616C3
NV_STATUS NvAPI_GPU_GetAllClockFrequencies(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_CLOCK_FREQUENCIES_V2 *frequencies);
// Interface: 60DED2ED
NV_STATUS NvAPI_GPU_GetDynamicPStates(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_DYNAMIC_PSTATES_V1 *dynamic_pstates);
// Interface: 34206D86
NV_STATUS NvAPI_GPU_GetPowerPoliciesInfo(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_POWER_POLICIES_INFO_V1 *policies_info);
// Interface: 70916171
NV_STATUS NvAPI_GPU_GetPowerPoliciesStatus(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_POWER_POLICIES_STATUS_V1 *policies_status);
// Interface: 0C16C7E2C
NV_STATUS NvAPI_GPU_GetVoltageDomainStatus(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_VOLTAGE_DOMAINS_STATUS_V1 *voltage_domains_status);
// Get the thermal settings of the GPU
//
// The value of [sensor_index] must be one of the values of NV_THERMAL_TARGET,
// either a single sensor, or the special value NV_THERMAL_TARGET::ALL for all
// sensors present on the GPU
//
// Interface: 0E3640A56
NV_STATUS NvAPI_GPU_GetThermalSettings(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_THERMAL_TARGET sensor_index,
NV_GPU_THERMAL_SETTINGS_V2 *thermal_settings);
// Get the serial number of the GPU
//
// The NV_SHORT_STRING will be filled out accordingly
//
// Interface: 014B83A5F
NV_STATUS NvAPI_GPU_GetSerialNumber(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_SHORT_STRING serial_number);
// Interface: 0AD95F5ED
NV_STATUS NvAPI_GPU_SetPowerPoliciesStatus(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_POWER_POLICIES_STATUS_V1* policies_status);
// Interface: 00D258BB5
NV_STATUS NvAPI_GPU_GetThermalPoliciesInfo(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_THERMAL_POLICIES_INFO_V2* thermal_info);
// Interface: 0E9C425A1
NV_STATUS NvAPI_GPU_GetThermalPoliciesStatus(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_THERMAL_POLICIES_STATUS_V2* thermal_status);
// Interface: 034C0B13D
NV_STATUS NvAPI_GPU_SetThermalPoliciesStatus(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_GPU_THERMAL_POLICIES_STATUS_V2* thermal_status);
// Interface: DA141340
NV_STATUS NvAPI_GPU_GetCoolerSettings(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_S32 cooler_index,
NV_GPU_COOLER_SETTINGS_V2 *cooler_settings);
// Interface: 891FA0AE
NV_STATUS NvAPI_GPU_SetCoolerLevels(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_S32 cooler_index,
NV_GPU_COOLER_LEVELS_V1 *cooler_levels);
// Interface: 2DDFB66E
NV_STATUS NvAPI_GPU_GetPCIIdentifiers(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_U32 *device_id,
NV_U32 *sub_system_id,
NV_U32 *revision_id,
NV_U32 *ext_device_id);
// Interface: 283AC65A
NV_STATUS NvAPI_I2CWriteEx(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_I2C_INFO_V3 *i2c_info,
NV_U32 *unknown);
// Interface: 4D7B0709
NV_STATUS NvAPI_I2CReadEx(
NV_PHYSICAL_GPU_HANDLE physical_gpu_handle,
NV_I2C_INFO_V3* i2c_info,
NV_U32 *unknown);
#endif
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1383
View File
File diff suppressed because it is too large Load Diff
+28 -32
View File
@@ -30,7 +30,7 @@
#include <wchar.h> #include <wchar.h>
#ifdef _WIN32 #ifdef _WIN32
#define HID_API_EXPORT __declspec(dllexport) #define HID_API_EXPORT
#define HID_API_CALL #define HID_API_CALL
#else #else
#define HID_API_EXPORT /**< API export macro */ #define HID_API_EXPORT /**< API export macro */
@@ -69,13 +69,9 @@ extern "C" {
(Windows/Mac only).*/ (Windows/Mac only).*/
unsigned short usage; unsigned short usage;
/** The USB interface which this logical device /** The USB interface which this logical device
represents. represents. Valid on both Linux implementations
in all cases, and valid on the Windows implementation
* Valid on both Linux implementations in all cases. only if the device contains more than one interface. */
* Valid on the Windows implementation only if the device
contains more than one interface.
* Valid on the Mac implementation if and only if the device
is a USB HID device. */
int interface_number; int interface_number;
/** Pointer to the next device */ /** Pointer to the next device */
@@ -129,7 +125,7 @@ extern "C" {
@returns @returns
This function returns a pointer to a linked list of type This function returns a pointer to a linked list of type
struct #hid_device_info, containing information about the HID devices struct #hid_device, containing information about the HID devices
attached to the system, or NULL in the case of failure. Free attached to the system, or NULL in the case of failure. Free
this linked list by calling hid_free_enumeration(). this linked list by calling hid_free_enumeration().
*/ */
@@ -195,7 +191,7 @@ extern "C" {
the Control Endpoint (Endpoint 0). the Control Endpoint (Endpoint 0).
@ingroup API @ingroup API
@param dev A device handle returned from hid_open(). @param device A device handle returned from hid_open().
@param data The data to send, including the report number as @param data The data to send, including the report number as
the first byte. the first byte.
@param length The length in bytes of the data to send. @param length The length in bytes of the data to send.
@@ -204,7 +200,7 @@ extern "C" {
This function returns the actual number of bytes written and This function returns the actual number of bytes written and
-1 on error. -1 on error.
*/ */
int HID_API_EXPORT HID_API_CALL hid_write(hid_device *dev, const unsigned char *data, size_t length); int HID_API_EXPORT HID_API_CALL hid_write(hid_device *device, const unsigned char *data, size_t length);
/** @brief Read an Input report from a HID device with timeout. /** @brief Read an Input report from a HID device with timeout.
@@ -213,7 +209,7 @@ extern "C" {
contain the Report number if the device uses numbered reports. contain the Report number if the device uses numbered reports.
@ingroup API @ingroup API
@param dev A device handle returned from hid_open(). @param device A device handle returned from hid_open().
@param data A buffer to put the read data into. @param data A buffer to put the read data into.
@param length The number of bytes to read. For devices with @param length The number of bytes to read. For devices with
multiple reports, make sure to read an extra byte for multiple reports, make sure to read an extra byte for
@@ -234,7 +230,7 @@ extern "C" {
contain the Report number if the device uses numbered reports. contain the Report number if the device uses numbered reports.
@ingroup API @ingroup API
@param dev A device handle returned from hid_open(). @param device A device handle returned from hid_open().
@param data A buffer to put the read data into. @param data A buffer to put the read data into.
@param length The number of bytes to read. For devices with @param length The number of bytes to read. For devices with
multiple reports, make sure to read an extra byte for multiple reports, make sure to read an extra byte for
@@ -245,7 +241,7 @@ extern "C" {
-1 on error. If no packet was available to be read and -1 on error. If no packet was available to be read and
the handle is in non-blocking mode, this function returns 0. the handle is in non-blocking mode, this function returns 0.
*/ */
int HID_API_EXPORT HID_API_CALL hid_read(hid_device *dev, unsigned char *data, size_t length); int HID_API_EXPORT HID_API_CALL hid_read(hid_device *device, unsigned char *data, size_t length);
/** @brief Set the device handle to be non-blocking. /** @brief Set the device handle to be non-blocking.
@@ -257,7 +253,7 @@ extern "C" {
Nonblocking can be turned on and off at any time. Nonblocking can be turned on and off at any time.
@ingroup API @ingroup API
@param dev A device handle returned from hid_open(). @param device A device handle returned from hid_open().
@param nonblock enable or not the nonblocking reads @param nonblock enable or not the nonblocking reads
- 1 to enable nonblocking - 1 to enable nonblocking
- 0 to disable nonblocking. - 0 to disable nonblocking.
@@ -265,7 +261,7 @@ extern "C" {
@returns @returns
This function returns 0 on success and -1 on error. This function returns 0 on success and -1 on error.
*/ */
int HID_API_EXPORT HID_API_CALL hid_set_nonblocking(hid_device *dev, int nonblock); int HID_API_EXPORT HID_API_CALL hid_set_nonblocking(hid_device *device, int nonblock);
/** @brief Send a Feature report to the device. /** @brief Send a Feature report to the device.
@@ -283,7 +279,7 @@ extern "C" {
in would be 17. in would be 17.
@ingroup API @ingroup API
@param dev A device handle returned from hid_open(). @param device A device handle returned from hid_open().
@param data The data to send, including the report number as @param data The data to send, including the report number as
the first byte. the first byte.
@param length The length in bytes of the data to send, including @param length The length in bytes of the data to send, including
@@ -293,7 +289,7 @@ extern "C" {
This function returns the actual number of bytes written and This function returns the actual number of bytes written and
-1 on error. -1 on error.
*/ */
int HID_API_EXPORT HID_API_CALL hid_send_feature_report(hid_device *dev, const unsigned char *data, size_t length); int HID_API_EXPORT HID_API_CALL hid_send_feature_report(hid_device *device, const unsigned char *data, size_t length);
/** @brief Get a feature report from a HID device. /** @brief Get a feature report from a HID device.
@@ -304,7 +300,7 @@ extern "C" {
start in data[1]. start in data[1].
@ingroup API @ingroup API
@param dev A device handle returned from hid_open(). @param device A device handle returned from hid_open().
@param data A buffer to put the read data into, including @param data A buffer to put the read data into, including
the Report ID. Set the first byte of @p data[] to the the Report ID. Set the first byte of @p data[] to the
Report ID of the report to be read, or set it to zero Report ID of the report to be read, or set it to zero
@@ -318,55 +314,55 @@ extern "C" {
one for the report ID (which is still in the first one for the report ID (which is still in the first
byte), or -1 on error. byte), or -1 on error.
*/ */
int HID_API_EXPORT HID_API_CALL hid_get_feature_report(hid_device *dev, unsigned char *data, size_t length); int HID_API_EXPORT HID_API_CALL hid_get_feature_report(hid_device *device, unsigned char *data, size_t length);
/** @brief Close a HID device. /** @brief Close a HID device.
@ingroup API @ingroup API
@param dev A device handle returned from hid_open(). @param device A device handle returned from hid_open().
*/ */
void HID_API_EXPORT HID_API_CALL hid_close(hid_device *dev); void HID_API_EXPORT HID_API_CALL hid_close(hid_device *device);
/** @brief Get The Manufacturer String from a HID device. /** @brief Get The Manufacturer String from a HID device.
@ingroup API @ingroup API
@param dev A device handle returned from hid_open(). @param device A device handle returned from hid_open().
@param string A wide string buffer to put the data into. @param string A wide string buffer to put the data into.
@param maxlen The length of the buffer in multiples of wchar_t. @param maxlen The length of the buffer in multiples of wchar_t.
@returns @returns
This function returns 0 on success and -1 on error. This function returns 0 on success and -1 on error.
*/ */
int HID_API_EXPORT_CALL hid_get_manufacturer_string(hid_device *dev, wchar_t *string, size_t maxlen); int HID_API_EXPORT_CALL hid_get_manufacturer_string(hid_device *device, wchar_t *string, size_t maxlen);
/** @brief Get The Product String from a HID device. /** @brief Get The Product String from a HID device.
@ingroup API @ingroup API
@param dev A device handle returned from hid_open(). @param device A device handle returned from hid_open().
@param string A wide string buffer to put the data into. @param string A wide string buffer to put the data into.
@param maxlen The length of the buffer in multiples of wchar_t. @param maxlen The length of the buffer in multiples of wchar_t.
@returns @returns
This function returns 0 on success and -1 on error. This function returns 0 on success and -1 on error.
*/ */
int HID_API_EXPORT_CALL hid_get_product_string(hid_device *dev, wchar_t *string, size_t maxlen); int HID_API_EXPORT_CALL hid_get_product_string(hid_device *device, wchar_t *string, size_t maxlen);
/** @brief Get The Serial Number String from a HID device. /** @brief Get The Serial Number String from a HID device.
@ingroup API @ingroup API
@param dev A device handle returned from hid_open(). @param device A device handle returned from hid_open().
@param string A wide string buffer to put the data into. @param string A wide string buffer to put the data into.
@param maxlen The length of the buffer in multiples of wchar_t. @param maxlen The length of the buffer in multiples of wchar_t.
@returns @returns
This function returns 0 on success and -1 on error. This function returns 0 on success and -1 on error.
*/ */
int HID_API_EXPORT_CALL hid_get_serial_number_string(hid_device *dev, wchar_t *string, size_t maxlen); int HID_API_EXPORT_CALL hid_get_serial_number_string(hid_device *device, wchar_t *string, size_t maxlen);
/** @brief Get a string from a HID device, based on its string index. /** @brief Get a string from a HID device, based on its string index.
@ingroup API @ingroup API
@param dev A device handle returned from hid_open(). @param device A device handle returned from hid_open().
@param string_index The index of the string to get. @param string_index The index of the string to get.
@param string A wide string buffer to put the data into. @param string A wide string buffer to put the data into.
@param maxlen The length of the buffer in multiples of wchar_t. @param maxlen The length of the buffer in multiples of wchar_t.
@@ -374,18 +370,18 @@ extern "C" {
@returns @returns
This function returns 0 on success and -1 on error. This function returns 0 on success and -1 on error.
*/ */
int HID_API_EXPORT_CALL hid_get_indexed_string(hid_device *dev, int string_index, wchar_t *string, size_t maxlen); int HID_API_EXPORT_CALL hid_get_indexed_string(hid_device *device, int string_index, wchar_t *string, size_t maxlen);
/** @brief Get a string describing the last error which occurred. /** @brief Get a string describing the last error which occurred.
@ingroup API @ingroup API
@param dev A device handle returned from hid_open(). @param device A device handle returned from hid_open().
@returns @returns
This function returns a string containing the last error This function returns a string containing the last error
which occurred or NULL if none has occurred. which occurred or NULL if none has occurred.
*/ */
HID_API_EXPORT const wchar_t* HID_API_CALL hid_error(hid_device *dev); HID_API_EXPORT const wchar_t* HID_API_CALL hid_error(hid_device *device);
#ifdef __cplusplus #ifdef __cplusplus
} }
+32
View File
@@ -0,0 +1,32 @@
#pragma once
//Functions exported from DLL.
//For easy inclusion is user projects.
//Original InpOut32 function support
void _stdcall Out32(short PortAddress, short data);
short _stdcall Inp32(short PortAddress);
//My extra functions for making life easy
BOOL _stdcall IsInpOutDriverOpen(); //Returns TRUE if the InpOut driver was opened successfully
BOOL _stdcall IsXP64Bit(); //Returns TRUE if the OS is 64bit (x64) Windows.
//DLLPortIO function support
UCHAR _stdcall DlPortReadPortUchar (USHORT port);
void _stdcall DlPortWritePortUchar(USHORT port, UCHAR Value);
USHORT _stdcall DlPortReadPortUshort (USHORT port);
void _stdcall DlPortWritePortUshort(USHORT port, USHORT Value);
ULONG _stdcall DlPortReadPortUlong(ULONG port);
void _stdcall DlPortWritePortUlong(ULONG port, ULONG Value);
//WinIO function support (Untested and probably does NOT work - esp. on x64!)
PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
BOOL _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
BOOL _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
BOOL _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+31
View File
@@ -0,0 +1,31 @@
#ifndef DMI_H_
#define DMI_H_
enum dmi_field {
DMI_NONE,
DMI_BIOS_VENDOR,
DMI_BIOS_VERSION,
DMI_BIOS_DATE,
DMI_SYS_VENDOR,
DMI_PRODUCT_NAME,
DMI_PRODUCT_VERSION,
DMI_PRODUCT_SERIAL,
DMI_PRODUCT_UUID,
DMI_BOARD_VENDOR,
DMI_BOARD_NAME,
DMI_BOARD_VERSION,
DMI_BOARD_SERIAL,
DMI_BOARD_ASSET_TAG,
DMI_CHASSIS_VENDOR,
DMI_CHASSIS_TYPE,
DMI_CHASSIS_VERSION,
DMI_CHASSIS_SERIAL,
DMI_CHASSIS_ASSET_TAG,
DMI_STRING_MAX,
};
static inline char* dmi_get_system_info(int x) {
return "BLADESERIAL";
}
#endif /* DMI_H_ */
+300
View File
@@ -0,0 +1,300 @@
#ifndef HID_H_
#define HID_H_
#include <SetupAPI.h>
#include <cfgmgr32.h>
#include <Winusb.h>
#pragma comment(lib, "setupapi.lib")
#pragma comment(lib, "Winusb.lib")
#define HID_STAT_ADDED 1
#define HID_STAT_PARSED 2
#define HID_CONNECT_HIDINPUT 0x01
#define HID_CONNECT_HIDRAW 0x04
#define HID_CONNECT_HIDDEV 0x08
#define HID_CONNECT_FF 0x20
#define HID_CONNECT_DEFAULT (HID_CONNECT_HIDINPUT|HID_CONNECT_HIDRAW| HID_CONNECT_HIDDEV|HID_CONNECT_FF)
#define HID_GD_WHEEL 0x00010038
#define HID_REQ_GET_REPORT 0x01
#define HID_REQ_SET_REPORT 0x09
#define USB_INTERFACE_PROTOCOL_KEYBOARD 1
#define USB_INTERFACE_PROTOCOL_MOUSE 2
static const GUID GUID_DEVINTERFACE = { 0xDEE824EF, 0x729B, 0x4A0E, 0x9C, 0x14, 0xB7, 0x11, 0x7D, 0x33, 0xA8, 0x17 };
typedef enum
{
HID_TYPE_OTHER,
HID_TYPE_USBMOUSE,
HID_TYPE_USBNONE
} hid_type;
struct hid_input {
struct input_dev *input;
};
struct hid_field {
struct hid_input *hidinput; /* associated input structure */
};
struct hid_usage {
unsigned hid;
__u16 code; /* input driver code */
__u8 type; /* input driver type */
};
struct hid_driver {
char *name;
const struct hid_device_id *id_table;
int (*probe)(struct hid_device *dev, const struct hid_device_id *id);
void (*remove)(struct hid_device *dev);
int (*raw_event)(struct hid_device *hdev, struct hid_report *report, u8 *data, int size);
int (*event)(struct hid_device *hdev, struct hid_field *field, struct hid_usage *usage, __s32 value);
int (*input_configured)(struct hid_device *hdev,
struct hid_input *hidinput);
int (*input_mapping)(struct hid_device *hdev,
struct hid_input *hidinput, struct hid_field *field,
struct hid_usage *usage, unsigned long **bit, int *max);
};
struct hid_device_id {
__u16 bus;
__u32 vendor;
__u32 product;
};
struct hid_device {
__u16 product;
enum hid_type type;
struct device dev;
struct hid_ll_driver *ll_driver;
unsigned int status;
struct hid_driver *driver;
};
struct hid_ll_driver {
int (*start)(struct hid_device *hdev);
void (*stop)(struct hid_device *hdev);
int (*parse)(struct hid_device *hdev);
};
inline int ll_start(struct hid_device *hdev) {
printf("ll_start\n");
return 0;
}
inline void ll_stop(struct hid_device *hdev) {
printf("ll_stop\n");
}
inline int ll_parse(struct hid_device *hdev) {
printf("ll_parse\n");
return 0;
}
inline void dev_err(struct device** dev, const char* msg) {
printf("dev_err device=%s msg=%s", (*dev)->init_name, msg);
}
inline void dev_info(struct device** dev, const char* msg) {
printf("dev_err device=%s msg=%s", (*dev)->init_name, msg);
}
inline void *dev_get_drvdata(const struct device *dev) {
return dev->driver_data;
}
inline void dev_set_drvdata(struct device *dev, void *data) {
dev->driver_data = data;
}
inline int hid_connect(struct hid_device *hdev, unsigned int connect_mask) {
printf("hid_connect\n");
return 0;
}
inline int hid_parse(struct hid_device *hdev) {
int ret;
if (hdev->status & HID_STAT_PARSED)
return 0;
ret = hdev->ll_driver->parse(hdev);
if (!ret)
hdev->status |= HID_STAT_PARSED;
return ret;
}
inline void *hid_get_drvdata(struct hid_device *hdev) {
return dev_get_drvdata(&hdev->dev);
}
inline void hid_set_drvdata(struct hid_device *hdev, void *data) {
dev_set_drvdata(&hdev->dev, data);
}
inline int hid_hw_start(struct hid_device *hdev, unsigned int connect_mask) {
int ret = hdev->ll_driver->start(hdev);
if (ret || !connect_mask)
return ret;
ret = hid_connect(hdev, connect_mask);
if (ret)
hdev->ll_driver->stop(hdev);
return ret;
}
inline void hid_hw_stop(struct hid_device *hdev) {
hdev->ll_driver->stop(hdev);
}
inline void hid_err(struct hid_device *hdev, const char* msg, ...) {
va_list args;
va_start(args, msg);
printf("hid_err device=%s", hdev->dev.init_name);
printf(msg, args);
va_end(args);
}
inline void hid_map_usage(struct hid_input* hidinput,
struct hid_usage* usage, unsigned long** bit, int* max,
__u8 type, __u16 c)
{
};
#define container_of(ptr, type, member) (type*)((char*)(ptr)-(char*)&((type *)0)->member)
inline void close(struct device* dev) {
printf("close %04X\n", (to_usb_device(dev))->descriptor.idProduct);
struct usb_interface *intf = to_usb_interface(dev->parent);
struct usb_device *usb_dev = interface_to_usbdev(intf);
struct hid_device *hdev = container_of(dev, struct hid_device, dev);
free(hdev->ll_driver);
free(usb_dev);
free(intf->cur_altsetting);
free(intf);
free(hdev);
//TODO:cleanup malloc memory, move this function into DLL
}
inline void openChromaDevice(struct hid_device** hdev, unsigned int* numHdev, struct hid_driver hdr) {
for (unsigned int i = 0; hdr.id_table[i].vendor != 0; i++) {
HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE, 0, 0, DIGCF_DEVICEINTERFACE);
if (hDevInfo == INVALID_HANDLE_VALUE) {
printf("SetupDiGetClassDevs failed\n");
return;
}
SP_DEVINFO_DATA deviceData = { 0 };
deviceData.cbSize = sizeof(SP_DEVINFO_DATA);
for (unsigned int j = 0; SetupDiEnumDeviceInfo(hDevInfo, j, &deviceData); ++j) {
char deviceID[MAX_DEVICE_ID_LEN];
if (CM_Get_Device_ID(deviceData.DevInst, deviceID, MAX_DEVICE_ID_LEN, 0))
continue;
char* vid = strstr(deviceID, "VID_");
if (!vid || hdr.id_table[i].vendor != strtoul(vid+4, NULL, 16))
continue;
char* pid = strstr(deviceID, "PID_");
if (!pid || hdr.id_table[i].product != strtoul(pid+4, NULL, 16))
continue;
SP_INTERFACE_DEVICE_DATA interfaceData = { 0 };
interfaceData.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA);
if (!SetupDiEnumDeviceInterfaces(hDevInfo, &deviceData, &GUID_DEVINTERFACE, 0, &interfaceData))
continue;
DWORD dwRequiredSize = 0;
SetupDiGetDeviceInterfaceDetail(hDevInfo, &interfaceData, 0, 0, &dwRequiredSize, 0);
SP_INTERFACE_DEVICE_DETAIL_DATA* pData = (SP_INTERFACE_DEVICE_DETAIL_DATA*)malloc(dwRequiredSize);
pData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
if (!SetupDiGetDeviceInterfaceDetail(hDevInfo, &interfaceData, pData, dwRequiredSize, 0, 0)) {
free(pData);
continue;
}
HANDLE hDevice = CreateFile(pData->DevicePath
, GENERIC_READ | GENERIC_WRITE
, FILE_SHARE_READ | FILE_SHARE_WRITE
, 0
, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED
, 0);
if (hDevice == INVALID_HANDLE_VALUE) {
free(pData);
continue;
}
WINUSB_INTERFACE_HANDLE hWinUSBHandle;
if (!WinUsb_Initialize(hDevice, &hWinUSBHandle))
continue;
SetupDiDestroyDeviceInfoList(hDevInfo);
printf("CM_Get_Device_ID (%s)\n", deviceID);
printf("device %04X:%04X opened!\n", hdr.id_table[i].vendor, hdr.id_table[i].product);
*hdev = (struct hid_device*)realloc(*hdev, (*numHdev+1) * sizeof(struct hid_device));
if (!*hdev) {
printf("out of memory\n");
continue;
}
if (*numHdev > 0)
{
//Correct all previous pointers to their new locations
for (int old_dev = 0; old_dev < *numHdev; old_dev++)
{
(*hdev)[old_dev].dev.parent = &((*hdev)[old_dev].dev);
(*hdev)[old_dev].dev.parent_usb_interface->dev = &((*hdev)[old_dev].dev);
(*hdev)[old_dev].dev.parent_usb_interface->parent_usb_device->dev = &((*hdev)[old_dev].dev);
}
}
struct usb_interface* intf = (struct usb_interface*)malloc(sizeof(struct usb_interface));
intf->cur_altsetting = (struct usb_host_interface*)malloc(sizeof(struct usb_host_interface));
intf->cur_altsetting->desc.bInterfaceProtocol = 0;
struct usb_device *usbdevice = (struct usb_device*)malloc(sizeof(struct usb_device));
usbdevice->descriptor.idVendor = hdr.id_table[i].vendor;
usbdevice->descriptor.idProduct = hdr.id_table[i].product;
intf->parent_usb_device = usbdevice;
(*hdev)[*numHdev].product = hdr.id_table[i].product;
(*hdev)[*numHdev].dev.parent = &((*hdev)[*numHdev].dev);
(*hdev)[*numHdev].dev.driver_data;
(*hdev)[*numHdev].dev.p = hWinUSBHandle;
(*hdev)[*numHdev].dev.parent_usb_interface = intf;
(*hdev)[*numHdev].dev.init_name = hdr.name;
usbdevice->dev = &((*hdev)[*numHdev].dev);
intf->dev = &((*hdev)[*numHdev].dev);
(*hdev)[*numHdev].status = 2;
(*hdev)[*numHdev].driver = &hdr;
(*hdev)[*numHdev].ll_driver = (struct hid_ll_driver*)malloc(sizeof(struct hid_ll_driver));
(*hdev)[*numHdev].ll_driver->parse = ll_parse;
(*hdev)[*numHdev].ll_driver->start = ll_start;
(*hdev)[*numHdev].ll_driver->stop = ll_stop;
(*hdev)[*numHdev].driver->probe(&((*hdev)[*numHdev]), &(hdr.id_table[i]));
(*numHdev)++;
}
if (!numHdev)
printf("device %04X:%04X NOT opened!\n", hdr.id_table[i].vendor, hdr.id_table[i].product);
}
}
#endif /* HID_H_ */
+60
View File
@@ -0,0 +1,60 @@
#ifndef INIT_H_
#define INIT_H_
static inline int sprint_f(char* buf, const char* fmt, ...) {
va_list args;
int i;
va_start(args, fmt);
i = sprintf_s(buf, strlen(buf) - 1, fmt, args);
va_end(args);
return i;
}
#define sprintf sprint_f
static inline int strncpy_f(char* dest, const char* source, const size_t sourceLen) {
return strncpy_s(dest, strlen(dest) - 1, source, sourceLen);
}
#define strncpy strncpy_f
static inline int strcpy_f(char* dest, const char* source) {
return strcpy_s(dest, strlen(dest) - 1, source);
}
#define strcpy strcpy_f
#define strdup _strdup
#define KERN_WARNING
#define KERN_ALERT
#define KERN_CRIT
#define printk printf
inline unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base) {
return strtoul(cp, endp, base);
}
inline void usleep(__int64 usec) {
HANDLE timer;
LARGE_INTEGER ft;
ft.QuadPart = -(10 * usec); // Convert to 100 nanosecond interval, negative value indicates relative time
timer = CreateWaitableTimer(NULL, TRUE, NULL);
SetWaitableTimer(timer, &ft, 0, NULL, NULL, 0);
WaitForSingleObject(timer, INFINITE);
CloseHandle(timer);
}
inline void msleep(__int64 msec) {
usleep(1000 * msec);
}
inline void usleep_range(__int64 usec1, __int64 usec2) {
usleep((usec1 + usec2) / 2);
}
inline unsigned short eflip(unsigned short val) {
return (val & 0xff) * 0xFF + (val >> 8);
}
#endif /* INIT_H_ */
+98
View File
@@ -0,0 +1,98 @@
#ifndef KERNEL_H_
#define KERNEL_H_
#include <windows.h>
#define DLL_INTERNAL __declspec( dllexport )
#define u8 unsigned char
#define u16 unsigned short
#define u32 unsigned int
#define u64 unsigned long
#define __u8 unsigned char
#define __u16 unsigned short
#define __u32 unsigned int
#define __u64 unsigned long
#define uint8_t unsigned char
#define uint16_t unsigned short
#define uint32_t unsigned int
#define uint64_t unsigned long
#define __le8 unsigned char
#define __le16 unsigned short
#define __le32 unsigned int
#define __le64 unsigned long
#define __s8 signed char
#define __s16 signed short
#define __s32 signed int
#define __s64 signed long
#define uint unsigned int
#define ulong unsigned long
#define socklen_t int
#define bool int
#define true 1
#define false 0
#define size_t SIZE_T
#define ssize_t SSIZE_T
struct mutex {
CRITICAL_SECTION lock;
};
inline void mutex_init(struct mutex* mutex) {
InitializeCriticalSection(&mutex->lock);
}
inline void mutex_lock(struct mutex* mutex) {
EnterCriticalSection(&mutex->lock);
}
inline void mutex_unlock(struct mutex* mutex) {
LeaveCriticalSection(&mutex->lock);
}
inline int mutex_trylock(struct mutex* mutex) {
return TryEnterCriticalSection(&mutex->lock);
}
inline int mutex_is_locked(struct mutex* mutex) {
if (mutex_trylock(mutex)) {
mutex_unlock(mutex);
return 0;
}
else
return 1;
}
inline void set_bit(int nr, volatile unsigned long *addr) {
int *a = (int *)addr;
int mask;
a += nr >> 5;
mask = 1 << (nr & 0x1f);
*a |= mask;
}
#define __set_bit set_bit
inline void clear_bit(int nr, volatile unsigned long *addr) {
int *a = (int *)addr;
int mask;
a += nr >> 5;
mask = 1 << (nr & 0x1f);
*a &= ~mask;
}
inline int test_bit(int nr, const void *addr) {
int *a = (int *)addr;
int mask;
a += nr >> 5;
mask = 1 << (nr & 0x1f);
return ((mask & *a) != 0);
}
#endif /* KERNEL_H_ */
+146
View File
@@ -0,0 +1,146 @@
#ifndef MODULE_H_
#define MODULE_H_
#include <stdio.h>
#include <Winusb.h>
#define MODULE_AUTHOR( __Declaration__ )
#define MODULE_DESCRIPTION( __Declaration__ )
#define MODULE_VERSION( __Declaration__ )
#define MODULE_LICENSE( __Declaration__ )
#define USB_CTRL_SET_TIMEOUT 5000
#define USB_DIR_OUT 0
#define USB_DIR_IN 0x80
#define USB_TYPE_CLASS (0x01 << 5)
#define USB_RECIP_INTERFACE 0x01
#define usb_sndctrlpipe(u,d) 0
#define usb_rcvctrlpipe(u,d) 0
#define PATH_MAX 512
struct usb_interface_descriptor {
unsigned char bInterfaceProtocol;
};
struct usb_host_interface {
struct usb_interface_descriptor desc;
};
struct device {
struct device *parent;
void *p;
const char *init_name;
void *driver_data;
struct usb_interface *parent_usb_interface;
};
struct usb_interface {
struct device* dev;
int num_altsetting;
struct usb_host_interface *cur_altsetting;
struct usb_device *parent_usb_device;
};
struct usb_device_descriptor {
unsigned short idVendor;
unsigned short idProduct;
};
struct usb_device {
struct device* dev;
struct usb_device_descriptor descriptor;
};
inline int usb_control_msg(
struct usb_device *usb_dev
, int usb_pipe
, unsigned int request
, unsigned int request_type
, unsigned int value
, unsigned int report_index
, unsigned char* buf, unsigned int size
, unsigned int timeout)
{
WINUSB_SETUP_PACKET packet;
packet.RequestType = request_type;
packet.Request = request;
packet.Value = value;
packet.Index = report_index;
packet.Length = size;
ULONG cbSent = 0;
if (!WinUsb_ControlTransfer(usb_dev->dev->p, packet, buf, size, &cbSent, 0))
printf("WinUsb_ControlTransfer failed\n");
return cbSent;
}
inline struct usb_interface *to_usb_interface(struct device *dev) {
return dev->parent_usb_interface;
}
inline struct usb_device *to_usb_device(struct device *dev) {
return dev->parent_usb_interface->parent_usb_device;
}
inline struct usb_device *interface_to_usbdev(struct usb_interface *intf) {
return to_usb_device(intf->dev->parent);
}
inline void usb_disable_autosuspend(struct usb_device *usb_dev) {
printf("usb_disable_autosuspend\n");
}
struct device_attribute {
const char* name;
ssize_t(*show)(struct device *dev, struct device_attribute *attr, char *buf);
ssize_t(*store)(struct device *dev, struct device_attribute *attr, const char *buf, size_t count);
};
inline int device_create_file(struct device *device, struct device_attribute *entry) {
printf("device_create_file %s\n", entry->name);
return 0;
}
inline void device_remove_file(struct device *device, struct device_attribute *entry) {
printf("device_remove_file %s\n", entry->name);
}
#define HID_USB_DEVICE(ven, prod) \
.vendor = (ven) \
, .product = (prod)
#define __stringify(x) #x
// Hack to turn Linux device macros into API calls
#define DEVICE_ATTR1(_device,_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name; \
DLL_INTERNAL struct device_attribute dev##_device##_attr_##_name = { \
.name = __stringify(_name) \
, .show = _show \
, .store = _store \
};
#define MODULE_DEVICE_TABLE(type, name)
/*typedef struct hid_device_array_tag {
unsigned int count;
struct hid_device* hdev[];
} hid_device_array;*/
#define module_hid_driver(hdr) \
DLL_INTERNAL unsigned int init_##hdr## (struct hid_device** hdevo) { \
unsigned int numHdevs = 0; \
struct hid_device* hdev = NULL; \
openChromaDevice(&hdev, &numHdevs, hdr); \
*hdevo = hdev; \
return numHdevs; \
}
#endif /* MODULE_H_ */
+16
View File
@@ -0,0 +1,16 @@
#ifndef RANDOM_H_
#define RANDOM_H_
static inline void get_random_bytes(void* rand_ptr, unsigned int rand_size) {
char failed = 0;
static HCRYPTPROV prov = 0;
if (prov == 0) {
if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, 0))
failed = 1;
}
if (!failed && !CryptGenRandom(prov, rand_size, (unsigned char*)rand_ptr))
printf("get_random_bytes failed\n");
}
#endif /* RANDOM_H_ */
+31
View File
@@ -0,0 +1,31 @@
#ifndef SLAB_H_
#define SLAB_H_
typedef enum {
GFP_KERNEL,
GFP_ATOMIC,
__GFP_HIGHMEM,
__GFP_HIGH
} gfp_t;
static inline void *kzalloc(size_t s, gfp_t gfp) {
void *p = malloc(s);
memset(p, 0, s);
return p;
}
inline void *kmemdup(const void *src, size_t len, gfp_t gfp) {
void *p;
p = malloc(len);
if (p)
memcpy(p, src, len);
return p;
}
static inline void kfree(const void* p) {
free((void*)p);
}
#endif /* SLAB_H_ */
+539
View File
@@ -0,0 +1,539 @@
#ifndef INPUT_H_
#define INPUT_H_
#include <stdio.h>
#include <windows.h>
#define uint unsigned int
#define ulong unsigned long
#define u8 unsigned char
#define u16 unsigned short
#define u32 unsigned int
#define u64 unsigned long
#define ABS_VOLUME 0x20
//input-event-codes.h
#define KEY_RESERVED 0
#define KEY_ESC 1
#define KEY_1 2
#define KEY_2 3
#define KEY_3 4
#define KEY_4 5
#define KEY_5 6
#define KEY_6 7
#define KEY_7 8
#define KEY_8 9
#define KEY_9 10
#define KEY_0 11
#define KEY_MINUS 12
#define KEY_EQUAL 13
#define KEY_BACKSPACE 14
#define KEY_TAB 15
#define KEY_Q 16
#define KEY_W 17
#define KEY_E 18
#define KEY_R 19
#define KEY_T 20
#define KEY_Y 21
#define KEY_U 22
#define KEY_I 23
#define KEY_O 24
#define KEY_P 25
#define KEY_LEFTBRACE 26
#define KEY_RIGHTBRACE 27
#define KEY_ENTER 28
#define KEY_LEFTCTRL 29
#define KEY_A 30
#define KEY_S 31
#define KEY_D 32
#define KEY_F 33
#define KEY_G 34
#define KEY_H 35
#define KEY_J 36
#define KEY_K 37
#define KEY_L 38
#define KEY_SEMICOLON 39
#define KEY_APOSTROPHE 40
#define KEY_GRAVE 41
#define KEY_LEFTSHIFT 42
#define KEY_BACKSLASH 43
#define KEY_Z 44
#define KEY_X 45
#define KEY_C 46
#define KEY_V 47
#define KEY_B 48
#define KEY_N 49
#define KEY_M 50
#define KEY_COMMA 51
#define KEY_DOT 52
#define KEY_SLASH 53
#define KEY_RIGHTSHIFT 54
#define KEY_KPASTERISK 55
#define KEY_LEFTALT 56
#define KEY_SPACE 57
#define KEY_CAPSLOCK 58
#define KEY_F1 59
#define KEY_F2 60
#define KEY_F3 61
#define KEY_F4 62
#define KEY_F5 63
#define KEY_F6 64
#define KEY_F7 65
#define KEY_F8 66
#define KEY_F9 67
#define KEY_F10 68
#define KEY_NUMLOCK 69
#define KEY_SCROLLLOCK 70
#define KEY_KP7 71
#define KEY_KP8 72
#define KEY_KP9 73
#define KEY_KPMINUS 74
#define KEY_KP4 75
#define KEY_KP5 76
#define KEY_KP6 77
#define KEY_KPPLUS 78
#define KEY_KP1 79
#define KEY_KP2 80
#define KEY_KP3 81
#define KEY_KP0 82
#define KEY_KPDOT 83
#define KEY_ZENKAKUHANKAKU 85
#define KEY_102ND 86
#define KEY_F11 87
#define KEY_F12 88
#define KEY_RO 89
#define KEY_KATAKANA 90
#define KEY_HIRAGANA 91
#define KEY_HENKAN 92
#define KEY_KATAKANAHIRAGANA 93
#define KEY_MUHENKAN 94
#define KEY_KPJPCOMMA 95
#define KEY_KPENTER 96
#define KEY_RIGHTCTRL 97
#define KEY_KPSLASH 98
#define KEY_SYSRQ 99
#define KEY_RIGHTALT 100
#define KEY_LINEFEED 101
#define KEY_HOME 102
#define KEY_UP 103
#define KEY_PAGEUP 104
#define KEY_LEFT 105
#define KEY_RIGHT 106
#define KEY_END 107
#define KEY_DOWN 108
#define KEY_PAGEDOWN 109
#define KEY_INSERT 110
#define KEY_DELETE 111
#define KEY_MACRO 112
#define KEY_MUTE 113
#define KEY_VOLUMEDOWN 114
#define KEY_VOLUMEUP 115
#define KEY_POWER 116 /* SC System Power Down */
#define KEY_KPEQUAL 117
#define KEY_KPPLUSMINUS 118
#define KEY_PAUSE 119
#define KEY_SCALE 120 /* AL Compiz Scale (Expose) */
#define KEY_KPCOMMA 121
#define KEY_HANGEUL 122
#define KEY_HANGUEL KEY_HANGEUL
#define KEY_HANJA 123
#define KEY_YEN 124
#define KEY_LEFTMETA 125
#define KEY_RIGHTMETA 126
#define KEY_COMPOSE 127
#define KEY_STOP 128 /* AC Stop */
#define KEY_AGAIN 129
#define KEY_PROPS 130 /* AC Properties */
#define KEY_UNDO 131 /* AC Undo */
#define KEY_FRONT 132
#define KEY_COPY 133 /* AC Copy */
#define KEY_OPEN 134 /* AC Open */
#define KEY_PASTE 135 /* AC Paste */
#define KEY_FIND 136 /* AC Search */
#define KEY_CUT 137 /* AC Cut */
#define KEY_HELP 138 /* AL Integrated Help Center */
#define KEY_MENU 139 /* Menu (show menu) */
#define KEY_CALC 140 /* AL Calculator */
#define KEY_SETUP 141
#define KEY_SLEEP 142 /* SC System Sleep */
#define KEY_WAKEUP 143 /* System Wake Up */
#define KEY_FILE 144 /* AL Local Machine Browser */
#define KEY_SENDFILE 145
#define KEY_DELETEFILE 146
#define KEY_XFER 147
#define KEY_PROG1 148
#define KEY_PROG2 149
#define KEY_WWW 150 /* AL Internet Browser */
#define KEY_MSDOS 151
#define KEY_COFFEE 152 /* AL Terminal Lock/Screensaver */
#define KEY_SCREENLOCK KEY_COFFEE
#define KEY_DIRECTION 153
#define KEY_CYCLEWINDOWS 154
#define KEY_MAIL 155
#define KEY_BOOKMARKS 156 /* AC Bookmarks */
#define KEY_COMPUTER 157
#define KEY_BACK 158 /* AC Back */
#define KEY_FORWARD 159 /* AC Forward */
#define KEY_CLOSECD 160
#define KEY_EJECTCD 161
#define KEY_EJECTCLOSECD 162
#define KEY_NEXTSONG 163
#define KEY_PLAYPAUSE 164
#define KEY_PREVIOUSSONG 165
#define KEY_STOPCD 166
#define KEY_RECORD 167
#define KEY_REWIND 168
#define KEY_PHONE 169 /* Media Select Telephone */
#define KEY_ISO 170
#define KEY_CONFIG 171 /* AL Consumer Control Configuration */
#define KEY_HOMEPAGE 172 /* AC Home */
#define KEY_REFRESH 173 /* AC Refresh */
#define KEY_EXIT 174 /* AC Exit */
#define KEY_MOVE 175
#define KEY_EDIT 176
#define KEY_SCROLLUP 177
#define KEY_SCROLLDOWN 178
#define KEY_KPLEFTPAREN 179
#define KEY_KPRIGHTPAREN 180
#define KEY_NEW 181 /* AC New */
#define KEY_REDO 182 /* AC Redo/Repeat */
#define KEY_F13 183
#define KEY_F14 184
#define KEY_F15 185
#define KEY_F16 186
#define KEY_F17 187
#define KEY_F18 188
#define KEY_F19 189
#define KEY_F20 190
#define KEY_F21 191
#define KEY_F22 192
#define KEY_F23 193
#define KEY_F24 194
#define KEY_PLAYCD 200
#define KEY_PAUSECD 201
#define KEY_PROG3 202
#define KEY_PROG4 203
#define KEY_DASHBOARD 204 /* AL Dashboard */
#define KEY_SUSPEND 205
#define KEY_CLOSE 206 /* AC Close */
#define KEY_PLAY 207
#define KEY_FASTFORWARD 208
#define KEY_BASSBOOST 209
#define KEY_PRINT 210 /* AC Print */
#define KEY_HP 211
#define KEY_CAMERA 212
#define KEY_SOUND 213
#define KEY_QUESTION 214
#define KEY_EMAIL 215
#define KEY_CHAT 216
#define KEY_SEARCH 217
#define KEY_CONNECT 218
#define KEY_FINANCE 219 /* AL Checkbook/Finance */
#define KEY_SPORT 220
#define KEY_SHOP 221
#define KEY_ALTERASE 222
#define KEY_CANCEL 223 /* AC Cancel */
#define KEY_BRIGHTNESSDOWN 224
#define KEY_BRIGHTNESSUP 225
#define KEY_MEDIA 226
#define KEY_SWITCHVIDEOMODE 227 /* Cycle between available video
outputs (Monitor/LCD/TV-out/etc) */
#define KEY_KBDILLUMTOGGLE 228
#define KEY_KBDILLUMDOWN 229
#define KEY_KBDILLUMUP 230
#define KEY_SEND 231 /* AC Send */
#define KEY_REPLY 232 /* AC Reply */
#define KEY_FORWARDMAIL 233 /* AC Forward Msg */
#define KEY_SAVE 234 /* AC Save */
#define KEY_DOCUMENTS 235
#define KEY_BATTERY 236
#define KEY_BLUETOOTH 237
#define KEY_WLAN 238
#define KEY_UWB 239
#define KEY_UNKNOWN 240
#define KEY_VIDEO_NEXT 241 /* drive next video source */
#define KEY_VIDEO_PREV 242 /* drive previous video source */
#define KEY_BRIGHTNESS_CYCLE 243 /* brightness up, after max is min */
#define KEY_BRIGHTNESS_ZERO 244 /* brightness off, use ambient */
#define KEY_DISPLAY_OFF 245 /* display device to off state */
#define KEY_WIMAX 246
/* Range 248 - 255 is reserved for special needs of AT keyboard driver */
#define BTN_MISC 0x100
#define BTN_0 0x100
#define BTN_1 0x101
#define BTN_2 0x102
#define BTN_3 0x103
#define BTN_4 0x104
#define BTN_5 0x105
#define BTN_6 0x106
#define BTN_7 0x107
#define BTN_8 0x108
#define BTN_9 0x109
#define BTN_MOUSE 0x110
#define BTN_LEFT 0x110
#define BTN_RIGHT 0x111
#define BTN_MIDDLE 0x112
#define BTN_SIDE 0x113
#define BTN_EXTRA 0x114
#define BTN_FORWARD 0x115
#define BTN_BACK 0x116
#define BTN_TASK 0x117
#define BTN_JOYSTICK 0x120
#define BTN_TRIGGER 0x120
#define BTN_THUMB 0x121
#define BTN_THUMB2 0x122
#define BTN_TOP 0x123
#define BTN_TOP2 0x124
#define BTN_PINKIE 0x125
#define BTN_BASE 0x126
#define BTN_BASE2 0x127
#define BTN_BASE3 0x128
#define BTN_BASE4 0x129
#define BTN_BASE5 0x12a
#define BTN_BASE6 0x12b
#define BTN_DEAD 0x12f
#define BTN_GAMEPAD 0x130
#define BTN_A 0x130
#define BTN_B 0x131
#define BTN_C 0x132
#define BTN_X 0x133
#define BTN_Y 0x134
#define BTN_Z 0x135
#define BTN_TL 0x136
#define BTN_TR 0x137
#define BTN_TL2 0x138
#define BTN_TR2 0x139
#define BTN_SELECT 0x13a
#define BTN_START 0x13b
#define BTN_MODE 0x13c
#define BTN_THUMBL 0x13d
#define BTN_THUMBR 0x13e
#define BTN_DIGI 0x140
#define BTN_TOOL_PEN 0x140
#define BTN_TOOL_RUBBER 0x141
#define BTN_TOOL_BRUSH 0x142
#define BTN_TOOL_PENCIL 0x143
#define BTN_TOOL_AIRBRUSH 0x144
#define BTN_TOOL_FINGER 0x145
#define BTN_TOOL_MOUSE 0x146
#define BTN_TOOL_LENS 0x147
#define BTN_TOUCH 0x14a
#define BTN_STYLUS 0x14b
#define BTN_STYLUS2 0x14c
#define BTN_TOOL_DOUBLETAP 0x14d
#define BTN_TOOL_TRIPLETAP 0x14e
#define BTN_TOOL_QUADTAP 0x14f /* Four fingers on trackpad */
#define BTN_WHEEL 0x150
#define BTN_GEAR_DOWN 0x150
#define BTN_GEAR_UP 0x151
#define KEY_OK 0x160
#define KEY_SELECT 0x161
#define KEY_GOTO 0x162
#define KEY_CLEAR 0x163
#define KEY_POWER2 0x164
#define KEY_OPTION 0x165
#define KEY_INFO 0x166 /* AL OEM Features/Tips/Tutorial */
#define KEY_TIME 0x167
#define KEY_VENDOR 0x168
#define KEY_ARCHIVE 0x169
#define KEY_PROGRAM 0x16a /* Media Select Program Guide */
#define KEY_CHANNEL 0x16b
#define KEY_FAVORITES 0x16c
#define KEY_EPG 0x16d
#define KEY_PVR 0x16e /* Media Select Home */
#define KEY_MHP 0x16f
#define KEY_LANGUAGE 0x170
#define KEY_TITLE 0x171
#define KEY_SUBTITLE 0x172
#define KEY_ANGLE 0x173
#define KEY_ZOOM 0x174
#define KEY_MODE 0x175
#define KEY_KEYBOARD 0x176
#define KEY_SCREEN 0x177
#define KEY_PC 0x178 /* Media Select Computer */
#define KEY_TV 0x179 /* Media Select TV */
#define KEY_TV2 0x17a /* Media Select Cable */
#define KEY_VCR 0x17b /* Media Select VCR */
#define KEY_VCR2 0x17c /* VCR Plus */
#define KEY_SAT 0x17d /* Media Select Satellite */
#define KEY_SAT2 0x17e
#define KEY_CD 0x17f /* Media Select CD */
#define KEY_TAPE 0x180 /* Media Select Tape */
#define KEY_RADIO 0x181
#define KEY_TUNER 0x182 /* Media Select Tuner */
#define KEY_PLAYER 0x183
#define KEY_TEXT 0x184
#define KEY_DVD 0x185 /* Media Select DVD */
#define KEY_AUX 0x186
#define KEY_MP3 0x187
#define KEY_AUDIO 0x188
#define KEY_VIDEO 0x189
#define KEY_DIRECTORY 0x18a
#define KEY_LIST 0x18b
#define KEY_MEMO 0x18c /* Media Select Messages */
#define KEY_CALENDAR 0x18d
#define KEY_RED 0x18e
#define KEY_GREEN 0x18f
#define KEY_YELLOW 0x190
#define KEY_BLUE 0x191
#define KEY_CHANNELUP 0x192 /* Channel Increment */
#define KEY_CHANNELDOWN 0x193 /* Channel Decrement */
#define KEY_FIRST 0x194
#define KEY_LAST 0x195 /* Recall Last */
#define KEY_AB 0x196
#define KEY_NEXT 0x197
#define KEY_RESTART 0x198
#define KEY_SLOW 0x199
#define KEY_SHUFFLE 0x19a
#define KEY_BREAK 0x19b
#define KEY_PREVIOUS 0x19c
#define KEY_DIGITS 0x19d
#define KEY_TEEN 0x19e
#define KEY_TWEN 0x19f
#define KEY_VIDEOPHONE 0x1a0 /* Media Select Video Phone */
#define KEY_GAMES 0x1a1 /* Media Select Games */
#define KEY_ZOOMIN 0x1a2 /* AC Zoom In */
#define KEY_ZOOMOUT 0x1a3 /* AC Zoom Out */
#define KEY_ZOOMRESET 0x1a4 /* AC Zoom */
#define KEY_WORDPROCESSOR 0x1a5 /* AL Word Processor */
#define KEY_EDITOR 0x1a6 /* AL Text Editor */
#define KEY_SPREADSHEET 0x1a7 /* AL Spreadsheet */
#define KEY_GRAPHICSEDITOR 0x1a8 /* AL Graphics Editor */
#define KEY_PRESENTATION 0x1a9 /* AL Presentation App */
#define KEY_DATABASE 0x1aa /* AL Database App */
#define KEY_NEWS 0x1ab /* AL Newsreader */
#define KEY_VOICEMAIL 0x1ac /* AL Voicemail */
#define KEY_ADDRESSBOOK 0x1ad /* AL Contacts/Address Book */
#define KEY_MESSENGER 0x1ae /* AL Instant Messaging */
#define KEY_DISPLAYTOGGLE 0x1af /* Turn display (LCD) on and off */
#define KEY_SPELLCHECK 0x1b0 /* AL Spell Check */
#define KEY_LOGOFF 0x1b1 /* AL Logoff */
#define KEY_DOLLAR 0x1b2
#define KEY_EURO 0x1b3
#define KEY_FRAMEBACK 0x1b4 /* Consumer - transport controls */
#define KEY_FRAMEFORWARD 0x1b5
#define KEY_CONTEXT_MENU 0x1b6 /* GenDesc - system context menu */
#define KEY_MEDIA_REPEAT 0x1b7 /* Consumer - transport control */
#define KEY_DEL_EOL 0x1c0
#define KEY_DEL_EOS 0x1c1
#define KEY_INS_LINE 0x1c2
#define KEY_DEL_LINE 0x1c3
#define KEY_FN 0x1d0
#define KEY_FN_ESC 0x1d1
#define KEY_FN_F1 0x1d2
#define KEY_FN_F2 0x1d3
#define KEY_FN_F3 0x1d4
#define KEY_FN_F4 0x1d5
#define KEY_FN_F5 0x1d6
#define KEY_FN_F6 0x1d7
#define KEY_FN_F7 0x1d8
#define KEY_FN_F8 0x1d9
#define KEY_FN_F9 0x1da
#define KEY_FN_F10 0x1db
#define KEY_FN_F11 0x1dc
#define KEY_FN_F12 0x1dd
#define KEY_FN_1 0x1de
#define KEY_FN_2 0x1df
#define KEY_FN_D 0x1e0
#define KEY_FN_E 0x1e1
#define KEY_FN_F 0x1e2
#define KEY_FN_S 0x1e3
#define KEY_FN_B 0x1e4
#define KEY_BRL_DOT1 0x1f1
#define KEY_BRL_DOT2 0x1f2
#define KEY_BRL_DOT3 0x1f3
#define KEY_BRL_DOT4 0x1f4
#define KEY_BRL_DOT5 0x1f5
#define KEY_BRL_DOT6 0x1f6
#define KEY_BRL_DOT7 0x1f7
#define KEY_BRL_DOT8 0x1f8
#define KEY_BRL_DOT9 0x1f9
#define KEY_BRL_DOT10 0x1fa
#define KEY_NUMERIC_0 0x200 /* used by phones, remote controls, */
#define KEY_NUMERIC_1 0x201 /* and other keypads */
#define KEY_NUMERIC_2 0x202
#define KEY_NUMERIC_3 0x203
#define KEY_NUMERIC_4 0x204
#define KEY_NUMERIC_5 0x205
#define KEY_NUMERIC_6 0x206
#define KEY_NUMERIC_7 0x207
#define KEY_NUMERIC_8 0x208
#define KEY_NUMERIC_9 0x209
#define KEY_NUMERIC_STAR 0x20a
#define KEY_NUMERIC_POUND 0x20b
/* We avoid low common keys in module aliases so they don't get huge. */
#define KEY_MIN_INTERESTING KEY_MUTE
#define KEY_MAX 0x2ff
#define KEY_CNT (KEY_MAX+1)
#define EV_SYN 0x00
#define EV_KEY 0x01
#define EV_REL 0x02
#define EV_ABS 0x03
#define EV_MSC 0x04
#define EV_SW 0x05
#define EV_LED 0x11
#define EV_SND 0x12
#define EV_REP 0x14
#define EV_FF 0x15
#define EV_PWR 0x16
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
#define EV_CNT (EV_MAX+1)
#define SYN_REPORT 0
#define BITS_PER_BYTE 8
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))
#define DECLARE_BITMAP(name,bits) unsigned long name[BITS_TO_LONGS(bits)]
struct input_dev {
const char *name;
const char *phys;
unsigned long evbit[BITS_TO_LONGS(EV_CNT)];
unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];
};
static inline void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) {
printf("input_event\n");
}
static inline void input_report_key(struct input_dev *dev, unsigned int code, int value) {
input_event(dev, EV_KEY, code, value);
}
static inline void input_sync(struct input_dev *dev) {
input_event(dev, EV_SYN, SYN_REPORT, 0);
}
#endif /* INPUT_H_ */
-62
View File
@@ -1,62 +0,0 @@
//! \file RzChromaLinkAPI.h
//! \brief Exported APIs.
#ifndef _RZCHROMALINKAPI_H_
#define _RZCHROMALINKAPI_H_
#pragma once
#include "RzErrors.h"
#include "RzChromaSDKTypes.h"
using namespace ChromaSDK;
// Callback funtion
typedef LONG(*LPCHROMALINKPROC)(ChromaLink::EFFECT_TYPE Effect, PRZPARAM pData);
// Exported functions
#ifdef __cplusplus
extern "C"
{
#endif
/*!
* Initialize Chroma Link API.
* @return <b>RZRESULT_ALREADY_INITIALIZED</b>: Chroma Link API has already been initialized.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT Init(ChromaSDK::APPINFOTYPE AppInfo);
/*!
* UnInitialize Chroma API.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT UnInit(void);
/*!
* Register for Chroma Link effect events.
* @param[in] lpFunc Callback function.
* @return <b>ERROR_INVALID_PARAMETER</b>: lpFunc is invalid.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
* @remark
* - <b>CHROMA_NONE</b> : This event will be sent when there are no more Chroma Link events.
* Clients can resume their own lighting effects.
* - <b>CHROMA_CUSTOM</b> : This event will be sent when there is a ChromaSDK::ChromaLink::CHROMA_CUSTOM effect event.
* pData is casted to ChromaSDK::ChromaLink::CUSTOM_EFFECT_TYPE.
* The colors of each (5) LEDs can be accessed from the array.
* - <b>CHROMA_STATIC</b> : This event will be sent when there is a ChromaSDK::ChromaLink::CHROMA_STATIC effect event.
* pData is casted to ChromaSDK::ChromaLink::STATIC_EFFECT_TYPE.
* The color can be accessed from the structure.
*/
RZRESULT RegisterEventNotification(LPCHROMALINKPROC lpFunc);
/*!
* Register for Chroma Link effect events.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT UnregisterEventNotification(void);
#ifdef __cplusplus
}
#endif
#endif // _RZCHROMALINKAPI_H_
-189
View File
@@ -1,189 +0,0 @@
//! \file RzChromaSDK.h
//! \brief Exported APIs.
#ifndef _RZCHROMASDK_H_
#define _RZCHROMASDK_H_
#pragma once
#include "RzErrors.h"
#include "RzChromaSDKDefines.h"
#include "RzChromaSDKTypes.h"
using namespace ChromaSDK;
using namespace ChromaSDK::Keyboard;
using namespace ChromaSDK::Mouse;
using namespace ChromaSDK::Headset;
using namespace ChromaSDK::Mousepad;
using namespace ChromaSDK::Keypad;
using namespace ChromaSDK::ChromaLink;
// Exported functions
#ifdef __cplusplus
extern "C"
{
#endif
/*!
* Initialize Chroma SDK.
* @return <b>RZRESULT_SERVICE_NOT_ACTIVE</b>: Chroma SDK Service not running.
* @return <b>RZRESULT_ALREADY_INITIALIZED</b>: Chroma SDK has already been initialized.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT Init(void);
/*!
* UnInitialize Chroma SDK.
* @return <b>RZRESULT_NOT_VALID_STATE</b>: Chroma SDK not in a valid state. For every Init() call there should be a corresponding UnInit().
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT UnInit(void);
/*!
* Create generic effect for specific or all devices.
* @param[in] DeviceId Device Id defined in RzChromaSDKDefines.h
* @param[in] Effect Standard effect type.
* @param[in] pParam Pointer to a parameter type specified by Effect.
* @param[in,out] pEffectId Valid effect Id if successful. Set it to NULL if not required.
* @return <b>RZRESULT_NOT_VALID_STATE</b>: Chroma SDK not in a valid state. Did you forgot to call Init()?
* @return <b>RZRESULT_INVALID_PARAMETER</b>: Invalid parameter.
* @return <b>RZRESULT_DEVICE_NOT_AVAILABLE</b>: Device not supported.
* @return <b>RZRESULT_NOT_SUPPORTED</b>: Effect not supported for this device.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT CreateEffect(RZDEVICEID DeviceId, ChromaSDK::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
/*!
* Create keyboard effect.
* @param[in] Effect Keyboard effect type.
* @param[in] pParam Pointer to a parameter type specified by Effect.
* @param[in,out] pEffectId Valid effect Id if successful. Set it to NULL if not required.
* @return <b>RZRESULT_NOT_VALID_STATE</b>: Chroma SDK not in a valid state. Did you forgot to call Init()?
* @return <b>RZRESULT_INVALID_PARAMETER</b>: Invalid parameter.
* @return <b>RZRESULT_NOT_SUPPORTED</b>: Effect not supported for this device.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT CreateKeyboardEffect(ChromaSDK::Keyboard::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
/*!
* Create mouse effect.
* @param[in] Effect Mouse effect type.
* @param[in] pParam Pointer to a parameter type specified by Effect.
* @param[in,out] pEffectId Valid effect Id if successful. Set it to NULL if not required.
* @return <b>RZRESULT_NOT_VALID_STATE</b>: Chroma SDK not in a valid state. Did you forgot to call Init()?
* @return <b>RZRESULT_INVALID_PARAMETER</b>: Invalid parameter.
* @return <b>RZRESULT_NOT_SUPPORTED</b>: Effect not supported for this device.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT CreateMouseEffect(ChromaSDK::Mouse::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
/*!
* Create headset effect.
* @param[in] Effect Headset effect type.
* @param[in] pParam Pointer to a parameter type specified by Effect defined in RzChromaSDKTypes.h
* @param[in,out] pEffectId Valid effect Id if successful. Set it to NULL if not required.
* @return <b>RZRESULT_NOT_VALID_STATE</b>: Chroma SDK not in a valid state. Did you forgot to call Init()?
* @return <b>RZRESULT_INVALID_PARAMETER</b>: Invalid parameter.
* @return <b>RZRESULT_NOT_SUPPORTED</b>: Effect not supported for this device.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT CreateHeadsetEffect(ChromaSDK::Headset::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
/*!
* Create mousepad effect.
* @param[in] Effect Mousemat effect type.
* @param[in] pParam Pointer to a parameter type specified by Effect defined in RzChromaSDKTypes.h
* @param[in,out] pEffectId Valid effect Id if successful. Set it to NULL if not required.
* @return <b>RZRESULT_NOT_VALID_STATE</b>: Chroma SDK not in a valid state. Did you forgot to call Init()?
* @return <b>RZRESULT_INVALID_PARAMETER</b>: Invalid parameter.
* @return <b>RZRESULT_NOT_SUPPORTED</b>: Effect not supported for this device.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT CreateMousepadEffect(ChromaSDK::Mousepad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
/*!
* Create keypad effect.
* @param[in] Effect Keypad effect type.
* @param[in] pParam Pointer to a parameter type specified by Effect defined in RzChromaSDKTypes.h
* @param[in,out] pEffectId Valid effect Id if successful. Set it to NULL if not required.
* @return <b>RZRESULT_NOT_VALID_STATE</b>: Chroma SDK not in a valid state. Did you forgot to call Init()?
* @return <b>RZRESULT_INVALID_PARAMETER</b>: Invalid parameter.
* @return <b>RZRESULT_NOT_SUPPORTED</b>: Effect not supported for this device.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT CreateKeypadEffect(ChromaSDK::Keypad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
/*!
* Create effects on Chroma Linked devices.
* @param[in] Effect Chroma Link effect type.
* @param[in] pParam Pointer to a parameter type specified by Effect defined in RzChromaSDKTypes.h
* @param[in,out] pEffectId Valid effect Id if successful. Set it to NULL if not required.
* @return <b>RZRESULT_NOT_VALID_STATE</b>: Chroma SDK not in a valid state. Did you forgot to call Init()?
* @return <b>RZRESULT_INVALID_PARAMETER</b>: Invalid parameter.
* @return <b>RZRESULT_NOT_SUPPORTED</b>: Effect not supported for this device.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT CreateChromaLinkEffect(ChromaSDK::ChromaLink::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
/*!
* Delete effect
* @param[in] EffectId Id of the effect that needs to be deleted.
* @return <b>RZRESULT_NOT_VALID_STATE</b>: Chroma SDK not in a valid state. Did you forgot to call Init()?
* @return <b>RZRESULT_NOT_FOUND</b>: Effect Id not found.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT DeleteEffect(RZEFFECTID EffectId);
/*!
* Set effect.
* @param[in] EffectId Id of the effect that needs to be set.
* @return <b>RZRESULT_NOT_VALID_STATE</b>: Chroma SDK not in a valid state. Did you forgot to call Init()?
* @return <b>RZRESULT_ACCESS_DENIED</b>: No permision to access device.
* @return <b>RZRESULT_NOT_FOUND</b>: Effect Id not found.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT SetEffect(RZEFFECTID EffectId);
/*!
* Register for event notification.
* @param[in] hWnd Application window handle.
* @return <b>RZRESULT_NOT_VALID_STATE</b>: Chroma SDK not in a valid state. Did you forgot to call Init()?
* @return <b>RZRESULT_ALREADY_INITIALIZED</b>: Invalid Windows handle.
* @return <b>RZRESULT_INVALID_PARAMETER</b>: Invalid parameter.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
* @remark <b>WM_CHROMA_EVENT</b> will be sent if there is an event.
* @remark
* - \c <b>wParam</b> = 1 : Chroma SDK support.
* - \c <b>lParam</b> = 1 : Enabled.
* - \c <b>lParam</b> = 0 : Disabled.
* - \c <b>wParam</b> = 2 : Access to device.
* - \c <b>lParam</b> = 1 : Granted accessible.
* - \c <b>lParam</b> = 0 = Access revoked.
* - \c <b>wParam</b> = 3 : Application state.
* - \c <b>lParam</b> = 1 : Enabled.
* - \c <b>lParam</b> = 0 = Disabled.
*/
RZRESULT RegisterEventNotification(HWND hWnd);
/*!
* Un-register for event notification.
* @return <b>RZRESULT_NOT_VALID_STATE</b>: Internal state is not valid. There was no event registered.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT UnregisterEventNotification();
/*!
* Query for device information.
* @param[in] DeviceId Device id found in RzChromaSDKDefines.h
* @param[out] DeviceInfo Contains device information specified by DeviceId.
* @return <b>RZRESULT_DEVICE_NOT_AVAILABLE</b>: Device not supported.
* @return For other error codes, please refer to [Windows System Error Codes](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681381(v=vs.85).aspx) from Windows SDK (WinError.h).
*/
RZRESULT QueryDevice(RZDEVICEID DeviceId, DEVICE_INFO_TYPE &DeviceInfo);
#ifdef __cplusplus
}
#endif
#endif
-182
View File
@@ -1,182 +0,0 @@
//! \file RzChromaSDKDefines.h
//! \brief Definitions of global and static variables.
#ifndef _RZSCHROMADKDEFINES_H_
#define _RZSCHROMADKDEFINES_H_
#pragma once
#ifndef GUID_DEFINED
#include <Guiddef.h>
#endif
namespace ChromaSDK
{
// Keyboards
//! Razer Blackwidow Chroma device.
// {2EA1BB63-CA28-428D-9F06-196B88330BBB}
static const GUID BLACKWIDOW_CHROMA =
{ 0x2ea1bb63, 0xca28, 0x428d, { 0x9f, 0x06, 0x19, 0x6b, 0x88, 0x33, 0x0b, 0xbb } };
//! Razer Blackwidow Chroma Tournament Edition device.
// {ED1C1B82-BFBE-418F-B49D-D03F05B149DF}
static const GUID BLACKWIDOW_CHROMA_TE =
{ 0xed1c1b82, 0xbfbe, 0x418f, { 0xb4, 0x9d, 0xd0, 0x3f, 0x5, 0xb1, 0x49, 0xdf } };
//! Razer Deathstalker device.
// {18C5AD9B-4326-4828-92C4-2669A66D2283}
static const GUID DEATHSTALKER_CHROMA =
{ 0x18c5ad9b, 0x4326, 0x4828, { 0x92, 0xc4, 0x26, 0x69, 0xa6, 0x6d, 0x22, 0x83 } };
//! Overwatch Keyboard.
// {872AB2A9-7959-4478-9FED-15F6186E72E4}
static const GUID OVERWATCH_KEYBOARD =
{ 0x872ab2a9, 0x7959, 0x4478, { 0x9f, 0xed, 0x15, 0xf6, 0x18, 0x6e, 0x72, 0xe4 } };
//! Razer Blackwidow X Chroma device.
// {5AF60076-ADE9-43D4-B574-52599293B554}
static const GUID BLACKWIDOW_X_CHROMA =
{ 0x5af60076, 0xade9, 0x43d4, { 0xb5, 0x74, 0x52, 0x59, 0x92, 0x93, 0xb5, 0x54 } };
//! Razer Blackwidow X TE Chroma device.
// {2D84DD51-3290-4AAC-9A89-D8AFDE38B57C}
static const GUID BLACKWIDOW_X_TE_CHROMA =
{ 0x2d84dd51, 0x3290, 0x4aac, { 0x9a, 0x89, 0xd8, 0xaf, 0xde, 0x38, 0xb5, 0x7c } };
//! Razer Ornata Chroma
// {803378C1-CC48-4970-8539-D828CC1D420A}
static const GUID ORNATA_CHROMA =
{ 0x803378c1, 0xcc48, 0x4970,{ 0x85, 0x39, 0xd8, 0x28, 0xcc, 0x1d, 0x42, 0xa } };
//! Razer Blade Stealth.
// {C83BDFE8-E7FC-40E0-99DB-872E23F19891}
static const GUID BLADE_STEALTH =
{ 0xc83bdfe8, 0xe7fc, 0x40e0, { 0x99, 0xdb, 0x87, 0x2e, 0x23, 0xf1, 0x98, 0x91 } };
//! Razer Blade
// {F2BEDFAF-A0FE-4651-9D41-B6CE603A3DDD}
static const GUID BLADE =
{ 0xf2bedfaf, 0xa0fe, 0x4651, { 0x9d, 0x41, 0xb6, 0xce, 0x60, 0x3a, 0x3d, 0xdd } };
//! Razer Blade Pro
// {A73AC338-F0E5-4BF7-91AE-DD1F7E1737A5}
static const GUID BLADE_PRO =
{ 0xa73ac338, 0xf0e5, 0x4bf7,{ 0x91, 0xae, 0xdd, 0x1f, 0x7e, 0x17, 0x37, 0xa5 } };
// Mice
//! Razer Deathadder Chroma device.
// {AEC50D91-B1F1-452F-8E16-7B73F376FDF3}
static const GUID DEATHADDER_CHROMA =
{ 0xaec50d91, 0xb1f1, 0x452f, { 0x8e, 0x16, 0x7b, 0x73, 0xf3, 0x76, 0xfd, 0xf3 } };
//! Razer Mamba Chroma Tournament Edition device.
// {7EC00450-E0EE-4289-89D5-0D879C19061A}
static const GUID MAMBA_CHROMA_TE =
{ 0x7ec00450, 0xe0ee, 0x4289, { 0x89, 0xd5, 0xd, 0x87, 0x9c, 0x19, 0x6, 0x1a } };
//! Razer Diamondback device.
// {FF8A5929-4512-4257-8D59-C647BF9935D0}
static const GUID DIAMONDBACK_CHROMA =
{ 0xff8a5929, 0x4512, 0x4257, { 0x8d, 0x59, 0xc6, 0x47, 0xbf, 0x99, 0x35, 0xd0 } };
//! Razer Mamba device.
// {D527CBDC-EB0A-483A-9E89-66D50463EC6C}
static const GUID MAMBA_CHROMA =
{ 0xd527cbdc, 0xeb0a, 0x483a, { 0x9e, 0x89, 0x66, 0xd5, 0x4, 0x63, 0xec, 0x6c } };
//! Razer Naga Epic device.
// {D714C50B-7158-4368-B99C-601ACB985E98}
static const GUID NAGA_EPIC_CHROMA =
{ 0xd714c50b, 0x7158, 0x4368, { 0xb9, 0x9c, 0x60, 0x1a, 0xcb, 0x98, 0x5e, 0x98 } };
//! Razer Naga device.
// {F1876328-6CA4-46AE-BE04-BE812B414433}
static const GUID NAGA_CHROMA =
{ 0xf1876328, 0x6ca4, 0x46ae, { 0xbe, 0x4, 0xbe, 0x81, 0x2b, 0x41, 0x44, 0x33 } };
//! Razer Orochi Chroma device.
// {52C15681-4ECE-4DD9-8A52-A1418459EB34}
static const GUID OROCHI_CHROMA =
{ 0x52c15681, 0x4ece, 0x4dd9, { 0x8a, 0x52, 0xa1, 0x41, 0x84, 0x59, 0xeb, 0x34 } };
//! Razer Naga Hex Chroma device.
// {195D70F5-F285-4CFF-99F2-B8C0E9658DB4}
static const GUID NAGA_HEX_CHROMA =
{ 0x195d70f5, 0xf285, 0x4cff, { 0x99, 0xf2, 0xb8, 0xc0, 0xe9, 0x65, 0x8d, 0xb4 } };
//! Razer DeathAdder Elite Chroma device.
// {77834867-3237-4A9F-AD77-4A46C4183003}
static const GUID DEATHADDER_ELITE_CHROMA =
{ 0x77834867, 0x3237, 0x4a9f,{ 0xad, 0x77, 0x4a, 0x46, 0xc4, 0x18, 0x30, 0x3 } };
// Headsets
//! Razer Kraken 7.1 Chroma device.
// {CD1E09A5-D5E6-4A6C-A93B-E6D9BF1D2092}
static const GUID KRAKEN71_CHROMA =
{ 0xcd1e09a5, 0xd5e6, 0x4a6c, { 0xa9, 0x3b, 0xe6, 0xd9, 0xbf, 0x1d, 0x20, 0x92 } };
//! Razer ManO'War device.
// {DF3164D7-5408-4A0E-8A7F-A7412F26BEBF}
static const GUID MANOWAR_CHROMA =
{ 0xdf3164d7, 0x5408, 0x4a0e, { 0x8a, 0x7f, 0xa7, 0x41, 0x2f, 0x26, 0xbe, 0xbf } };
//! Razer Kraken 7.1 Chroma Refresh headset.
// {7FB8A36E-9E74-4BB3-8C86-CAC7F7891EBD}
static const GUID KRAKEN71_REFRESH_CHROMA =
{ 0x7fb8a36e, 0x9e74, 0x4bb3,{ 0x8c, 0x86, 0xca, 0xc7, 0xf7, 0x89, 0x1e, 0xbd } };
// Mouse mat
//! Razer Firefly device.
// {80F95A94-73D2-48CA-AE9A-0986789A9AF2}
static const GUID FIREFLY_CHROMA =
{ 0x80f95a94, 0x73d2, 0x48ca, { 0xae, 0x9a, 0x9, 0x86, 0x78, 0x9a, 0x9a, 0xf2 } };
// Keypads
//! Razer Tartarus device.
// {00F0545C-E180-4AD1-8E8A-419061CE505E}
static const GUID TARTARUS_CHROMA =
{ 0xf0545c, 0xe180, 0x4ad1, { 0x8e, 0x8a, 0x41, 0x90, 0x61, 0xce, 0x50, 0x5e } };
//! Razer Orbweaver device.
// {9D24B0AB-0162-466C-9640-7A924AA4D9FD}
static const GUID ORBWEAVER_CHROMA =
{ 0x9d24b0ab, 0x162, 0x466c, { 0x96, 0x40, 0x7a, 0x92, 0x4a, 0xa4, 0xd9, 0xfd } };
// Chroma Linked devices
// {35F6F18D-1AE5-436C-A575-AB44A127903A}
static const GUID LENOVO_Y900 =
{ 0x35f6f18d, 0x1ae5, 0x436c, { 0xa5, 0x75, 0xab, 0x44, 0xa1, 0x27, 0x90, 0x3a } };
// {47DB1FA7-6B9B-4EE6-B6F4-4071A3B2053B}
static const GUID LENOVO_Y27 =
{ 0x47db1fa7, 0x6b9b, 0x4ee6, { 0xb6, 0xf4, 0x40, 0x71, 0xa3, 0xb2, 0x5, 0x3b } };
// {0201203B-62F3-4C50-83DD-598BABD208E0}
static const GUID CORE_CHROMA =
{ 0x201203b, 0x62f3, 0x4c50, { 0x83, 0xdd, 0x59, 0x8b, 0xab, 0xd2, 0x8, 0xe0 } };
// {BB2E9C9B-B0D2-461A-BA52-230B5D6C3609}
static const GUID CHROMABOX =
{ 0xbb2e9c9b, 0xb0d2, 0x461a,{ 0xba, 0x52, 0x23, 0xb, 0x5d, 0x6c, 0x36, 0x9 } };
// Speakers
//! Razer Nommo
// {45B308F2-CD44-4594-8375-4D5945AD880E}
static const GUID NOMMO_CHROMA =
{ 0x45b308f2, 0xcd44, 0x4594,{ 0x83, 0x75, 0x4d, 0x59, 0x45, 0xad, 0x88, 0xe } };
//! Razer Nommo Pro
// {3017280B-D7F9-4D7B-930E-7B47181B46B5}
static const GUID NOMMO_CHROMA_PRO =
{ 0x3017280b, 0xd7f9, 0x4d7b,{ 0x93, 0xe, 0x7b, 0x47, 0x18, 0x1b, 0x46, 0xb5 } };
}
#endif
-832
View File
@@ -1,832 +0,0 @@
//! \file RzChromaSDKTypes.h
//! \brief Data types.
#ifndef _RZCHROMASDKTYPES_H_
#define _RZCHROMASDKTYPES_H_
#pragma once
typedef LONG RZRESULT; //!< Return result.
typedef GUID RZEFFECTID; //!< Effect Id.
typedef GUID RZDEVICEID; //!< Device Id.
typedef unsigned int RZDURATION; //!< Milliseconds.
typedef size_t RZSIZE; //!< Size.
typedef void* PRZPARAM; //!< Context sensitive pointer.
typedef DWORD RZID; //!< Generic data type for Identifier.
typedef DWORD RZCOLOR; //!< Color data. 1st byte = Red; 2nd byte = Green; 3rd byte = Blue; 4th byte = Alpha (if applicable)
namespace ChromaSDK
{
//! Event notification Window message
const UINT WM_CHROMA_EVENT = WM_APP+0x2000;
//! Application information.
typedef struct APPINFOTYPE
{
TCHAR Title[256]; //!< Title of the application.
TCHAR Description[1024]; //!< A short description of the application.
//! Author information
struct Author
{
TCHAR Name[256]; //!< Name of the developer/company.
TCHAR Contact[256]; //!< Contact info.
} Author;
DWORD SupportedDevice;
DWORD Category; //!< 0 = Utility; 1 = Game; 2 = Chroma Link Broadcast
} APPINFOTYPE;
//! Chroma generic effects. Note: Not all devices supported the listed effects.
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_WAVE, //!< Wave effect (Deprecated and should not be used).
CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect (Deprecated and should not be used).
CHROMA_BREATHING, //!< Breathing effect (Deprecated and should not be used).
CHROMA_BLINKING, //!< Blinking effect (Deprecated and should not be used).
CHROMA_REACTIVE, //!< Reactive effect (Deprecated and should not be used).
CHROMA_STATIC, //!< Static single color effect.
CHROMA_CUSTOM, //!< Custom effect. For mice, please see Mouse::CHROMA_CUSTOM2.
CHROMA_RESERVED, //!< Reserved
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
//! Device info.
typedef struct DEVICE_INFO_TYPE
{
//! Device types.
enum DeviceType
{
DEVICE_KEYBOARD = 1, //!< Keyboard device.
DEVICE_MOUSE = 2, //!< Mouse device.
DEVICE_HEADSET = 3, //!< Headset device.
DEVICE_MOUSEPAD = 4, //!< Mousepad device.
DEVICE_KEYPAD = 5, //!< Keypad device.
DEVICE_SYSTEM = 6, //!< System device.
DEVICE_SPEAKERS = 7, //!< Speakers.
DEVICE_INVALID //!< Invalid device.
} DeviceType;
DWORD Connected; //!< Number of devices connected.
} DEVICE_INFO_TYPE;
const RZSIZE MAX_ROW = 30; //!< Maximum rows for custom effects.
const RZSIZE MAX_COLUMN = 30; //!< Maximum columns for custom effects.
//! Blinking effect (Deprecated and should not be used).
typedef struct BLINKING_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(BLINKING_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
COLORREF Color; //!< Blinking color
} BLINKING_EFFECT_TYPE;
//! Breathing effect (Deprecated and should not be used).
typedef struct BREATHING_EFFECT_TYPE
{
RZSIZE Size; //!< Size of ths structure. Size = sizeof(BREATHING_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
//! Breathing effect types.
enum _Type
{
ONE_COLOR = 1, //!< 1 color (Only fill Color1).
TWO_COLORS, //!< 2 colors.
RANDOM_COLORS //!< Random colors
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
} BREATHING_EFFECT_TYPE;
//! Custom effect (Deprecated and should not be used).
typedef struct CUSTOM_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(CUSTOM_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
RZCOLOR Color[MAX_ROW][MAX_COLUMN];
} CUSTOM_EFFECT_TYPE;
//! No effect.
typedef struct NO_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(NO_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
} NO_EFFECT_TYPE;
//! Reactive effect (Deprecated and should not be used).
typedef struct REACTIVE_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(REACTIVE_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
//! Duration of the effect.
enum _Duration
{
DURATION_SHORT = 1, //!< Short duration.
DURATION_MEDIUM, //!< Medium duration.
DURATION_LONG //!< Long duration.
} Duration; //!< The time taken for the effect to fade away.
COLORREF Color; //!< Color of the effect.
} REACTIVE_EFFECT_TYPE;
//! Spectrum cycling effect (Deprecated and should not be used).
typedef struct SPECTRUMCYCLING_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(SPECTRUMCYCLING_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
} SPECTRUMCYCLING_EFFECT_TYPE;
//! Starlight effect (Deprecated and should not be used).
typedef struct STARLIGHT_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(SPECTRUMCYCLING_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
//! Starlight effect types.
enum _Type
{
TWO_COLORS = 1, //!< 2 colors.
RANDOM_COLORS //!< Random colors
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
//! Duration of the effect.
enum _Duration
{
DURATION_SHORT = 1, //!< Short duration.
DURATION_MEDIUM, //!< Medium duration.
DURATION_LONG //!< Long duration.
} Duration; //!< The time taken for the effect to fade away.
} STARLIGHT_EFFECT_TYPE;
//! Static effect (Deprecated and should not be used).
typedef struct STATIC_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(STATIC_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
COLORREF Color; //!< Color of the effect.
} STATIC_EFFECT_TYPE;
//! Wave effect (Deprecated and should not be used).
typedef struct WAVE_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(WAVE_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
//! Direction of effect.
enum _Direction
{
DIRECTION_LEFT_TO_RIGHT = 1, //!< Left to right.
DIRECTION_RIGHT_TO_LEFT, //!< Right to left.
DIRECTION_FRONT_TO_BACK, //!< Front to back
DIRECTION_BACK_TO_FRONT //!< Back top front
} Direction;
} WAVE_EFFECT_TYPE;
//! Keyboards
namespace Keyboard
{
//! Definitions of keys.
typedef enum RZKEY
{
RZKEY_ESC = 0x0001, /*!< Esc (VK_ESCAPE) */
RZKEY_F1 = 0x0003, /*!< F1 (VK_F1) */
RZKEY_F2 = 0x0004, /*!< F2 (VK_F2) */
RZKEY_F3 = 0x0005, /*!< F3 (VK_F3) */
RZKEY_F4 = 0x0006, /*!< F4 (VK_F4) */
RZKEY_F5 = 0x0007, /*!< F5 (VK_F5) */
RZKEY_F6 = 0x0008, /*!< F6 (VK_F6) */
RZKEY_F7 = 0x0009, /*!< F7 (VK_F7) */
RZKEY_F8 = 0x000A, /*!< F8 (VK_F8) */
RZKEY_F9 = 0x000B, /*!< F9 (VK_F9) */
RZKEY_F10 = 0x000C, /*!< F10 (VK_F10) */
RZKEY_F11 = 0x000D, /*!< F11 (VK_F11) */
RZKEY_F12 = 0x000E, /*!< F12 (VK_F12) */
RZKEY_1 = 0x0102, /*!< 1 (VK_1) */
RZKEY_2 = 0x0103, /*!< 2 (VK_2) */
RZKEY_3 = 0x0104, /*!< 3 (VK_3) */
RZKEY_4 = 0x0105, /*!< 4 (VK_4) */
RZKEY_5 = 0x0106, /*!< 5 (VK_5) */
RZKEY_6 = 0x0107, /*!< 6 (VK_6) */
RZKEY_7 = 0x0108, /*!< 7 (VK_7) */
RZKEY_8 = 0x0109, /*!< 8 (VK_8) */
RZKEY_9 = 0x010A, /*!< 9 (VK_9) */
RZKEY_0 = 0x010B, /*!< 0 (VK_0) */
RZKEY_A = 0x0302, /*!< A (VK_A) */
RZKEY_B = 0x0407, /*!< B (VK_B) */
RZKEY_C = 0x0405, /*!< C (VK_C) */
RZKEY_D = 0x0304, /*!< D (VK_D) */
RZKEY_E = 0x0204, /*!< E (VK_E) */
RZKEY_F = 0x0305, /*!< F (VK_F) */
RZKEY_G = 0x0306, /*!< G (VK_G) */
RZKEY_H = 0x0307, /*!< H (VK_H) */
RZKEY_I = 0x0209, /*!< I (VK_I) */
RZKEY_J = 0x0308, /*!< J (VK_J) */
RZKEY_K = 0x0309, /*!< K (VK_K) */
RZKEY_L = 0x030A, /*!< L (VK_L) */
RZKEY_M = 0x0409, /*!< M (VK_M) */
RZKEY_N = 0x0408, /*!< N (VK_N) */
RZKEY_O = 0x020A, /*!< O (VK_O) */
RZKEY_P = 0x020B, /*!< P (VK_P) */
RZKEY_Q = 0x0202, /*!< Q (VK_Q) */
RZKEY_R = 0x0205, /*!< R (VK_R) */
RZKEY_S = 0x0303, /*!< S (VK_S) */
RZKEY_T = 0x0206, /*!< T (VK_T) */
RZKEY_U = 0x0208, /*!< U (VK_U) */
RZKEY_V = 0x0406, /*!< V (VK_V) */
RZKEY_W = 0x0203, /*!< W (VK_W) */
RZKEY_X = 0x0404, /*!< X (VK_X) */
RZKEY_Y = 0x0207, /*!< Y (VK_Y) */
RZKEY_Z = 0x0403, /*!< Z (VK_Z) */
RZKEY_NUMLOCK = 0x0112, /*!< Numlock (VK_NUMLOCK) */
RZKEY_NUMPAD0 = 0x0513, /*!< Numpad 0 (VK_NUMPAD0) */
RZKEY_NUMPAD1 = 0x0412, /*!< Numpad 1 (VK_NUMPAD1) */
RZKEY_NUMPAD2 = 0x0413, /*!< Numpad 2 (VK_NUMPAD2) */
RZKEY_NUMPAD3 = 0x0414, /*!< Numpad 3 (VK_NUMPAD3) */
RZKEY_NUMPAD4 = 0x0312, /*!< Numpad 4 (VK_NUMPAD4) */
RZKEY_NUMPAD5 = 0x0313, /*!< Numpad 5 (VK_NUMPAD5) */
RZKEY_NUMPAD6 = 0x0314, /*!< Numpad 6 (VK_NUMPAD6) */
RZKEY_NUMPAD7 = 0x0212, /*!< Numpad 7 (VK_NUMPAD7) */
RZKEY_NUMPAD8 = 0x0213, /*!< Numpad 8 (VK_NUMPAD8) */
RZKEY_NUMPAD9 = 0x0214, /*!< Numpad 9 (VK_ NUMPAD9*/
RZKEY_NUMPAD_DIVIDE = 0x0113, /*!< Divide (VK_DIVIDE) */
RZKEY_NUMPAD_MULTIPLY = 0x0114, /*!< Multiply (VK_MULTIPLY) */
RZKEY_NUMPAD_SUBTRACT = 0x0115, /*!< Subtract (VK_SUBTRACT) */
RZKEY_NUMPAD_ADD = 0x0215, /*!< Add (VK_ADD) */
RZKEY_NUMPAD_ENTER = 0x0415, /*!< Enter (VK_RETURN - Extended) */
RZKEY_NUMPAD_DECIMAL = 0x0514, /*!< Decimal (VK_DECIMAL) */
RZKEY_PRINTSCREEN = 0x000F, /*!< Print Screen (VK_PRINT) */
RZKEY_SCROLL = 0x0010, /*!< Scroll Lock (VK_SCROLL) */
RZKEY_PAUSE = 0x0011, /*!< Pause (VK_PAUSE) */
RZKEY_INSERT = 0x010F, /*!< Insert (VK_INSERT) */
RZKEY_HOME = 0x0110, /*!< Home (VK_HOME) */
RZKEY_PAGEUP = 0x0111, /*!< Page Up (VK_PRIOR) */
RZKEY_DELETE = 0x020f, /*!< Delete (VK_DELETE) */
RZKEY_END = 0x0210, /*!< End (VK_END) */
RZKEY_PAGEDOWN = 0x0211, /*!< Page Down (VK_NEXT) */
RZKEY_UP = 0x0410, /*!< Up (VK_UP) */
RZKEY_LEFT = 0x050F, /*!< Left (VK_LEFT) */
RZKEY_DOWN = 0x0510, /*!< Down (VK_DOWN) */
RZKEY_RIGHT = 0x0511, /*!< Right (VK_RIGHT) */
RZKEY_TAB = 0x0201, /*!< Tab (VK_TAB) */
RZKEY_CAPSLOCK = 0x0301, /*!< Caps Lock(VK_CAPITAL) */
RZKEY_BACKSPACE = 0x010E, /*!< Backspace (VK_BACK) */
RZKEY_ENTER = 0x030E, /*!< Enter (VK_RETURN) */
RZKEY_LCTRL = 0x0501, /*!< Left Control(VK_LCONTROL) */
RZKEY_LWIN = 0x0502, /*!< Left Window (VK_LWIN) */
RZKEY_LALT = 0x0503, /*!< Left Alt (VK_LMENU) */
RZKEY_SPACE = 0x0507, /*!< Spacebar (VK_SPACE) */
RZKEY_RALT = 0x050B, /*!< Right Alt (VK_RMENU) */
RZKEY_FN = 0x050C, /*!< Function key. */
RZKEY_RMENU = 0x050D, /*!< Right Menu (VK_APPS) */
RZKEY_RCTRL = 0x050E, /*!< Right Control (VK_RCONTROL) */
RZKEY_LSHIFT = 0x0401, /*!< Left Shift (VK_LSHIFT) */
RZKEY_RSHIFT = 0x040E, /*!< Right Shift (VK_RSHIFT) */
RZKEY_MACRO1 = 0x0100, /*!< Macro Key 1 */
RZKEY_MACRO2 = 0x0200, /*!< Macro Key 2 */
RZKEY_MACRO3 = 0x0300, /*!< Macro Key 3 */
RZKEY_MACRO4 = 0x0400, /*!< Macro Key 4 */
RZKEY_MACRO5 = 0x0500, /*!< Macro Key 5 */
RZKEY_OEM_1 = 0x0101, /*!< ~ (tilde/半角/全角) (VK_OEM_3) */
RZKEY_OEM_2 = 0x010C, /*!< -- (minus) (VK_OEM_MINUS) */
RZKEY_OEM_3 = 0x010D, /*!< = (equal) (VK_OEM_PLUS) */
RZKEY_OEM_4 = 0x020C, /*!< [ (left sqaure bracket) (VK_OEM_4) */
RZKEY_OEM_5 = 0x020D, /*!< ] (right square bracket) (VK_OEM_6) */
RZKEY_OEM_6 = 0x020E, /*!< \ (backslash) (VK_OEM_5) */
RZKEY_OEM_7 = 0x030B, /*!< ; (semi-colon) (VK_OEM_1) */
RZKEY_OEM_8 = 0x030C, /*!< ' (apostrophe) (VK_OEM_7) */
RZKEY_OEM_9 = 0x040A, /*!< , (comma) (VK_OEM_COMMA) */
RZKEY_OEM_10 = 0x040B, /*!< . (period) (VK_OEM_PERIOD) */
RZKEY_OEM_11 = 0x040C, /*!< / (forward slash) (VK_OEM_2) */
RZKEY_EUR_1 = 0x030D, /*!< "#" (VK_OEM_5) */
RZKEY_EUR_2 = 0x0402, /*!< \ (VK_OEM_102) */
RZKEY_JPN_1 = 0x0015, /*!< ¥ (0xFF) */
RZKEY_JPN_2 = 0x040D, /*!< \ (0xC1) */
RZKEY_JPN_3 = 0x0504, /*!< 無変換 (VK_OEM_PA1) */
RZKEY_JPN_4 = 0x0509, /*!< 変換 (0xFF) */
RZKEY_JPN_5 = 0x050A, /*!< ひらがな/カタカナ (0xFF) */
RZKEY_KOR_1 = 0x0015, /*!< | (0xFF) */
RZKEY_KOR_2 = 0x030D, /*!< (VK_OEM_5) */
RZKEY_KOR_3 = 0x0402, /*!< (VK_OEM_102) */
RZKEY_KOR_4 = 0x040D, /*!< (0xC1) */
RZKEY_KOR_5 = 0x0504, /*!< (VK_OEM_PA1) */
RZKEY_KOR_6 = 0x0509, /*!< 한/영 (0xFF) */
RZKEY_KOR_7 = 0x050A, /*!< (0xFF) */
RZKEY_INVALID = 0xFFFF /*!< Invalid keys. */
} RZKEY;
//! Definition of LEDs.
typedef enum RZLED
{
RZLED_LOGO = 0x0014 /*!< Razer logo */
} RZLED;
//! Maximum number of rows in a keyboard.
const RZSIZE MAX_ROW = 6;
//! Maximum number of columns in a keyboard.
const RZSIZE MAX_COLUMN = 22;
//! Maximum number of keys.
const RZSIZE MAX_KEYS = MAX_ROW * MAX_COLUMN;
//! Maximum number of custom effects.
const RZSIZE MAX_CUSTOM_EFFECTS = MAX_KEYS;
//! Keyboard LED layout.
const COLORREF RZKEY_LAYOUT[MAX_ROW][MAX_COLUMN] = {};
//! Chroma keyboard effect types
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_BREATHING, //!< Breathing effect (Deprecated and should not be used.).
CHROMA_CUSTOM, //!< Custom effect.
CHROMA_REACTIVE, //!< Reactive effect (Deprecated and should not be used).
CHROMA_STATIC, //!< Static single color effect.
CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect (Deprecated and should not be used).
CHROMA_WAVE, //!< Wave effect (Deprecated and should not be used).
CHROMA_RESERVED, //!< Reserved.
CHROMA_CUSTOM_KEY, //!< Custom effects with keys.
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
// Chroma keyboard effects
//! Breathing effect type (Deprecated and should not be used).
typedef struct BREATHING_EFFECT_TYPE
{
//! Breathing effects.
enum Type
{
TWO_COLORS = 1, //!< 2 colors
RANDOM_COLORS, //!< Random colors
INVALID //!< Invalid type
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
} BREATHING_EFFECT_TYPE;
//! Custom effect using a matrix type.
typedef struct CUSTOM_EFFECT_TYPE
{
COLORREF Color[MAX_ROW][MAX_COLUMN]; //!< Grid layout. 6 rows by 22 columns.
} CUSTOM_EFFECT_TYPE;
//! Custom effect with keys.
typedef struct CUSTOM_KEY_EFFECT_TYPE
{
COLORREF Color[MAX_ROW][MAX_COLUMN]; //!< Grid layout. 6 rows by 22 columns.
COLORREF Key[MAX_ROW][MAX_COLUMN]; //!< Keys information. 6 rows by 22 columns. To indidate there is a key effect, OR with 0x01000000. i.e. Key[0][1] = 0x01000000 | Color;
} CUSTOM_KEY_EFFECT_TYPE;
//! Reactive effect type (Deprecated and should not be used).
typedef struct REACTIVE_EFFECT_TYPE
{
//! Duration of the effect.
enum Duration
{
DURATION_NONE=0, //!< No duration.
DURATION_SHORT, //!< Short duration.
DURATION_MEDIUM, //!< Medium duration.
DURATION_LONG, //!< Long duration.
DURATION_INVALID //!< Invalid duration.
} Duration; //!< The time taken for the effect to fade away.
COLORREF Color; //!< Color of the effect
} REACTIVE_EFFECT_TYPE;
//! Starlight effect (Deprecated and should not be used).
typedef struct STARLIGHT_EFFECT_TYPE
{
//! Starlight effect types.
enum _Type
{
TWO_COLORS = 1, //!< 2 colors.
RANDOM_COLORS //!< Random colors
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
//! Duration of the effect.
enum _Duration
{
DURATION_SHORT = 1, //!< Short duration.
DURATION_MEDIUM, //!< Medium duration.
DURATION_LONG //!< Long duration.
} Duration; //!< The time taken for the effect to fade away.
} STARLIGHT_EFFECT_TYPE;
//! Static effect type
typedef struct STATIC_EFFECT_TYPE
{
COLORREF Color; //!< Color of the effect
} STATIC_EFFECT_TYPE;
//! Wave effect type (Deprecated and should not be used).
typedef struct WAVE_EFFECT_TYPE
{
//! Direction of the wave effect.
enum Direction
{
DIRECTION_NONE=0, //!< No direction.
DIRECTION_LEFT_TO_RIGHT, //!< Left to right.
DIRECTION_RIGHT_TO_LEFT, //!< Right to left.
DIRECTION_INVALID //!< Invalid direction.
} Direction; //!< Direction of the wave.
} WAVE_EFFECT_TYPE;
}
//! Mice
namespace Mouse
{
//! Maximum number of custom LEDs (old definition to maintain backward compatibility).
const RZSIZE MAX_LEDS = 30;
//! Mice LED layout (old definition to maintain backward compatibility).
const RZCOLOR RZLED_LAYOUT[MAX_LEDS] = {};
//! Maximum number of rows of the virtual grid.
const RZSIZE MAX_ROW = 9;
//! Maximum number of columns of the virtual grid.
const RZSIZE MAX_COLUMN = 7;
//! Maximum number of LEDs of the virtual grid.
const RZSIZE MAX_LEDS2 = MAX_ROW * MAX_COLUMN;
//! Mice LED virtual grid layout.
const RZCOLOR RZLED_LAYOUT2[MAX_ROW][MAX_COLUMN] = {};
//! Mouse LED Id defintion (Deprecated and should not be used).
typedef enum RZLED
{
RZLED_NONE = 0, //!< No LED.
RZLED_SCROLLWHEEL = 1, //!< Scroll Wheel LED.
RZLED_LOGO = 2, //!< Logo LED.
RZLED_BACKLIGHT = 3, //!< Backlight or numpad.
RZLED_SIDE_STRIP1 = 4, //!< Side strip LED 1. (For Mamba TE, starts from top left hand)
RZLED_SIDE_STRIP2 = 5, //!< Side strip LED 2. (For Mamba TE)
RZLED_SIDE_STRIP3 = 6, //!< Side strip LED 3. (For Mamba TE)
RZLED_SIDE_STRIP4 = 7, //!< Side strip LED 4. (For Mamba TE)
RZLED_SIDE_STRIP5 = 8, //!< Side strip LED 5. (For Mamba TE)
RZLED_SIDE_STRIP6 = 9, //!< Side strip LED 6. (For Mamba TE)
RZLED_SIDE_STRIP7 = 10, //!< Side strip LED 7. (For Mamba TE)
RZLED_SIDE_STRIP8 = 11, //!< Side strip LED 8. (For Mamba TE)
RZLED_SIDE_STRIP9 = 12, //!< Side strip LED 9. (For Mamba TE)
RZLED_SIDE_STRIP10 = 13, //!< Side strip LED 10. (For Mamba TE)
RZLED_SIDE_STRIP11 = 14, //!< Side strip LED 11. (For Mamba TE)
RZLED_SIDE_STRIP12 = 15, //!< Side strip LED 12. (For Mamba TE)
RZLED_SIDE_STRIP13 = 16, //!< Side strip LED 13. (For Mamba TE)
RZLED_SIDE_STRIP14 = 17, //!< Side strip LED 14. (For Mamba TE)
RZLED_ALL = 0xFFFF
} RZLED;
//! Mouse LED Id defintion for the virtual grid.
typedef enum RZLED2
{
RZLED2_SCROLLWHEEL = 0x0203, //!< Scroll Wheel LED.
RZLED2_LOGO = 0x0703, //!< Logo LED.
RZLED2_BACKLIGHT = 0x0403, //!< Backlight LED.
RZLED2_LEFT_SIDE1 = 0x0100, //!< Left LED 1.
RZLED2_LEFT_SIDE2 = 0x0200, //!< Left LED 2.
RZLED2_LEFT_SIDE3 = 0x0300, //!< Left LED 3.
RZLED2_LEFT_SIDE4 = 0x0400, //!< Left LED 4.
RZLED2_LEFT_SIDE5 = 0x0500, //!< Left LED 5.
RZLED2_LEFT_SIDE6 = 0x0600, //!< Left LED 6.
RZLED2_LEFT_SIDE7 = 0x0700, //!< Left LED 7.
RZLED2_BOTTOM1 = 0x0801, //!< Bottom LED 1.
RZLED2_BOTTOM2 = 0x0802, //!< Bottom LED 2.
RZLED2_BOTTOM3 = 0x0803, //!< Bottom LED 3.
RZLED2_BOTTOM4 = 0x0804, //!< Bottom LED 4.
RZLED2_BOTTOM5 = 0x0805, //!< Bottom LED 5.
RZLED2_RIGHT_SIDE1 = 0x0106, //!< Right LED 1.
RZLED2_RIGHT_SIDE2 = 0x0206, //!< Right LED 2.
RZLED2_RIGHT_SIDE3 = 0x0306, //!< Right LED 3.
RZLED2_RIGHT_SIDE4 = 0x0406, //!< Right LED 4.
RZLED2_RIGHT_SIDE5 = 0x0506, //!< Right LED 5.
RZLED2_RIGHT_SIDE6 = 0x0606, //!< Right LED 6.
RZLED2_RIGHT_SIDE7 = 0x0706 //!< Right LED 7.
} RZLED2;
//! Chroma mouse effect types
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_BLINKING, //!< Blinking effect (Deprecated and should not be used).
CHROMA_BREATHING, //!< Breathing effect (Deprecated and should not be used).
CHROMA_CUSTOM, //!< Custom effect (Deprecated and should not be used).
CHROMA_REACTIVE, //!< Reactive effect (Deprecated and should not be used).
CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect (Deprecated and should not be used).
CHROMA_STATIC, //!< Static single color effect.
CHROMA_WAVE, //!< Wave effect (Deprecated and should not be used).
CHROMA_CUSTOM2, //!< Custom effects using a virtual grid.
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
//! Static effect type
typedef struct STATIC_EFFECT_TYPE
{
RZLED LEDId; //!< LED Id
COLORREF Color; //!< Color of the effect.
} STATIC_EFFECT_TYPE;
//! Blinking effect type (Deprecated and should not be used).
typedef struct BLINKING_EFFECT_TYPE
{
RZLED LEDId; //!< LED Id
COLORREF Color; //!< Color.
} BLINKING_EFFECT_TYPE;
//! Breathing effect (Deprecated and should not be used).
typedef struct BREATHING_EFFECT_TYPE
{
RZLED LEDId; //!< LED Id
//! Breathing type.
enum Type
{
ONE_COLOR = 1, //!< 1 color (Only fill Color1).
TWO_COLORS, //!< 2 colors.
RANDOM_COLORS, //!< Random colors
INVALID //!< Invalid type
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
} BREATHING_EFFECT_TYPE;
//! Custom effect (Deprecated and should not be used).
typedef struct CUSTOM_EFFECT_TYPE
{
RZCOLOR Color[MAX_LEDS]; //!< Array of colors.
} CUSTOM_EFFECT_TYPE;
//! Custom effect using virtual grid.
//! Indexes of the LED are defined in RZLED2.i.e. Row = HIBYTE(RZLED2_SCROLLWHEEL), Column = LOBYTE(RZLED2_SCROLLWHEEL)
typedef struct CUSTOM_EFFECT_TYPE2
{
RZCOLOR Color[MAX_ROW][MAX_COLUMN]; //!< Array of colors.
} CUSTOM_EFFECT_TYPE2;
//! Reactive effect (Deprecated and should not be used).
typedef struct REACTIVE_EFFECT_TYPE
{
RZLED LEDId; //!< LED Id
//! Duration of the effect.
enum Duration
{
DURATION_NONE=0, //!< No duration.
DURATION_SHORT, //!< Short duration.
DURATION_MEDIUM, //!< Medium duration.
DURATION_LONG //!< Long duration.
} Duration;
RZCOLOR Color; //!< Color of the effect.
} REACTIVE_EFFECT_TYPE;
//! No effect (Deprecated and should not be used).
typedef struct NO_EFFECT_TYPE
{
RZLED LEDId; //!< LED Id
} NO_EFFECT_TYPE;
//! Spectrum cycling (Deprecated and should not be used).
typedef struct SPECTRUMCYCLING_EFFECT_TYPE
{
RZLED LEDId; //!< LED id.
} SPECTRUMCYCLING_EFFECT_TYPE;
//! Wave effect (Deprecated and should not be used).
typedef struct WAVE_EFFECT_TYPE
{
//! Direction of the wave effect.
enum Direction
{
FRONT_TO_BACK, //!< Front to back
BACK_TO_FRONT //!< Back to front
} Direction;
} WAVE_EFFECT_TYPE;
}
//! Headsets
namespace Headset
{
//! Maximum number of LEDs
const RZSIZE MAX_LEDS = 5;
//! Chroma headset effect types
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_STATIC, //!< Static single color effect.
CHROMA_BREATHING, //!< Breathing effect (Deprecated and should not be used).
CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect (Deprecated and should not be used).
CHROMA_CUSTOM, //!< Custom effects.
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
//! Static effect type
typedef struct STATIC_EFFECT_TYPE
{
COLORREF Color; //!< Color of the effect.
} STATIC_EFFECT_TYPE;
//! Breathing effect type (Deprecated and should not be used).
typedef struct BREATHING_EFFECT_TYPE
{
COLORREF Color; //!< Color.
} BREATHING_EFFECT_TYPE;
//! Custom effect type.
typedef struct CUSTOM_EFFECT_TYPE
{
RZCOLOR Color[MAX_LEDS]; //!< Array of colors.
} CUSTOM_EFFECT_TYPE;
}
//! Mousepads
namespace Mousepad
{
//! Maximum number of LEDs
const RZSIZE MAX_LEDS = 15;
//! Chroma mousepad effect types
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_BREATHING, //!< Breathing effect (Deprecated and should not be used).
CHROMA_CUSTOM, //!< Custom effect.
CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect (Deprecated and should not be used).
CHROMA_STATIC, //!< Static single color effect.
CHROMA_WAVE, //!< Wave effect (Deprecated and should not be used).
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
// Chroma mousepad effects
//! Breathing effect type (Deprecated and should not be used).
typedef struct BREATHING_EFFECT_TYPE
{
//! Breathing effects.
enum Type
{
TWO_COLORS = 1, //!< 2 colors
RANDOM_COLORS, //!< Random colors
INVALID
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
} BREATHING_EFFECT_TYPE;
//! Custom effect type.
typedef struct CUSTOM_EFFECT_TYPE
{
RZCOLOR Color[MAX_LEDS]; //!< An array of colors for all the sides of the mousepad. First LED starts from top-right corner.
//!< LED 0-4 right side, 5-9 bottom side, 10-14 left side.
} CUSTOM_EFFECT_TYPE;
//! Static effect type
typedef struct STATIC_EFFECT_TYPE
{
COLORREF Color; //!< Color of the effect
} STATIC_EFFECT_TYPE;
//! Wave effect type
typedef struct WAVE_EFFECT_TYPE
{
//! Direction of the wave effect.
enum Direction
{
DIRECTION_NONE=0, //!< No direction.
DIRECTION_LEFT_TO_RIGHT, //!< Left to right.
DIRECTION_RIGHT_TO_LEFT, //!< Right to left.
DIRECTION_INVALID //!< Invalid direction.
} Direction; //!< Direction of the wave.
} WAVE_EFFECT_TYPE;
}
//! Keypads
namespace Keypad
{
//! Maximum number of rows.
const RZSIZE MAX_ROW = 4;
//! Maximum number of columns.
const RZSIZE MAX_COLUMN = 5;
//! Total number of keys.
const RZSIZE MAX_KEYS = MAX_ROW * MAX_COLUMN;
//! Chroma keypad effect types
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_BREATHING, //!< Breathing effect (Deprecated and should not be used).
CHROMA_CUSTOM, //!< Custom effect.
CHROMA_REACTIVE, //!< Reactive effect (Deprecated and should not be used).
CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect (Deprecated and should not be used).
CHROMA_STATIC, //!< Static single color effect.
CHROMA_WAVE, //!< Wave effect (Deprecated and should not be used).
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
// Chroma keypad effects
//! Breathing effect type (Deprecated and should not be used).
typedef struct BREATHING_EFFECT_TYPE
{
//! Breathing effects.
enum Type
{
TWO_COLORS = 1, //!< 2 colors
RANDOM_COLORS, //!< Random colors
INVALID //!< Invalid type
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
} BREATHING_EFFECT_TYPE;
//! Custom effect type
typedef struct CUSTOM_EFFECT_TYPE
{
RZCOLOR Color[MAX_ROW][MAX_COLUMN]; //!< Custom effect.
//!< For Razer Tartarus Chroma only Color[0] is valid. Use index '0' to change the keypad color.
} CUSTOM_EFFECT_TYPE;
//! Reactive effect type (Deprecated and should not be used).
typedef struct REACTIVE_EFFECT_TYPE
{
//! Duration of the effect.
enum Duration
{
DURATION_NONE=0, //!< No duration.
DURATION_SHORT, //!< Short duration.
DURATION_MEDIUM, //!< Medium duration.
DURATION_LONG, //!< Long duration.
DURATION_INVALID //!< Invalid duration.
} Duration; //!< The time taken for the effect to fade away.
COLORREF Color; //!< Color of the effect
} REACTIVE_EFFECT_TYPE;
//! Static effect type
typedef struct STATIC_EFFECT_TYPE
{
RZCOLOR Color; //!< Color of the effect.
} STATIC_EFFECT_TYPE;
//! Wave effect type (Deprecated and should not be used).
typedef struct WAVE_EFFECT_TYPE
{
//! Direction of the wave effect.
enum Direction
{
DIRECTION_NONE=0, //!< No direction.
DIRECTION_LEFT_TO_RIGHT, //!< Left to right.
DIRECTION_RIGHT_TO_LEFT, //!< Right to left.
DIRECTION_INVALID //!< Invalid direction.
} Direction; //!< Direction of the wave.
} WAVE_EFFECT_TYPE;
}
//! Chroma Link
namespace ChromaLink
{
//! Maximum number of elements/LEDs
const RZSIZE MAX_LEDS = 5;
//! Chroma Link effect types
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_CUSTOM, //!< Custom effect.
CHROMA_STATIC, //!< Static single color effect.
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
//! Custom effect type.\n
//! Use Custom type to create a sequence of animated effects.\n
//! [ChromaLinkL#1|ChromaLinkL#2|ChromaLinkL#3|ChromaLinkL#4|ChromaLinkL#5].\n
typedef struct CUSTOM_EFFECT_TYPE
{
RZCOLOR Color[MAX_LEDS]; //!< Array of colors.
} CUSTOM_EFFECT_TYPE;
//! Static effect type.\n
//! Use Static type to create effects for all LEDs (ChromaLinkL#1).
typedef struct STATIC_EFFECT_TYPE
{
RZCOLOR Color; //!< Color of the effect.
} STATIC_EFFECT_TYPE;
}
}
#endif

Some files were not shown because too many files have changed in this diff Show More