Add HyperX Pulsefire Mat RGB Mouse Pad XL support

This commit is contained in:
morg 2023-04-24 08:55:33 +02:00
parent 9672cc88e4
commit 167acdf769
3 changed files with 50 additions and 29 deletions

View file

@ -11,9 +11,10 @@
\*-----------------------------------------------------*/
#define HYPERX_VID 0x0951
#define HYPERX_FURY_ULTRA_PID 0x1705
#define HYPERX_FURY_A_XL_PID 0x1741
#define HYPERX_VID_2 0x03F0
#define HYPERX_PULSEFIRE_PID 0x0F8D
#define HYPERX_PULSEFIRE_PID 0x0F8D
/******************************************************************************************\
* *
@ -29,13 +30,22 @@ void DetectHyperXMousematControllers(hidapi_wrapper wrapper, hid_device_info* in
if(dev)
{
int first_zone_leds_count = info->product_id == HYPERX_FURY_A_XL_PID ? 2 : 15;
int second_zone_leds_count = info->product_id == HYPERX_FURY_A_XL_PID ? 0 : 5;
HyperXMousematController* controller = new HyperXMousematController(wrapper, dev, info->path);
RGBController_HyperXMousemat* rgb_controller = new RGBController_HyperXMousemat(controller);
RGBController_HyperXMousemat* rgb_controller = new RGBController_HyperXMousemat(controller, first_zone_leds_count, second_zone_leds_count);
rgb_controller->name = name;
ResourceManager::get()->RegisterRGBController(rgb_controller);
}
} /* DetectHyperXMousematControllers() */
REGISTER_HID_WRAPPED_DETECTOR_I("HyperX Fury Ultra", DetectHyperXMousematControllers, HYPERX_VID, HYPERX_FURY_ULTRA_PID, 0);
REGISTER_HID_WRAPPED_DETECTOR_IPU("HyperX Pulsefire Mat", DetectHyperXMousematControllers, HYPERX_VID_2, HYPERX_PULSEFIRE_PID, 1, 0xFF90, 0xFF00);
#ifdef _WIN32
REGISTER_HID_WRAPPED_DETECTOR_IPU("HyperX Pulsefire Mat RGB Mouse Pad XL", DetectHyperXMousematControllers, HYPERX_VID, HYPERX_FURY_A_XL_PID, 1, 0xFF90, 0xFF00);
#else
REGISTER_HID_WRAPPED_DETECTOR_IPU("HyperX Pulsefire Mat RGB Mouse Pad XL", DetectHyperXMousematControllers, HYPERX_VID, HYPERX_FURY_A_XL_PID, 0, 0x0C, 0x01);
#endif

View file

@ -22,9 +22,16 @@ using namespace std::chrono_literals;
@comment
\*-------------------------------------------------------------------*/
RGBController_HyperXMousemat::RGBController_HyperXMousemat(HyperXMousematController* controller_ptr)
RGBController_HyperXMousemat::RGBController_HyperXMousemat
(
HyperXMousematController* controller_ptr,
unsigned int first_zone_leds_count_arg,
unsigned int second_zone_leds_count_arg
)
{
controller = controller_ptr;
controller = controller_ptr;
first_zone_leds_count = first_zone_leds_count_arg;
second_zone_leds_count = second_zone_leds_count_arg;
name = "HyperX Mousemat Device";
vendor = "HyperX";
@ -63,23 +70,30 @@ RGBController_HyperXMousemat::~RGBController_HyperXMousemat()
void RGBController_HyperXMousemat::SetupZones()
{
zone underglow;
underglow.name = "Underglow";
underglow.type = ZONE_TYPE_LINEAR;
underglow.leds_min = 15;
underglow.leds_max = 15;
underglow.leds_count = 15;
underglow.matrix_map = NULL;
zones.push_back(underglow);
if(first_zone_leds_count > 0)
{
zone underglow;
underglow.name = "Underglow";
underglow.type = ZONE_TYPE_LINEAR;
underglow.leds_min = first_zone_leds_count;
underglow.leds_max = first_zone_leds_count;
underglow.leds_count = first_zone_leds_count;
underglow.matrix_map = NULL;
zones.push_back(underglow);
}
if(second_zone_leds_count > 0)
{
zone led_strip;
led_strip.name = "LED Strip";
led_strip.type = ZONE_TYPE_LINEAR;
led_strip.leds_min = second_zone_leds_count;
led_strip.leds_max = second_zone_leds_count;
led_strip.leds_count = second_zone_leds_count;
led_strip.matrix_map = NULL;
zones.push_back(led_strip);
}
zone led_strip;
led_strip.name = "LED Strip";
led_strip.type = ZONE_TYPE_LINEAR;
led_strip.leds_min = 5;
led_strip.leds_max = 5;
led_strip.leds_count = 5;
led_strip.matrix_map = NULL;
zones.push_back(led_strip);
for(unsigned int zone_idx = 0; zone_idx < zones.size(); zone_idx++)
{
@ -113,13 +127,7 @@ void RGBController_HyperXMousemat::DeviceUpdateLEDs()
{
last_update_time = std::chrono::steady_clock::now();
if(active_mode == 0)
{
controller->SendDirect(&colors[0]);
}
else
{
}
controller->SendDirect(&colors[0]);
}
void RGBController_HyperXMousemat::UpdateZoneLEDs(int /*zone*/)

View file

@ -16,7 +16,7 @@
class RGBController_HyperXMousemat : public RGBController
{
public:
RGBController_HyperXMousemat(HyperXMousematController* controller_ptr);
RGBController_HyperXMousemat(HyperXMousematController* controller_ptr, unsigned int first_zone_leds_count_arg, unsigned int second_zone_leds_count_arg);
~RGBController_HyperXMousemat();
void SetupZones();
@ -36,4 +36,7 @@ private:
std::thread* keepalive_thread;
std::atomic<bool> keepalive_thread_run;
std::chrono::time_point<std::chrono::steady_clock> last_update_time;
unsigned int first_zone_leds_count;
unsigned int second_zone_leds_count;
};