diff --git a/Controllers/HyperXMouseController/HyperXMouseControllerDetect.cpp b/Controllers/HyperXMouseController/HyperXMouseControllerDetect.cpp new file mode 100644 index 00000000..cafe70b2 --- /dev/null +++ b/Controllers/HyperXMouseController/HyperXMouseControllerDetect.cpp @@ -0,0 +1,76 @@ +#include "HyperXPulsefireSurgeController.h" +#include "RGBController.h" +#include "RGBController_HyperXPulsefireSurge.h" +#include +#include + +/*-----------------------------------------------------*\ +| HyperX keyboard vendor IDs | +\*-----------------------------------------------------*/ +#define HYPERX_VID 0x0951 +#define HYPERX_PULSEFIRE_SURGE_PID 0x16D3 + +typedef struct +{ + unsigned short usb_vid; + unsigned short usb_pid; + unsigned char usb_interface; + const char * name; +} hyperx_device; + +#define HYPERX_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) + +static const hyperx_device device_list[] = +{ + /*-----------------------------------------------------------------------------------------------------*\ + | Mice | + \*-----------------------------------------------------------------------------------------------------*/ + { HYPERX_VID, HYPERX_PULSEFIRE_SURGE_PID, 1, "HyperX Pulsefire Surge" }, +}; + +/******************************************************************************************\ +* * +* DetectHyperXMouseControllers * +* * +* Tests the USB address to see if a HyperX Mouse controller exists there. * +* * +\******************************************************************************************/ + +void DetectHyperXMouseControllers(std::vector& rgb_controllers) +{ + hid_device_info* info; + hid_device* dev = NULL; + + hid_init(); + + for(std::size_t device_idx = 0; device_idx < HYPERX_NUM_DEVICES; device_idx++) + { + dev = NULL; + + info = hid_enumerate(device_list[device_idx].usb_vid, device_list[device_idx].usb_pid); + + //Look for HyperX RGB Peripheral + while(info) + { + 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)) + { + dev = hid_open_path(info->path); + + if( dev ) + { + HyperXPulsefireSurgeController* controller = new HyperXPulsefireSurgeController(dev); + + RGBController_HyperXPulsefireSurge* rgb_controller = new RGBController_HyperXPulsefireSurge(controller); + + rgb_controller->name = device_list[device_idx].name; + + rgb_controllers.push_back(rgb_controller); + } + } + + info = info->next; + } + } +} diff --git a/Controllers/HyperXMouseController/HyperXPulsefireSurgeController.cpp b/Controllers/HyperXMouseController/HyperXPulsefireSurgeController.cpp new file mode 100644 index 00000000..ab2dbacf --- /dev/null +++ b/Controllers/HyperXMouseController/HyperXPulsefireSurgeController.cpp @@ -0,0 +1,22 @@ +/*-----------------------------------------*\ +| HyperXPulsefireSurgeController.cpp | +| | +| Driver for HyperX Pulsefire Surge | +| lighting controller | +| | +| Adam Honse (CalcProgrammer1) 7/25/2020 | +\*-----------------------------------------*/ + +#include "HyperXPulsefireSurgeController.h" + +#include + +HyperXPulsefireSurgeController::HyperXPulsefireSurgeController(hid_device* dev_handle) +{ + dev = dev_handle; +} + +HyperXPulsefireSurgeController::~HyperXPulsefireSurgeController() +{ + +} \ No newline at end of file diff --git a/Controllers/HyperXMouseController/HyperXPulsefireSurgeController.h b/Controllers/HyperXMouseController/HyperXPulsefireSurgeController.h new file mode 100644 index 00000000..ddb50537 --- /dev/null +++ b/Controllers/HyperXMouseController/HyperXPulsefireSurgeController.h @@ -0,0 +1,25 @@ +/*-----------------------------------------*\ +| HyperXPulsefireSurgeController.h | +| | +| Definitions and types for HyperX | +| Pulsefire Surge lighting controller | +| | +| Adam Honse (CalcProgrammer1) 7/25/2020 | +\*-----------------------------------------*/ + +#include "RGBController.h" + +#include +#include + +#pragma once + +class HyperXPulsefireSurgeController +{ +public: + HyperXPulsefireSurgeController(hid_device* dev_handle); + ~HyperXPulsefireSurgeController(); + +private: + hid_device* dev; +}; \ No newline at end of file diff --git a/OpenRGB.cpp b/OpenRGB.cpp index 06d11d5f..e98bfaa0 100644 --- a/OpenRGB.cpp +++ b/OpenRGB.cpp @@ -442,6 +442,7 @@ void DetectCorsairPeripheralControllers(std::vector& rgb_control void DetectCorsairLightingNodeControllers(std::vector &rgb_controllers); void DetectFaustusControllers(std::vector &rgb_controllers); void DetectHyperXKeyboardControllers(std::vector& rgb_controllers); +void DetectHyperXMouseControllers(std::vector& rgb_controllers); void DetectThermaltakeRiingControllers(std::vector& rgb_controllers); void DetectRGBFusion2USBControllers(std::vector &rgb_controllers); void DetectRedragonControllers(std::vector& rgb_controllers); @@ -495,6 +496,7 @@ void DetectRGBControllers(void) DetectMSI3ZoneControllers(rgb_controllers); DetectPoseidonZRGBControllers(rgb_controllers); DetectHyperXKeyboardControllers(rgb_controllers); + //DetectHyperXMouseControllers(rgb_controllers); DetectCorsairPeripheralControllers(rgb_controllers); DetectCorsairLightingNodeControllers(rgb_controllers); DetectThermaltakeRiingControllers(rgb_controllers); diff --git a/OpenRGB.pro b/OpenRGB.pro index 8a0f1962..196b63c6 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -63,6 +63,7 @@ INCLUDEPATH += \ Controllers/HuePlusController/ \ Controllers/HyperXDRAMController/ \ Controllers/HyperXKeyboardController/ \ + Controllers/HyperXMouseController/ \ Controllers/LEDStripController/ \ Controllers/LogitechController/ \ Controllers/MSI3ZoneController/ \ @@ -128,6 +129,7 @@ HEADERS += \ Controllers/HyperXDRAMController/HyperXDRAMController.h \ Controllers/HyperXKeyboardController/HyperXAlloyOriginsController.h \ Controllers/HyperXKeyboardController/HyperXKeyboardController.h \ + Controllers/HyperXMouseController/HyperXPulsefireSurgeController..h \ Controllers/LEDStripController/LEDStripController.h \ Controllers/LogitechController/LogitechG203Controller.h \ Controllers/LogitechController/LogitechG403Controller.h \ @@ -174,6 +176,7 @@ HEADERS += \ RGBController/RGBController_HyperXAlloyOrigins.h \ RGBController/RGBController_HyperXDRAM.h \ RGBController/RGBController_HyperXKeyboard.h \ + RGBController/RGBController_HyperXPulsefireSurge.h \ RGBController/RGBController_LEDStrip.h \ RGBController/RGBController_LogitechG203.h \ RGBController/RGBController_LogitechG403.h \ @@ -265,6 +268,8 @@ SOURCES += \ Controllers/HyperXKeyboardController/HyperXAlloyOriginsController.cpp \ Controllers/HyperXKeyboardController/HyperXKeyboardController.cpp \ Controllers/HyperXKeyboardController/HyperXKeyboardControllerDetect.cpp \ + Controllers/HyperXMouseController/HyperXMouseControllerDetect.cpp \ + Controllers/HyperXMouseController/HyperXPulsefireSurgeController.cpp \ Controllers/LEDStripController/LEDStripController.cpp \ Controllers/LEDStripController/LEDStripControllerDetect.cpp \ Controllers/LogitechController/LogitechControllerDetect.cpp \ @@ -331,6 +336,7 @@ SOURCES += \ RGBController/RGBController_HyperXAlloyOrigins.cpp \ RGBController/RGBController_HyperXDRAM.cpp \ RGBController/RGBController_HyperXKeyboard.cpp \ + RGBController/RGBController_HyperXPulsefireSurge.cpp \ RGBController/RGBController_E131.cpp \ RGBController/RGBController_LEDStrip.cpp \ RGBController/RGBController_LogitechG203.cpp \ diff --git a/RGBController/RGBController_HyperXPulsefireSurge.cpp b/RGBController/RGBController_HyperXPulsefireSurge.cpp new file mode 100644 index 00000000..2a0e9f66 --- /dev/null +++ b/RGBController/RGBController_HyperXPulsefireSurge.cpp @@ -0,0 +1,68 @@ +/*-----------------------------------------*\ +| RGBController_HyperXPulsefireSurge.cpp | +| | +| Generic RGB Interface for HyperX | +| Pulsefire Surge | +| | +| Adam Honse (CalcProgrammer1) 2/2/2020 | +\*-----------------------------------------*/ + +#include "RGBController_HyperXPulsefireSurge.h" + +RGBController_HyperXPulsefireSurge::RGBController_HyperXPulsefireSurge(HyperXPulsefireSurgeController* hyperx_ptr) +{ + hyperx = hyperx_ptr; + + name = "HyperX Pulsefire Surge Device"; + type = DEVICE_TYPE_MOUSE; + description = "HyperX Pulsefire Surge Device"; + + SetupZones(); +}; + +RGBController_HyperXPulsefireSurge::~RGBController_HyperXPulsefireSurge() +{ + +} + +void RGBController_HyperXPulsefireSurge::SetupZones() +{ + SetupColors(); +} + +void RGBController_HyperXPulsefireSurge::ResizeZone(int /*zone*/, int /*new_size*/) +{ + /*---------------------------------------------------------*\ + | This device does not support resizing zones | + \*---------------------------------------------------------*/ +} + +void RGBController_HyperXPulsefireSurge::DeviceUpdateLEDs() +{ + +} + +void RGBController_HyperXPulsefireSurge::UpdateZoneLEDs(int /*zone*/) +{ + DeviceUpdateLEDs(); +} + +void RGBController_HyperXPulsefireSurge::UpdateSingleLED(int /*led*/) +{ + DeviceUpdateLEDs(); +} + +void RGBController_HyperXPulsefireSurge::SetCustomMode() +{ + active_mode = 0; +} + +void RGBController_HyperXPulsefireSurge::DeviceUpdateMode() +{ + +} + +void RGBController_HyperXPulsefireSurge::KeepaliveThread() +{ + +} \ No newline at end of file diff --git a/RGBController/RGBController_HyperXPulsefireSurge.h b/RGBController/RGBController_HyperXPulsefireSurge.h new file mode 100644 index 00000000..e344c2a6 --- /dev/null +++ b/RGBController/RGBController_HyperXPulsefireSurge.h @@ -0,0 +1,37 @@ +/*-----------------------------------------*\ +| RGBController_HyperXPulsefireSurge.h | +| | +| Generic RGB Interface for HyperX | +| Pulsefire Surge | +| | +| Adam Honse (CalcProgrammer1) 7/25/2020 | +\*-----------------------------------------*/ + +#pragma once +#include + +#include "RGBController.h" +#include "HyperXPulsefireSurgeController.h" + +class RGBController_HyperXPulsefireSurge : public RGBController +{ +public: + RGBController_HyperXPulsefireSurge(HyperXPulsefireSurgeController* hyperx_ptr); + ~RGBController_HyperXPulsefireSurge(); + + void SetupZones(); + + void ResizeZone(int zone, int new_size); + + void DeviceUpdateLEDs(); + void UpdateZoneLEDs(int zone); + void UpdateSingleLED(int led); + + void SetCustomMode(); + void DeviceUpdateMode(); + + void KeepaliveThread(); + +private: + HyperXPulsefireSurgeController* hyperx; +};