/** \file HueDeviceTypes.cpp Copyright Notice\n Copyright (C) 2017 Jan Rogall - developer\n Copyright (C) 2017 Moritz Wirger - developer\n This file is part of hueplusplus. hueplusplus is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. hueplusplus is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with hueplusplus. If not, see . **/ #include "hueplusplus/HueDeviceTypes.h" #include #include "hueplusplus/HueExceptionMacro.h" namespace hueplusplus { namespace { const std::set& getGamutBTypes() { static const std::set c_EXTENDEDCOLORLIGHT_GAMUTB_TYPES = {"LCT001", "LCT002", "LCT003", "LCT007", "LLM001"}; return c_EXTENDEDCOLORLIGHT_GAMUTB_TYPES; }; const std::set& getGamutCTypes() { static const std::set c_EXTENDEDCOLORLIGHT_GAMUTC_TYPES = {"LCT010", "LCT011", "LCT012", "LCT014", "LCT015", "LCT016", "LLC020", "LST002"}; return c_EXTENDEDCOLORLIGHT_GAMUTC_TYPES; } const std::set& getGamutATypes() { static const std::set c_EXTENDEDCOLORLIGHT_GAMUTA_TYPES = {"LST001", "LLC005", "LLC006", "LLC007", "LLC010", "LLC011", "LLC012", "LLC013", "LLC014"}; return c_EXTENDEDCOLORLIGHT_GAMUTA_TYPES; } const std::set& getNoColorTypes() { static const std::set c_DIMMABLELIGHT_NO_COLOR_TYPES = {"LWB004", "LWB006", "LWB007", "LWB010", "LWB014", "LDF001", "LDF002", "LDD001", "LDD002", "MWM001"}; return c_DIMMABLELIGHT_NO_COLOR_TYPES; } const std::set& getNonDimmableTypes() { static const std::set c_NON_DIMMABLE_TYPES = {"Plug 01"}; return c_NON_DIMMABLE_TYPES; } const std::set& getTemperatureLightTypes() { static const std::set c_TEMPERATURELIGHT_TYPES = {"LLM010", "LLM011", "LLM012", "LTW001", "LTW004", "LTW010", "LTW011", "LTW012", "LTW013", "LTW014", "LTW015", "LTP001", "LTP002", "LTP003", "LTP004", "LTP005", "LTD003", "LTF001", "LTF002", "LTC001", "LTC002", "LTC003", "LTC004", "LTC011", "LTC012", "LTD001", "LTD002", "LFF001", "LTT001", "LDT001"}; return c_TEMPERATURELIGHT_TYPES; } } // namespace auto MakeHueLight::operator()(std::string type, int id, HueCommandAPI commands, std::shared_ptr simpleBrightnessStrategy, std::shared_ptr extendedColorTemperatureStrategy, std::shared_ptr simpleColorTemperatureStrategy, std::shared_ptr extendedColorHueStrategy, std::shared_ptr simpleColorHueStrategy) -> HueLight { if (getGamutBTypes().count(type)) { auto light = HueLight( id, commands, simpleBrightnessStrategy, extendedColorTemperatureStrategy, extendedColorHueStrategy); light.colorType = ColorType::GAMUT_B; return light; } else if (getGamutCTypes().count(type)) { auto light = HueLight( id, commands, simpleBrightnessStrategy, extendedColorTemperatureStrategy, extendedColorHueStrategy); light.colorType = ColorType::GAMUT_C; return light; } else if (getGamutATypes().count(type)) { auto light = HueLight(id, commands, simpleBrightnessStrategy, nullptr, simpleColorHueStrategy); light.colorType = ColorType::GAMUT_A; return light; } else if (getNoColorTypes().count(type)) { auto light = HueLight(id, commands, simpleBrightnessStrategy, nullptr, nullptr); light.colorType = ColorType::NONE; return light; } else if (getNonDimmableTypes().count(type)) { auto light = HueLight(id, commands); light.colorType = ColorType::NONE; return light; } else if (getTemperatureLightTypes().count(type)) { auto light = HueLight(id, commands, simpleBrightnessStrategy, simpleColorTemperatureStrategy, nullptr); light.colorType = ColorType::TEMPERATURE; return light; } std::cerr << "Could not determine HueLight type:" << type << "!\n"; throw HueException(CURRENT_FILE_INFO, "Could not determine HueLight type!"); } } // namespace hueplusplus