Add support for Roccat Horde Aimo Keyboard - Closes #2028
This commit is contained in:
parent
2c8a826c11
commit
0311aa399f
6 changed files with 281 additions and 3 deletions
|
|
@ -0,0 +1,87 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_RoccatHordeAimo.cpp |
|
||||
| |
|
||||
| Generic RGB Interface for OpenRGB |
|
||||
| |
|
||||
| |
|
||||
| Morgan Guimard (morg) 2/24/2022 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "RGBController_RoccatHordeAimo.h"
|
||||
|
||||
RGBController_RoccatHordeAimo::RGBController_RoccatHordeAimo(RoccatHordeAimoController* controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
|
||||
name = "Roccat Horde Aimo";
|
||||
vendor = "Roccat";
|
||||
type = DEVICE_TYPE_KEYBOARD;
|
||||
description = "Roccat Horde Aimo Keyboard";
|
||||
|
||||
mode Direct;
|
||||
Direct.name = "Direct";
|
||||
Direct.value = 0;
|
||||
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
|
||||
Direct.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Direct);
|
||||
|
||||
SetupZones();
|
||||
}
|
||||
|
||||
RGBController_RoccatHordeAimo::~RGBController_RoccatHordeAimo()
|
||||
{
|
||||
delete controller;
|
||||
}
|
||||
|
||||
void RGBController_RoccatHordeAimo::SetupZones()
|
||||
{
|
||||
zone new_zone;
|
||||
new_zone.name = "Keyboard";
|
||||
new_zone.type = ZONE_TYPE_LINEAR;
|
||||
new_zone.leds_min = NUMBER_OF_LEDS;
|
||||
new_zone.leds_max = NUMBER_OF_LEDS;
|
||||
new_zone.leds_count = NUMBER_OF_LEDS;
|
||||
new_zone.matrix_map = NULL;
|
||||
zones.push_back(new_zone);
|
||||
|
||||
for(unsigned int i = 0; i < NUMBER_OF_LEDS; i++)
|
||||
{
|
||||
led new_led;
|
||||
new_led.name = "LED " + std::to_string(i + 1);
|
||||
leds.push_back(new_led);
|
||||
}
|
||||
|
||||
SetupColors();
|
||||
}
|
||||
|
||||
void RGBController_RoccatHordeAimo::ResizeZone(int /*zone*/, int /*new_size*/)
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| This device does not support resizing zones |
|
||||
\*---------------------------------------------------------*/
|
||||
}
|
||||
|
||||
void RGBController_RoccatHordeAimo::DeviceUpdateLEDs()
|
||||
{
|
||||
UpdateZoneLEDs(0);
|
||||
}
|
||||
|
||||
void RGBController_RoccatHordeAimo::UpdateZoneLEDs(int /*zone_idx*/)
|
||||
{
|
||||
controller->SetColors(colors);
|
||||
}
|
||||
|
||||
void RGBController_RoccatHordeAimo::UpdateSingleLED(int /*led_idx*/)
|
||||
{
|
||||
UpdateZoneLEDs(0);
|
||||
}
|
||||
|
||||
void RGBController_RoccatHordeAimo::SetCustomMode()
|
||||
{
|
||||
active_mode = 0;
|
||||
}
|
||||
|
||||
void RGBController_RoccatHordeAimo::DeviceUpdateMode()
|
||||
{
|
||||
|
||||
}
|
||||
33
Controllers/RoccatController/RGBController_RoccatHordeAimo.h
Normal file
33
Controllers/RoccatController/RGBController_RoccatHordeAimo.h
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_RoccatHordeAimo.h |
|
||||
| |
|
||||
| Generic RGB Interface for Roccat Horde |
|
||||
| Aimo Keyboard controller |
|
||||
| |
|
||||
| Morgan Guimard (morg) 2/24/2022 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
#include "RGBController.h"
|
||||
#include "RoccatHordeAimoController.h"
|
||||
|
||||
class RGBController_RoccatHordeAimo : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_RoccatHordeAimo(RoccatHordeAimoController* controller_ptr);
|
||||
~RGBController_RoccatHordeAimo();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void SetCustomMode();
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
RoccatHordeAimoController* controller;
|
||||
};
|
||||
|
|
@ -10,6 +10,7 @@
|
|||
#include "RoccatKoneAimoController.h"
|
||||
#include "RoccatVulcanAimoController.h"
|
||||
#include "RGBController.h"
|
||||
#include "RGBController_RoccatHordeAimo.h"
|
||||
#include "RGBController_RoccatKoneAimo.h"
|
||||
#include "RGBController_RoccatVulcanAimo.h"
|
||||
#include <hidapi/hidapi.h>
|
||||
|
|
@ -19,6 +20,7 @@
|
|||
#define ROCCAT_KONE_AIMO_PID 0x2E27
|
||||
#define ROCCAT_KONE_AIMO_16K_PID 0x2E2C
|
||||
#define ROCCAT_VULCAN_120_AIMO_PID 0x3098
|
||||
#define ROCCAT_HORDE_AIMO_PID 0x303E
|
||||
|
||||
void DetectRoccatMouseControllers(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
|
|
@ -46,6 +48,20 @@ void DetectRoccatKeyboardControllers(hid_device_info* info, const std::string& n
|
|||
}
|
||||
}
|
||||
|
||||
REGISTER_HID_DETECTOR_IPU("Roccat Kone Aimo", DetectRoccatMouseControllers, ROCCAT_VID, ROCCAT_KONE_AIMO_PID, 0, 0x0B, 0);
|
||||
REGISTER_HID_DETECTOR_IPU("Roccat Kone Aimo 16K", DetectRoccatMouseControllers, ROCCAT_VID, ROCCAT_KONE_AIMO_16K_PID, 0, 0x0B, 0);
|
||||
REGISTER_HID_DETECTOR_IP ("Roccat Vulcan 120 Aimo", DetectRoccatKeyboardControllers, ROCCAT_VID, ROCCAT_VULCAN_120_AIMO_PID, 3, 1);
|
||||
void DetectRoccatHordeAimoKeyboardControllers(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
|
||||
if(dev)
|
||||
{
|
||||
RoccatHordeAimoController * controller = new RoccatHordeAimoController(dev, *info);
|
||||
RGBController_RoccatHordeAimo * rgb_controller = new RGBController_RoccatHordeAimo(controller);
|
||||
rgb_controller->name = name;
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_HID_DETECTOR_IPU("Roccat Kone Aimo", DetectRoccatMouseControllers, ROCCAT_VID, ROCCAT_KONE_AIMO_PID, 0, 0x0B, 0);
|
||||
REGISTER_HID_DETECTOR_IPU("Roccat Kone Aimo 16K", DetectRoccatMouseControllers, ROCCAT_VID, ROCCAT_KONE_AIMO_16K_PID, 0, 0x0B, 0);
|
||||
REGISTER_HID_DETECTOR_IP ("Roccat Vulcan 120 Aimo", DetectRoccatKeyboardControllers, ROCCAT_VID, ROCCAT_VULCAN_120_AIMO_PID, 3, 1);
|
||||
REGISTER_HID_DETECTOR_IPU("Roccat Horde Aimo", DetectRoccatHordeAimoKeyboardControllers, ROCCAT_VID, ROCCAT_HORDE_AIMO_PID, 1, 0x0B, 0);
|
||||
|
|
|
|||
99
Controllers/RoccatController/RoccatHordeAimoController.cpp
Normal file
99
Controllers/RoccatController/RoccatHordeAimoController.cpp
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
/*-------------------------------------------------------------------*\
|
||||
| RoccatHordeAimoController.cpp |
|
||||
| |
|
||||
| Driver for Roccat Horde Aimo Keyboard |
|
||||
| |
|
||||
| Morgan Guimard (morg) 2/24/2022 |
|
||||
| |
|
||||
\*-------------------------------------------------------------------*/
|
||||
|
||||
#include "RoccatHordeAimoController.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
RoccatHordeAimoController::RoccatHordeAimoController(hid_device* dev_handle, const hid_device_info& info)
|
||||
{
|
||||
dev = dev_handle;
|
||||
version = "";
|
||||
location = info.path;
|
||||
|
||||
wchar_t serial_string[128];
|
||||
int ret = hid_get_serial_number_string(dev, serial_string, 128);
|
||||
|
||||
if(ret != 0)
|
||||
{
|
||||
serial_number = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
std::wstring return_wstring = serial_string;
|
||||
serial_number = std::string(return_wstring.begin(), return_wstring.end());
|
||||
}
|
||||
|
||||
InitialPacket();
|
||||
}
|
||||
|
||||
RoccatHordeAimoController::~RoccatHordeAimoController()
|
||||
{
|
||||
hid_close(dev);
|
||||
}
|
||||
|
||||
void RoccatHordeAimoController::InitialPacket()
|
||||
{
|
||||
unsigned char usb_buf[8];
|
||||
|
||||
memset(usb_buf, 0x00,8);
|
||||
|
||||
usb_buf[0x00] = 0x13;
|
||||
usb_buf[0x01] = 0x08;
|
||||
usb_buf[0x02] = 0x01;
|
||||
|
||||
hid_send_feature_report(dev, usb_buf, 8);
|
||||
}
|
||||
|
||||
std::string RoccatHordeAimoController::GetFirmwareVersion()
|
||||
{
|
||||
return version;
|
||||
}
|
||||
|
||||
std::string RoccatHordeAimoController::GetSerialString()
|
||||
{
|
||||
return serial_number;
|
||||
}
|
||||
|
||||
std::string RoccatHordeAimoController::GetDeviceLocation()
|
||||
{
|
||||
return("HID: " + location);
|
||||
}
|
||||
|
||||
void RoccatHordeAimoController::SetColors(std::vector<RGBColor> colors)
|
||||
{
|
||||
unsigned char usb_buf[WRITE_PACKET_LENGTH];
|
||||
|
||||
usb_buf[0x00] = REPORT_ID;
|
||||
usb_buf[0x01] = WRITE_PACKET_LENGTH;
|
||||
usb_buf[0x02] = 0xFF;
|
||||
usb_buf[0x03] = 0xFF;
|
||||
|
||||
for(unsigned int i = 0; i < 6; i++)
|
||||
{
|
||||
usb_buf[0x04 + (i * 3)] = RGBGetRValue(colors[i]);
|
||||
usb_buf[0x05 + (i * 3)] = RGBGetGValue(colors[i]);
|
||||
usb_buf[0x06 + (i * 3)] = RGBGetBValue(colors[i]);
|
||||
}
|
||||
|
||||
int crc = 0;
|
||||
|
||||
for(unsigned int i = 0; i < WRITE_PACKET_LENGTH - 2; i++)
|
||||
{
|
||||
crc += usb_buf[i];
|
||||
}
|
||||
|
||||
usb_buf[22] = crc;
|
||||
usb_buf[23] = crc >> 8;
|
||||
|
||||
hid_send_feature_report(dev, usb_buf, WRITE_PACKET_LENGTH);
|
||||
|
||||
unsigned char usb_read_buf[READ_PACKET_LENGTH];
|
||||
hid_get_feature_report(dev, usb_read_buf, READ_PACKET_LENGTH);
|
||||
}
|
||||
39
Controllers/RoccatController/RoccatHordeAimoController.h
Normal file
39
Controllers/RoccatController/RoccatHordeAimoController.h
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
/*-------------------------------------------------------------------*\
|
||||
| RoccatHordeAimoController.h |
|
||||
| |
|
||||
| Driver for Roccat Horde Aimo Keyboard |
|
||||
| |
|
||||
| Morgan Guimard (morg) 2/24/2022 |
|
||||
| |
|
||||
\*-------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include <hidapi/hidapi.h>
|
||||
|
||||
#define WRITE_PACKET_LENGTH 24
|
||||
#define READ_PACKET_LENGTH 3
|
||||
#define REPORT_ID 0x18
|
||||
#define NUMBER_OF_LEDS 6
|
||||
|
||||
class RoccatHordeAimoController
|
||||
{
|
||||
public:
|
||||
RoccatHordeAimoController(hid_device* dev_handle, const hid_device_info& info);
|
||||
~RoccatHordeAimoController();
|
||||
|
||||
std::string GetSerialString();
|
||||
std::string GetDeviceLocation();
|
||||
std::string GetFirmwareVersion();
|
||||
|
||||
void SetColors(std::vector<RGBColor> colors);
|
||||
|
||||
private:
|
||||
hid_device* dev;
|
||||
std::string location;
|
||||
std::string serial_number;
|
||||
std::string version;
|
||||
|
||||
void InitialPacket();
|
||||
};
|
||||
|
|
@ -452,8 +452,10 @@ HEADERS +=
|
|||
Controllers/RazerController/RGBController_RazerKraken.h \
|
||||
Controllers/RedragonController/RedragonM711Controller.h \
|
||||
Controllers/RedragonController/RGBController_RedragonM711.h \
|
||||
Controllers/RoccatController/RGBController_RoccatHordeAimo.h \
|
||||
Controllers/RoccatController/RGBController_RoccatKoneAimo.h \
|
||||
Controllers/RoccatController/RGBController_RoccatVulcanAimo.h \
|
||||
Controllers/RoccatController/RoccatHordeAimoController.h \
|
||||
Controllers/RoccatController/RoccatKoneAimoController.h \
|
||||
Controllers/RoccatController/RoccatVulcanAimoController.h \
|
||||
Controllers/SapphireGPUController/SapphireNitroGlowV1Controller.h \
|
||||
|
|
@ -909,8 +911,10 @@ SOURCES +=
|
|||
Controllers/RedragonController/RedragonM711Controller.cpp \
|
||||
Controllers/RedragonController/RedragonControllerDetect.cpp \
|
||||
Controllers/RedragonController/RGBController_RedragonM711.cpp \
|
||||
Controllers/RoccatController/RGBController_RoccatHordeAimo.cpp \
|
||||
Controllers/RoccatController/RGBController_RoccatKoneAimo.cpp \
|
||||
Controllers/RoccatController/RGBController_RoccatVulcanAimo.cpp \
|
||||
Controllers/RoccatController/RoccatHordeAimoController.cpp \
|
||||
Controllers/RoccatController/RoccatKoneAimoController.cpp \
|
||||
Controllers/RoccatController/RoccatVulcanAimoController.cpp \
|
||||
Controllers/RoccatController/RoccatControllerDetect.cpp \
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue