diff --git a/Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp b/Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp index 1fc75299..505beb6f 100644 --- a/Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp +++ b/Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp @@ -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 diff --git a/Controllers/HyperXMousematController/RGBController_HyperXMousemat.cpp b/Controllers/HyperXMousematController/RGBController_HyperXMousemat.cpp index d2a44a76..ff4e0ca5 100644 --- a/Controllers/HyperXMousematController/RGBController_HyperXMousemat.cpp +++ b/Controllers/HyperXMousematController/RGBController_HyperXMousemat.cpp @@ -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*/) diff --git a/Controllers/HyperXMousematController/RGBController_HyperXMousemat.h b/Controllers/HyperXMousematController/RGBController_HyperXMousemat.h index 64550a1b..3efa17c5 100644 --- a/Controllers/HyperXMousematController/RGBController_HyperXMousemat.h +++ b/Controllers/HyperXMousematController/RGBController_HyperXMousemat.h @@ -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 keepalive_thread_run; std::chrono::time_point last_update_time; + + unsigned int first_zone_leds_count; + unsigned int second_zone_leds_count; };