From a2a613f22d8ddc6d4baa36e023ab809e1cfb2219 Mon Sep 17 00:00:00 2001 From: crashniels Date: Tue, 2 Jun 2020 20:10:05 +0200 Subject: [PATCH] use hidapi instead of libusb --- .../GloriousModelOController.cpp | 6 ++-- .../GloriousModelOController.h | 6 ++-- .../GloriousModelODetect.cpp | 32 +++++++++++++++---- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/Controllers/GloriousModelOController/GloriousModelOController.cpp b/Controllers/GloriousModelOController/GloriousModelOController.cpp index 5f686bf0..838196c0 100644 --- a/Controllers/GloriousModelOController/GloriousModelOController.cpp +++ b/Controllers/GloriousModelOController/GloriousModelOController.cpp @@ -10,7 +10,7 @@ #include "GloriousModelOController.h" #include -GloriousModelOController::GloriousModelOController(libusb_device_handle* dev_handle) +GloriousModelOController::GloriousModelOController(hid_device* dev_handle) { dev = dev_handle; @@ -126,7 +126,7 @@ void GloriousModelOController::SetLEDColor(unsigned char red, unsigned char gree usb_buf[0x28] = green; */ - libusb_control_transfer(dev, 0x21, 0x09, 0x0304, 0x0001, usb_buf, 520, 0); + hid_send_feature_report(dev, usb_buf, sizeof(usb_buf)); } void GloriousModelOController::SetMode(unsigned char mode, unsigned char speed, unsigned char direction) @@ -242,5 +242,5 @@ void GloriousModelOController::SetMode(unsigned char mode, unsigned char speed, break; } - libusb_control_transfer(dev, 0x21, 0x09, 0x0304, 0x0001, usb_buf, 520, 0); + hid_send_feature_report(dev, usb_buf, sizeof(usb_buf)); } diff --git a/Controllers/GloriousModelOController/GloriousModelOController.h b/Controllers/GloriousModelOController/GloriousModelOController.h index f86e70c8..9adb8b20 100644 --- a/Controllers/GloriousModelOController/GloriousModelOController.h +++ b/Controllers/GloriousModelOController/GloriousModelOController.h @@ -9,7 +9,7 @@ #include "RGBController.h" #include -#include +#include #pragma once @@ -50,7 +50,7 @@ enum class GloriousModelOController { public: - GloriousModelOController(libusb_device_handle* dev_handle); + GloriousModelOController(hid_device* dev_handle); ~GloriousModelOController(); std::string GetDeviceName(); @@ -59,7 +59,7 @@ public: void SetLEDColor(unsigned char red, unsigned char green, unsigned char blue); void SetMode(unsigned char mode, unsigned char speed, unsigned char direction); private: - libusb_device_handle* dev; + hid_device* dev; char device_name[32]; unsigned int led_count; diff --git a/Controllers/GloriousModelOController/GloriousModelODetect.cpp b/Controllers/GloriousModelOController/GloriousModelODetect.cpp index 5a928ec6..634f382e 100644 --- a/Controllers/GloriousModelOController/GloriousModelODetect.cpp +++ b/Controllers/GloriousModelOController/GloriousModelODetect.cpp @@ -2,7 +2,7 @@ #include "RGBController.h" #include "RGBController_GloriousModelO.h" #include -#include +#include #define Glorious_Model_O_VID 0x258A #define Glorious_Model_O_PID 0x0036 @@ -17,21 +17,39 @@ void DetectGloriousModelOControllers(std::vector& rgb_controllers) { - libusb_context * ctx; - libusb_init(&ctx); + hid_device_info* info; + hid_device* dev = NULL; + + hid_init(); + + dev = NULL; + + info = hid_enumerate(Glorious_Model_O_VID, Glorious_Model_O_PID); //Look for Glorious Model O - libusb_device_handle * dev = libusb_open_device_with_vid_pid(ctx, Glorious_Model_O_VID, Glorious_Model_O_PID); + while(info) + { + if((info->vendor_id == Glorious_Model_O_VID) + &&(info->product_id == Glorious_Model_O_PID) + &&(info->interface_number == 1)) + { + dev = hid_open_path(info->path); + break; + } + else + { + info = info->next; + } + } 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_controller->name = "Glorious Mouse"; + rgb_controllers.push_back(rgb_controller); } }