Updating libcmmk to call hid_write() with prepended 0x00 resolving #1673
This commit is contained in:
parent
02ca3f32a0
commit
4f24250772
5 changed files with 220 additions and 181 deletions
|
|
@ -114,16 +114,19 @@ ACTION=="add", SUBSYSTEM=="platform", KERNEL=="faustus", RUN+="/bin/chmod a+w /s
|
|||
# Masterkeys SK650 #
|
||||
#---------------------------------------------------------------#
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0101", TAG+="uaccess" #MM711
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0109", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0105", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="1011", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="1000", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="014d", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0047", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="003c", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0067", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0089", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="008d", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0109", TAG+="uaccess" #MP750 XL
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0105", TAG+="uaccess" #MP750 M
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="1011", TAG+="uaccess" #ARGB
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="1000", TAG+="uaccess" #Small ARGB
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="004f", TAG+="uaccess" #RGB
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="014d", TAG+="uaccess" #Radeon 6000
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="003b", TAG+="uaccess" #Masterkeys Pro L
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0047", TAG+="uaccess" #Masterkeys Pro L White
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="003c", TAG+="uaccess" #Masterkeys Pro S
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0067", TAG+="uaccess" #Masterkeys MK750
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0089", TAG+="uaccess" #Masterkeys SK630
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="008d", TAG+="uaccess" #Masterkeys SK650
|
||||
|
||||
|
||||
#---------------------------------------------------------------#
|
||||
# Corsair Hydro Series Devices #
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
#define COOLERMASTER_SMALL_ARGB_PID 0x1000
|
||||
#define COOLERMASTER_RGB_PID 0x004F
|
||||
#define COOLERMASTER_RADEON_6000_PID 0x014D
|
||||
#define COOLERMASTER_MASTERKEYS_PRO_L_PID CMMK_USB_MASTERKEYS_MK750
|
||||
#define COOLERMASTER_MASTERKEYS_PRO_L_PID CMMK_USB_MASTERKEYS_PRO_L
|
||||
#define COOLERMASTER_MASTERKEYS_PRO_L_WHITE_PID CMMK_USB_MASTERKEYS_PRO_L_WHITE
|
||||
#define COOLERMASTER_MASTERKEYS_PRO_S_PID CMMK_USB_MASTERKEYS_PRO_S
|
||||
#define COOLERMASTER_MASTERKEYS_MK750_PID CMMK_USB_MASTERKEYS_MK750
|
||||
|
|
|
|||
|
|
@ -14,141 +14,157 @@
|
|||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
#define CMMK_SPEED_MIN CMMK_SPEED0
|
||||
#define CMMK_SPEED_MID CMMK_SPEED2
|
||||
#define CMMK_SPEED_MAX CMMK_SPEED4
|
||||
#define CMMK_MODE_FIRMWARE 0xFF
|
||||
#define CMMK_MODE_MANUAL 0x7F
|
||||
#define CMMK_SPEED_MIN CMMK_SPEED0
|
||||
#define CMMK_SPEED_MID CMMK_SPEED2
|
||||
#define CMMK_SPEED_MAX CMMK_SPEED4
|
||||
#define CMMK_MODE_FIRMWARE 0xFF
|
||||
#define CMMK_MODE_MANUAL 0x7F
|
||||
|
||||
RGBController_CMMKController::RGBController_CMMKController(CMMKController* cmmk_ctrl)
|
||||
{
|
||||
cmmk = cmmk_ctrl;
|
||||
cmmk = cmmk_ctrl;
|
||||
|
||||
name = cmmk->GetDeviceName();
|
||||
type = DEVICE_TYPE_KEYBOARD;
|
||||
description = "Cooler Master MasterKeys Device";
|
||||
version = cmmk->GetFirmwareVersion();
|
||||
serial = "";
|
||||
location = cmmk->GetLocation();
|
||||
name = cmmk->GetDeviceName();
|
||||
type = DEVICE_TYPE_KEYBOARD;
|
||||
description = "Cooler Master MasterKeys Device";
|
||||
version = cmmk->GetFirmwareVersion();
|
||||
serial = "";
|
||||
location = cmmk->GetLocation();
|
||||
|
||||
mode Direct;
|
||||
Direct.name = "Direct";
|
||||
Direct.value = CMMK_MODE_MANUAL;
|
||||
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
|
||||
Direct.color_mode = MODE_COLORS_PER_LED;
|
||||
Direct.name = "Direct";
|
||||
Direct.value = CMMK_MODE_MANUAL;
|
||||
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
|
||||
Direct.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Direct);
|
||||
|
||||
mode Static;
|
||||
Static.name = "Static";
|
||||
Static.value = CMMK_EFFECT_FULLY_LIT;
|
||||
Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
|
||||
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Static.colors_min = 1;
|
||||
Static.colors_max = 1;
|
||||
Static.name = "Static";
|
||||
Static.value = CMMK_EFFECT_FULLY_LIT;
|
||||
Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
|
||||
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Static.colors_min = 1;
|
||||
Static.colors_max = 1;
|
||||
Static.colors.resize(1);
|
||||
modes.push_back(Static);
|
||||
|
||||
mode Breathing;
|
||||
Breathing.name = "Breathing";
|
||||
Breathing.value = CMMK_EFFECT_BREATHE;
|
||||
Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Breathing.speed_min = 0x20;
|
||||
Breathing.speed_max = 0x20;
|
||||
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Breathing.colors_min = 1;
|
||||
Breathing.colors_max = 1;
|
||||
Breathing.name = "Breathing";
|
||||
Breathing.value = CMMK_EFFECT_BREATHE;
|
||||
Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Breathing.speed_min = CMMK_SPEED_MIN;
|
||||
Breathing.speed_max = CMMK_SPEED_MAX;
|
||||
Breathing.speed = CMMK_SPEED_MID;
|
||||
Breathing.colors_min = 1;
|
||||
Breathing.colors_max = 1;
|
||||
Breathing.colors.resize(1);
|
||||
modes.push_back(Breathing);
|
||||
|
||||
mode Cycle;
|
||||
Cycle.name = "Spectrum Cycle";
|
||||
Cycle.value = CMMK_EFFECT_CYCLE;
|
||||
Cycle.flags = MODE_FLAG_HAS_SPEED;
|
||||
Cycle.speed_min = CMMK_SPEED_MIN;
|
||||
Cycle.speed_max = CMMK_SPEED_MAX;
|
||||
Cycle.color_mode = MODE_COLORS_NONE;
|
||||
Cycle.name = "Spectrum Cycle";
|
||||
Cycle.value = CMMK_EFFECT_CYCLE;
|
||||
Cycle.flags = MODE_FLAG_HAS_SPEED;
|
||||
Cycle.color_mode = MODE_COLORS_NONE;
|
||||
Cycle.speed_min = 2 * CMMK_SPEED_MIN; //Spectrum Cycle uses a unique speed range
|
||||
Cycle.speed_max = 2 * CMMK_SPEED_MAX;
|
||||
Cycle.speed = 2 * CMMK_SPEED_MID;
|
||||
modes.push_back(Cycle);
|
||||
|
||||
mode Reactive;
|
||||
Reactive.name = "Reactive";
|
||||
Reactive.value = CMMK_EFFECT_SINGLE;
|
||||
Reactive.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Reactive.speed_min = CMMK_SPEED_MIN;
|
||||
Reactive.speed_max = CMMK_SPEED_MAX;
|
||||
Reactive.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Reactive.colors_min = 2;
|
||||
Reactive.colors_max = 2;
|
||||
Reactive.name = "Reactive";
|
||||
Reactive.value = CMMK_EFFECT_SINGLE;
|
||||
Reactive.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Reactive.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Reactive.speed_min = CMMK_SPEED_MIN;
|
||||
Reactive.speed_max = CMMK_SPEED_MAX;
|
||||
Reactive.speed = CMMK_SPEED_MID;
|
||||
Reactive.colors_min = 2;
|
||||
Reactive.colors_max = 2;
|
||||
Reactive.colors.resize(2);
|
||||
modes.push_back(Reactive);
|
||||
|
||||
mode Wave;
|
||||
Wave.name = "Rainbow Wave";
|
||||
Wave.value = CMMK_EFFECT_WAVE;
|
||||
Wave.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD;
|
||||
Wave.speed_min = CMMK_SPEED_MIN;
|
||||
Wave.speed_max = CMMK_SPEED_MAX;
|
||||
Wave.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Wave.colors_min = 1;
|
||||
Wave.colors_max = 1;
|
||||
Wave.name = "Rainbow Wave";
|
||||
Wave.value = CMMK_EFFECT_WAVE;
|
||||
Wave.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD;
|
||||
Wave.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Wave.speed_min = CMMK_SPEED_MIN;
|
||||
Wave.speed_max = CMMK_SPEED_MAX;
|
||||
Wave.speed = CMMK_SPEED_MID;
|
||||
Wave.direction = MODE_DIRECTION_LEFT;
|
||||
Wave.colors_min = 1;
|
||||
Wave.colors_max = 1;
|
||||
Wave.colors.resize(1);
|
||||
modes.push_back(Wave);
|
||||
|
||||
mode Ripple;
|
||||
Ripple.name = "Ripple Effect";
|
||||
Ripple.value = CMMK_EFFECT_RIPPLE;
|
||||
Ripple.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Ripple.speed_min = CMMK_SPEED_MIN;
|
||||
Ripple.speed_max = CMMK_SPEED_MAX;
|
||||
Ripple.colors_min = 2;
|
||||
Ripple.colors_max = 2;
|
||||
Ripple.name = "Ripple Effect";
|
||||
Ripple.value = CMMK_EFFECT_RIPPLE;
|
||||
Ripple.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Ripple.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Ripple.speed_min = CMMK_SPEED_MIN;
|
||||
Ripple.speed_max = CMMK_SPEED_MAX;
|
||||
Ripple.speed = CMMK_SPEED_MID;
|
||||
Ripple.colors_min = 2;
|
||||
Ripple.colors_max = 2;
|
||||
Ripple.colors.resize(2);
|
||||
modes.push_back(Ripple);
|
||||
|
||||
mode Cross;
|
||||
Cross.name = "Cross";
|
||||
Cross.value = CMMK_EFFECT_CROSS;
|
||||
Cross.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Cross.speed_min = CMMK_SPEED_MIN;
|
||||
Cross.speed_max = CMMK_SPEED_MAX;
|
||||
Cross.colors_min = 2;
|
||||
Cross.colors_max = 2;
|
||||
Cross.name = "Cross";
|
||||
Cross.value = CMMK_EFFECT_CROSS;
|
||||
Cross.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Cross.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Cross.speed_min = CMMK_SPEED_MIN;
|
||||
Cross.speed_max = CMMK_SPEED_MAX;
|
||||
Cross.speed = CMMK_SPEED_MID;
|
||||
Cross.colors_min = 2;
|
||||
Cross.colors_max = 2;
|
||||
Cross.colors.resize(2);
|
||||
modes.push_back(Cross);
|
||||
|
||||
mode Raindrops;
|
||||
Raindrops.name = "Raindrops";
|
||||
Raindrops.value = CMMK_EFFECT_RAINDROPS;
|
||||
Raindrops.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Raindrops.speed_min = CMMK_SPEED_MIN;
|
||||
Raindrops.speed_max = CMMK_SPEED_MAX;
|
||||
Raindrops.colors_min = 2;
|
||||
Raindrops.colors_max = 2;
|
||||
Raindrops.name = "Raindrops";
|
||||
Raindrops.value = CMMK_EFFECT_RAINDROPS;
|
||||
Raindrops.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Raindrops.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Raindrops.speed_min = CMMK_SPEED_MIN;
|
||||
Raindrops.speed_max = CMMK_SPEED_MAX;
|
||||
Raindrops.speed = CMMK_SPEED_MID;
|
||||
Raindrops.colors_min = 2;
|
||||
Raindrops.colors_max = 2;
|
||||
Raindrops.colors.resize(2);
|
||||
modes.push_back(Raindrops);
|
||||
|
||||
mode Stars;
|
||||
Stars.name = "Starfield";
|
||||
Stars.value = CMMK_EFFECT_STARS;
|
||||
Stars.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Stars.speed_min = CMMK_SPEED_MIN;
|
||||
Stars.speed_max = CMMK_SPEED_MAX;
|
||||
Stars.colors_min = 2;
|
||||
Stars.name = "Starfield";
|
||||
Stars.value = CMMK_EFFECT_STARS;
|
||||
Stars.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Stars.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Stars.speed_min = CMMK_SPEED_MIN;
|
||||
Stars.speed_max = CMMK_SPEED_MAX;
|
||||
Stars.speed = CMMK_SPEED_MID;
|
||||
Stars.colors_min = 2;
|
||||
Stars.colors_max = 2;
|
||||
Stars.colors.resize(2);
|
||||
modes.push_back(Stars);
|
||||
|
||||
mode Snake;
|
||||
Snake.name = "Snake";
|
||||
Snake.value = CMMK_EFFECT_SNAKE;
|
||||
Snake.flags = MODE_FLAG_HAS_SPEED;
|
||||
Snake.speed_min = CMMK_SPEED_MIN;
|
||||
Snake.speed_max = CMMK_SPEED_MAX;
|
||||
Snake.name = "Snake";
|
||||
Snake.value = CMMK_EFFECT_SNAKE;
|
||||
Snake.flags = MODE_FLAG_HAS_SPEED;
|
||||
Snake.color_mode = MODE_COLORS_NONE;
|
||||
Snake.speed_min = CMMK_SPEED_MIN;
|
||||
Snake.speed_max = CMMK_SPEED_MAX;
|
||||
Snake.speed = CMMK_SPEED_MID;
|
||||
modes.push_back(Snake);
|
||||
|
||||
mode FirmwareControl;
|
||||
FirmwareControl.name = "Firmware Controlled";
|
||||
FirmwareControl.value = 0xFF;
|
||||
FirmwareControl.flags = 0;
|
||||
FirmwareControl.name = "Firmware Controlled";
|
||||
FirmwareControl.value = 0xFF;
|
||||
FirmwareControl.flags = 0;
|
||||
FirmwareControl.color_mode = MODE_COLORS_NONE;
|
||||
modes.push_back(FirmwareControl);
|
||||
|
||||
SetupZones();
|
||||
|
|
|
|||
|
|
@ -25,10 +25,13 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define BYTE_SIZE 8
|
||||
|
||||
#define CMMK_ROWS_MAX 7
|
||||
#define CMMK_COLS_MAX 22
|
||||
|
||||
#define CMMK_KEYLIST_SIZE 256
|
||||
#define CMMK_BUFFER_SIZE 65
|
||||
|
||||
/*
|
||||
* If we have C99 support (which we do, because libusb-1.0 requires it...), define some handy
|
||||
|
|
@ -65,7 +68,7 @@ enum cmmk_product {
|
|||
CMMK_USB_MASTERKEYS_PRO_L = 0x003b,
|
||||
CMMK_USB_MASTERKEYS_PRO_L_WHITE = 0x0047,
|
||||
CMMK_USB_MASTERKEYS_PRO_S = 0x003c,
|
||||
CMMK_USB_MASTERKEYS_MK750 = 0x0067,
|
||||
CMMK_USB_MASTERKEYS_MK750 = 0x0067,
|
||||
CMMK_USB_MASTERKEYS_SK630 = 0x0089,
|
||||
CMMK_USB_MASTERKEYS_SK650 = 0x008d,
|
||||
};
|
||||
|
|
|
|||
181
dependencies/libcmmk/src/libcmmk.c
vendored
181
dependencies/libcmmk/src/libcmmk.c
vendored
|
|
@ -387,10 +387,10 @@ int cmmk_force_layout(struct cmmk *dev, int layout)
|
|||
|
||||
int cmmk_get_firmware_version(struct cmmk *dev, char *fw, size_t fwsiz)
|
||||
{
|
||||
unsigned char data[65] = { 0x01, 0x02 };
|
||||
unsigned char data[CMMK_BUFFER_SIZE] = {0x00, 0x01, 0x02};
|
||||
int r;
|
||||
|
||||
if ((r = send_command(dev->dev, data, sizeof(data))) != 0) {
|
||||
if ((r = send_command(dev->dev, data, CMMK_BUFFER_SIZE)) != 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
@ -483,25 +483,25 @@ const char * cmmk_layout_to_str(int layout)
|
|||
*/
|
||||
int cmmk_set_control_mode(struct cmmk *dev, int mode)
|
||||
{
|
||||
unsigned char data[64] = {0x41, mode};
|
||||
unsigned char data[CMMK_BUFFER_SIZE] = {0x00, 0x41, mode};
|
||||
|
||||
return send_command(dev->dev, data, sizeof(data));
|
||||
return send_command(dev->dev, data, CMMK_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
int cmmk_set_active_profile(struct cmmk *dev, int prof)
|
||||
{
|
||||
unsigned char setprof[64] = {0x51, 0x00, 0x00, 0x00, prof};
|
||||
unsigned char setprof[CMMK_BUFFER_SIZE] = {0x00, 0x51, 0x00, 0x00, 0x00, prof};
|
||||
|
||||
return send_command(dev->dev, setprof, sizeof(setprof));
|
||||
return send_command(dev->dev, setprof, CMMK_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
int cmmk_get_active_profile(struct cmmk *dev, int *prof)
|
||||
{
|
||||
int r;
|
||||
|
||||
unsigned char getprof[64] = {0x52, 0x00};
|
||||
unsigned char getprof[CMMK_BUFFER_SIZE] = {0x00, 0x52, 0x00};
|
||||
|
||||
if ((r = send_command(dev->dev, getprof, sizeof(getprof))) != 0)
|
||||
if ((r = send_command(dev->dev, getprof, CMMK_BUFFER_SIZE)) != 0)
|
||||
return r;
|
||||
|
||||
*prof = getprof[4];
|
||||
|
|
@ -511,17 +511,17 @@ int cmmk_get_active_profile(struct cmmk *dev, int *prof)
|
|||
|
||||
int cmmk_save_active_profile(struct cmmk *dev)
|
||||
{
|
||||
unsigned char saveprof[64] = {0x50, 0x55};
|
||||
unsigned char saveprof[CMMK_BUFFER_SIZE] = {0x00, 0x50, 0x55};
|
||||
|
||||
return send_command(dev->dev, saveprof, sizeof(saveprof));
|
||||
return send_command(dev->dev, saveprof, CMMK_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
|
||||
static int set_effect1(struct cmmk *dev, int eff)
|
||||
{
|
||||
unsigned char data[64] = {0x51, 0x28, 0x00, 0x00, eff};
|
||||
unsigned char data[CMMK_BUFFER_SIZE] = {0x00, 0x51, 0x28, 0x00, 0x00, eff};
|
||||
|
||||
return send_command(dev->dev, data, sizeof(data));
|
||||
return send_command(dev->dev, data, CMMK_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -532,25 +532,25 @@ static int set_effect(
|
|||
struct rgb const *col1,
|
||||
struct rgb const *col2)
|
||||
{
|
||||
unsigned char data[64] = {
|
||||
0x51, 0x2c, dev->multilayer_mode, 0x00, eff, p1, p2, p3,
|
||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
unsigned char data[CMMK_BUFFER_SIZE] = {
|
||||
0x00, 0x51, 0x2c, dev->multilayer_mode, 0x00, eff, p1,
|
||||
p2, p3, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
if (col1 != NULL) {
|
||||
data[10] = col1->R;
|
||||
data[11] = col1->G;
|
||||
data[12] = col1->B;
|
||||
data[11] = col1->R;
|
||||
data[12] = col1->G;
|
||||
data[13] = col1->B;
|
||||
}
|
||||
|
||||
if (col2 != NULL) {
|
||||
data[13] = col2->R;
|
||||
data[14] = col2->G;
|
||||
data[15] = col2->B;
|
||||
data[14] = col2->R;
|
||||
data[15] = col2->G;
|
||||
data[16] = col2->B;
|
||||
}
|
||||
|
||||
memset(data + 16, 0xff, 48);
|
||||
memset(data + 17, 0xff, 48);
|
||||
|
||||
return send_command(dev->dev, data, sizeof(data));
|
||||
return send_command(dev->dev, data, CMMK_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
static int get_effect(
|
||||
|
|
@ -562,13 +562,13 @@ static int get_effect(
|
|||
{
|
||||
int r;
|
||||
|
||||
unsigned char data[64] = {
|
||||
0x52, 0x2c, dev->multilayer_mode, 0x00, eff
|
||||
unsigned char data[CMMK_BUFFER_SIZE] = {
|
||||
0x00, 0x52, 0x2c, dev->multilayer_mode, 0x00, eff
|
||||
};
|
||||
|
||||
memset(data + 5, 0xff, 59);
|
||||
memset(data + 6, 0xff, 59);
|
||||
|
||||
if ((r = send_command(dev->dev, data, sizeof(data))) != 0) {
|
||||
if ((r = send_command(dev->dev, data, CMMK_BUFFER_SIZE)) != 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
@ -612,10 +612,10 @@ int cmmk_set_active_effect(struct cmmk *dev, enum cmmk_effect_id eff)
|
|||
|
||||
int cmmk_get_active_effect(struct cmmk *dev, enum cmmk_effect_id *eff)
|
||||
{
|
||||
unsigned char data[64] = {0x52, 0x28};
|
||||
unsigned char data[CMMK_BUFFER_SIZE] = {0x00, 0x52, 0x28};
|
||||
int r;
|
||||
|
||||
if ((r = send_command(dev->dev, data, sizeof(data))) != 0) {
|
||||
if ((r = send_command(dev->dev, data, CMMK_BUFFER_SIZE)) != 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
@ -640,14 +640,14 @@ int cmmk_get_enabled_effects(
|
|||
size_t siz,
|
||||
size_t *n)
|
||||
{
|
||||
unsigned char data[64] = {0x52, 0x29};
|
||||
unsigned char data[CMMK_BUFFER_SIZE] = {0x00, 0x52, 0x29};
|
||||
|
||||
size_t i;
|
||||
size_t j = 0;
|
||||
|
||||
int r;
|
||||
|
||||
if ((r = send_command(dev->dev, data, sizeof(data))) != 0) {
|
||||
if ((r = send_command(dev->dev, data, CMMK_BUFFER_SIZE)) != 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
@ -664,16 +664,16 @@ int cmmk_set_enabled_effects(
|
|||
enum cmmk_effect_id const *effs,
|
||||
size_t n)
|
||||
{
|
||||
unsigned char data[64] = {0x51, 0x29};
|
||||
unsigned char data[CMMK_BUFFER_SIZE] = {0x00, 0x51, 0x29};
|
||||
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < n; ++i) {
|
||||
data[4 + i] = effs[i];
|
||||
data[5 + i] = effs[i];
|
||||
}
|
||||
|
||||
while (i < 18) {
|
||||
data[4 + i] = 0xff;
|
||||
data[5 + i] = 0xff;
|
||||
|
||||
++i;
|
||||
}
|
||||
|
|
@ -808,7 +808,8 @@ int cmmk_set_effect_snake(struct cmmk *dev, struct cmmk_effect_snake const *eff)
|
|||
|
||||
int cmmk_set_customized_leds(struct cmmk *dev, struct cmmk_color_matrix const *colmap)
|
||||
{
|
||||
unsigned char data[64] = {0x51, 0xa8};
|
||||
const unsigned char HEADER_SIZE = 5;
|
||||
unsigned char data[CMMK_BUFFER_SIZE] = {0x00, 0x51, 0xa8};
|
||||
|
||||
int i;
|
||||
int j;
|
||||
|
|
@ -823,10 +824,10 @@ int cmmk_set_customized_leds(struct cmmk *dev, struct cmmk_color_matrix const *c
|
|||
transpose_reverse(dev, colmap, linear);
|
||||
|
||||
for (i = 0; i < 8; ++i) {
|
||||
data[2] = i*2;
|
||||
data[3] = i*2;
|
||||
|
||||
for (j = 0; j < 16; ++j) {
|
||||
int const offset = 4 + (j * 3);
|
||||
int const offset = HEADER_SIZE + (j * 3);
|
||||
|
||||
data[offset] = nextcol->R;
|
||||
data[offset + 1] = nextcol->G;
|
||||
|
|
@ -835,7 +836,7 @@ int cmmk_set_customized_leds(struct cmmk *dev, struct cmmk_color_matrix const *c
|
|||
++nextcol;
|
||||
}
|
||||
|
||||
send_command(dev->dev, data, sizeof(data));
|
||||
send_command(dev->dev, data, CMMK_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
return CMMK_OK;
|
||||
|
|
@ -844,12 +845,13 @@ int cmmk_set_customized_leds(struct cmmk *dev, struct cmmk_color_matrix const *c
|
|||
int cmmk_get_customized_leds(struct cmmk *dev, struct cmmk_color_matrix *colmap)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
struct rgb linear[CMMK_KEYLIST_SIZE] = { 0 };
|
||||
struct rgb linear[CMMK_KEYLIST_SIZE] = { 0 };
|
||||
#else
|
||||
struct rgb linear[CMMK_KEYLIST_SIZE] = {};
|
||||
struct rgb linear[CMMK_KEYLIST_SIZE] = {};
|
||||
#endif
|
||||
|
||||
unsigned char data[64] = {0x52, 0xa8};
|
||||
const unsigned char HEADER_SIZE = 5;
|
||||
unsigned char data[CMMK_BUFFER_SIZE] = {0x00, 0x52, 0xa8};
|
||||
|
||||
int i;
|
||||
int j;
|
||||
|
|
@ -857,12 +859,12 @@ int cmmk_get_customized_leds(struct cmmk *dev, struct cmmk_color_matrix *colmap)
|
|||
struct rgb *ptr = linear;
|
||||
|
||||
for (i = 0; i < 8; ++i) {
|
||||
data[2] = i * 2;
|
||||
data[3] = i * 2;
|
||||
|
||||
send_command(dev->dev, data, sizeof(data));
|
||||
send_command(dev->dev, data, CMMK_BUFFER_SIZE);
|
||||
|
||||
for (j = 0; j < 16; ++j) {
|
||||
int const offset = 4 + (j * 3);
|
||||
int const offset = (HEADER_SIZE - 1) + (j * 3);
|
||||
|
||||
ptr->R = data[offset];
|
||||
ptr->G = data[offset + 1];
|
||||
|
|
@ -886,40 +888,47 @@ int cmmk_switch_multilayer(struct cmmk *dev, int active)
|
|||
|
||||
int cmmk_get_multilayer_map(struct cmmk *dev, struct cmmk_effect_matrix *effmap)
|
||||
{
|
||||
int r;
|
||||
const unsigned char HEADER_SIZE = 9;
|
||||
unsigned char data_size = CMMK_BUFFER_SIZE - HEADER_SIZE;
|
||||
unsigned char data_size_in_bytes = data_size / BYTE_SIZE;
|
||||
int r;
|
||||
|
||||
unsigned char data[64] = {0x52, 0xa0, 0x01, 0x00};
|
||||
uint8_t linear[CMMK_KEYLIST_SIZE];
|
||||
unsigned char data[CMMK_BUFFER_SIZE];
|
||||
unsigned char header[CMMK_BUFFER_SIZE] = {0x00, 0x51, 0xa0, 0x01, 0x00};
|
||||
uint8_t linear[CMMK_KEYLIST_SIZE];
|
||||
|
||||
/* Call 1 */
|
||||
data[4] = 0x00;
|
||||
data[5] = 0x07;
|
||||
memcpy(data, header, HEADER_SIZE);
|
||||
data[5] = 0x00;
|
||||
data[6] = 0x07;
|
||||
|
||||
if ((r = send_command(dev->dev, data, sizeof(data))) != 0) {
|
||||
if ((r = send_command(dev->dev, data, CMMK_BUFFER_SIZE)) != 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
memcpy(linear, data + 8, 56);
|
||||
memcpy(linear, data + HEADER_SIZE - 1, data_size);
|
||||
|
||||
/* Call 2 */
|
||||
data[4] = 0x07;
|
||||
data[5] = 0x07;
|
||||
memcpy(data, header, HEADER_SIZE);
|
||||
data[5] = 0x07;
|
||||
data[6] = 0x07;
|
||||
|
||||
if ((r = send_command(dev->dev, data, sizeof(data))) != 0) {
|
||||
if ((r = send_command(dev->dev, data, CMMK_BUFFER_SIZE)) != 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
memcpy(linear + 56, data + 8, 56);
|
||||
memcpy(linear + 56, data + HEADER_SIZE - 1, data_size);
|
||||
|
||||
/* Call 3 */
|
||||
data[4] = 0x0e;
|
||||
data[5] = 0x01;
|
||||
memcpy(data, header, HEADER_SIZE);
|
||||
data[5] = 0x0e;
|
||||
data[6] = 0x01;
|
||||
|
||||
if ((r = send_command(dev->dev, data, sizeof(data))) != 0) {
|
||||
if ((r = send_command(dev->dev, data, CMMK_BUFFER_SIZE)) != 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
memcpy(linear + 112, data + 8, 8);
|
||||
memcpy(linear + 112, data + HEADER_SIZE - 1, data_size);
|
||||
|
||||
transpose_effects(dev, linear, effmap);
|
||||
|
||||
|
|
@ -928,40 +937,47 @@ int cmmk_get_multilayer_map(struct cmmk *dev, struct cmmk_effect_matrix *effmap)
|
|||
|
||||
int cmmk_set_multilayer_map(struct cmmk *dev, struct cmmk_effect_matrix const *effmap)
|
||||
{
|
||||
const unsigned char HEADER_SIZE = 9;
|
||||
unsigned char data_size = CMMK_BUFFER_SIZE - HEADER_SIZE;
|
||||
unsigned char data_size_in_bytes = data_size / BYTE_SIZE;
|
||||
int r;
|
||||
|
||||
unsigned char data[64] = {0x51, 0xa0, 0x01, 0x00};
|
||||
uint8_t linear[CMMK_KEYLIST_SIZE] = {0};
|
||||
unsigned char data[CMMK_BUFFER_SIZE];
|
||||
unsigned char header[CMMK_BUFFER_SIZE] = {0x00, 0x51, 0xa0, 0x01, 0x00};
|
||||
uint8_t linear[CMMK_KEYLIST_SIZE] = {0};
|
||||
|
||||
transpose_effects_reverse(dev, effmap, linear);
|
||||
|
||||
/* Call 1 */
|
||||
data[4] = 0x00;
|
||||
data[5] = 0x07;
|
||||
memcpy(data, header, HEADER_SIZE);
|
||||
data[5] = 0x00;
|
||||
data[6] = 0x07;
|
||||
|
||||
memcpy(data + 8, linear, 56);
|
||||
memcpy(data + HEADER_SIZE, linear, data_size);
|
||||
|
||||
if ((r = send_command(dev->dev, data, sizeof(data))) != 0) {
|
||||
if ((r = send_command(dev->dev, data, CMMK_BUFFER_SIZE)) != 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Call 2 */
|
||||
data[4] = 0x07;
|
||||
data[5] = 0x07;
|
||||
memcpy(data, header, HEADER_SIZE);
|
||||
data[5] = 0x07;
|
||||
data[6] = 0x07;
|
||||
|
||||
memcpy(data + 8, linear + 56, 56);
|
||||
memcpy(data + HEADER_SIZE, linear + 56, data_size);
|
||||
|
||||
if ((r = send_command(dev->dev, data, sizeof(data))) != 0) {
|
||||
if ((r = send_command(dev->dev, data, CMMK_BUFFER_SIZE)) != 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Call 3 */
|
||||
data[4] = 0x0e;
|
||||
data[5] = 0x01;
|
||||
memcpy(data, header, HEADER_SIZE);
|
||||
data[5] = 0x0e;
|
||||
data[6] = 0x01;
|
||||
|
||||
memcpy(data + 8, linear + 112, 8);
|
||||
memcpy(data + HEADER_SIZE, linear + 112, data_size);
|
||||
|
||||
if ((r = send_command(dev->dev, data, sizeof(data))) != 0) {
|
||||
if ((r = send_command(dev->dev, data, CMMK_BUFFER_SIZE)) != 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
@ -980,7 +996,7 @@ int cmmk_lookup_key_id(struct cmmk *dev, int row, int col)
|
|||
*/
|
||||
int cmmk_set_single_key_by_id(struct cmmk *dev, int key, struct rgb const *color)
|
||||
{
|
||||
unsigned char data[64] = {0xc0, 0x01, 0x01, 0x00, key, color->R, color->G, color->B};
|
||||
unsigned char data[CMMK_BUFFER_SIZE] = {0x00, 0xc0, 0x01, 0x01, 0x00, key, color->R, color->G, color->B};
|
||||
|
||||
return send_command(dev->dev, data, sizeof(data));
|
||||
}
|
||||
|
|
@ -1001,7 +1017,7 @@ int cmmk_set_single_key(struct cmmk *dev, int row, int col, struct rgb const *co
|
|||
*/
|
||||
int cmmk_set_all_single(struct cmmk *dev, struct rgb const *col)
|
||||
{
|
||||
unsigned char data[64] = {0xc0, 0x00, 0x00, 0x00, col->R, col->G, col->B};
|
||||
unsigned char data[CMMK_BUFFER_SIZE] = {0x00, 0xc0, 0x00, 0x00, 0x00, col->R, col->G, col->B};
|
||||
|
||||
return send_command(dev->dev, data, sizeof(data));
|
||||
}
|
||||
|
|
@ -1019,7 +1035,7 @@ int cmmk_set_all_single(struct cmmk *dev, struct rgb const *col)
|
|||
*/
|
||||
int cmmk_set_leds(struct cmmk *dev, struct cmmk_color_matrix const *colmap)
|
||||
{
|
||||
unsigned char data[64];
|
||||
unsigned char data[CMMK_BUFFER_SIZE];
|
||||
|
||||
int i;
|
||||
int j;
|
||||
|
|
@ -1034,13 +1050,14 @@ int cmmk_set_leds(struct cmmk *dev, struct cmmk_color_matrix const *colmap)
|
|||
transpose_reverse(dev, colmap, linear);
|
||||
|
||||
for (i = 0; i < 8; ++i) {
|
||||
data[0] = 0xc0;
|
||||
data[1] = 0x02;
|
||||
data[2] = i*2;
|
||||
data[3] = 0x00;
|
||||
data[0] = 0x00;
|
||||
data[1] = 0xc0;
|
||||
data[2] = 0x02;
|
||||
data[3] = i*2;
|
||||
data[4] = 0x00;
|
||||
|
||||
for (j = 0; j < 16; ++j) {
|
||||
int const offset = 4 + (j * 3);
|
||||
int const offset = 5 + (j * 3);
|
||||
|
||||
data[offset] = nextcol->R;
|
||||
data[offset + 1] = nextcol->G;
|
||||
|
|
@ -1049,7 +1066,7 @@ int cmmk_set_leds(struct cmmk *dev, struct cmmk_color_matrix const *colmap)
|
|||
++nextcol;
|
||||
}
|
||||
|
||||
send_command(dev->dev, data, sizeof(data));
|
||||
send_command(dev->dev, data, CMMK_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
return CMMK_OK;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue