Add RGBController for Redragon K556 keyboard, only supports custom mode for now

This commit is contained in:
Adam Honse 2020-03-25 23:37:30 -05:00
parent ad85efcb14
commit 68960b7b14
7 changed files with 142 additions and 38 deletions

View file

@ -1,8 +1,8 @@
#include "RedragonK556Controller.h"
#include "RedragonM711Controller.h"
#include "RGBController.h"
#include "RGBController_RedragonK556.h"
#include "RGBController_RedragonM711.h"
#include "RGBController_Dummy.h"
#include <vector>
#include <hidapi/hidapi.h>
@ -88,10 +88,8 @@ void DetectRedragonControllers(std::vector<RGBController*>& rgb_controllers)
case DEVICE_TYPE_KEYBOARD:
{
RedragonK556Controller* controller = new RedragonK556Controller(dev);
RGBController_Dummy* rgb_controller = new RGBController_Dummy();
rgb_controller->name = device_list[device_idx].name;
RGBController_RedragonK556* rgb_controller = new RGBController_RedragonK556(controller);
rgb_controllers.push_back(rgb_controller);
}
break;

View file

@ -5,26 +5,6 @@
RedragonK556Controller::RedragonK556Controller(hid_device* dev_handle)
{
dev = dev_handle;
unsigned char color_data[0x36 * 7];
SendKeyboardBegin();
SendKeyboardMode(20);
for(int i = 0; i < 0x36 * 7; i += 3)
{
color_data[i] = 0x00;
color_data[i+1] = 0xff;
color_data[i+2] = 0x00;
}
SetKeyboardColors
(
color_data,
0x36 * 6
);
SendKeyboardEnd();
}
void RedragonK556Controller::SetKeyboardColors

View file

@ -50,9 +50,6 @@ public:
unsigned char * color_data,
unsigned int size
);
private:
hid_device* dev;
void SendKeyboardBegin();
@ -70,14 +67,6 @@ private:
void SendKeyboardEnd();
void SendMouseApply();
void SendMouseMode
(
unsigned char mode,
unsigned char speed,
unsigned char red,
unsigned char green,
unsigned char blue
);
private:
hid_device* dev;
};

View file

@ -145,6 +145,7 @@ SOURCES += \
RGBController/RGBController_PatriotViper.cpp \
RGBController/RGBController_Polychrome.cpp \
RGBController/RGBController_PoseidonZRGB.cpp \
RGBController/RGBController_RedragonK556.cpp \
RGBController/RGBController_RedragonM711.cpp \
RGBController/RGBController_RGBFusion.cpp \
RGBController/RGBController_RGBFusion2USB.cpp \
@ -212,6 +213,7 @@ HEADERS += \
RGBController/RGBController_PatriotViper.h \
RGBController/RGBController_Polychrome.h \
RGBController/RGBController_PoseidonZRGB.h \
RGBController/RGBController_RedragonK556.h \
RGBController/RGBController_RedragonM711.h \
RGBController/RGBController_RGBFusion.h \
RGBController/RGBController_RGBFusion2USB.h \

View file

@ -0,0 +1,103 @@
/*-----------------------------------------*\
| RGBController_RedragonK556.cpp |
| |
| Generic RGB Interface for Redragon K556 |
| Devarajas RGB Keyboard |
| |
| Adam Honse (CalcProgrammer1) 3/25/2020 |
\*-----------------------------------------*/
#include "RGBController_RedragonK556.h"
RGBController_RedragonK556::RGBController_RedragonK556(RedragonK556Controller* redragon_ptr)
{
redragon = redragon_ptr;
name = "Redragon K556 Devarajas";
type = DEVICE_TYPE_KEYBOARD;
description = "Redragon K556 Device";
mode Custom;
Custom.name = "Custom";
Custom.value = REDRAGON_K556_MODE_CUSTOM;
Custom.flags = MODE_FLAG_HAS_PER_LED_COLOR;
Custom.color_mode = MODE_COLORS_PER_LED;
modes.push_back(Custom);
SetupZones();
}
void RGBController_RedragonK556::SetupZones()
{
zone new_zone;
new_zone.name = "Keyboard";
new_zone.type = ZONE_TYPE_MATRIX;
new_zone.leds_min = 126;
new_zone.leds_max = 126;
new_zone.leds_count = 126;
zones.push_back(new_zone);
for(int led_idx = 0; led_idx < 126; led_idx++)
{
led new_led;
new_led.name = "Keyboard LED ";
new_led.name.append(std::to_string(led_idx));
leds.push_back(new_led);
}
SetupColors();
}
void RGBController_RedragonK556::ResizeZone(int /*zone*/, int /*new_size*/)
{
/*---------------------------------------------------------*\
| This device does not support resizing zones |
\*---------------------------------------------------------*/
}
void RGBController_RedragonK556::UpdateLEDs()
{
unsigned char color_data[7*0x36];
for(int led_idx = 0; led_idx < 126; led_idx++)
{
color_data[(3 * led_idx) + 0] = RGBGetRValue(colors[led_idx]);
color_data[(3 * led_idx) + 1] = RGBGetGValue(colors[led_idx]);
color_data[(3 * led_idx) + 2] = RGBGetBValue(colors[led_idx]);
}
redragon->SendKeyboardBegin();
redragon->SendKeyboardMode(20);
redragon->SetKeyboardColors
(
color_data,
0x36 * 7
);
redragon->SendKeyboardEnd();
}
void RGBController_RedragonK556::UpdateZoneLEDs(int /*zone*/)
{
UpdateLEDs();
}
void RGBController_RedragonK556::UpdateSingleLED(int /*led*/)
{
UpdateLEDs();
}
void RGBController_RedragonK556::SetCustomMode()
{
}
void RGBController_RedragonK556::UpdateMode()
{
UpdateLEDs();
}

View file

@ -0,0 +1,32 @@
/*-----------------------------------------*\
| RGBController_RedragonK556.h |
| |
| Generic RGB Interface for Redragon K556 |
| Devarajas RGB Keyboard |
| |
| Adam Honse (CalcProgrammer1) 3/25/2020 |
\*-----------------------------------------*/
#pragma once
#include "RGBController.h"
#include "RedragonK556Controller.h"
class RGBController_RedragonK556 : public RGBController
{
public:
RGBController_RedragonK556(RedragonK556Controller* redragon_ptr);
void SetupZones();
void ResizeZone(int zone, int new_size);
void UpdateLEDs();
void UpdateZoneLEDs(int zone);
void UpdateSingleLED(int led);
void SetCustomMode();
void UpdateMode();
private:
RedragonK556Controller* redragon;
};

View file

@ -1,5 +1,5 @@
/*-----------------------------------------*\
| RGBController_RedragonM711.h |
| RGBController_RedragonM711.cpp |
| |
| Generic RGB Interface for Redragon M711 |
| Cobra RGB Mouse |