Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8b9c4ec68c | ||
|
|
af7c185e43 |
@@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
#include "PoseidonZRGBController.h"
|
#include "PoseidonZRGBController.h"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#else
|
#else
|
||||||
@@ -47,10 +49,10 @@ char* PoseidonZRGBController::GetDeviceName()
|
|||||||
|
|
||||||
void PoseidonZRGBController::SetLEDsDirect(std::vector<RGBColor> colors)
|
void PoseidonZRGBController::SetLEDsDirect(std::vector<RGBColor> colors)
|
||||||
{
|
{
|
||||||
unsigned char red_grn_buf[264];
|
unsigned char red_grn_buf[265];
|
||||||
unsigned char blu_buf[264];
|
unsigned char blu_buf[265];
|
||||||
|
|
||||||
for(int i = 0; i < 264; i++)
|
for(int i = 0; i < 265; i++)
|
||||||
{
|
{
|
||||||
red_grn_buf[i] = 0x00;
|
red_grn_buf[i] = 0x00;
|
||||||
blu_buf[i] = 0x00;
|
blu_buf[i] = 0x00;
|
||||||
@@ -91,83 +93,109 @@ void PoseidonZRGBController::SetLEDsDirect(std::vector<RGBColor> colors)
|
|||||||
|
|
||||||
void PoseidonZRGBController::SetLEDs(std::vector<RGBColor> colors)
|
void PoseidonZRGBController::SetLEDs(std::vector<RGBColor> colors)
|
||||||
{
|
{
|
||||||
unsigned char buf[264] = {0};
|
unsigned char red_color_data[104];
|
||||||
|
unsigned char grn_color_data[104];
|
||||||
//Send Red Packet
|
unsigned char blu_color_data[104];
|
||||||
for(int i = 0; i < 264; i++)
|
|
||||||
{
|
|
||||||
buf[i] = 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf[0] = 0x07;
|
|
||||||
buf[1] = 0x09;
|
|
||||||
buf[2] = 0x01;
|
|
||||||
buf[3] = 0x01;
|
|
||||||
|
|
||||||
for(int i = 0; i < 104; i++)
|
for(int i = 0; i < 104; i++)
|
||||||
{
|
{
|
||||||
buf[keys[i]] = RGBGetRValue(colors[i]);
|
red_color_data[keys[i] - 8] = RGBGetRValue(colors[i]);
|
||||||
|
grn_color_data[keys[i] - 8] = RGBGetGValue(colors[i]);
|
||||||
|
blu_color_data[keys[i] - 8] = RGBGetBValue(colors[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
hid_send_feature_report(dev, buf, 264);
|
SendColor
|
||||||
|
(
|
||||||
|
POSEIDONZ_PROFILE_P1,
|
||||||
|
POSEIDONZ_COLOR_RED,
|
||||||
|
red_color_data
|
||||||
|
);
|
||||||
|
|
||||||
Sleep(10);
|
Sleep(10);
|
||||||
|
|
||||||
//Send Green Packet
|
|
||||||
for(int i = 0; i < 264; i++)
|
|
||||||
{
|
|
||||||
buf[i] = 0x00;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf[0] = 0x07;
|
SendColor
|
||||||
buf[1] = 0x09;
|
(
|
||||||
buf[2] = 0x01;
|
POSEIDONZ_PROFILE_P1,
|
||||||
buf[3] = 0x02;
|
POSEIDONZ_COLOR_GREEN,
|
||||||
|
grn_color_data
|
||||||
buf[8] = 0xFF;
|
);
|
||||||
|
|
||||||
for(int i = 0; i < 104; i++)
|
|
||||||
{
|
|
||||||
buf[keys[i]] = RGBGetGValue(colors[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
hid_send_feature_report(dev, buf, 264);
|
|
||||||
|
|
||||||
Sleep(10);
|
Sleep(10);
|
||||||
|
|
||||||
//Send Blue Packet
|
|
||||||
for(int i = 0; i < 264; i++)
|
|
||||||
{
|
|
||||||
buf[i] = 0x11;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf[0] = 0x07;
|
SendColor
|
||||||
buf[1] = 0x09;
|
(
|
||||||
buf[2] = 0x01;
|
POSEIDONZ_PROFILE_P1,
|
||||||
buf[3] = 0x03;
|
POSEIDONZ_COLOR_BLUE,
|
||||||
|
blu_color_data
|
||||||
for(int i = 0; i < 104; i++)
|
);
|
||||||
{
|
|
||||||
buf[keys[i]] = RGBGetBValue(colors[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
hid_send_feature_report(dev, buf, 264);
|
|
||||||
|
|
||||||
Sleep(10);
|
Sleep(10);
|
||||||
|
|
||||||
//Send Update Packet
|
|
||||||
for(int i = 0; i < 264; i++)
|
|
||||||
{
|
|
||||||
buf[i] = 0x00;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf[0] = 0x07;
|
SendControl
|
||||||
buf[1] = 0x02;
|
(
|
||||||
buf[2] = 0x01;
|
POSEIDONZ_PROFILE_P1,
|
||||||
buf[8] = 0x01; //Preset to save
|
POSEIDONZ_PROFILE_P1,
|
||||||
buf[13] = 0x04; //Brightness?
|
0,
|
||||||
buf[16] = 0x08;
|
POSEIDONZ_MODE_STATIC,
|
||||||
buf[22] = 0x03;
|
POSEIDONZ_BRIGHTNESS_MAX
|
||||||
|
);
|
||||||
hid_send_feature_report(dev, buf, 264);
|
}
|
||||||
|
|
||||||
|
void PoseidonZRGBController::SendColor
|
||||||
|
(
|
||||||
|
unsigned char profile_to_edit,
|
||||||
|
unsigned char color_channel,
|
||||||
|
unsigned char* color_data
|
||||||
|
)
|
||||||
|
{
|
||||||
|
unsigned char usb_buf[265];
|
||||||
|
|
||||||
|
switch(color_channel)
|
||||||
|
{
|
||||||
|
case POSEIDONZ_COLOR_RED:
|
||||||
|
memset(usb_buf, 0xFF, sizeof(usb_buf));
|
||||||
|
break;
|
||||||
|
case POSEIDONZ_COLOR_GREEN:
|
||||||
|
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||||
|
break;
|
||||||
|
case POSEIDONZ_COLOR_BLUE:
|
||||||
|
memset(usb_buf, 0x11, sizeof(usb_buf));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
usb_buf[0x00] = 0x07;
|
||||||
|
usb_buf[0x01] = 0x07;
|
||||||
|
usb_buf[0x02] = 0x09;
|
||||||
|
usb_buf[0x03] = profile_to_edit;
|
||||||
|
|
||||||
|
memcpy(&usb_buf[0x08], color_data, 104);
|
||||||
|
|
||||||
|
hid_send_feature_report(dev, &usb_buf[1], 264);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PoseidonZRGBController::SendControl
|
||||||
|
(
|
||||||
|
unsigned char profile_to_activate,
|
||||||
|
unsigned char profile_to_edit,
|
||||||
|
unsigned char direction,
|
||||||
|
unsigned char mode,
|
||||||
|
unsigned char brightness
|
||||||
|
)
|
||||||
|
{
|
||||||
|
unsigned char usb_buf[265];
|
||||||
|
|
||||||
|
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||||
|
|
||||||
|
usb_buf[0x00] = 0x07;
|
||||||
|
usb_buf[0x01] = 0x07;
|
||||||
|
usb_buf[0x02] = 0x02;
|
||||||
|
usb_buf[0x03] = profile_to_activate;
|
||||||
|
usb_buf[0x09] = profile_to_edit;
|
||||||
|
usb_buf[0x0B] = direction;
|
||||||
|
usb_buf[0x0D] = mode;
|
||||||
|
usb_buf[0x0E] = brightness;
|
||||||
|
usb_buf[0x11] = 0x08;
|
||||||
|
|
||||||
|
hid_send_feature_report(dev, &usb_buf[1], 264);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,37 @@
|
|||||||
#define POSEIDONZ_RED_GRN_CH 0x01
|
#define POSEIDONZ_RED_GRN_CH 0x01
|
||||||
#define POSEIDONZ_BLU_CH 0x02
|
#define POSEIDONZ_BLU_CH 0x02
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
POSEIDONZ_MODE_STATIC = 0x00,
|
||||||
|
POSEIDONZ_MODE_REACTIVE = 0x01,
|
||||||
|
POSEIDONZ_MODE_ARROW_FLOW = 0x02,
|
||||||
|
POSEIDONZ_MODE_WAVE = 0x03,
|
||||||
|
POSEIDONZ_MODE_RIPPLE = 0x04
|
||||||
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
POSEIDONZ_PROFILE_P1 = 0x01,
|
||||||
|
POSEIDONZ_PROFILE_P2 = 0x02,
|
||||||
|
POSEIDONZ_PROFILE_P3 = 0x03,
|
||||||
|
POSEIDONZ_PROFILE_P4 = 0x04,
|
||||||
|
POSEIDONZ_PROFILE_P5 = 0x05
|
||||||
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
POSEIDONZ_BRIGHTNESS_MIN = 0x00,
|
||||||
|
POSEIDONZ_BRIGHTNESS_MAX = 0x04
|
||||||
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
POSEIDONZ_COLOR_RED = 0x01,
|
||||||
|
POSEIDONZ_COLOR_GREEN = 0x02,
|
||||||
|
POSEIDONZ_COLOR_BLUE = 0x03
|
||||||
|
};
|
||||||
|
|
||||||
class PoseidonZRGBController
|
class PoseidonZRGBController
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -35,4 +66,20 @@ public:
|
|||||||
private:
|
private:
|
||||||
char device_name[32];
|
char device_name[32];
|
||||||
hid_device* dev;
|
hid_device* dev;
|
||||||
|
|
||||||
|
void SendControl
|
||||||
|
(
|
||||||
|
unsigned char profile_to_activate,
|
||||||
|
unsigned char profile_to_edit,
|
||||||
|
unsigned char direction,
|
||||||
|
unsigned char mode,
|
||||||
|
unsigned char brightness
|
||||||
|
);
|
||||||
|
|
||||||
|
void SendColor
|
||||||
|
(
|
||||||
|
unsigned char profile_to_edit,
|
||||||
|
unsigned char color_channel,
|
||||||
|
unsigned char* color_data
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,12 +18,28 @@
|
|||||||
|
|
||||||
void DetectPoseidonZRGBControllers(std::vector<RGBController*>& rgb_controllers)
|
void DetectPoseidonZRGBControllers(std::vector<RGBController*>& rgb_controllers)
|
||||||
{
|
{
|
||||||
|
hid_device_info* info;
|
||||||
hid_device* dev;
|
hid_device* dev;
|
||||||
|
|
||||||
//Look for Thermaltake Poseidon Z RGB Keyboard
|
|
||||||
hid_init();
|
hid_init();
|
||||||
|
|
||||||
dev = hid_open(TT_POSEIDON_Z_RGB_VID, TT_POSEIDON_Z_RGB_PID, 0);
|
info = hid_enumerate(TT_POSEIDON_Z_RGB_VID, TT_POSEIDON_Z_RGB_PID);
|
||||||
|
|
||||||
|
//Look for Thermaltake Poseidon Z RGB Keyboard
|
||||||
|
while(info)
|
||||||
|
{
|
||||||
|
if((info->vendor_id == TT_POSEIDON_Z_RGB_VID)
|
||||||
|
&&(info->product_id == TT_POSEIDON_Z_RGB_PID)
|
||||||
|
&&(info->interface_number == 0))
|
||||||
|
{
|
||||||
|
dev = hid_open_path(info->path);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
info = info->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if( dev )
|
if( dev )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ RGBController_PoseidonZRGB::~RGBController_PoseidonZRGB()
|
|||||||
|
|
||||||
void RGBController_PoseidonZRGB::UpdateLEDs()
|
void RGBController_PoseidonZRGB::UpdateLEDs()
|
||||||
{
|
{
|
||||||
poseidon->SetLEDs(colors);
|
poseidon->SetLEDsDirect(colors);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RGBController_PoseidonZRGB::UpdateZoneLEDs(int zone)
|
void RGBController_PoseidonZRGB::UpdateZoneLEDs(int zone)
|
||||||
|
|||||||
Reference in New Issue
Block a user