NZXT Kraken: Rewrite to use hidapi

This commit is contained in:
Martin Hartl 2020-05-24 18:11:59 +02:00 committed by Adam Honse
parent 02f7f57130
commit b862912fb1
3 changed files with 10 additions and 27 deletions

View file

@ -10,9 +10,6 @@
#include <sstream>
#include <cstring>
const int NZXT_KRAKEN_READ_ENDPOINT = 0x81;
const int NZXT_KRAKEN_WRITE_ENDPOINT = 0x01;
static void SetColor(const std::vector<RGBColor>& colors, unsigned char* color_data)
{
for (std::size_t idx = 0; idx < colors.size(); idx++)
@ -30,7 +27,7 @@ static RGBColor ToLogoColor(RGBColor rgb)
return ToRGBColor(RGBGetGValue(rgb), RGBGetRValue(rgb), RGBGetBValue(rgb));
}
NZXTKrakenController::NZXTKrakenController(libusb_device_handle* dev_handle)
NZXTKrakenController::NZXTKrakenController(hid_device* dev_handle)
{
dev = dev_handle;
@ -42,7 +39,7 @@ NZXTKrakenController::NZXTKrakenController(libusb_device_handle* dev_handle)
NZXTKrakenController::~NZXTKrakenController()
{
hid_close(dev);
}
std::string NZXTKrakenController::GetFirmwareVersion()
@ -52,11 +49,10 @@ std::string NZXTKrakenController::GetFirmwareVersion()
void NZXTKrakenController::UpdateStatus()
{
int actual;
unsigned char usb_buf[64];
memset(usb_buf, 0, sizeof(usb_buf));
libusb_interrupt_transfer(dev, NZXT_KRAKEN_READ_ENDPOINT, usb_buf, sizeof(usb_buf), &actual, 0);
hid_read(dev, usb_buf, sizeof(usb_buf));
/*-----------------------------------------------------*\
| Extract cooler information |
@ -110,7 +106,6 @@ void NZXTKrakenController::SendEffect
int size /* = 0 */
)
{
int actual;
unsigned char usb_buf[65];
/*-----------------------------------------------------*\
@ -154,13 +149,5 @@ void NZXTKrakenController::SendEffect
/*-----------------------------------------------------*\
| Send effect |
\*-----------------------------------------------------*/
libusb_interrupt_transfer
(
dev,
NZXT_KRAKEN_WRITE_ENDPOINT,
usb_buf,
sizeof(usb_buf),
&actual,
0
);
hid_write(dev, usb_buf, sizeof(usb_buf));
}

View file

@ -9,7 +9,7 @@
#include "RGBController.h"
#include <vector>
#include <string>
#include <libusb-1.0/libusb.h>
#include <hidapi/hidapi.h>
enum NZXTKrakenChannel_t
{
@ -46,7 +46,7 @@ enum
class NZXTKrakenController
{
public:
NZXTKrakenController(libusb_device_handle* dev_handle);
NZXTKrakenController(hid_device* dev_handle);
~NZXTKrakenController();
std::string GetFirmwareVersion();
@ -76,7 +76,7 @@ private:
int size = 0
);
libusb_device_handle* dev;
hid_device* dev;
// -- status
std::string firmware_version;

View file

@ -2,7 +2,7 @@
#include "RGBController.h"
#include "RGBController_NZXTKraken.h"
#include <vector>
#include <libusb-1.0/libusb.h>
#include <hidapi/hidapi.h>
#define NZXT_KRAKEN_VID 0x1E71
#define NZXT_KRAKEN_PID 0x170E
@ -17,16 +17,12 @@
void DetectNZXTKrakenControllers(std::vector<RGBController*> &rgb_controllers)
{
libusb_context * ctx;
libusb_init(&ctx);
hid_init();
libusb_device_handle * dev = libusb_open_device_with_vid_pid(ctx, NZXT_KRAKEN_VID, NZXT_KRAKEN_PID);
hid_device* dev = hid_open(NZXT_KRAKEN_VID, NZXT_KRAKEN_PID, nullptr);
if( dev )
{
libusb_detach_kernel_driver(dev, 0);
libusb_claim_interface(dev, 0);
NZXTKrakenController* controller = new NZXTKrakenController(dev);
RGBController_NZXTKraken* rgb_controller = new RGBController_NZXTKraken(controller);