diff --git a/Controllers/GloriousModelOController/GloriousModelOController.cpp b/Controllers/GloriousModelOController/GloriousModelOController.cpp new file mode 100644 index 000000000..234e56e37 --- /dev/null +++ b/Controllers/GloriousModelOController/GloriousModelOController.cpp @@ -0,0 +1,127 @@ +/*-----------------------------------------*\ +| RGBController_GloriousModelO.cpp | +| | +| Definitions and types for Glorious | +| and other Mice | +| | +| Niels Westphal (crashniels) 20/5/2020 | +\*-----------------------------------------*/ + +#include "GloriousModelOController.h" +#include + +GloriousModelOController::GloriousModelOController(libusb_device_handle* dev_handle) +{ + dev = dev_handle; + + strcpy(device_name, "Glorious Mouse"); + led_count = 1; +} + +GloriousModelOController::~GloriousModelOController() +{ + +} + +std::string GloriousModelOController::GetDeviceName() +{ + return(device_name); +} + + + +unsigned int GloriousModelOController::GetLEDCount() +{ + return(led_count); +} + +void GloriousModelOController::SetLEDColor(unsigned char red, unsigned char green, unsigned char blue) +{ + unsigned char usb_buf[520] = + { + 0x04, 0x11, 0x00, 0x7b, + 0x00, 0x00, 0x00, 0x00, 0x64, 0x06, 0x04, 0x24, + 0xf0, 0x03, 0x07, 0x0f, 0x1f, 0x31, 0x63, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x41, 0x01, 0x40, 0xff, 0xff, 0xff, //RGB, Brightness, Mode 0x42 - 4 => + 0x42, 0x07, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x43, + 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x42, 0x02, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + }; + + //usb_buf[0x37] = GLORIOUS_MODE_STATIC; + //usb_buf[0x38] = 0x40; + usb_buf[0x39] = red; + usb_buf[0x3A] = blue; + usb_buf[0x3B] = green; + + libusb_control_transfer(dev, 0x21, 0x09, 0x0304, 0x0001, usb_buf, 520, 0); +} + +void GloriousModelOController::SetMode(unsigned char /*mode*/) +{ + //unsigned char usb_buf[520]; + + //usb_buf[0x37] = mode; + + + //libusb_control_transfer(dev, 0x21, 0x09, 0x0304, 0x0001, usb_buf, 520, 0); +} diff --git a/Controllers/GloriousModelOController/GloriousModelOController.h b/Controllers/GloriousModelOController/GloriousModelOController.h new file mode 100644 index 000000000..f718e979e --- /dev/null +++ b/Controllers/GloriousModelOController/GloriousModelOController.h @@ -0,0 +1,37 @@ +/*-----------------------------------------*\ +| GloriousModelOController.h | +| | +| Definitions and types for Glorious | +| and other Mice | +| | +| Niels Westphal (crashniels) 20/5/2020 | +\*-----------------------------------------*/ + +#include "RGBController.h" +#include +#include + +#pragma once + +enum +{ + GLORIOUS_MODE_STATIC = 0x01, +}; + +class GloriousModelOController +{ +public: + GloriousModelOController(libusb_device_handle* dev_handle); + ~GloriousModelOController(); + + std::string GetDeviceName(); + unsigned int GetLEDCount(); + + void SetLEDColor(unsigned char red, unsigned char green, unsigned char blue); + void SetMode(unsigned char mode); +private: + libusb_device_handle* dev; + + char device_name[32]; + unsigned int led_count; +}; diff --git a/Controllers/GloriousModelOController/GloriousModelODetect.cpp b/Controllers/GloriousModelOController/GloriousModelODetect.cpp new file mode 100644 index 000000000..5a928ec65 --- /dev/null +++ b/Controllers/GloriousModelOController/GloriousModelODetect.cpp @@ -0,0 +1,37 @@ +#include "GloriousModelOController.h" +#include "RGBController.h" +#include "RGBController_GloriousModelO.h" +#include +#include + +#define Glorious_Model_O_VID 0x258A +#define Glorious_Model_O_PID 0x0036 + +/******************************************************************************************\ +* * +* DetectGloriousModelController * +* * +* Tests the USB address to see if a Glorious Model O controller exists there. * +* * +\******************************************************************************************/ + +void DetectGloriousModelOControllers(std::vector& rgb_controllers) +{ + libusb_context * ctx; + libusb_init(&ctx); + + //Look for Glorious Model O + libusb_device_handle * dev = libusb_open_device_with_vid_pid(ctx, Glorious_Model_O_VID, Glorious_Model_O_PID); + + if( dev ) + { + libusb_detach_kernel_driver(dev, 1); + libusb_claim_interface(dev, 1); + + GloriousModelOController* controller = new GloriousModelOController(dev); + + RGBController_GloriousModelO* rgb_controller = new RGBController_GloriousModelO(controller); + + rgb_controllers.push_back(rgb_controller); + } +} diff --git a/OpenRGB.cpp b/OpenRGB.cpp index c3cd8d670..9eb6ba908 100644 --- a/OpenRGB.cpp +++ b/OpenRGB.cpp @@ -315,6 +315,7 @@ void DetectRedragonControllers(std::vector& rgb_controllers); void DetectLogitechControllers(std::vector& rgb_controllers); void DetectNZXTKrakenControllers(std::vector& rgb_controllers); void DetectSteelSeriesControllers(std::vector& rgb_controllers); +void DetectGloriousModelOControllers(std::vector& rgb_controllers); /******************************************************************************************\ * * @@ -364,6 +365,7 @@ void DetectRGBControllers(void) DetectLogitechControllers(rgb_controllers); DetectNZXTKrakenControllers(rgb_controllers); DetectSteelSeriesControllers(rgb_controllers); + DetectGloriousModelOControllers(rgb_controllers); DetectE131Controllers(rgb_controllers); diff --git a/OpenRGB.pro b/OpenRGB.pro index 60ddafd86..2e538dfe1 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -58,6 +58,7 @@ INCLUDEPATH += \ Controllers/CorsairVengeanceController/ \ Controllers/CorsairVengeanceProController/ \ Controllers/CrucialController/ \ + Controllers/GloriousModelOController/ \ Controllers/Hue2Controller/ \ Controllers/HuePlusController/ \ Controllers/HyperXDRAMController/ \ @@ -115,6 +116,7 @@ HEADERS += \ Controllers/CorsairVengeanceController/CorsairVengeanceController.h \ Controllers/CorsairVengeanceProController/CorsairVengeanceProController.h \ Controllers/CrucialController/CrucialController.h \ + Controllers/GloriousModelOController/GloriousModelOController.h \ Controllers/Hue2Controller/Hue2Controller.h \ Controllers/HuePlusController/HuePlusController.h \ Controllers/HyperXDRAMController/HyperXDRAMController.h \ @@ -150,6 +152,7 @@ HEADERS += \ RGBController/RGBController_Crucial.h \ RGBController/RGBController_Dummy.h \ RGBController/RGBController_E131.h \ + RGBController/RGBController_GloriousModelO.h \ RGBController/RGBController_Hue2.h \ RGBController/RGBController_HuePlus.h \ RGBController/RGBController_HyperXDRAM.h \ @@ -221,6 +224,8 @@ SOURCES += \ Controllers/CorsairVengeanceProController/CorsairVengeanceProControllerDetect.cpp \ Controllers/CrucialController/CrucialController.cpp \ Controllers/CrucialController/CrucialControllerDetect.cpp \ + Controllers/GloriousModelOController/GloriousModelOController.cpp \ + Controllers/GloriousModelOController/GloriousModelOControllerDetect.cpp \ Controllers/Hue2Controller/Hue2Controller.cpp \ Controllers/Hue2Controller/Hue2ControllerDetect.cpp \ Controllers/HuePlusController/HuePlusController.cpp \ @@ -277,6 +282,7 @@ SOURCES += \ RGBController/RGBController_CorsairVengeancePro.cpp \ RGBController/RGBController_Crucial.cpp \ RGBController/RGBController_Dummy.cpp \ + RGBController/RGBController_GloriousModelO.cpp \ RGBController/RGBController_Hue2.cpp \ RGBController/RGBController_HuePlus.cpp \ RGBController/RGBController_HyperXDRAM.cpp \ diff --git a/RGBController/RGBController_GloriousModelO.cpp b/RGBController/RGBController_GloriousModelO.cpp new file mode 100644 index 000000000..4bb1a12a5 --- /dev/null +++ b/RGBController/RGBController_GloriousModelO.cpp @@ -0,0 +1,93 @@ +/*-----------------------------------------*\ +| RGBController_GloriousModelO.cpp | +| | +| Definitions and types for Glorious | +| and other Mice | +| | +| Niels Westphal (crashniels) 20/5/2020 | +\*-----------------------------------------*/ + +#include "RGBController_GloriousModelO.h" + +RGBController_GloriousModelO::RGBController_GloriousModelO(GloriousModelOController* gmo_ptr) +{ + gmo = gmo_ptr; + + name = gmo->GetDeviceName(); + type = DEVICE_TYPE_MOUSE; + description = "Glorious Device"; + + mode Static; + Static.name = "Static"; + Static.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Static.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Static); + + SetupZones(); +} + +void RGBController_GloriousModelO::SetupZones() +{ + /*---------------------------------------------------------*\ + | Create a single zone | + \*---------------------------------------------------------*/ + zone new_zone; + new_zone.name = "Glorious Zone"; + new_zone.type = ZONE_TYPE_SINGLE; + new_zone.leds_min = gmo->GetLEDCount(); + new_zone.leds_max = gmo->GetLEDCount(); + new_zone.leds_count = gmo->GetLEDCount(); + new_zone.matrix_map = NULL; + zones.push_back(new_zone); + + /*---------------------------------------------------------*\ + | Set up LEDs | + \*---------------------------------------------------------*/ + for(std::size_t led_idx = 0; led_idx < zones[0].leds_count; led_idx++) + { + led* new_led = new led(); + new_led->name = "Glorious LED"; + leds.push_back(*new_led); + } + + SetupColors(); +} + +void RGBController_GloriousModelO::ResizeZone(int /*zone*/, int /*new_size*/) +{ + /*---------------------------------------------------------*\ + | This device does not support resizing zones | + \*---------------------------------------------------------*/ +} + +void RGBController_GloriousModelO::DeviceUpdateLEDs() +{ + RGBColor color = colors[0]; + unsigned char red = RGBGetRValue(color); + unsigned char grn = RGBGetGValue(color); + unsigned char blu = RGBGetBValue(color); + + gmo->SetLEDColor(red, grn, blu); +} + +void RGBController_GloriousModelO::UpdateZoneLEDs(int /*zone*/) +{ + DeviceUpdateLEDs(); +} + +void RGBController_GloriousModelO::UpdateSingleLED(int /*led*/) +{ + DeviceUpdateLEDs(); +} +void RGBController_GloriousModelO::SetCustomMode() +{ + active_mode = 0; +} + +void RGBController_GloriousModelO::UpdateMode() +{ + gmo->SetMode(modes[active_mode].value); +} + + + diff --git a/RGBController/RGBController_GloriousModelO.h b/RGBController/RGBController_GloriousModelO.h new file mode 100644 index 000000000..2bdb9ad31 --- /dev/null +++ b/RGBController/RGBController_GloriousModelO.h @@ -0,0 +1,32 @@ +/*-----------------------------------------*\ +| RGBController_GloriousModelO.h | +| | +| Definitions and types for Glorious | +| and other Mice | +| | +| Niels Westphal (crashniels) 20/5/2020 | +\*-----------------------------------------*/ + +#pragma once +#include "RGBController.h" +#include "GloriousModelOController.h" + +class RGBController_GloriousModelO : public RGBController +{ +public: + RGBController_GloriousModelO(GloriousModelOController* gmo_ptr); + + void SetupZones(); + + void ResizeZone(int zone, int new_size); + + void DeviceUpdateLEDs(); + void UpdateZoneLEDs(int zone); + void UpdateSingleLED(int led); + + void SetCustomMode(); + void UpdateMode(); + +private: + GloriousModelOController* gmo; +};