From 2c7baaa1ef810bed9b42c4fb9ed4f066c16b0899 Mon Sep 17 00:00:00 2001 From: MisterPDJ Date: Fri, 14 Apr 2023 20:32:37 +0100 Subject: [PATCH] Add Scene modes to Phillips Wiz Commit amended by Adam Honse to merge with direct mode brightness control functionality. --- .../PhilipsWizController.cpp | 53 +-- .../PhilipsWizController.h | 46 ++- .../RGBController_PhilipsWiz.cpp | 352 +++++++++++++++++- 3 files changed, 409 insertions(+), 42 deletions(-) diff --git a/Controllers/PhilipsWizController/PhilipsWizController.cpp b/Controllers/PhilipsWizController/PhilipsWizController.cpp index 34a462f1..e13ff39a 100644 --- a/Controllers/PhilipsWizController/PhilipsWizController.cpp +++ b/Controllers/PhilipsWizController/PhilipsWizController.cpp @@ -17,14 +17,6 @@ PhilipsWizController::PhilipsWizController(std::string ip) \*-----------------------------------------------------------------*/ location = "IP: " + ip; - /*-----------------------------------------------------------------*\ - | Set a few sane default values | - \*-----------------------------------------------------------------*/ - red = 0; - green = 0; - blue = 0; - brightness = 100; - /*-----------------------------------------------------------------*\ | Open a UDP client sending to the device's IP, port 38899 | \*-----------------------------------------------------------------*/ @@ -64,6 +56,11 @@ std::string PhilipsWizController::GetVersion() return(module_name + " " + firmware_version); } +std::string PhilipsWizController::GetModuleName() +{ + return(module_name); +} + std::string PhilipsWizController::GetManufacturer() { return("Philips"); @@ -74,30 +71,15 @@ std::string PhilipsWizController::GetUniqueID() return(module_mac); } -void PhilipsWizController::SetColor(unsigned char red, unsigned char green, unsigned char blue) -{ - this->red = red; - this->green = green; - this->blue = blue; - - SendSetPilot(); -} - -void PhilipsWizController::SetBrightness(unsigned char brightness) -{ - this->brightness = brightness; - - SendSetPilot(); -} - -void PhilipsWizController::SendSetPilot() +void PhilipsWizController::SetColor(unsigned char red, unsigned char green, unsigned char blue, unsigned char brightness) { json command; /*-----------------------------------------------------------------*\ | Fill in the setPilot command with RGB and brightness information. | | The bulb will not respond to 0, 0, 0, so if all channels are zero,| - | set the state to off. Otherwise, set it to on. | + | set the state to off. Otherwise, set it to on. As we're also | + | running direct the bulb needs to be set back to max brightness. | \*-----------------------------------------------------------------*/ command["method"] = "setPilot"; command["params"]["r"] = red; @@ -123,6 +105,25 @@ void PhilipsWizController::SendSetPilot() port.udp_write((char *)command_str.c_str(), command_str.length() + 1); } +void PhilipsWizController::SetScene(int scene, unsigned char brightness) +{ + json command; + + /*------------------------------------------------------------*\ + | Fill in the setPilot command with Scene information. | + \*------------------------------------------------------------*/ + command["method"] = "setPilot"; + command["params"]["sceneId"] = scene; + command["params"]["dimming"] = brightness; + + /*------------------------------------------------------------*\ + | Convert the JSON object to a string and write it | + \*------------------------------------------------------------*/ + std::string command_str = command.dump(); + + port.udp_write((char*)command_str.c_str(), command_str.length() + 1); +} + void PhilipsWizController::ReceiveThreadFunction() { char recv_buf[1024]; diff --git a/Controllers/PhilipsWizController/PhilipsWizController.h b/Controllers/PhilipsWizController/PhilipsWizController.h index 27c2c8d8..aeeb09ab 100644 --- a/Controllers/PhilipsWizController/PhilipsWizController.h +++ b/Controllers/PhilipsWizController/PhilipsWizController.h @@ -13,6 +13,46 @@ #pragma once +#define PHILIPSWIZ_BRIGHTNESS_MAX 100 +#define PHILIPSWIZ_BRIGHTNESS_MIN 10 + +enum +{ + PHILLIPSWIZ_MODE_STATIC = 0, + PHILLIPSWIZ_MODE_OCEAN = 1, + PHILLIPSWIZ_MODE_ROMANCE = 2, + PHILLIPSWIZ_MODE_SUNSET = 3, + PHILLIPSWIZ_MODE_PARTY = 4, + PHILLIPSWIZ_MODE_FIREPLACE = 5, + PHILLIPSWIZ_MODE_COZY = 6, + PHILLIPSWIZ_MODE_FOREST = 7, + PHILLIPSWIZ_MODE_PASTEL_COLORS = 8, + PHILLIPSWIZ_MODE_WAKE_UP = 9, + PHILLIPSWIZ_MODE_BEDTIME = 10, + PHILLIPSWIZ_MODE_WARM_WHITE = 11, + PHILLIPSWIZ_MODE_DAYLIGHT = 12, + PHILLIPSWIZ_MODE_COOL_WHITE = 13, + PHILLIPSWIZ_MODE_NIGHT_LIGHT = 14, + PHILLIPSWIZ_MODE_FOCUS = 15, + PHILLIPSWIZ_MODE_RELAX = 16, + PHILLIPSWIZ_MODE_TRUE_COLORS = 17, + PHILLIPSWIZ_MODE_TV_TIME = 18, + PHILLIPSWIZ_MODE_PLANTGROWTH = 19, + PHILLIPSWIZ_MODE_SPRING = 20, + PHILLIPSWIZ_MODE_SUMMER = 21, + PHILLIPSWIZ_MODE_FALL = 22, + PHILLIPSWIZ_MODE_DEEPDIVE = 23, + PHILLIPSWIZ_MODE_JUNGLE = 24, + PHILLIPSWIZ_MODE_MOJITO = 25, + PHILLIPSWIZ_MODE_CLUB = 26, + PHILLIPSWIZ_MODE_CHRISTMAS = 27, + PHILLIPSWIZ_MODE_HALLOWEEN = 28, + PHILLIPSWIZ_MODE_CANDLELIGHT = 29, + PHILLIPSWIZ_MODE_GOLDEN_WHITE = 30, + PHILLIPSWIZ_MODE_PULSE = 31, + PHILLIPSWIZ_MODE_STEAMPUNK = 32 +}; + class PhilipsWizController { public: @@ -22,11 +62,13 @@ public: std::string GetLocation(); std::string GetName(); std::string GetVersion(); + std::string GetModuleName(); std::string GetManufacturer(); std::string GetUniqueID(); - void SetBrightness(unsigned char brightness); - void SetColor(unsigned char red, unsigned char green, unsigned char blue); + void SetColor(unsigned char red, unsigned char green, unsigned char blue, unsigned char brightness); + + void SetScene(int scene, unsigned char brightness); void ReceiveThreadFunction(); void RequestSystemConfig(); diff --git a/Controllers/PhilipsWizController/RGBController_PhilipsWiz.cpp b/Controllers/PhilipsWizController/RGBController_PhilipsWiz.cpp index d75fbb2d..9ab9b559 100644 --- a/Controllers/PhilipsWizController/RGBController_PhilipsWiz.cpp +++ b/Controllers/PhilipsWizController/RGBController_PhilipsWiz.cpp @@ -33,14 +33,339 @@ RGBController_PhilipsWiz::RGBController_PhilipsWiz(PhilipsWizController* control mode Direct; Direct.name = "Direct"; - Direct.value = 0; + Direct.value = PHILLIPSWIZ_MODE_STATIC; Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; Direct.color_mode = MODE_COLORS_PER_LED; - Direct.brightness = 100; - Direct.brightness_min = 10; - Direct.brightness_max = 100; + Direct.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + Direct.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Direct.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; modes.push_back(Direct); + std::string model = controller->GetModuleName(); + if (model.find("RGB") != std::string::npos) + { + mode WarmWhite; + WarmWhite.name = "Warm White"; + WarmWhite.value = PHILLIPSWIZ_MODE_WARM_WHITE; + WarmWhite.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + WarmWhite.color_mode = MODE_COLORS_PER_LED; + WarmWhite.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + WarmWhite.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + WarmWhite.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(WarmWhite); + + mode Daylight; + Daylight.name = "Daylight"; + Daylight.value = PHILLIPSWIZ_MODE_DAYLIGHT; + Daylight.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Daylight.color_mode = MODE_COLORS_PER_LED; + Daylight.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Daylight.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Daylight.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Daylight); + + mode CoolWhite; + CoolWhite.name = "Cool White"; + CoolWhite.value = PHILLIPSWIZ_MODE_COOL_WHITE; + CoolWhite.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + CoolWhite.color_mode = MODE_COLORS_PER_LED; + CoolWhite.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + CoolWhite.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + CoolWhite.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(CoolWhite); + + mode Ocean; + Ocean.name = "Ocean"; + Ocean.value = PHILLIPSWIZ_MODE_OCEAN; + Ocean.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Ocean.color_mode = MODE_COLORS_PER_LED; + Ocean.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Ocean.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Ocean.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Ocean); + + mode Romance; + Romance.name = "Romance"; + Romance.value = PHILLIPSWIZ_MODE_ROMANCE; + Romance.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Romance.color_mode = MODE_COLORS_PER_LED; + Romance.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Romance.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Romance.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Romance); + + mode Sunset; + Sunset.name = "Sunset"; + Sunset.value = PHILLIPSWIZ_MODE_SUNSET; + Sunset.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Sunset.color_mode = MODE_COLORS_PER_LED; + Sunset.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Sunset.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Sunset.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Sunset); + + mode Party; + Party.name = "Party"; + Party.value = PHILLIPSWIZ_MODE_PARTY; + Party.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Party.color_mode = MODE_COLORS_PER_LED; + Party.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Party.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Party.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Party); + + mode Fireplace; + Fireplace.name = "Fireplace"; + Fireplace.value = PHILLIPSWIZ_MODE_FIREPLACE; + Fireplace.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Fireplace.color_mode = MODE_COLORS_PER_LED; + Fireplace.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Fireplace.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Fireplace.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Fireplace); + + mode Cozy; + Cozy.name = "Cozy"; + Cozy.value = PHILLIPSWIZ_MODE_COZY; + Cozy.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Cozy.color_mode = MODE_COLORS_PER_LED; + Cozy.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Cozy.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Cozy.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Cozy); + + mode Forest; + Forest.name = "Forest"; + Forest.value = PHILLIPSWIZ_MODE_FOREST; + Forest.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Forest.color_mode = MODE_COLORS_PER_LED; + Forest.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Forest.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Forest.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Forest); + + mode PastelColors; + PastelColors.name = "Pastel Colors"; + PastelColors.value = PHILLIPSWIZ_MODE_PASTEL_COLORS; + PastelColors.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + PastelColors.color_mode = MODE_COLORS_PER_LED; + PastelColors.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + PastelColors.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + PastelColors.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(PastelColors); + + mode WakeUp; + WakeUp.name = "Wake up"; + WakeUp.value = PHILLIPSWIZ_MODE_WAKE_UP; + WakeUp.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + WakeUp.color_mode = MODE_COLORS_PER_LED; + WakeUp.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + WakeUp.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + WakeUp.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(WakeUp); + + mode Bedtime; + Bedtime.name = "Bedtime"; + Bedtime.value = PHILLIPSWIZ_MODE_BEDTIME; + Bedtime.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Bedtime.color_mode = MODE_COLORS_PER_LED; + Bedtime.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Bedtime.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Bedtime.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Bedtime); + + mode NightLight; + NightLight.name = "Night light"; + NightLight.value = PHILLIPSWIZ_MODE_NIGHT_LIGHT; + NightLight.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + NightLight.color_mode = MODE_COLORS_PER_LED; + NightLight.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + NightLight.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + NightLight.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(NightLight); + + mode Focus; + Focus.name = "Focus"; + Focus.value = PHILLIPSWIZ_MODE_FOCUS; + Focus.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Focus.color_mode = MODE_COLORS_PER_LED; + Focus.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Focus.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Focus.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Focus); + + mode Relax; + Relax.name = "Relax"; + Relax.value = PHILLIPSWIZ_MODE_RELAX; + Relax.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Relax.color_mode = MODE_COLORS_PER_LED; + Relax.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Relax.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Relax.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Relax); + + mode TrueColors; + TrueColors.name = "True colors"; + TrueColors.value = PHILLIPSWIZ_MODE_TRUE_COLORS; + TrueColors.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + TrueColors.color_mode = MODE_COLORS_PER_LED; + TrueColors.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + TrueColors.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + TrueColors.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(TrueColors); + + mode TvTime; + TvTime.name = "TV time"; + TvTime.value = PHILLIPSWIZ_MODE_TV_TIME; + TvTime.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + TvTime.color_mode = MODE_COLORS_PER_LED; + TvTime.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + TvTime.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + TvTime.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(TvTime); + + mode Plantgrowth; + Plantgrowth.name = "Plantgrowth"; + Plantgrowth.value = PHILLIPSWIZ_MODE_PLANTGROWTH; + Plantgrowth.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Plantgrowth.color_mode = MODE_COLORS_PER_LED; + Plantgrowth.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Plantgrowth.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Plantgrowth.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Plantgrowth); + + mode Spring; + Spring.name = "Spring"; + Spring.value = PHILLIPSWIZ_MODE_SPRING; + Spring.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Spring.color_mode = MODE_COLORS_PER_LED; + Spring.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Spring.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Spring.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Spring); + + mode Summer; + Summer.name = "Summer"; + Summer.value = PHILLIPSWIZ_MODE_SUMMER; + Summer.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Summer.color_mode = MODE_COLORS_PER_LED; + Summer.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Summer.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Summer.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Summer); + + mode Fall; + Fall.name = "Fall"; + Fall.value = PHILLIPSWIZ_MODE_FALL; + Fall.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Fall.color_mode = MODE_COLORS_PER_LED; + Fall.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Fall.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Fall.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Fall); + + mode Deepdive; + Deepdive.name = "Deepdive"; + Deepdive.value = PHILLIPSWIZ_MODE_DEEPDIVE; + Deepdive.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Deepdive.color_mode = MODE_COLORS_PER_LED; + Deepdive.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Deepdive.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Deepdive.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Deepdive); + + mode Jungle; + Jungle.name = "Jungle"; + Jungle.value = PHILLIPSWIZ_MODE_JUNGLE; + Jungle.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Jungle.color_mode = MODE_COLORS_PER_LED; + Jungle.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Jungle.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Jungle.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Jungle); + + mode Mojito; + Mojito.name = "Mojito"; + Mojito.value = PHILLIPSWIZ_MODE_MOJITO; + Mojito.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Mojito.color_mode = MODE_COLORS_PER_LED; + Mojito.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Mojito.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Mojito.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Mojito); + + mode Club; + Club.name = "Club"; + Club.value = PHILLIPSWIZ_MODE_CLUB; + Club.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Club.color_mode = MODE_COLORS_PER_LED; + Club.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Club.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Club.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Club); + + mode Christmas; + Christmas.name = "Christmas"; + Christmas.value = PHILLIPSWIZ_MODE_CHRISTMAS; + Christmas.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Christmas.color_mode = MODE_COLORS_PER_LED; + Christmas.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Christmas.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Christmas.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Christmas); + + mode Halloween; + Halloween.name = "Halloween"; + Halloween.value = PHILLIPSWIZ_MODE_HALLOWEEN; + Halloween.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Halloween.color_mode = MODE_COLORS_PER_LED; + Halloween.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Halloween.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Halloween.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Halloween); + + mode Candlelight; + Candlelight.name = "Candlelight"; + Candlelight.value = PHILLIPSWIZ_MODE_CANDLELIGHT; + Candlelight.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Candlelight.color_mode = MODE_COLORS_PER_LED; + Candlelight.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Candlelight.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Candlelight.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Candlelight); + + mode GoldenWhite; + GoldenWhite.name = "Golden white"; + GoldenWhite.value = PHILLIPSWIZ_MODE_GOLDEN_WHITE; + GoldenWhite.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + GoldenWhite.color_mode = MODE_COLORS_PER_LED; + GoldenWhite.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + GoldenWhite.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + GoldenWhite.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(GoldenWhite); + + mode Pulse; + Pulse.name = "Pulse"; + Pulse.value = PHILLIPSWIZ_MODE_PULSE; + Pulse.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Pulse.color_mode = MODE_COLORS_PER_LED; + Pulse.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Pulse.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Pulse.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Pulse); + + mode Steampunk; + Steampunk.name = "Steampunk"; + Steampunk.value = PHILLIPSWIZ_MODE_STEAMPUNK; + Steampunk.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Steampunk.color_mode = MODE_COLORS_PER_LED; + Steampunk.brightness_min = PHILIPSWIZ_BRIGHTNESS_MIN; + Steampunk.brightness_max = PHILIPSWIZ_BRIGHTNESS_MAX; + Steampunk.brightness = PHILIPSWIZ_BRIGHTNESS_MAX; + modes.push_back(Steampunk); + + } + SetupZones(); } @@ -77,11 +402,14 @@ void RGBController_PhilipsWiz::ResizeZone(int /*zone*/, int /*new_size*/) void RGBController_PhilipsWiz::DeviceUpdateLEDs() { - unsigned char red = RGBGetRValue(colors[0]); - unsigned char grn = RGBGetGValue(colors[0]); - unsigned char blu = RGBGetBValue(colors[0]); + if (modes[active_mode].value == PHILLIPSWIZ_MODE_STATIC) + { + unsigned char red = RGBGetRValue(colors[0]); + unsigned char grn = RGBGetGValue(colors[0]); + unsigned char blu = RGBGetBValue(colors[0]); - controller->SetColor(red, grn, blu); + controller->SetColor(red, grn, blu, modes[active_mode].brightness); + } } void RGBController_PhilipsWiz::UpdateZoneLEDs(int /*zone*/) @@ -96,12 +424,8 @@ void RGBController_PhilipsWiz::UpdateSingleLED(int /*led*/) void RGBController_PhilipsWiz::DeviceUpdateMode() { - if(modes[active_mode].flags & MODE_FLAG_HAS_BRIGHTNESS) + if (modes[active_mode].value != PHILLIPSWIZ_MODE_STATIC) { - controller->SetBrightness(modes[active_mode].brightness); - } - else - { - controller->SetBrightness(100); + controller->SetScene(modes[active_mode].value, modes[active_mode].brightness); } }