From eca8ee3a3153c03fa6ae433d445411e8ffc21ffd Mon Sep 17 00:00:00 2001 From: Mola19 Date: Mon, 4 Apr 2022 03:24:41 +0200 Subject: [PATCH] Add missing modes to AsusAuraMousepad to resolve #780 and #1199 --- .../AsusAuraMousematController.cpp | 24 +- .../AsusAuraMousematController.h | 16 +- .../RGBController_AsusAuraMousemat.cpp | 256 ++++++++++++------ .../RGBController_AsusAuraMousemat.h | 20 +- 4 files changed, 214 insertions(+), 102 deletions(-) diff --git a/Controllers/AsusAuraUSBController/AsusAuraMousematController.cpp b/Controllers/AsusAuraUSBController/AsusAuraMousematController.cpp index 8c69f8fc..7b94a83c 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraMousematController.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraMousematController.cpp @@ -88,12 +88,11 @@ void AuraMousematController::UpdateLeds void AuraMousematController::UpdateDevice ( - unsigned char mode, - unsigned char red, - unsigned char grn, - unsigned char blu, - unsigned char speed, - unsigned char brightness + unsigned char mode, + std::vector colors, + unsigned char speed, + unsigned char brightness, + unsigned char pattern ) { unsigned char usb_buf[65]; @@ -108,11 +107,16 @@ void AuraMousematController::UpdateDevice usb_buf[0x05] = mode; usb_buf[0x06] = speed; usb_buf[0x07] = brightness; - usb_buf[0x08] = 0x00; + usb_buf[0x08] = pattern; usb_buf[0x09] = 0x00; - usb_buf[0x0a] = red; - usb_buf[0x0b] = grn; - usb_buf[0x0c] = blu; + + for(int i = 0; i < colors.size(); i++) + { + usb_buf[0x0a + i * 3] = RGBGetRValue(colors[i]); + usb_buf[0x0b + i * 3] = RGBGetGValue(colors[i]); + usb_buf[0x0c + i * 3] = RGBGetBValue(colors[i]); + } + hid_write(dev, usb_buf, 65); } diff --git a/Controllers/AsusAuraUSBController/AsusAuraMousematController.h b/Controllers/AsusAuraUSBController/AsusAuraMousematController.h index 487278cb..37b03e1e 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraMousematController.h +++ b/Controllers/AsusAuraUSBController/AsusAuraMousematController.h @@ -18,9 +18,12 @@ enum AURA_MOUSEMAT_MODE_STATIC = 0, AURA_MOUSEMAT_MODE_BREATHING = 1, AURA_MOUSEMAT_MODE_COLOR_CYCLE = 2, - AURA_MOUSEMAT_MODE_CHASING = 3, + AURA_MOUSEMAT_MODE_WAVE = 3, + AURA_MOUSEMAT_MODE_WAVE_PLANE = 4, AURA_MOUSEMAT_MODE_COMET = 5, AURA_MOUSEMAT_MODE_GLOWING_YOYO = 6, + AURA_MOUSEMAT_MODE_CROSS = 7, + AURA_MOUSEMAT_MODE_STARRY_NIGHT = 8, AURA_MOUSEMAT_MODE_DIRECT = 0xFF, }; @@ -41,12 +44,11 @@ public: void UpdateDevice ( - unsigned char mode, - unsigned char red, - unsigned char grn, - unsigned char blu, - unsigned char speed, - unsigned char brightness + unsigned char mode, + std::vector colors, + unsigned char speed, + unsigned char brightness, + unsigned char pattern ); void SaveMode(); diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMousemat.cpp b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMousemat.cpp index 6c2263da..3e023eb2 100644 --- a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMousemat.cpp +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMousemat.cpp @@ -32,86 +32,148 @@ RGBController_AuraMousemat::RGBController_AuraMousemat(AuraMousematController* c serial = controller->GetSerialString(); mode Direct; - Direct.name = "Direct"; - Direct.value = AURA_MOUSEMAT_MODE_DIRECT; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Direct.color_mode = MODE_COLORS_PER_LED; + Direct.name = "Direct"; + Direct.value = AURA_MOUSEMAT_MODE_DIRECT; + 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 = AURA_MOUSEMAT_MODE_STATIC; - Static.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; - Static.color_mode = MODE_COLORS_MODE_SPECIFIC; - Static.speed_min = AURA_MOUSEMAT_SPEED_MIN; - Static.speed_max = AURA_MOUSEMAT_SPEED_MAX; - Static.speed = AURA_MOUSEMAT_SPEED_DEFAULT; - Static.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; - Static.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; - Static.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; - Static.colors_min = 1; - Static.colors_max = 1; + Static.name = "Static"; + Static.value = AURA_MOUSEMAT_MODE_STATIC; + Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; + Static.color_mode = MODE_COLORS_MODE_SPECIFIC; + Static.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; + Static.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; + Static.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; + Static.colors_min = 1; + Static.colors_max = 1; Static.colors.resize(1); modes.push_back(Static); mode Breathing; - Breathing.name = "Breathing"; - Breathing.value = AURA_MOUSEMAT_MODE_BREATHING; - Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; - Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC; - Breathing.speed_min = AURA_MOUSEMAT_SPEED_MIN; - Breathing.speed_max = AURA_MOUSEMAT_SPEED_MAX; - Breathing.speed = AURA_MOUSEMAT_SPEED_DEFAULT; - Breathing.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; - Breathing.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; - Breathing.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; - Breathing.colors_min = 1; - Breathing.colors_max = 1; + Breathing.name = "Breathing"; + Breathing.value = AURA_MOUSEMAT_MODE_BREATHING; + Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; + Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC | MODE_COLORS_RANDOM; + Breathing.speed_min = AURA_MOUSEMAT_SPEED_MIN; + Breathing.speed_max = AURA_MOUSEMAT_SPEED_MAX; + Breathing.speed = AURA_MOUSEMAT_SPEED_DEFAULT_BREATHING; + Breathing.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; + Breathing.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; + Breathing.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; + Breathing.colors_min = 1; + Breathing.colors_max = 2; Breathing.colors.resize(1); modes.push_back(Breathing); mode ColorCycle; - ColorCycle.name = "Color Cycle"; - ColorCycle.value = AURA_MOUSEMAT_MODE_COLOR_CYCLE; - ColorCycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; - ColorCycle.color_mode = MODE_COLORS_NONE; - ColorCycle.speed_min = AURA_MOUSEMAT_SPEED_MIN; - ColorCycle.speed_max = AURA_MOUSEMAT_SPEED_MAX; - ColorCycle.speed = AURA_MOUSEMAT_SPEED_DEFAULT; - ColorCycle.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; - ColorCycle.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; - ColorCycle.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; + ColorCycle.name = "Color Cycle"; + ColorCycle.value = AURA_MOUSEMAT_MODE_COLOR_CYCLE; + ColorCycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; + ColorCycle.color_mode = MODE_COLORS_NONE; + ColorCycle.speed_min = AURA_MOUSEMAT_SPEED_MIN; + ColorCycle.speed_max = AURA_MOUSEMAT_SPEED_MAX; + ColorCycle.speed = AURA_MOUSEMAT_SPEED_DEFAULT_COLOR_CYCLE; + ColorCycle.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; + ColorCycle.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; + ColorCycle.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; modes.push_back(ColorCycle); + mode Wave; + Wave.name = "Wave"; + Wave.value = AURA_MOUSEMAT_MODE_WAVE; + Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_MANUAL_SAVE; + Wave.color_mode = MODE_COLORS_MODE_SPECIFIC; + Wave.speed_min = AURA_MOUSEMAT_SPEED_MIN; + Wave.speed_max = AURA_MOUSEMAT_SPEED_MAX; + Wave.speed = AURA_MOUSEMAT_SPEED_DEFAULT_WAVE; + Wave.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; + Wave.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; + Wave.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; + Wave.direction = MODE_DIRECTION_LEFT; + Wave.colors_min = 7; + Wave.colors_max = 7; + Wave.colors.resize(7); + modes.push_back(Wave); + + mode WavePlane; + WavePlane.name = "Wave Plane"; + WavePlane.value = AURA_MOUSEMAT_MODE_WAVE_PLANE; + WavePlane.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_MANUAL_SAVE; + WavePlane.color_mode = MODE_COLORS_NONE; + WavePlane.speed_min = AURA_MOUSEMAT_SPEED_MIN; + WavePlane.speed_max = AURA_MOUSEMAT_SPEED_MAX; + WavePlane.speed = AURA_MOUSEMAT_SPEED_DEFAULT_WAVE_PLANE; + WavePlane.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; + WavePlane.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; + WavePlane.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; + WavePlane.direction = MODE_DIRECTION_LEFT; + modes.push_back(WavePlane); + mode Comet; - Comet.name = "Comet"; - Comet.value = AURA_MOUSEMAT_MODE_COMET; - Comet.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; - Comet.color_mode = MODE_COLORS_MODE_SPECIFIC; - Comet.speed_min = AURA_MOUSEMAT_SPEED_MIN; - Comet.speed_max = AURA_MOUSEMAT_SPEED_MAX; - Comet.speed = AURA_MOUSEMAT_SPEED_DEFAULT; - Comet.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; - Comet.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; - Comet.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; - Comet.colors_min = 1; - Comet.colors_max = 1; + Comet.name = "Comet"; + Comet.value = AURA_MOUSEMAT_MODE_COMET; + Comet.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_HV | MODE_FLAG_MANUAL_SAVE; + Comet.color_mode = MODE_COLORS_MODE_SPECIFIC; + Comet.speed_min = AURA_MOUSEMAT_SPEED_MIN; + Comet.speed_max = AURA_MOUSEMAT_SPEED_MAX; + Comet.speed = AURA_MOUSEMAT_SPEED_DEFAULT_COMET; + Comet.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; + Comet.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; + Comet.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; + Comet.direction = MODE_DIRECTION_LEFT; + Comet.colors_min = 1; + Comet.colors_max = 1; Comet.colors.resize(1); modes.push_back(Comet); mode GlowingYoyo; - GlowingYoyo.name = "Glowing Yoyo"; - GlowingYoyo.value = AURA_MOUSEMAT_MODE_GLOWING_YOYO; - GlowingYoyo.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; - GlowingYoyo.color_mode = MODE_COLORS_NONE; - GlowingYoyo.speed_min = AURA_MOUSEMAT_SPEED_MIN; - GlowingYoyo.speed_max = AURA_MOUSEMAT_SPEED_MAX; - GlowingYoyo.speed = AURA_MOUSEMAT_SPEED_DEFAULT; - GlowingYoyo.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; - GlowingYoyo.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; - GlowingYoyo.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; + GlowingYoyo.name = "Glowing Yoyo"; + GlowingYoyo.value = AURA_MOUSEMAT_MODE_GLOWING_YOYO; + GlowingYoyo.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_MANUAL_SAVE; + GlowingYoyo.color_mode = MODE_COLORS_NONE; + GlowingYoyo.speed_min = AURA_MOUSEMAT_SPEED_MIN; + GlowingYoyo.speed_max = AURA_MOUSEMAT_SPEED_MAX; + GlowingYoyo.speed = AURA_MOUSEMAT_SPEED_DEFAULT_GLOWING_YOYO; + GlowingYoyo.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; + GlowingYoyo.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; + GlowingYoyo.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; + GlowingYoyo.direction = MODE_DIRECTION_LEFT; modes.push_back(GlowingYoyo); + mode Cross; + Cross.name = "Cross"; + Cross.value = AURA_MOUSEMAT_MODE_CROSS; + Cross.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; + Cross.color_mode = MODE_COLORS_MODE_SPECIFIC; + Cross.speed_min = AURA_MOUSEMAT_SPEED_MIN; + Cross.speed_max = AURA_MOUSEMAT_SPEED_MAX; + Cross.speed = AURA_MOUSEMAT_SPEED_DEFAULT_CROSS; + Cross.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; + Cross.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; + Cross.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; + Cross.colors_min = 2; + Cross.colors_max = 2; + Cross.colors.resize(2); + modes.push_back(Cross); + + mode StarryNight; + StarryNight.name = "Starry Night"; + StarryNight.value = AURA_MOUSEMAT_MODE_STARRY_NIGHT; + StarryNight.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; + StarryNight.color_mode = MODE_COLORS_MODE_SPECIFIC | MODE_COLORS_RANDOM; + StarryNight.speed_min = AURA_MOUSEMAT_SPEED_MIN; + StarryNight.speed_max = AURA_MOUSEMAT_SPEED_MAX; + StarryNight.speed = AURA_MOUSEMAT_SPEED_DEFAULT_STARRY_NIGHT; + StarryNight.brightness_min = AURA_MOUSEMAT_BRIGHTNESS_MIN; + StarryNight.brightness_max = AURA_MOUSEMAT_BRIGHTNESS_MAX; + StarryNight.brightness = AURA_MOUSEMAT_BRIGHTNESS_DEFAULT; + StarryNight.colors_min = 2; + StarryNight.colors_max = 2; + StarryNight.colors.resize(2); + modes.push_back(StarryNight); + SetupZones(); } @@ -174,26 +236,62 @@ void RGBController_AuraMousemat::SetCustomMode() void RGBController_AuraMousemat::DeviceUpdateMode() { - unsigned char red = 0; - unsigned char grn = 0; - unsigned char blu = 0; - - switch(modes[active_mode].value) + if(modes[active_mode].value == AURA_MOUSEMAT_MODE_DIRECT) { - case AURA_MOUSEMAT_MODE_DIRECT: - controller->UpdateLeds(std::vector(colors)); - break; - case AURA_MOUSEMAT_MODE_STATIC: - case AURA_MOUSEMAT_MODE_BREATHING: - case AURA_MOUSEMAT_MODE_COLOR_CYCLE: - case AURA_MOUSEMAT_MODE_CHASING: - case AURA_MOUSEMAT_MODE_COMET: - case AURA_MOUSEMAT_MODE_GLOWING_YOYO: - red = RGBGetRValue(modes[active_mode].colors[0]); - grn = RGBGetGValue(modes[active_mode].colors[0]); - blu = RGBGetBValue(modes[active_mode].colors[0]); - controller->UpdateDevice(modes[active_mode].value, red, grn, blu, modes[active_mode].speed, modes[active_mode].brightness); - break; + DeviceUpdateLEDs(); + } + else + { + int pattern = 0; + + switch(modes[active_mode].value) + { + case AURA_MOUSEMAT_MODE_BREATHING: + if(modes[active_mode].color_mode == MODE_COLORS_RANDOM) + { + pattern = 2; + } + else + { + pattern = modes[active_mode].colors.size() - 1; + } + break; + case AURA_MOUSEMAT_MODE_WAVE: + pattern = modes[active_mode].colors.size() * 16 + modes[active_mode].direction; + break; + case AURA_MOUSEMAT_MODE_WAVE_PLANE: + switch(modes[active_mode].direction) + { + case MODE_DIRECTION_LEFT: + pattern = 2; + break; + case MODE_DIRECTION_RIGHT: + pattern = 3; + break; + case MODE_DIRECTION_UP: + pattern = 0; + break; + case MODE_DIRECTION_DOWN: + pattern = 1; + break; + } + break; + case AURA_MOUSEMAT_MODE_COMET: + pattern = modes[active_mode].direction; + if(pattern == MODE_DIRECTION_HORIZONTAL || pattern == MODE_DIRECTION_VERTICAL) pattern = 2; + break; + case AURA_MOUSEMAT_MODE_GLOWING_YOYO: + pattern = modes[active_mode].direction; + break; + case AURA_MOUSEMAT_MODE_STARRY_NIGHT: + pattern = 16 + (modes[active_mode].color_mode == MODE_COLORS_RANDOM); + break; + default: + pattern = 255; + break; + } + + controller->UpdateDevice(modes[active_mode].value, std::vector(modes[active_mode].colors), modes[active_mode].speed, modes[active_mode].brightness, pattern); } } diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMousemat.h b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMousemat.h index b20901fd..c4db1744 100644 --- a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMousemat.h +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMousemat.h @@ -13,12 +13,20 @@ enum { - AURA_MOUSEMAT_BRIGHTNESS_MIN = 0, - AURA_MOUSEMAT_BRIGHTNESS_MAX = 4, - AURA_MOUSEMAT_BRIGHTNESS_DEFAULT = 4, - AURA_MOUSEMAT_SPEED_MIN = 0, - AURA_MOUSEMAT_SPEED_MAX = 255, - AURA_MOUSEMAT_SPEED_DEFAULT = 127, + AURA_MOUSEMAT_BRIGHTNESS_MIN = 0, + AURA_MOUSEMAT_BRIGHTNESS_MAX = 4, + AURA_MOUSEMAT_BRIGHTNESS_DEFAULT = 4, + AURA_MOUSEMAT_SPEED_MIN = 127, + AURA_MOUSEMAT_SPEED_MAX = 0, + AURA_MOUSEMAT_SPEED_DEFAULT_STATIC = 0, + AURA_MOUSEMAT_SPEED_DEFAULT_BREATHING = 1, + AURA_MOUSEMAT_SPEED_DEFAULT_COLOR_CYCLE = 1, + AURA_MOUSEMAT_SPEED_DEFAULT_WAVE = 14, + AURA_MOUSEMAT_SPEED_DEFAULT_WAVE_PLANE = 2, + AURA_MOUSEMAT_SPEED_DEFAULT_COMET = 2, + AURA_MOUSEMAT_SPEED_DEFAULT_GLOWING_YOYO = 4, + AURA_MOUSEMAT_SPEED_DEFAULT_CROSS = 12, + AURA_MOUSEMAT_SPEED_DEFAULT_STARRY_NIGHT = 2, }; class RGBController_AuraMousemat : public RGBController