Poseidon z rework in progress

This commit is contained in:
Adam Honse
2020-01-28 20:27:31 -06:00
parent a4474602d8
commit af7c185e43
3 changed files with 99 additions and 31 deletions
@@ -47,10 +47,10 @@ char* PoseidonZRGBController::GetDeviceName()
void PoseidonZRGBController::SetLEDsDirect(std::vector<RGBColor> colors)
{
unsigned char red_grn_buf[264];
unsigned char blu_buf[264];
unsigned char red_grn_buf[265];
unsigned char blu_buf[265];
for(int i = 0; i < 264; i++)
for(int i = 0; i < 265; i++)
{
red_grn_buf[i] = 0x00;
blu_buf[i] = 0x00;
@@ -91,25 +91,35 @@ void PoseidonZRGBController::SetLEDsDirect(std::vector<RGBColor> colors)
void PoseidonZRGBController::SetLEDs(std::vector<RGBColor> colors)
{
unsigned char buf[264] = {0};
SendControl
(
1,
1,
0,
3,
4
);
#if 0
unsigned char buf[265] = {0};
//Send Red Packet
for(int i = 0; i < 264; i++)
for(int i = 0; i < 265; i++)
{
buf[i] = 0xFF;
}
buf[0] = 0x07;
buf[1] = 0x09;
buf[2] = 0x01;
buf[1] = 0x07;
buf[2] = 0x09;
buf[3] = 0x01;
buf[4] = 0x01;
for(int i = 0; i < 104; i++)
{
buf[keys[i]] = RGBGetRValue(colors[i]);
buf[keys[i] + 1] = RGBGetRValue(colors[i]);
}
hid_send_feature_report(dev, buf, 264);
hid_send_feature_report(dev, buf, 265);
Sleep(10);
@@ -120,54 +130,87 @@ void PoseidonZRGBController::SetLEDs(std::vector<RGBColor> colors)
}
buf[0] = 0x07;
buf[1] = 0x09;
buf[2] = 0x01;
buf[3] = 0x02;
buf[1] = 0x07;
buf[2] = 0x09;
buf[3] = 0x01;
buf[4] = 0x02;
buf[8] = 0xFF;
buf[9] = 0xFF;
for(int i = 0; i < 104; i++)
{
buf[keys[i]] = RGBGetGValue(colors[i]);
buf[keys[i] + 1] = RGBGetGValue(colors[i]);
}
hid_send_feature_report(dev, buf, 264);
hid_send_feature_report(dev, buf, 265);
Sleep(10);
//Send Blue Packet
for(int i = 0; i < 264; i++)
for(int i = 0; i < 265; i++)
{
buf[i] = 0x11;
}
buf[0] = 0x07;
buf[1] = 0x09;
buf[2] = 0x01;
buf[3] = 0x03;
buf[1] = 0x07;
buf[2] = 0x09;
buf[3] = 0x01;
buf[4] = 0x03;
for(int i = 0; i < 104; i++)
{
buf[keys[i]] = RGBGetBValue(colors[i]);
buf[keys[i] + 1] = RGBGetBValue(colors[i]);
}
hid_send_feature_report(dev, buf, 264);
hid_send_feature_report(dev, buf, 265);
Sleep(10);
//Send Update Packet
for(int i = 0; i < 264; i++)
for(int i = 0; i < 265; i++)
{
buf[i] = 0x00;
}
buf[0] = 0x07;
buf[1] = 0x02;
buf[2] = 0x01;
buf[8] = 0x01; //Preset to save
buf[13] = 0x04; //Brightness?
buf[16] = 0x08;
buf[22] = 0x03;
buf[1] = 0x07;
buf[2] = 0x02;
buf[3] = 0x01;
buf[9] = 0x01; //Preset to save
buf[14] = 0x04; //Brightness?
buf[17] = 0x08;
buf[23] = 0x03;
hid_send_feature_report(dev, buf, 264);
hid_send_feature_report(dev, buf, 265);
#endif
}
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;
int bytes_sent = hid_send_feature_report(dev, usb_buf, 265);
const wchar_t * error = hid_error(dev);
bytes_sent++;
}
@@ -35,4 +35,13 @@ public:
private:
char device_name[32];
hid_device* dev;
void PoseidonZRGBController::SendControl
(
unsigned char profile_to_activate,
unsigned char profile_to_edit,
unsigned char direction,
unsigned char mode,
unsigned char brightness
);
};
@@ -18,12 +18,28 @@
void DetectPoseidonZRGBControllers(std::vector<RGBController*>& rgb_controllers)
{
hid_device_info* info;
hid_device* dev;
//Look for Thermaltake Poseidon Z RGB Keyboard
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 == 2))
{
dev = hid_open_path(info->path);
break;
}
else
{
info = info->next;
}
}
if( dev )
{