diff --git a/Controllers/WushiController/RGBController_WushiL50USB.cpp b/Controllers/WushiController/RGBController_WushiL50USB.cpp index 5283dbbaa..0eefe7bed 100644 --- a/Controllers/WushiController/RGBController_WushiL50USB.cpp +++ b/Controllers/WushiController/RGBController_WushiL50USB.cpp @@ -19,66 +19,70 @@ RGBController_WushiL50USB::RGBController_WushiL50USB(WushiL50USBController* cont mode Direct; Direct.name = "Direct"; + Direct.value = WUSHI_L50_EFFECT_STATIC; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; Direct.color_mode = MODE_COLORS_PER_LED; Direct.brightness_min = 1; Direct.brightness_max = 2; + Direct.brightness = 2; modes.push_back(Direct); mode Breath; Breath.name = "Breathing"; - Breath.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED;//MODE_FLAG_HAS_PER_LED_COLOR - Breath.color_mode = MODE_COLORS_RANDOM;//;MODE_COLORS_PER_LED;// - Breath.brightness_min = 1; - Breath.brightness_max = 2; + Breath.value = WUSHI_L50_EFFECT_BREATH; + Breath.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED; + Breath.color_mode = MODE_COLORS_MODE_SPECIFIC; Breath.speed_min = 1; Breath.speed_max = 4; + Breath.speed = 3; + Breath.colors_min = 1; + Breath.colors_max = 1; + Breath.colors.resize(1); modes.push_back(Breath); mode Wave; Wave.name = "Rainbow Wave"; - Wave.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; + Wave.value = WUSHI_L50_EFFECT_WAVE; + Wave.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_SPEED; Wave.color_mode = MODE_COLORS_RANDOM; Wave.speed_min = 1; Wave.speed_max = 4; + Wave.speed = 3; modes.push_back(Wave); mode Smooth; Smooth.name = "Spectrum Cycle"; - Smooth.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED; + Smooth.value = WUSHI_L50_EFFECT_SMOOTH; + Smooth.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED; Smooth.color_mode = MODE_COLORS_RANDOM; - Smooth.brightness_min = 1; - Smooth.brightness_max = 2; Smooth.speed_min = 1; Smooth.speed_max = 4; + Smooth.speed = 3; modes.push_back(Smooth); mode Race; Race.name = "Race Cycle"; - Race.flags = MODE_FLAG_HAS_RANDOM_COLOR |MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_SPEED; + Race.value = WUSHI_L50_EFFECT_RACE; + Race.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_SPEED; Race.color_mode = MODE_COLORS_RANDOM; - Race.brightness_min = 1; - Race.brightness_max = 2; Race.speed_min = 1; Race.speed_max = 4; + Race.speed = 3; modes.push_back(Race); mode Stack; Stack.name = "Stacking"; + Stack.value = WUSHI_L50_EFFECT_STACK; Stack.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS; Stack.color_mode = MODE_COLORS_RANDOM; Stack.brightness_min = 1; Stack.brightness_max = 2; + Stack.brightness = 2; Stack.speed_min = 1; Stack.speed_max = 4; + Stack.speed = 3; modes.push_back(Stack); - mode Off; - Off.name = "Off"; - Off.flags = MODE_FLAG_HAS_RANDOM_COLOR; - Off.color_mode = MODE_COLORS_RANDOM; - modes.push_back(Off); - SetupZones(); } @@ -91,7 +95,7 @@ void RGBController_WushiL50USB::SetupZones() { zone new_zone; new_zone.name = "Dock"; - new_zone.type = ZONE_TYPE_LINEAR; + new_zone.type = ZONE_TYPE_SINGLE; new_zone.leds_count = WUSHI_L50_NUM_LEDS; new_zone.leds_max = new_zone.leds_count; new_zone.leds_min = new_zone.leds_count; @@ -120,7 +124,18 @@ void RGBController_WushiL50USB::ResizeZone(int /*zone*/, int /*new_size*/) void RGBController_WushiL50USB::DeviceUpdateLEDs() { - state.SetColors(colors); + if(modes[active_mode].color_mode == MODE_COLORS_PER_LED) + { + state.SetColors(colors); + } + + if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC) + { + state.zone0_rgb[0] = RGBGetRValue(modes[active_mode].colors[0]); + state.zone0_rgb[1] = RGBGetGValue(modes[active_mode].colors[0]); + state.zone0_rgb[2] = RGBGetBValue(modes[active_mode].colors[0]); + } + controller->setMode(&state); } @@ -137,66 +152,35 @@ void RGBController_WushiL50USB::UpdateSingleLED(int /*led*/) void RGBController_WushiL50USB::DeviceUpdateMode() { state.Reset(); - state.SetColors(colors); - switch(active_mode) + state.effect = modes[active_mode].value; + + if(modes[active_mode].color_mode == MODE_COLORS_PER_LED) { - case 0: - state.effect = WUSHI_L50_EFFECT_STATIC; - break; - - case 1: - state.effect = WUSHI_L50_EFFECT_BREATH; - break; - - case 2: - state.effect = WUSHI_L50_EFFECT_WAVE; - state.wave_ltr = modes[active_mode].direction ? 0 : 1; - state.wave_rtl = modes[active_mode].direction ? 1 : 0; - break; - - case 3: - state.effect = WUSHI_L50_EFFECT_SMOOTH; - break; - - case 4: - state.effect = WUSHI_L50_EFFECT_RACE; - state.wave_ltr = modes[active_mode].direction ? 0 : 1; - state.wave_rtl = modes[active_mode].direction ? 1 : 0; - break; - - case 5: - state.effect = WUSHI_L50_EFFECT_STACK; - state.wave_ltr = modes[active_mode].direction ? 0 : 1; - state.wave_rtl = modes[active_mode].direction ? 1 : 0; - break; - - case 6: - state.effect = WUSHI_L50_EFFECT_STATIC; - state.zone0_rgb[0] = 0; - state.zone0_rgb[1] = 0; - state.zone0_rgb[2] = 0; - state.zone1_rgb[0] = 0; - state.zone1_rgb[1] = 0; - state.zone1_rgb[2] = 0; - state.zone2_rgb[0] = 0; - state.zone2_rgb[1] = 0; - state.zone2_rgb[2] = 0; - state.zone3_rgb[0] = 0; - state.zone3_rgb[1] = 0; - state.zone3_rgb[2] = 0; - break; + state.SetColors(colors); } - /*---------------------------------------------------------*\ - | Mode number from 0, but in mode from 1 | - \*---------------------------------------------------------*/ - if(active_mode != (WUSHI_L50_EFFECT_STATIC - 1)) + if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC) + { + state.zone0_rgb[0] = RGBGetRValue(modes[active_mode].colors[0]); + state.zone0_rgb[1] = RGBGetGValue(modes[active_mode].colors[0]); + state.zone0_rgb[2] = RGBGetBValue(modes[active_mode].colors[0]); + } + + if(modes[active_mode].flags & MODE_FLAG_HAS_DIRECTION_LR) + { + state.wave_ltr = modes[active_mode].direction ? 0 : 1; + state.wave_rtl = modes[active_mode].direction ? 1 : 0; + } + if(modes[active_mode].flags & MODE_FLAG_HAS_SPEED) { state.speed = modes[active_mode].speed; } - state.brightness = modes[active_mode].brightness; + if(modes[active_mode].flags & MODE_FLAG_HAS_BRIGHTNESS) + { + state.brightness = modes[active_mode].brightness; + } controller->setMode(&state); }