Convert Thermaltake Riing driver to use hidapi instead of libusb

This commit is contained in:
Adam Honse 2020-05-28 23:16:20 -05:00
parent 316902b2c3
commit 13ce388e9a
3 changed files with 31 additions and 18 deletions

View file

@ -11,7 +11,7 @@
#include <cstring>
ThermaltakeRiingController::ThermaltakeRiingController(libusb_device_handle* dev_handle)
ThermaltakeRiingController::ThermaltakeRiingController(hid_device* dev_handle)
{
dev = dev_handle;
@ -53,7 +53,6 @@ void ThermaltakeRiingController::SetMode(unsigned char mode, unsigned char speed
void ThermaltakeRiingController::SendInit()
{
unsigned char usb_buf[64];
int actual;
/*-----------------------------------------------------*\
| Zero out buffer |
@ -69,8 +68,8 @@ void ThermaltakeRiingController::SendInit()
/*-----------------------------------------------------*\
| Send packet |
\*-----------------------------------------------------*/
libusb_interrupt_transfer(dev, 0x01, usb_buf, 64, &actual, 0);
libusb_interrupt_transfer(dev, 0x81, usb_buf, 64, &actual, 0);
hid_write(dev, usb_buf, 64);
hid_read(dev, usb_buf, 64);
}
void ThermaltakeRiingController::SendRGB
@ -83,7 +82,6 @@ void ThermaltakeRiingController::SendRGB
)
{
unsigned char usb_buf[64];
int actual;
/*-----------------------------------------------------*\
| Zero out buffer |
@ -106,6 +104,6 @@ void ThermaltakeRiingController::SendRGB
/*-----------------------------------------------------*\
| Send packet |
\*-----------------------------------------------------*/
libusb_interrupt_transfer(dev, 0x01, usb_buf, 64, &actual, 0);
libusb_interrupt_transfer(dev, 0x81, usb_buf, 64, &actual, 0);
hid_write(dev, usb_buf, 64);
hid_read(dev, usb_buf, 64);
}

View file

@ -9,7 +9,7 @@
#include "RGBController.h"
#include <vector>
#include <libusb-1.0/libusb.h>
#include <hidapi/hidapi.h>
#pragma once
@ -47,14 +47,14 @@ enum
class ThermaltakeRiingController
{
public:
ThermaltakeRiingController(libusb_device_handle* dev_handle);
ThermaltakeRiingController(hid_device* dev_handle);
~ThermaltakeRiingController();
void SetChannelLEDs(unsigned char channel, RGBColor * colors, unsigned int num_colors);
void SetMode(unsigned char mode, unsigned char speed);
private:
libusb_device_handle* dev;
hid_device* dev;
unsigned char current_mode;
unsigned char current_speed;

View file

@ -2,7 +2,7 @@
#include "RGBController.h"
#include "RGBController_ThermaltakeRiing.h"
#include <vector>
#include <libusb-1.0/libusb.h>
#include <hidapi/hidapi.h>
#define THERMALTAKE_RIING_VID 0x264A
#define THERMALTAKE_RIING_PID_BEGIN 0x1FA5
@ -18,19 +18,34 @@
void DetectThermaltakeRiingControllers(std::vector<RGBController*>& rgb_controllers)
{
libusb_context * ctx;
libusb_init(&ctx);
hid_device_info* info;
hid_device* dev;
hid_init();
for(int pid = THERMALTAKE_RIING_PID_BEGIN; pid <= THERMALTAKE_RIING_PID_END; pid++)
{
dev = NULL;
info = hid_enumerate(THERMALTAKE_RIING_VID, pid);
//Look for Thermaltake Riing device
libusb_device_handle * dev = libusb_open_device_with_vid_pid(ctx, THERMALTAKE_RIING_VID, pid);
if( dev )
while(info)
{
libusb_detach_kernel_driver(dev, 0);
libusb_claim_interface(dev, 0);
if((info->vendor_id == THERMALTAKE_RIING_VID)
&&(info->product_id == pid))
{
dev = hid_open_path(info->path);
break;
}
else
{
info = info->next;
}
}
if(dev)
{
ThermaltakeRiingController* controller = new ThermaltakeRiingController(dev);
RGBController_ThermaltakeRiing* rgb_controller = new RGBController_ThermaltakeRiing(controller);