@@ -164,20 +164,37 @@ RGBController_HuePlus::RGBController_HuePlus(HuePlusController* hueplus_ptr)
164164void RGBController_HuePlus::SetupZones ()
165165{
166166 /* -------------------------------------------------*\
167- | Set up zones |
167+ | Only set LED count on the first run |
168168 \*-------------------------------------------------*/
169- for (unsigned int zone_idx = 0 ; zone_idx < HUE_PLUS_NUM_CHANNELS; zone_idx++)
169+ bool first_run = false ;
170+
171+ if (zones.size () == 0 )
170172 {
171- zone* new_zone = new zone;
173+ first_run = true ;
174+ }
172175
173- new_zone-> name = " Hue+ Channel " ;
174- new_zone-> name . append ( std::to_string (zone_idx + 1 ));
175- new_zone-> type = ZONE_TYPE_LINEAR;
176- new_zone-> leds_min = 0 ;
177- new_zone-> leds_max = 40 ;
178- new_zone-> leds_count = hueplus-> channel_leds [zone_idx] ;
176+ /* -------------------------------------------------*\
177+ | Clear any existing color/LED configuration |
178+ \*------------------------------------------------- */
179+ leds. clear () ;
180+ colors. clear () ;
181+ zones. resize (HUE_PLUS_NUM_CHANNELS) ;
179182
180- zones.push_back (*new_zone);
183+ /* -------------------------------------------------*\
184+ | Set up zones |
185+ \*-------------------------------------------------*/
186+ for (unsigned int zone_idx = 0 ; zone_idx < HUE_PLUS_NUM_CHANNELS; zone_idx++)
187+ {
188+ zones[zone_idx].name = " Hue+ Channel " ;
189+ zones[zone_idx].name .append (std::to_string (zone_idx + 1 ));
190+ zones[zone_idx].type = ZONE_TYPE_LINEAR;
191+ zones[zone_idx].leds_min = 0 ;
192+ zones[zone_idx].leds_max = 40 ;
193+
194+ if (first_run)
195+ {
196+ zones[zone_idx].leds_count = 0 ;
197+ }
181198 }
182199
183200 /* -------------------------------------------------*\
@@ -201,9 +218,14 @@ void RGBController_HuePlus::SetupZones()
201218 SetupColors ();
202219}
203220
204- void RGBController_HuePlus::ResizeZone (int /* zone*/ , int /* new_size*/ )
221+ void RGBController_HuePlus::ResizeZone (int zone, int new_size)
205222{
223+ if (((unsigned int )new_size >= zones[zone].leds_min ) && ((unsigned int )new_size <= zones[zone].leds_max ))
224+ {
225+ zones[zone].leds_count = new_size;
206226
227+ SetupZones ();
228+ }
207229}
208230
209231void RGBController_HuePlus::UpdateLEDs ()
0 commit comments