1717 @type USB
1818 @save :x:
1919 @direct :white_check_mark:
20- @effects :x :
20+ @effects :white_check_mark :
2121 @detectors DetectClevoLightbarControllers
22- @comment
22+ @comment Experimental effects based on ITE 8291 protocol
2323\*-------------------------------------------------------------------*/
2424
2525RGBController_ClevoLightbar::RGBController_ClevoLightbar (ClevoLightbarController* controller_ptr)
@@ -32,17 +32,83 @@ RGBController_ClevoLightbar::RGBController_ClevoLightbar(ClevoLightbarController
3232 description = " CLEVO Laptop Lightbar" ;
3333 location = controller->GetDeviceLocation ();
3434 serial = controller->GetSerialString ();
35+ version = controller->GetFirmwareVersion ();
3536
3637 mode Direct;
37- Direct.name = " Direct" ;
38- Direct.value = CLEVO_LIGHTBAR_MODE_DIRECT;
39- Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS;
40- Direct.color_mode = MODE_COLORS_PER_LED;
38+ Direct.name = " Direct" ;
39+ Direct.value = CLEVO_LIGHTBAR_MODE_DIRECT;
40+ Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS;
41+ Direct.color_mode = MODE_COLORS_PER_LED;
4142 Direct.brightness_min = CLEVO_LIGHTBAR_BRIGHTNESS_MIN;
4243 Direct.brightness_max = CLEVO_LIGHTBAR_BRIGHTNESS_MAX;
4344 Direct.brightness = CLEVO_LIGHTBAR_BRIGHTNESS_MAX;
4445 modes.push_back (Direct);
4546
47+ mode Breathing;
48+ Breathing.name = " Breathing" ;
49+ Breathing.value = CLEVO_LIGHTBAR_MODE_BREATHING;
50+ Breathing.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
51+ Breathing.color_mode = MODE_COLORS_PER_LED;
52+ Breathing.brightness_min = CLEVO_LIGHTBAR_BRIGHTNESS_MIN;
53+ Breathing.brightness_max = CLEVO_LIGHTBAR_BRIGHTNESS_MAX;
54+ Breathing.brightness = CLEVO_LIGHTBAR_BRIGHTNESS_MAX;
55+ Breathing.speed_min = CLEVO_LIGHTBAR_SPEED_MIN;
56+ Breathing.speed_max = CLEVO_LIGHTBAR_SPEED_MAX;
57+ Breathing.speed = CLEVO_LIGHTBAR_SPEED_DEFAULT;
58+ modes.push_back (Breathing);
59+
60+ mode Wave;
61+ Wave.name = " Wave" ;
62+ Wave.value = CLEVO_LIGHTBAR_MODE_WAVE;
63+ Wave.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
64+ Wave.color_mode = MODE_COLORS_NONE;
65+ Wave.brightness_min = CLEVO_LIGHTBAR_BRIGHTNESS_MIN;
66+ Wave.brightness_max = CLEVO_LIGHTBAR_BRIGHTNESS_MAX;
67+ Wave.brightness = CLEVO_LIGHTBAR_BRIGHTNESS_MAX;
68+ Wave.speed_min = CLEVO_LIGHTBAR_SPEED_MIN;
69+ Wave.speed_max = CLEVO_LIGHTBAR_SPEED_MAX;
70+ Wave.speed = CLEVO_LIGHTBAR_SPEED_DEFAULT;
71+ modes.push_back (Wave);
72+
73+ mode Bounce;
74+ Bounce.name = " Bounce" ;
75+ Bounce.value = CLEVO_LIGHTBAR_MODE_BOUNCE;
76+ Bounce.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
77+ Bounce.color_mode = MODE_COLORS_PER_LED;
78+ Bounce.brightness_min = CLEVO_LIGHTBAR_BRIGHTNESS_MIN;
79+ Bounce.brightness_max = CLEVO_LIGHTBAR_BRIGHTNESS_MAX;
80+ Bounce.brightness = CLEVO_LIGHTBAR_BRIGHTNESS_MAX;
81+ Bounce.speed_min = CLEVO_LIGHTBAR_SPEED_MIN;
82+ Bounce.speed_max = CLEVO_LIGHTBAR_SPEED_MAX;
83+ Bounce.speed = CLEVO_LIGHTBAR_SPEED_DEFAULT;
84+ modes.push_back (Bounce);
85+
86+ mode Marquee;
87+ Marquee.name = " Marquee" ;
88+ Marquee.value = CLEVO_LIGHTBAR_MODE_MARQUEE;
89+ Marquee.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
90+ Marquee.color_mode = MODE_COLORS_NONE;
91+ Marquee.brightness_min = CLEVO_LIGHTBAR_BRIGHTNESS_MIN;
92+ Marquee.brightness_max = CLEVO_LIGHTBAR_BRIGHTNESS_MAX;
93+ Marquee.brightness = CLEVO_LIGHTBAR_BRIGHTNESS_MAX;
94+ Marquee.speed_min = CLEVO_LIGHTBAR_SPEED_MIN;
95+ Marquee.speed_max = CLEVO_LIGHTBAR_SPEED_MAX;
96+ Marquee.speed = CLEVO_LIGHTBAR_SPEED_DEFAULT;
97+ modes.push_back (Marquee);
98+
99+ mode Scan;
100+ Scan.name = " Scan" ;
101+ Scan.value = CLEVO_LIGHTBAR_MODE_SCAN;
102+ Scan.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED;
103+ Scan.color_mode = MODE_COLORS_PER_LED;
104+ Scan.brightness_min = CLEVO_LIGHTBAR_BRIGHTNESS_MIN;
105+ Scan.brightness_max = CLEVO_LIGHTBAR_BRIGHTNESS_MAX;
106+ Scan.brightness = CLEVO_LIGHTBAR_BRIGHTNESS_MAX;
107+ Scan.speed_min = CLEVO_LIGHTBAR_SPEED_MIN;
108+ Scan.speed_max = CLEVO_LIGHTBAR_SPEED_MAX;
109+ Scan.speed = CLEVO_LIGHTBAR_SPEED_DEFAULT;
110+ modes.push_back (Scan);
111+
46112 mode Off;
47113 Off.name = " Off" ;
48114 Off.value = CLEVO_LIGHTBAR_MODE_OFF;
@@ -90,7 +156,15 @@ void RGBController_ClevoLightbar::DeviceUpdateLEDs()
90156 unsigned char blue = RGBGetBValue (colors[0 ]);
91157
92158 controller->SetColor (red, green, blue);
93- controller->SetBrightness (modes[active_mode].brightness );
159+
160+ /* ---------------------------------------------------------*\
161+ | Re-apply current mode to maintain effect state |
162+ \*---------------------------------------------------------*/
163+ unsigned char brightness = modes[active_mode].brightness ;
164+ unsigned char speed = modes[active_mode].speed ;
165+ unsigned char mode_value = modes[active_mode].value ;
166+
167+ controller->SetMode (mode_value, brightness, speed);
94168}
95169
96170void RGBController_ClevoLightbar::UpdateZoneLEDs (int /* zone*/ )
@@ -109,4 +183,23 @@ void RGBController_ClevoLightbar::DeviceUpdateMode()
109183 {
110184 controller->TurnOff ();
111185 }
186+ else
187+ {
188+ unsigned char brightness = modes[active_mode].brightness ;
189+ unsigned char speed = modes[active_mode].speed ;
190+ unsigned char mode_value = modes[active_mode].value ;
191+
192+ /* ---------------------------------------------------------*\
193+ | Set color first for modes that use it |
194+ \*---------------------------------------------------------*/
195+ if (modes[active_mode].color_mode == MODE_COLORS_PER_LED)
196+ {
197+ unsigned char red = RGBGetRValue (colors[0 ]);
198+ unsigned char green = RGBGetGValue (colors[0 ]);
199+ unsigned char blue = RGBGetBValue (colors[0 ]);
200+ controller->SetColor (red, green, blue);
201+ }
202+
203+ controller->SetMode (mode_value, brightness, speed);
204+ }
112205}
0 commit comments