diff --git a/60-openrgb.rules b/60-openrgb.rules index ecc43375..2a8471d2 100644 --- a/60-openrgb.rules +++ b/60-openrgb.rules @@ -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 # diff --git a/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp b/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp index bcc579fc..5945c869 100644 --- a/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp +++ b/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp @@ -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 diff --git a/Controllers/CoolerMasterController/RGBController_CMMKController.cpp b/Controllers/CoolerMasterController/RGBController_CMMKController.cpp index aa8ab7c0..742777b1 100644 --- a/Controllers/CoolerMasterController/RGBController_CMMKController.cpp +++ b/Controllers/CoolerMasterController/RGBController_CMMKController.cpp @@ -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(); diff --git a/dependencies/libcmmk/include/libcmmk/libcmmk.h b/dependencies/libcmmk/include/libcmmk/libcmmk.h index 2a98cd48..45435a55 100644 --- a/dependencies/libcmmk/include/libcmmk/libcmmk.h +++ b/dependencies/libcmmk/include/libcmmk/libcmmk.h @@ -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, }; diff --git a/dependencies/libcmmk/src/libcmmk.c b/dependencies/libcmmk/src/libcmmk.c index 086f2af3..0bfa939d 100644 --- a/dependencies/libcmmk/src/libcmmk.c +++ b/dependencies/libcmmk/src/libcmmk.c @@ -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;