use hidapi instead of libusb

This commit is contained in:
crashniels
2020-06-02 20:10:05 +02:00
committed by Adam Honse
parent a34d0f93a3
commit a2a613f22d
3 changed files with 31 additions and 13 deletions

View File

@@ -10,7 +10,7 @@
#include "GloriousModelOController.h"
#include <cstring>
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));
}

View File

@@ -9,7 +9,7 @@
#include "RGBController.h"
#include <vector>
#include <libusb-1.0/libusb.h>
#include <hidapi/hidapi.h>
#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;

View File

@@ -2,7 +2,7 @@
#include "RGBController.h"
#include "RGBController_GloriousModelO.h"
#include <vector>
#include <libusb-1.0/libusb.h>
#include <hidapi/hidapi.h>
#define Glorious_Model_O_VID 0x258A
#define Glorious_Model_O_PID 0x0036
@@ -17,21 +17,39 @@
void DetectGloriousModelOControllers(std::vector<RGBController*>& 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);
}
}