Initial HyperX Pulsefire Surge controller
This commit is contained in:
parent
d26e4da9f1
commit
00cc6978a2
5 changed files with 316 additions and 6 deletions
|
|
@ -54,7 +54,12 @@ void DetectHyperXMouseControllers(std::vector<RGBController*>& rgb_controllers)
|
|||
{
|
||||
if((info->vendor_id == device_list[device_idx].usb_vid)
|
||||
&&(info->product_id == device_list[device_idx].usb_pid)
|
||||
&&(info->interface_number == device_list[device_idx].usb_interface))
|
||||
#ifdef USE_HID_USAGE
|
||||
&&(info->interface_number == device_list[device_idx].usb_interface)
|
||||
&&(info->usage_page == 0xFF01))
|
||||
#else
|
||||
&&(info->interface_number == device_list[device_idx].usb_interface))
|
||||
#endif
|
||||
{
|
||||
dev = hid_open_path(info->path);
|
||||
|
||||
|
|
|
|||
|
|
@ -14,9 +14,274 @@
|
|||
HyperXPulsefireSurgeController::HyperXPulsefireSurgeController(hid_device* dev_handle)
|
||||
{
|
||||
dev = dev_handle;
|
||||
|
||||
SendWakeup();
|
||||
}
|
||||
|
||||
HyperXPulsefireSurgeController::~HyperXPulsefireSurgeController()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------*\
|
||||
| Private packet sending functions. |
|
||||
\*-------------------------------------------------------------------------------------------------*/
|
||||
|
||||
void HyperXPulsefireSurgeController::SendWakeup()
|
||||
{
|
||||
unsigned char buf[264];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(buf, 0x00, sizeof(buf));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Wakeup packet |
|
||||
\*-----------------------------------------------------*/
|
||||
buf[0x00] = 0x07;
|
||||
buf[0x01] = 0x03;
|
||||
buf[0x02] = 0x04;
|
||||
buf[0x03] = 0x01;
|
||||
buf[0x04] = 0x01;
|
||||
buf[0x05] = 0x01;
|
||||
buf[0x06] = 0x03;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_send_feature_report(dev, buf, 264);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(buf, 0x00, sizeof(buf));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Wakeup packet |
|
||||
\*-----------------------------------------------------*/
|
||||
buf[0x00] = 0x07;
|
||||
buf[0x01] = 0x04;
|
||||
buf[0x02] = 0x04;
|
||||
|
||||
buf[0x0B] = 0x02;
|
||||
buf[0x0C] = 0x02;
|
||||
buf[0x0D] = 0x02;
|
||||
buf[0x0E] = 0x0A;
|
||||
buf[0x0F] = 0x0A;
|
||||
buf[0x10] = 0x0A;
|
||||
buf[0x11] = 0x0A;
|
||||
buf[0x12] = 0x16;
|
||||
buf[0x13] = 0x16;
|
||||
buf[0x14] = 0x16;
|
||||
buf[0x15] = 0x28;
|
||||
buf[0x16] = 0x28;
|
||||
buf[0x17] = 0x28;
|
||||
buf[0x18] = 0x28;
|
||||
buf[0x19] = 0x3F;
|
||||
buf[0x1A] = 0x3F;
|
||||
buf[0x1B] = 0x3F;
|
||||
buf[0x1C] = 0x3F;
|
||||
buf[0x1D] = 0x5B;
|
||||
buf[0x1E] = 0x5B;
|
||||
buf[0x1F] = 0x5B;
|
||||
buf[0x20] = 0x5B;
|
||||
buf[0x21] = 0x5B;
|
||||
buf[0x22] = 0x7B;
|
||||
buf[0x23] = 0x7B;
|
||||
buf[0x24] = 0x7B;
|
||||
buf[0x25] = 0xA2;
|
||||
buf[0x26] = 0xA2;
|
||||
buf[0x27] = 0xA2;
|
||||
|
||||
buf[0x68] = 0xFE;
|
||||
buf[0x69] = 0xFE;
|
||||
buf[0x6A] = 0xFE;
|
||||
buf[0x6B] = 0xFE;
|
||||
buf[0x6C] = 0xFE;
|
||||
buf[0x6D] = 0xFE;
|
||||
buf[0x6E] = 0xFE;
|
||||
buf[0x6F] = 0xFE;
|
||||
buf[0x70] = 0xFE;
|
||||
buf[0x71] = 0xFE;
|
||||
buf[0x72] = 0xFE;
|
||||
buf[0x73] = 0xFE;
|
||||
buf[0x74] = 0xFE;
|
||||
buf[0x75] = 0xFE;
|
||||
buf[0x76] = 0xFE;
|
||||
buf[0x77] = 0xFE;
|
||||
buf[0x78] = 0xFE;
|
||||
buf[0x79] = 0xFE;
|
||||
buf[0x7A] = 0xFE;
|
||||
buf[0x7B] = 0xFE;
|
||||
buf[0x7C] = 0xFE;
|
||||
buf[0x7D] = 0xFE;
|
||||
buf[0x7E] = 0xFE;
|
||||
buf[0x7F] = 0xFE;
|
||||
buf[0x80] = 0xFE;
|
||||
buf[0x81] = 0xFE;
|
||||
buf[0x82] = 0xFE;
|
||||
buf[0x83] = 0xFE;
|
||||
buf[0x84] = 0xFE;
|
||||
buf[0x85] = 0xFE;
|
||||
buf[0x86] = 0xFE;
|
||||
buf[0x87] = 0xFE;
|
||||
|
||||
buf[0xC9] = 0xFF;
|
||||
buf[0xCA] = 0x0E;
|
||||
buf[0xCB] = 0xFF;
|
||||
buf[0xCC] = 0xFF;
|
||||
buf[0xCD] = 0x24;
|
||||
buf[0xCE] = 0xD8;
|
||||
buf[0xCF] = 0x8D;
|
||||
buf[0xD0] = 0xFF;
|
||||
buf[0xD1] = 0xFF;
|
||||
buf[0xD2] = 0xFF;
|
||||
buf[0xD4] = 0x0A;
|
||||
buf[0xD5] = 0xFF;
|
||||
buf[0xD6] = 0xFF;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_send_feature_report(dev, buf, 264);
|
||||
}
|
||||
|
||||
void HyperXPulsefireSurgeController::SendData
|
||||
(
|
||||
RGBColor* color_data
|
||||
)
|
||||
{
|
||||
unsigned char buf[264];
|
||||
|
||||
unsigned char dpi_1 = 100;
|
||||
unsigned char dpi_2 = 100;
|
||||
unsigned char dpi_3 = 100;
|
||||
unsigned char effect = 0;
|
||||
unsigned char dpi_r = 255;
|
||||
unsigned char dpi_g = 255;
|
||||
unsigned char dpi_b = 255;
|
||||
|
||||
unsigned char rgb1_r = 255;
|
||||
unsigned char rgb1_g = 255;
|
||||
unsigned char rgb1_b = 255;
|
||||
unsigned char rgb2_r = 255;
|
||||
unsigned char rgb2_g = 255;
|
||||
unsigned char rgb2_b = 255;
|
||||
unsigned char rgb3_r = 255;
|
||||
unsigned char rgb3_g = 255;
|
||||
unsigned char rgb3_b = 255;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(buf, 0x00, sizeof(buf));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Select Profile packet |
|
||||
\*-----------------------------------------------------*/
|
||||
buf[0x00] = 0x07;
|
||||
buf[0x01] = 0x01;
|
||||
buf[0x02] = 0x04;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| DPI settings |
|
||||
\*-----------------------------------------------------*/
|
||||
buf[0x08] = dpi_1;
|
||||
buf[0x09] = dpi_1;
|
||||
buf[0x0A] = dpi_2;
|
||||
buf[0x0B] = dpi_2;
|
||||
buf[0x0C] = dpi_3;
|
||||
buf[0x0D] = dpi_3;
|
||||
|
||||
|
||||
buf[0x0E] = 0x80;
|
||||
buf[0x10] = 0x40;
|
||||
buf[0x12] = 0x01;
|
||||
buf[0x13] = 0x08;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| DPI settings |
|
||||
\*-----------------------------------------------------*/
|
||||
buf[0x14] = dpi_1;
|
||||
buf[0x15] = dpi_1;
|
||||
buf[0x16] = dpi_2;
|
||||
buf[0x17] = dpi_2;
|
||||
buf[0x18] = dpi_3;
|
||||
buf[0x19] = dpi_3;
|
||||
|
||||
buf[0x1A] = 0x80;
|
||||
buf[0x1C] = 0x40;
|
||||
buf[0x1D] = 0x01;
|
||||
buf[0x1E] = 0x08;
|
||||
|
||||
buf[0x20] = 0x01;
|
||||
buf[0x21] = 0x01;
|
||||
buf[0x22] = 0x01;
|
||||
buf[0x25] = 0x02;
|
||||
buf[0x26] = 0xF0;
|
||||
buf[0x29] = 0x02;
|
||||
buf[0x2A] = 0xF1;
|
||||
buf[0x2D] = 0x02;
|
||||
buf[0x2E] = 0xF2;
|
||||
|
||||
buf[0x31] = 0x71;
|
||||
buf[0x32] = 0xF0;
|
||||
buf[0x35] = 0x02;
|
||||
buf[0x36] = 0xF9;
|
||||
buf[0x39] = 0x02;
|
||||
buf[0x3A] = 0xF8;
|
||||
buf[0x3D] = 0x02;
|
||||
buf[0x3E] = 0xF4;
|
||||
buf[0x41] = 0x02;
|
||||
buf[0x42] = 0xF3;
|
||||
|
||||
buf[0x4E] = 0x01;
|
||||
buf[0x50] = 0x01;
|
||||
|
||||
buf[0x51] = effect;
|
||||
buf[0x52] = 0x03;
|
||||
buf[0x53] = 0x03;
|
||||
buf[0x54] = 0x03;
|
||||
|
||||
buf[0x56] = 0x28;
|
||||
buf[0x58] = 0x28;
|
||||
buf[0x5A] = 0x28;
|
||||
buf[0x5C] = 0x28;
|
||||
buf[0x5D] = 0x28;
|
||||
buf[0x60] = 0xF0;
|
||||
buf[0x62] = 0xF0;
|
||||
|
||||
buf[0x64] = dpi_r;
|
||||
buf[0x65] = dpi_g;
|
||||
buf[0x66] = dpi_b;
|
||||
|
||||
buf[0x6D] = rgb1_r;
|
||||
buf[0x70] = rgb1_g;
|
||||
buf[0x73] = rgb1_b;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Copy in direct color data |
|
||||
| Red starts at 0x76 |
|
||||
| Green starts at 0x96 |
|
||||
| Blue starts at 0xB6 |
|
||||
\*-----------------------------------------------------*/
|
||||
for(int color_idx = 0; color_idx < 0x20; color_idx++)
|
||||
{
|
||||
buf[0x76 + color_idx] = RGBGetRValue(color_data[color_idx]);
|
||||
buf[0x96 + color_idx] = RGBGetGValue(color_data[color_idx]);
|
||||
buf[0xB6 + color_idx] = RGBGetBValue(color_data[color_idx]);
|
||||
}
|
||||
|
||||
buf[0xDC] = rgb2_r;
|
||||
buf[0xDF] = rgb2_g;
|
||||
buf[0xE2] = rgb2_b;
|
||||
buf[0xE6] = rgb3_r;
|
||||
buf[0xE9] = rgb3_g;
|
||||
buf[0xEC] = rgb3_b;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_send_feature_report(dev, buf, 264);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,13 @@ public:
|
|||
HyperXPulsefireSurgeController(hid_device* dev_handle);
|
||||
~HyperXPulsefireSurgeController();
|
||||
|
||||
void SendData
|
||||
(
|
||||
RGBColor* color_data
|
||||
);
|
||||
|
||||
private:
|
||||
hid_device* dev;
|
||||
};
|
||||
|
||||
void SendWakeup();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -498,7 +498,7 @@ void DetectRGBControllers(void)
|
|||
DetectMSI3ZoneControllers(rgb_controllers);
|
||||
DetectPoseidonZRGBControllers(rgb_controllers);
|
||||
DetectHyperXKeyboardControllers(rgb_controllers);
|
||||
//DetectHyperXMouseControllers(rgb_controllers);
|
||||
DetectHyperXMouseControllers(rgb_controllers);
|
||||
DetectCorsairPeripheralControllers(rgb_controllers);
|
||||
DetectCorsairLightingNodeControllers(rgb_controllers);
|
||||
DetectThermaltakeRiingControllers(rgb_controllers);
|
||||
|
|
|
|||
|
|
@ -17,6 +17,13 @@ RGBController_HyperXPulsefireSurge::RGBController_HyperXPulsefireSurge(HyperXPul
|
|||
type = DEVICE_TYPE_MOUSE;
|
||||
description = "HyperX Pulsefire Surge Device";
|
||||
|
||||
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);
|
||||
|
||||
SetupZones();
|
||||
};
|
||||
|
||||
|
|
@ -27,6 +34,32 @@ RGBController_HyperXPulsefireSurge::~RGBController_HyperXPulsefireSurge()
|
|||
|
||||
void RGBController_HyperXPulsefireSurge::SetupZones()
|
||||
{
|
||||
zone led_strip;
|
||||
led_strip.name = "LED Strip";
|
||||
led_strip.type = ZONE_TYPE_LINEAR;
|
||||
led_strip.leds_min = 31;
|
||||
led_strip.leds_max = 31;
|
||||
led_strip.leds_count = 31;
|
||||
zones.push_back(led_strip);
|
||||
|
||||
zone logo;
|
||||
logo.name = "Logo";
|
||||
logo.type = ZONE_TYPE_SINGLE;
|
||||
logo.leds_min = 1;
|
||||
logo.leds_max = 1;
|
||||
logo.leds_count = 1;
|
||||
zones.push_back(logo);
|
||||
|
||||
for(unsigned int zone_idx = 0; zone_idx < zones.size(); zone_idx++)
|
||||
{
|
||||
for(unsigned int led_idx = 0; led_idx < zones[zone_idx].leds_count; led_idx++)
|
||||
{
|
||||
led new_led;
|
||||
new_led.name = zones[zone_idx].name + " LED";
|
||||
leds.push_back(new_led);
|
||||
}
|
||||
}
|
||||
|
||||
SetupColors();
|
||||
}
|
||||
|
||||
|
|
@ -39,7 +72,7 @@ void RGBController_HyperXPulsefireSurge::ResizeZone(int /*zone*/, int /*new_size
|
|||
|
||||
void RGBController_HyperXPulsefireSurge::DeviceUpdateLEDs()
|
||||
{
|
||||
|
||||
hyperx->SendData(&colors[0]);
|
||||
}
|
||||
|
||||
void RGBController_HyperXPulsefireSurge::UpdateZoneLEDs(int /*zone*/)
|
||||
|
|
@ -65,4 +98,4 @@ void RGBController_HyperXPulsefireSurge::DeviceUpdateMode()
|
|||
void RGBController_HyperXPulsefireSurge::KeepaliveThread()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue