Commit b6d5d07cf15e2d8bd2b5fea3ea66e9af124adba7
Committed by
Moritz Wirger
1 parent
8642e827
Move everything into namespace hueplusplus.
Showing
52 changed files
with
2314 additions
and
2233 deletions
CMakeLists.txt
| @@ -11,6 +11,15 @@ set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) | @@ -11,6 +11,15 @@ set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) | ||
| 11 | 11 | ||
| 12 | project(hueplusplus LANGUAGES CXX) | 12 | project(hueplusplus LANGUAGES CXX) |
| 13 | 13 | ||
| 14 | +# check whether hueplusplus is compiled directly or included as a subdirectory | ||
| 15 | +if(NOT DEFINED hueplusplus_master_project) | ||
| 16 | + if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) | ||
| 17 | + set(hueplusplus_master_project ON) | ||
| 18 | + else() | ||
| 19 | + set(hueplusplus_master_project OFF) | ||
| 20 | + endif() | ||
| 21 | +endif() | ||
| 22 | + | ||
| 14 | # options to set | 23 | # options to set |
| 15 | option(hueplusplus_TESTS "Build tests" OFF) | 24 | option(hueplusplus_TESTS "Build tests" OFF) |
| 16 | 25 | ||
| @@ -27,7 +36,7 @@ endif() | @@ -27,7 +36,7 @@ endif() | ||
| 27 | 36 | ||
| 28 | # Set default build type if none was specified | 37 | # Set default build type if none was specified |
| 29 | set(default_build_type "Release") | 38 | set(default_build_type "Release") |
| 30 | -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) | 39 | +if(hueplusplus_master_project AND (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)) |
| 31 | message(STATUS "Setting build type to '${default_build_type}' as none was specified") | 40 | message(STATUS "Setting build type to '${default_build_type}' as none was specified") |
| 32 | set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE) | 41 | set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE) |
| 33 | # Set possible values for cmake-gui | 42 | # Set possible values for cmake-gui |
README.md
| @@ -26,16 +26,17 @@ To start searching for a Hue Bridge you will need to choose an IHttpHandler and | @@ -26,16 +26,17 @@ To start searching for a Hue Bridge you will need to choose an IHttpHandler and | ||
| 26 | Then create a HueFinder object with the handler. | 26 | Then create a HueFinder object with the handler. |
| 27 | The handler is needed, because it tells the finder which functions to use to communicate with a bridge or your local network. | 27 | The handler is needed, because it tells the finder which functions to use to communicate with a bridge or your local network. |
| 28 | After that you can call FindBridges(), which will return a vector containing the ip and mac address of all found Bridges. | 28 | After that you can call FindBridges(), which will return a vector containing the ip and mac address of all found Bridges. |
| 29 | -If no Bridges were found the vector is empty, so make sure that in that case you provide an ip and mac address. | ||
| 30 | ```C++ | 29 | ```C++ |
| 31 | -// For windows use std::make_shared<WinHttpHandler>(); | ||
| 32 | -handler = std::make_shared<LinHttpHandler>(); | ||
| 33 | -HueFinder finder(handler); | ||
| 34 | -std::vector<HueFinder::HueIdentification> bridges = finder.FindBridges(); | 30 | +// For windows use std::make_shared<hueplusplus::WinHttpHandler>(); |
| 31 | +handler = std::make_shared<hueplusplus::LinHttpHandler>(); | ||
| 32 | +hueplusplus::HueFinder finder(handler); | ||
| 33 | +std::vector<hueplusplus::HueFinder::HueIdentification> bridges = finder.FindBridges(); | ||
| 35 | if (bridges.empty()) | 34 | if (bridges.empty()) |
| 36 | { | 35 | { |
| 37 | - bridges.push_back({ "<ip address>", "<mac address>" }); | 36 | + std::cerr << "No bridges found\n"; |
| 37 | + return; | ||
| 38 | } | 38 | } |
| 39 | + | ||
| 39 | ``` | 40 | ``` |
| 40 | 41 | ||
| 41 | ### Authenticate Bridges | 42 | ### Authenticate Bridges |
| @@ -43,19 +44,19 @@ If you have found the Bridge you were looking for, you can then move on with the | @@ -43,19 +44,19 @@ If you have found the Bridge you were looking for, you can then move on with the | ||
| 43 | To get a new username from the Bridge (for now) you simply call GetBridge(bridges[\<index\>]), | 44 | To get a new username from the Bridge (for now) you simply call GetBridge(bridges[\<index\>]), |
| 44 | where index is your preferred Bridge from the part [Searching for Bridges](#searchingBridges). | 45 | where index is your preferred Bridge from the part [Searching for Bridges](#searchingBridges). |
| 45 | ```C++ | 46 | ```C++ |
| 46 | -Hue bridge = finder.GetBridge(bridges[0]); | 47 | +hueplusplus::Hue bridge = finder.GetBridge(bridges[0]); |
| 47 | ``` | 48 | ``` |
| 48 | If you on the other hand already have a username you can add your bridge like so | 49 | If you on the other hand already have a username you can add your bridge like so |
| 49 | ```C++ | 50 | ```C++ |
| 50 | finder.AddUsername(bridges[0].mac, "<username>"); | 51 | finder.AddUsername(bridges[0].mac, "<username>"); |
| 51 | -Hue bridge = finder.GetBridge(bridges[0]); | 52 | +hueplusplus::Hue bridge = finder.GetBridge(bridges[0]); |
| 52 | ``` | 53 | ``` |
| 53 | If you do not want to use the HueFinder or you already know the ip and username of your bridge you have the option to create your own Hue object. | 54 | If you do not want to use the HueFinder or you already know the ip and username of your bridge you have the option to create your own Hue object. |
| 54 | Here you will need to provide the ip address, the port number, a username and an HttpHandler | 55 | Here you will need to provide the ip address, the port number, a username and an HttpHandler |
| 55 | ```C++ | 56 | ```C++ |
| 56 | -// For windows use std::make_shared<WinHttpHandler>(); | ||
| 57 | -handler = std::make_shared<LinHttpHandler>(); | ||
| 58 | -Hue bridge("192.168.2.102", 80, "<username>", handler); | 57 | +// For windows use std::make_shared<hueplusplus::WinHttpHandler>(); |
| 58 | +handler = std::make_shared<hueplusplus::LinHttpHandler>(); | ||
| 59 | +hueplusplus::Hue bridge("192.168.2.102", 80, "<username>", handler); | ||
| 59 | ``` | 60 | ``` |
| 60 | 61 | ||
| 61 | ### Controlling lights | 62 | ### Controlling lights |
| @@ -63,11 +64,12 @@ If you have your Bridge all set up, you can now control its lights. | @@ -63,11 +64,12 @@ If you have your Bridge all set up, you can now control its lights. | ||
| 63 | For that create a new HueLight object and call getLight(\<id\>) on your bridge object to get a reference to a specific light, where id | 64 | For that create a new HueLight object and call getLight(\<id\>) on your bridge object to get a reference to a specific light, where id |
| 64 | is the id of the light set internally by the Hue Bridge. | 65 | is the id of the light set internally by the Hue Bridge. |
| 65 | ```C++ | 66 | ```C++ |
| 66 | -HueLight light1 = bridge.getLight(1); | 67 | +hueplusplus::HueLight light1 = bridge.getLight(1); |
| 67 | ``` | 68 | ``` |
| 68 | -If you don't know the id of a specific light or want to get an overview over all lights that are controlled by your bridge, you can get a vector containing them by calling getAllLights() on your bridge object. If no lights are found the vector will be empty. | 69 | +If you don't know the id of a specific light or want to get an overview over all lights that are controlled by your bridge, |
| 70 | +you can get a vector containing them by calling getAllLights() on your bridge object. If no lights are found the vector will be empty. | ||
| 69 | ```C++ | 71 | ```C++ |
| 70 | -std::vector<std::reference_wrapper<HueLight>> lights = bridge.getAllLights(); | 72 | +std::vector<std::reference_wrapper<hueplusplus::HueLight>> lights = bridge.getAllLights(); |
| 71 | ``` | 73 | ``` |
| 72 | If you now want to control a light, call a specific function of it. | 74 | If you now want to control a light, call a specific function of it. |
| 73 | ```C++ | 75 | ```C++ |
| @@ -84,7 +86,7 @@ specific function, but nothing will happen. For that you might want to check wha | @@ -84,7 +86,7 @@ specific function, but nothing will happen. For that you might want to check wha | ||
| 84 | of a light you are controlling. For that you can call the function getColorType(), which will return | 86 | of a light you are controlling. For that you can call the function getColorType(), which will return |
| 85 | a ColorType. | 87 | a ColorType. |
| 86 | ```C++ | 88 | ```C++ |
| 87 | -ColorType type1 = light1.getColorType(); | 89 | +hueplusplus::ColorType type1 = light1.getColorType(); |
| 88 | ``` | 90 | ``` |
| 89 | There's also a new way to check whether specific functions of a light are available: | 91 | There's also a new way to check whether specific functions of a light are available: |
| 90 | ```C++ | 92 | ```C++ |
| @@ -126,21 +128,21 @@ If you have a project that already uses CMake you probably want to add the huepl | @@ -126,21 +128,21 @@ If you have a project that already uses CMake you probably want to add the huepl | ||
| 126 | For that the best way is to use find_package(). | 128 | For that the best way is to use find_package(). |
| 127 | When cmake finds the hueplusplus library you can then link against either the shared or static version of the library. | 129 | When cmake finds the hueplusplus library you can then link against either the shared or static version of the library. |
| 128 | ```cmake | 130 | ```cmake |
| 129 | -find_package(hueplusplus) | 131 | +find_package(hueplusplus REQUIRED) |
| 130 | 132 | ||
| 131 | -target_link_libraries(<executable> hueplusplusstatic) | 133 | +target_link_libraries(<executable> PUBLIC hueplusplusstatic) |
| 132 | ``` | 134 | ``` |
| 133 | But this will only work if the hueplusplus library is already installed. | 135 | But this will only work if the hueplusplus library is already installed. |
| 134 | To get around this problem there is a pretty awesome way. | 136 | To get around this problem there is a pretty awesome way. |
| 135 | If you have the hueplusplus repository included in your project repository (as a submodule) or know where the folder lives you can do the following: | 137 | If you have the hueplusplus repository included in your project repository (as a submodule) or know where the folder lives you can do the following: |
| 136 | ```cmake | 138 | ```cmake |
| 137 | -find_package(hueplusplus) | 139 | +find_package(hueplusplus QUIET) |
| 138 | if(NOT hueplusplus_FOUND) | 140 | if(NOT hueplusplus_FOUND) |
| 139 | message(STATUS "-- hueplusplus not found, building it") | 141 | message(STATUS "-- hueplusplus not found, building it") |
| 140 | - add_subdirectory("${CMAKE_SOURCE_DIR}/<path to directory>/hueplusplus" "${CMAKE_BINARY_DIR}/hueplusplus") | 142 | + add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/<path to directory>/hueplusplus" "${CMAKE_CURRENT_BINARY_DIR}/hueplusplus") |
| 141 | endif() | 143 | endif() |
| 142 | 144 | ||
| 143 | -target_link_libraries(<executable> hueplusplusstatic) | 145 | +target_link_libraries(<executable> PUBLIC hueplusplusstatic) |
| 144 | ``` | 146 | ``` |
| 145 | This will check if the hueplusplus library was found by find_package() and if not it will use the specified path to the library source and compile it during the build process. | 147 | This will check if the hueplusplus library was found by find_package() and if not it will use the specified path to the library source and compile it during the build process. |
| 146 | 148 |
include/hueplusplus/BaseHttpHandler.h
| @@ -32,144 +32,147 @@ | @@ -32,144 +32,147 @@ | ||
| 32 | 32 | ||
| 33 | #include "json/json.hpp" | 33 | #include "json/json.hpp" |
| 34 | 34 | ||
| 35 | -//! Base class for classes that handle http requests and multicast requests | ||
| 36 | -class BaseHttpHandler : public IHttpHandler | 35 | +namespace hueplusplus |
| 37 | { | 36 | { |
| 38 | -public: | ||
| 39 | - //! \brief Virtual dtor | ||
| 40 | - virtual ~BaseHttpHandler() = default; | ||
| 41 | - | ||
| 42 | - //! \brief Send a message to a specified host and return the body of the response. | ||
| 43 | - //! | ||
| 44 | - //! \param msg The message that should sent to the specified address | ||
| 45 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 46 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 47 | - //! \return The body of the response of the host as a string | ||
| 48 | - //! \throws std::system_error when system or socket operations fail | ||
| 49 | - //! \throws HueException when response contained no body | ||
| 50 | - std::string sendGetHTTPBody(const std::string& msg, const std::string& adr, int port = 80) const override; | ||
| 51 | - | ||
| 52 | - //! \brief Send a HTTP request with the given method to the specified host and return the body of the response. | ||
| 53 | - //! | ||
| 54 | - //! \param method HTTP method type e.g. GET, HEAD, POST, PUT, DELETE, ... | ||
| 55 | - //! \param uri Uniform Resource Identifier in the request | ||
| 56 | - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 57 | - //! \param body Request body, may be empty | ||
| 58 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 59 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 60 | - //! \return Body of the response of the host | ||
| 61 | - //! \throws std::system_error when system or socket operations fail | ||
| 62 | - //! \throws HueException when response contained no body | ||
| 63 | - std::string sendHTTPRequest(const std::string& method, const std::string& uri, const std::string& contentType, | ||
| 64 | - const std::string& body, const std::string& adr, int port = 80) const override; | ||
| 65 | - | ||
| 66 | - //! \brief Send a HTTP GET request to the specified host and return the body of the response. | ||
| 67 | - //! | ||
| 68 | - //! \param uri Uniform Resource Identifier in the request | ||
| 69 | - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 70 | - //! \param body Request body, may be empty | ||
| 71 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 72 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 73 | - //! that specifies the port to which the request is sent to. Default is 80 | ||
| 74 | - //! \return Body of the response of the host | ||
| 75 | - //! \throws std::system_error when system or socket operations fail | ||
| 76 | - //! \throws HueException when response contained no body | ||
| 77 | - std::string GETString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 78 | - const std::string& adr, int port = 80) const override; | ||
| 79 | - | ||
| 80 | - //! \brief Send a HTTP POST request to the specified host and return the body of the response. | ||
| 81 | - //! | ||
| 82 | - //! \param uri Uniform Resource Identifier in the request | ||
| 83 | - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 84 | - //! \param body Request body, may be empty | ||
| 85 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 86 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 87 | - //! that specifies the port to which the request is sent to. Default is 80 | ||
| 88 | - //! \return Body of the response of the host | ||
| 89 | - //! \throws std::system_error when system or socket operations fail | ||
| 90 | - //! \throws HueException when response contained no body | ||
| 91 | - std::string POSTString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 92 | - const std::string& adr, int port = 80) const override; | ||
| 93 | - | ||
| 94 | - //! \brief Send a HTTP PUT request to the specified host and return the body of the response. | ||
| 95 | - //! | ||
| 96 | - //! \param uri Uniform Resource Identifier in the request | ||
| 97 | - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 98 | - //! \param body Request body, may be empty | ||
| 99 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 100 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 101 | - //! that specifies the port to which the request is sent to. Default is 80 | ||
| 102 | - //! \return Body of the response of the host | ||
| 103 | - //! \throws std::system_error when system or socket operations fail | ||
| 104 | - //! \throws HueException when response contained no body | ||
| 105 | - std::string PUTString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 106 | - const std::string& adr, int port = 80) const override; | ||
| 107 | - | ||
| 108 | - //! \brief Send a HTTP DELETE request to the specified host and return the body of the response. | ||
| 109 | - //! | ||
| 110 | - //! \param uri Uniform Resource Identifier in the request | ||
| 111 | - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 112 | - //! \param body Request body, may be empty | ||
| 113 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 114 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 115 | - //! that specifies the port to which the request is sent to. Default is 80 | ||
| 116 | - //! \return Body of the response of the host | ||
| 117 | - //! \throws std::system_error when system or socket operations fail | ||
| 118 | - //! \throws HueException when response contained no body | ||
| 119 | - std::string DELETEString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 120 | - const std::string& adr, int port = 80) const override; | ||
| 121 | - | ||
| 122 | - //! \brief Send a HTTP GET request to the specified host and return the body of the response parsed as JSON. | ||
| 123 | - //! | ||
| 124 | - //! \param uri Uniform Resource Identifier in the request | ||
| 125 | - //! \param body Request body, may be empty | ||
| 126 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 127 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 128 | - //! \return Parsed body of the response of the host | ||
| 129 | - //! \throws std::system_error when system or socket operations fail | ||
| 130 | - //! \throws HueException when response contained no body | ||
| 131 | - //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 132 | - nlohmann::json GETJson( | ||
| 133 | - const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override; | ||
| 134 | - | ||
| 135 | - //! \brief Send a HTTP POST request to the specified host and return the body of the response parsed as JSON. | ||
| 136 | - //! | ||
| 137 | - //! \param uri Uniform Resource Identifier in the request | ||
| 138 | - //! \param body Request body, may be empty | ||
| 139 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 140 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 141 | - //! \return Parsed body of the response of the host | ||
| 142 | - //! \throws std::system_error when system or socket operations fail | ||
| 143 | - //! \throws HueException when response contained no body | ||
| 144 | - //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 145 | - nlohmann::json POSTJson( | ||
| 146 | - const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override; | ||
| 147 | - | ||
| 148 | - //! \brief Send a HTTP PUT request to the specified host and return the body of the response parsed as JSON. | ||
| 149 | - //! | ||
| 150 | - //! \param uri Uniform Resource Identifier in the request | ||
| 151 | - //! \param body Request body, may be empty | ||
| 152 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 153 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 154 | - //! \return Parsed body of the response of the host | ||
| 155 | - //! \throws std::system_error when system or socket operations fail | ||
| 156 | - //! \throws HueException when response contained no body | ||
| 157 | - //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 158 | - nlohmann::json PUTJson( | ||
| 159 | - const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override; | ||
| 160 | - | ||
| 161 | - //! \brief Send a HTTP DELETE request to the specified host and return the body of the response parsed as JSON. | ||
| 162 | - //! | ||
| 163 | - //! \param uri Uniform Resource Identifier in the request | ||
| 164 | - //! \param body Request body, may be empty | ||
| 165 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 166 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 167 | - //! \return Parsed body of the response of the host | ||
| 168 | - //! \throws std::system_error when system or socket operations fail | ||
| 169 | - //! \throws HueException when response contained no body | ||
| 170 | - //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 171 | - nlohmann::json DELETEJson( | ||
| 172 | - const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override; | ||
| 173 | -}; | 37 | + //! Base class for classes that handle http requests and multicast requests |
| 38 | + class BaseHttpHandler : public IHttpHandler | ||
| 39 | + { | ||
| 40 | + public: | ||
| 41 | + //! \brief Virtual dtor | ||
| 42 | + virtual ~BaseHttpHandler() = default; | ||
| 43 | + | ||
| 44 | + //! \brief Send a message to a specified host and return the body of the response. | ||
| 45 | + //! | ||
| 46 | + //! \param msg The message that should sent to the specified address | ||
| 47 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 48 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 49 | + //! \return The body of the response of the host as a string | ||
| 50 | + //! \throws std::system_error when system or socket operations fail | ||
| 51 | + //! \throws HueException when response contained no body | ||
| 52 | + std::string sendGetHTTPBody(const std::string& msg, const std::string& adr, int port = 80) const override; | ||
| 53 | + | ||
| 54 | + //! \brief Send a HTTP request with the given method to the specified host and return the body of the response. | ||
| 55 | + //! | ||
| 56 | + //! \param method HTTP method type e.g. GET, HEAD, POST, PUT, DELETE, ... | ||
| 57 | + //! \param uri Uniform Resource Identifier in the request | ||
| 58 | + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 59 | + //! \param body Request body, may be empty | ||
| 60 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 61 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 62 | + //! \return Body of the response of the host | ||
| 63 | + //! \throws std::system_error when system or socket operations fail | ||
| 64 | + //! \throws HueException when response contained no body | ||
| 65 | + std::string sendHTTPRequest(const std::string& method, const std::string& uri, const std::string& contentType, | ||
| 66 | + const std::string& body, const std::string& adr, int port = 80) const override; | ||
| 67 | + | ||
| 68 | + //! \brief Send a HTTP GET request to the specified host and return the body of the response. | ||
| 69 | + //! | ||
| 70 | + //! \param uri Uniform Resource Identifier in the request | ||
| 71 | + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 72 | + //! \param body Request body, may be empty | ||
| 73 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 74 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 75 | + //! that specifies the port to which the request is sent to. Default is 80 | ||
| 76 | + //! \return Body of the response of the host | ||
| 77 | + //! \throws std::system_error when system or socket operations fail | ||
| 78 | + //! \throws HueException when response contained no body | ||
| 79 | + std::string GETString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 80 | + const std::string& adr, int port = 80) const override; | ||
| 81 | + | ||
| 82 | + //! \brief Send a HTTP POST request to the specified host and return the body of the response. | ||
| 83 | + //! | ||
| 84 | + //! \param uri Uniform Resource Identifier in the request | ||
| 85 | + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 86 | + //! \param body Request body, may be empty | ||
| 87 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 88 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 89 | + //! that specifies the port to which the request is sent to. Default is 80 | ||
| 90 | + //! \return Body of the response of the host | ||
| 91 | + //! \throws std::system_error when system or socket operations fail | ||
| 92 | + //! \throws HueException when response contained no body | ||
| 93 | + std::string POSTString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 94 | + const std::string& adr, int port = 80) const override; | ||
| 95 | + | ||
| 96 | + //! \brief Send a HTTP PUT request to the specified host and return the body of the response. | ||
| 97 | + //! | ||
| 98 | + //! \param uri Uniform Resource Identifier in the request | ||
| 99 | + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 100 | + //! \param body Request body, may be empty | ||
| 101 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 102 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 103 | + //! that specifies the port to which the request is sent to. Default is 80 | ||
| 104 | + //! \return Body of the response of the host | ||
| 105 | + //! \throws std::system_error when system or socket operations fail | ||
| 106 | + //! \throws HueException when response contained no body | ||
| 107 | + std::string PUTString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 108 | + const std::string& adr, int port = 80) const override; | ||
| 109 | + | ||
| 110 | + //! \brief Send a HTTP DELETE request to the specified host and return the body of the response. | ||
| 111 | + //! | ||
| 112 | + //! \param uri Uniform Resource Identifier in the request | ||
| 113 | + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 114 | + //! \param body Request body, may be empty | ||
| 115 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 116 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 117 | + //! that specifies the port to which the request is sent to. Default is 80 | ||
| 118 | + //! \return Body of the response of the host | ||
| 119 | + //! \throws std::system_error when system or socket operations fail | ||
| 120 | + //! \throws HueException when response contained no body | ||
| 121 | + std::string DELETEString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 122 | + const std::string& adr, int port = 80) const override; | ||
| 123 | + | ||
| 124 | + //! \brief Send a HTTP GET request to the specified host and return the body of the response parsed as JSON. | ||
| 125 | + //! | ||
| 126 | + //! \param uri Uniform Resource Identifier in the request | ||
| 127 | + //! \param body Request body, may be empty | ||
| 128 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 129 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 130 | + //! \return Parsed body of the response of the host | ||
| 131 | + //! \throws std::system_error when system or socket operations fail | ||
| 132 | + //! \throws HueException when response contained no body | ||
| 133 | + //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 134 | + nlohmann::json GETJson( | ||
| 135 | + const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override; | ||
| 136 | + | ||
| 137 | + //! \brief Send a HTTP POST request to the specified host and return the body of the response parsed as JSON. | ||
| 138 | + //! | ||
| 139 | + //! \param uri Uniform Resource Identifier in the request | ||
| 140 | + //! \param body Request body, may be empty | ||
| 141 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 142 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 143 | + //! \return Parsed body of the response of the host | ||
| 144 | + //! \throws std::system_error when system or socket operations fail | ||
| 145 | + //! \throws HueException when response contained no body | ||
| 146 | + //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 147 | + nlohmann::json POSTJson( | ||
| 148 | + const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override; | ||
| 149 | + | ||
| 150 | + //! \brief Send a HTTP PUT request to the specified host and return the body of the response parsed as JSON. | ||
| 151 | + //! | ||
| 152 | + //! \param uri Uniform Resource Identifier in the request | ||
| 153 | + //! \param body Request body, may be empty | ||
| 154 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 155 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 156 | + //! \return Parsed body of the response of the host | ||
| 157 | + //! \throws std::system_error when system or socket operations fail | ||
| 158 | + //! \throws HueException when response contained no body | ||
| 159 | + //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 160 | + nlohmann::json PUTJson( | ||
| 161 | + const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override; | ||
| 162 | + | ||
| 163 | + //! \brief Send a HTTP DELETE request to the specified host and return the body of the response parsed as JSON. | ||
| 164 | + //! | ||
| 165 | + //! \param uri Uniform Resource Identifier in the request | ||
| 166 | + //! \param body Request body, may be empty | ||
| 167 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 168 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 169 | + //! \return Parsed body of the response of the host | ||
| 170 | + //! \throws std::system_error when system or socket operations fail | ||
| 171 | + //! \throws HueException when response contained no body | ||
| 172 | + //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 173 | + nlohmann::json DELETEJson( | ||
| 174 | + const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const override; | ||
| 175 | + }; | ||
| 176 | +} // namespace hueplusplus | ||
| 174 | 177 | ||
| 175 | #endif | 178 | #endif |
include/hueplusplus/BrightnessStrategy.h
| @@ -23,36 +23,39 @@ | @@ -23,36 +23,39 @@ | ||
| 23 | #ifndef _BRIGHTNESS_STRATEGY_H | 23 | #ifndef _BRIGHTNESS_STRATEGY_H |
| 24 | #define _BRIGHTNESS_STRATEGY_H | 24 | #define _BRIGHTNESS_STRATEGY_H |
| 25 | 25 | ||
| 26 | -#include <stdint.h> | 26 | +#include <cstdint> |
| 27 | 27 | ||
| 28 | -class HueLight; | ||
| 29 | - | ||
| 30 | -//! Virtual base class for all BrightnessStrategies | ||
| 31 | -class BrightnessStrategy | 28 | +namespace hueplusplus |
| 32 | { | 29 | { |
| 33 | -public: | ||
| 34 | - //! \brief Virtual function for changing a lights brightness with a specified | ||
| 35 | - //! transition. | ||
| 36 | - //! | ||
| 37 | - //! \param bri The brightness raning from 0 = off to 255 = fully lit | ||
| 38 | - //! \param transition The time it takes to fade to the new brightness in | ||
| 39 | - //! multiples of 100ms, 4 = 400ms and should be seen as the default \param | ||
| 40 | - //! light A reference of the light | ||
| 41 | - virtual bool setBrightness(unsigned int bri, uint8_t transition, HueLight& light) const = 0; | ||
| 42 | - //! \brief Virtual function that returns the current brightnessof the light | ||
| 43 | - //! | ||
| 44 | - //! Should update the lights state by calling refreshState() | ||
| 45 | - //! \param light A reference of the light | ||
| 46 | - //! \return Unsigned int representing the brightness | ||
| 47 | - virtual unsigned int getBrightness(HueLight& light) const = 0; | ||
| 48 | - //! \brief Virtual function that returns the current brightness of the light | ||
| 49 | - //! | ||
| 50 | - //! \note This should not update the lights state | ||
| 51 | - //! \param light A const reference of the light | ||
| 52 | - //! \return Unsigned int representing the brightness | ||
| 53 | - virtual unsigned int getBrightness(const HueLight& light) const = 0; | ||
| 54 | - //! \brief Virtual dtor | ||
| 55 | - virtual ~BrightnessStrategy() = default; | ||
| 56 | -}; | 30 | + class HueLight; |
| 31 | + | ||
| 32 | + //! Virtual base class for all BrightnessStrategies | ||
| 33 | + class BrightnessStrategy | ||
| 34 | + { | ||
| 35 | + public: | ||
| 36 | + //! \brief Virtual function for changing a lights brightness with a specified | ||
| 37 | + //! transition. | ||
| 38 | + //! | ||
| 39 | + //! \param bri The brightness raning from 0 = off to 255 = fully lit | ||
| 40 | + //! \param transition The time it takes to fade to the new brightness in | ||
| 41 | + //! multiples of 100ms, 4 = 400ms and should be seen as the default \param | ||
| 42 | + //! light A reference of the light | ||
| 43 | + virtual bool setBrightness(unsigned int bri, uint8_t transition, HueLight& light) const = 0; | ||
| 44 | + //! \brief Virtual function that returns the current brightnessof the light | ||
| 45 | + //! | ||
| 46 | + //! Should update the lights state by calling refreshState() | ||
| 47 | + //! \param light A reference of the light | ||
| 48 | + //! \return Unsigned int representing the brightness | ||
| 49 | + virtual unsigned int getBrightness(HueLight& light) const = 0; | ||
| 50 | + //! \brief Virtual function that returns the current brightness of the light | ||
| 51 | + //! | ||
| 52 | + //! \note This should not update the lights state | ||
| 53 | + //! \param light A const reference of the light | ||
| 54 | + //! \return Unsigned int representing the brightness | ||
| 55 | + virtual unsigned int getBrightness(const HueLight& light) const = 0; | ||
| 56 | + //! \brief Virtual dtor | ||
| 57 | + virtual ~BrightnessStrategy() = default; | ||
| 58 | + }; | ||
| 59 | +} // namespace hueplusplus | ||
| 57 | 60 | ||
| 58 | #endif | 61 | #endif |
include/hueplusplus/ColorHueStrategy.h
| @@ -23,133 +23,135 @@ | @@ -23,133 +23,135 @@ | ||
| 23 | #ifndef _COLOR_HUE_STRATEGY_H | 23 | #ifndef _COLOR_HUE_STRATEGY_H |
| 24 | #define _COLOR_HUE_STRATEGY_H | 24 | #define _COLOR_HUE_STRATEGY_H |
| 25 | 25 | ||
| 26 | +#include <cstdint> | ||
| 26 | #include <memory> | 27 | #include <memory> |
| 27 | 28 | ||
| 28 | -#include <stdint.h> | ||
| 29 | - | ||
| 30 | -class HueLight; | ||
| 31 | - | ||
| 32 | -//! Virtual base class for all ColorHueStrategies | ||
| 33 | -class ColorHueStrategy | 29 | +namespace hueplusplus |
| 34 | { | 30 | { |
| 35 | -public: | ||
| 36 | - //! \brief Virtual function for changing a lights color in hue with a | ||
| 37 | - //! specified transition. | ||
| 38 | - //! | ||
| 39 | - //! The hue ranges from 0 to 65535, whereas 65535 and 0 are red, 25500 is | ||
| 40 | - //! green and 46920 is blue. \param hue The hue of the color \param transition | ||
| 41 | - //! The time it takes to fade to the new color in multiples of 100ms, 4 = | ||
| 42 | - //! 400ms and should be seen as the default \param light A reference of the | ||
| 43 | - //! light | ||
| 44 | - virtual bool setColorHue(uint16_t hue, uint8_t transition, HueLight& light) const = 0; | ||
| 45 | - //! \brief Virtual function for changing a lights color in saturation with a | ||
| 46 | - //! specified transition. | ||
| 47 | - //! | ||
| 48 | - //! The saturation ranges from 0 to 254, whereas 0 is least saturated (white) | ||
| 49 | - //! and 254 is most saturated (vibrant). \param sat The saturation of the | ||
| 50 | - //! color \param transition The time it takes to fade to the new color in | ||
| 51 | - //! multiples of 100ms, 4 = 400ms and should be seen as the default \param | ||
| 52 | - //! light A reference of the light | ||
| 53 | - virtual bool setColorSaturation(uint8_t sat, uint8_t transition, HueLight& light) const = 0; | ||
| 54 | - //! \brief Virtual function for changing a lights color in hue and saturation | ||
| 55 | - //! format with a specified transition. | ||
| 56 | - //! | ||
| 57 | - //! The hue ranges from 0 to 65535, whereas 65535 and 0 are red, 25500 is | ||
| 58 | - //! green and 46920 is blue. The saturation ranges from 0 to 254, whereas 0 is | ||
| 59 | - //! least saturated (white) and 254 is most saturated (vibrant). \param hue | ||
| 60 | - //! The hue of the color \param sat The saturation of the color \param | ||
| 61 | - //! transition The time it takes to fade to the new color in multiples of | ||
| 62 | - //! 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 63 | - //! reference of the light | ||
| 64 | - virtual bool setColorHueSaturation(uint16_t hue, uint8_t sat, uint8_t transition, HueLight& light) const = 0; | ||
| 65 | - //! \brief Virtual function for changing a lights color in CIE format with a | ||
| 66 | - //! specified transition. | ||
| 67 | - //! | ||
| 68 | - //! \param x The x coordinate in CIE, ranging from 0 to 1 | ||
| 69 | - //! \param y The y coordinate in CIE, ranging from 0 to 1 | ||
| 70 | - //! \param transition The time it takes to fade to the new color in multiples | ||
| 71 | - //! of 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 72 | - //! reference of the light | ||
| 73 | - virtual bool setColorXY(float x, float y, uint8_t transition, HueLight& light) const = 0; | ||
| 74 | - //! \brief Virtual function for changing a lights color in rgb format with a | ||
| 75 | - //! specified transition. | ||
| 76 | - //! | ||
| 77 | - //! Red, green and blue are ranging from 0 to 255. | ||
| 78 | - //! \param r The red portion of the color | ||
| 79 | - //! \param g The green portion of the color | ||
| 80 | - //! \param b The blue portion of the color | ||
| 81 | - //! \param transition The time it takes to fade to the new color in multiples | ||
| 82 | - //! of 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 83 | - //! reference of the light | ||
| 84 | - virtual bool setColorRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t transition, HueLight& light) const = 0; | ||
| 85 | - //! \brief Virtual function for turning on/off the color loop feature of a | ||
| 86 | - //! light. | ||
| 87 | - //! | ||
| 88 | - //! Can be theoretically set for any light, but it only works for lights that | ||
| 89 | - //! support this feature. When this feature is activated the light will fade | ||
| 90 | - //! through every color on the current hue and saturation settings. Notice | ||
| 91 | - //! that none of the setter functions check whether this feature is enabled | ||
| 92 | - //! and the colorloop can only be disabled with this function or by simply | ||
| 93 | - //! calling Off()/OffNoRefresh() and then On()/OnNoRefresh(), so you could | ||
| 94 | - //! alternatively call Off() and then use any of the setter functions. \param | ||
| 95 | - //! on Boolean to turn this feature on or off, true/1 for on and false/0 for | ||
| 96 | - //! off \param light A reference of the light | ||
| 97 | - virtual bool setColorLoop(bool on, HueLight& light) const = 0; | ||
| 98 | - //! \brief Virtual function that lets the light perform one breath cycle in | ||
| 99 | - //! the specified color. | ||
| 100 | - //! | ||
| 101 | - //! The hue ranges from 0 to 65535, whereas 65535 and 0 are red, 25500 is | ||
| 102 | - //! green and 46920 is blue. The saturation ranges from 0 to 254, whereas 0 is | ||
| 103 | - //! least saturated (white) and 254 is most saturated (vibrant). \param hue | ||
| 104 | - //! The hue of the color \param sat The saturation of the color \param light A | ||
| 105 | - //! reference of the light | ||
| 106 | - virtual bool alertHueSaturation(uint16_t hue, uint8_t sat, HueLight& light) const = 0; | ||
| 107 | - //! \brief Virtual function that lets the light perform one breath cycle in | ||
| 108 | - //! the specified color. | ||
| 109 | - //! | ||
| 110 | - //! \param x The x coordinate in CIE, ranging from 0 to 1 | ||
| 111 | - //! \param y The y coordinate in CIE, ranging from 0 to 1 | ||
| 112 | - //! \param light A reference of the light | ||
| 113 | - virtual bool alertXY(float x, float y, HueLight& light) const = 0; | ||
| 114 | - //! \brief Virtual function that lets the light perform one breath cycle in | ||
| 115 | - //! the specified color. | ||
| 116 | - //! | ||
| 117 | - //! Red, green and blue are ranging from 0 to 255. | ||
| 118 | - //! \param r The red portion of the color | ||
| 119 | - //! \param g The green portion of the color | ||
| 120 | - //! \param b The blue portion of the color | ||
| 121 | - //! \param light A reference of the light | ||
| 122 | - virtual bool alertRGB(uint8_t r, uint8_t g, uint8_t b, HueLight& light) const = 0; | ||
| 123 | - //! \brief Virtual function that returns the current color of the light as hue | ||
| 124 | - //! and saturation | ||
| 125 | - //! | ||
| 126 | - //! Should update the lights state by calling refreshState() | ||
| 127 | - //! \param light A reference of the light | ||
| 128 | - //! \return Pair containing the hue as first value and saturation as second | ||
| 129 | - //! value | ||
| 130 | - virtual std::pair<uint16_t, uint8_t> getColorHueSaturation(HueLight& light) const = 0; | ||
| 131 | - //! \brief Virtual function that returns the current color of the light as hue | ||
| 132 | - //! and saturation | ||
| 133 | - //! | ||
| 134 | - //! \note This should not update the lights state | ||
| 135 | - //! \param light A const reference of the light | ||
| 136 | - //! \return Pair containing the hue as first value and saturation as second | ||
| 137 | - //! value | ||
| 138 | - virtual std::pair<uint16_t, uint8_t> getColorHueSaturation(const HueLight& light) const = 0; | ||
| 139 | - //! \brief Virtual function that returns the current color of the light as xy | ||
| 140 | - //! | ||
| 141 | - //! Should update the lights state by calling refreshState() | ||
| 142 | - //! \param light A reference of the light | ||
| 143 | - //! \return Pair containing the x as first value and y as second value | ||
| 144 | - virtual std::pair<float, float> getColorXY(HueLight& light) const = 0; | ||
| 145 | - //! \brief Virtual function that returns the current color of the light as xy | ||
| 146 | - //! | ||
| 147 | - //! \note This should not update the lights state | ||
| 148 | - //! \param light A const reference of the light | ||
| 149 | - //! \return Pair containing the x as first value and y as second value | ||
| 150 | - virtual std::pair<float, float> getColorXY(const HueLight& light) const = 0; | ||
| 151 | - //! \brief Virtual dtor | ||
| 152 | - virtual ~ColorHueStrategy() = default; | ||
| 153 | -}; | 31 | + class HueLight; |
| 32 | + | ||
| 33 | + //! Virtual base class for all ColorHueStrategies | ||
| 34 | + class ColorHueStrategy | ||
| 35 | + { | ||
| 36 | + public: | ||
| 37 | + //! \brief Virtual function for changing a lights color in hue with a | ||
| 38 | + //! specified transition. | ||
| 39 | + //! | ||
| 40 | + //! The hue ranges from 0 to 65535, whereas 65535 and 0 are red, 25500 is | ||
| 41 | + //! green and 46920 is blue. \param hue The hue of the color \param transition | ||
| 42 | + //! The time it takes to fade to the new color in multiples of 100ms, 4 = | ||
| 43 | + //! 400ms and should be seen as the default \param light A reference of the | ||
| 44 | + //! light | ||
| 45 | + virtual bool setColorHue(uint16_t hue, uint8_t transition, HueLight& light) const = 0; | ||
| 46 | + //! \brief Virtual function for changing a lights color in saturation with a | ||
| 47 | + //! specified transition. | ||
| 48 | + //! | ||
| 49 | + //! The saturation ranges from 0 to 254, whereas 0 is least saturated (white) | ||
| 50 | + //! and 254 is most saturated (vibrant). \param sat The saturation of the | ||
| 51 | + //! color \param transition The time it takes to fade to the new color in | ||
| 52 | + //! multiples of 100ms, 4 = 400ms and should be seen as the default \param | ||
| 53 | + //! light A reference of the light | ||
| 54 | + virtual bool setColorSaturation(uint8_t sat, uint8_t transition, HueLight& light) const = 0; | ||
| 55 | + //! \brief Virtual function for changing a lights color in hue and saturation | ||
| 56 | + //! format with a specified transition. | ||
| 57 | + //! | ||
| 58 | + //! The hue ranges from 0 to 65535, whereas 65535 and 0 are red, 25500 is | ||
| 59 | + //! green and 46920 is blue. The saturation ranges from 0 to 254, whereas 0 is | ||
| 60 | + //! least saturated (white) and 254 is most saturated (vibrant). \param hue | ||
| 61 | + //! The hue of the color \param sat The saturation of the color \param | ||
| 62 | + //! transition The time it takes to fade to the new color in multiples of | ||
| 63 | + //! 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 64 | + //! reference of the light | ||
| 65 | + virtual bool setColorHueSaturation(uint16_t hue, uint8_t sat, uint8_t transition, HueLight& light) const = 0; | ||
| 66 | + //! \brief Virtual function for changing a lights color in CIE format with a | ||
| 67 | + //! specified transition. | ||
| 68 | + //! | ||
| 69 | + //! \param x The x coordinate in CIE, ranging from 0 to 1 | ||
| 70 | + //! \param y The y coordinate in CIE, ranging from 0 to 1 | ||
| 71 | + //! \param transition The time it takes to fade to the new color in multiples | ||
| 72 | + //! of 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 73 | + //! reference of the light | ||
| 74 | + virtual bool setColorXY(float x, float y, uint8_t transition, HueLight& light) const = 0; | ||
| 75 | + //! \brief Virtual function for changing a lights color in rgb format with a | ||
| 76 | + //! specified transition. | ||
| 77 | + //! | ||
| 78 | + //! Red, green and blue are ranging from 0 to 255. | ||
| 79 | + //! \param r The red portion of the color | ||
| 80 | + //! \param g The green portion of the color | ||
| 81 | + //! \param b The blue portion of the color | ||
| 82 | + //! \param transition The time it takes to fade to the new color in multiples | ||
| 83 | + //! of 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 84 | + //! reference of the light | ||
| 85 | + virtual bool setColorRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t transition, HueLight& light) const = 0; | ||
| 86 | + //! \brief Virtual function for turning on/off the color loop feature of a | ||
| 87 | + //! light. | ||
| 88 | + //! | ||
| 89 | + //! Can be theoretically set for any light, but it only works for lights that | ||
| 90 | + //! support this feature. When this feature is activated the light will fade | ||
| 91 | + //! through every color on the current hue and saturation settings. Notice | ||
| 92 | + //! that none of the setter functions check whether this feature is enabled | ||
| 93 | + //! and the colorloop can only be disabled with this function or by simply | ||
| 94 | + //! calling Off()/OffNoRefresh() and then On()/OnNoRefresh(), so you could | ||
| 95 | + //! alternatively call Off() and then use any of the setter functions. \param | ||
| 96 | + //! on Boolean to turn this feature on or off, true/1 for on and false/0 for | ||
| 97 | + //! off \param light A reference of the light | ||
| 98 | + virtual bool setColorLoop(bool on, HueLight& light) const = 0; | ||
| 99 | + //! \brief Virtual function that lets the light perform one breath cycle in | ||
| 100 | + //! the specified color. | ||
| 101 | + //! | ||
| 102 | + //! The hue ranges from 0 to 65535, whereas 65535 and 0 are red, 25500 is | ||
| 103 | + //! green and 46920 is blue. The saturation ranges from 0 to 254, whereas 0 is | ||
| 104 | + //! least saturated (white) and 254 is most saturated (vibrant). \param hue | ||
| 105 | + //! The hue of the color \param sat The saturation of the color \param light A | ||
| 106 | + //! reference of the light | ||
| 107 | + virtual bool alertHueSaturation(uint16_t hue, uint8_t sat, HueLight& light) const = 0; | ||
| 108 | + //! \brief Virtual function that lets the light perform one breath cycle in | ||
| 109 | + //! the specified color. | ||
| 110 | + //! | ||
| 111 | + //! \param x The x coordinate in CIE, ranging from 0 to 1 | ||
| 112 | + //! \param y The y coordinate in CIE, ranging from 0 to 1 | ||
| 113 | + //! \param light A reference of the light | ||
| 114 | + virtual bool alertXY(float x, float y, HueLight& light) const = 0; | ||
| 115 | + //! \brief Virtual function that lets the light perform one breath cycle in | ||
| 116 | + //! the specified color. | ||
| 117 | + //! | ||
| 118 | + //! Red, green and blue are ranging from 0 to 255. | ||
| 119 | + //! \param r The red portion of the color | ||
| 120 | + //! \param g The green portion of the color | ||
| 121 | + //! \param b The blue portion of the color | ||
| 122 | + //! \param light A reference of the light | ||
| 123 | + virtual bool alertRGB(uint8_t r, uint8_t g, uint8_t b, HueLight& light) const = 0; | ||
| 124 | + //! \brief Virtual function that returns the current color of the light as hue | ||
| 125 | + //! and saturation | ||
| 126 | + //! | ||
| 127 | + //! Should update the lights state by calling refreshState() | ||
| 128 | + //! \param light A reference of the light | ||
| 129 | + //! \return Pair containing the hue as first value and saturation as second | ||
| 130 | + //! value | ||
| 131 | + virtual std::pair<uint16_t, uint8_t> getColorHueSaturation(HueLight& light) const = 0; | ||
| 132 | + //! \brief Virtual function that returns the current color of the light as hue | ||
| 133 | + //! and saturation | ||
| 134 | + //! | ||
| 135 | + //! \note This should not update the lights state | ||
| 136 | + //! \param light A const reference of the light | ||
| 137 | + //! \return Pair containing the hue as first value and saturation as second | ||
| 138 | + //! value | ||
| 139 | + virtual std::pair<uint16_t, uint8_t> getColorHueSaturation(const HueLight& light) const = 0; | ||
| 140 | + //! \brief Virtual function that returns the current color of the light as xy | ||
| 141 | + //! | ||
| 142 | + //! Should update the lights state by calling refreshState() | ||
| 143 | + //! \param light A reference of the light | ||
| 144 | + //! \return Pair containing the x as first value and y as second value | ||
| 145 | + virtual std::pair<float, float> getColorXY(HueLight& light) const = 0; | ||
| 146 | + //! \brief Virtual function that returns the current color of the light as xy | ||
| 147 | + //! | ||
| 148 | + //! \note This should not update the lights state | ||
| 149 | + //! \param light A const reference of the light | ||
| 150 | + //! \return Pair containing the x as first value and y as second value | ||
| 151 | + virtual std::pair<float, float> getColorXY(const HueLight& light) const = 0; | ||
| 152 | + //! \brief Virtual dtor | ||
| 153 | + virtual ~ColorHueStrategy() = default; | ||
| 154 | + }; | ||
| 155 | +} // namespace hueplusplus | ||
| 154 | 156 | ||
| 155 | #endif | 157 | #endif |
include/hueplusplus/ColorTemperatureStrategy.h
| @@ -25,46 +25,49 @@ | @@ -25,46 +25,49 @@ | ||
| 25 | 25 | ||
| 26 | #include <stdint.h> | 26 | #include <stdint.h> |
| 27 | 27 | ||
| 28 | -class HueLight; | ||
| 29 | - | ||
| 30 | -//! Virtual base class for all ColorTemperatureStrategies | ||
| 31 | -class ColorTemperatureStrategy | 28 | +namespace hueplusplus |
| 32 | { | 29 | { |
| 33 | -public: | ||
| 34 | - //! \brief Virtual function for changing a lights color temperature in mired | ||
| 35 | - //! with a specified transition. | ||
| 36 | - //! | ||
| 37 | - //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 38 | - //! and 500 is warm. \param mired The color temperature in mired \param | ||
| 39 | - //! transition The time it takes to fade to the new color in multiples of | ||
| 40 | - //! 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 41 | - //! reference of the light | ||
| 42 | - virtual bool setColorTemperature(unsigned int mired, uint8_t transition, HueLight& light) const = 0; | ||
| 43 | - //! \brief Virtual function that lets the light perform one breath cycle in | ||
| 44 | - //! the specified color. | ||
| 45 | - //! | ||
| 46 | - //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 47 | - //! and 500 is warm. \param mired The color temperature in mired \param light | ||
| 48 | - //! A reference of the light | ||
| 49 | - virtual bool alertTemperature(unsigned int mired, HueLight& light) const = 0; | ||
| 50 | - //! \brief Virtual function that returns the current color temperature of the | ||
| 51 | - //! light | ||
| 52 | - //! | ||
| 53 | - //! Should update the lights state by calling refreshState() | ||
| 54 | - //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 55 | - //! and 500 is warm. \param light A reference of the light \return Unsigned | ||
| 56 | - //! int representing the color temperature in mired | ||
| 57 | - virtual unsigned int getColorTemperature(HueLight& light) const = 0; | ||
| 58 | - //! \brief Virtual function that returns the current color temperature of the | ||
| 59 | - //! light | ||
| 60 | - //! | ||
| 61 | - //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 62 | - //! and 500 is warm. \note This should not update the lights state \param | ||
| 63 | - //! light A const reference of the light \return Unsigned int representing the | ||
| 64 | - //! color temperature in mired | ||
| 65 | - virtual unsigned int getColorTemperature(const HueLight& light) const = 0; | ||
| 66 | - //! \brief Virtual dtor | ||
| 67 | - virtual ~ColorTemperatureStrategy() = default; | ||
| 68 | -}; | 30 | + class HueLight; |
| 31 | + | ||
| 32 | + //! Virtual base class for all ColorTemperatureStrategies | ||
| 33 | + class ColorTemperatureStrategy | ||
| 34 | + { | ||
| 35 | + public: | ||
| 36 | + //! \brief Virtual function for changing a lights color temperature in mired | ||
| 37 | + //! with a specified transition. | ||
| 38 | + //! | ||
| 39 | + //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 40 | + //! and 500 is warm. \param mired The color temperature in mired \param | ||
| 41 | + //! transition The time it takes to fade to the new color in multiples of | ||
| 42 | + //! 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 43 | + //! reference of the light | ||
| 44 | + virtual bool setColorTemperature(unsigned int mired, uint8_t transition, HueLight& light) const = 0; | ||
| 45 | + //! \brief Virtual function that lets the light perform one breath cycle in | ||
| 46 | + //! the specified color. | ||
| 47 | + //! | ||
| 48 | + //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 49 | + //! and 500 is warm. \param mired The color temperature in mired \param light | ||
| 50 | + //! A reference of the light | ||
| 51 | + virtual bool alertTemperature(unsigned int mired, HueLight& light) const = 0; | ||
| 52 | + //! \brief Virtual function that returns the current color temperature of the | ||
| 53 | + //! light | ||
| 54 | + //! | ||
| 55 | + //! Should update the lights state by calling refreshState() | ||
| 56 | + //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 57 | + //! and 500 is warm. \param light A reference of the light \return Unsigned | ||
| 58 | + //! int representing the color temperature in mired | ||
| 59 | + virtual unsigned int getColorTemperature(HueLight& light) const = 0; | ||
| 60 | + //! \brief Virtual function that returns the current color temperature of the | ||
| 61 | + //! light | ||
| 62 | + //! | ||
| 63 | + //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 64 | + //! and 500 is warm. \note This should not update the lights state \param | ||
| 65 | + //! light A const reference of the light \return Unsigned int representing the | ||
| 66 | + //! color temperature in mired | ||
| 67 | + virtual unsigned int getColorTemperature(const HueLight& light) const = 0; | ||
| 68 | + //! \brief Virtual dtor | ||
| 69 | + virtual ~ColorTemperatureStrategy() = default; | ||
| 70 | + }; | ||
| 71 | +} // namespace hueplusplus | ||
| 69 | 72 | ||
| 70 | #endif | 73 | #endif |
include/hueplusplus/ExtendedColorHueStrategy.h
| @@ -26,38 +26,41 @@ | @@ -26,38 +26,41 @@ | ||
| 26 | #include "HueLight.h" | 26 | #include "HueLight.h" |
| 27 | #include "SimpleColorHueStrategy.h" | 27 | #include "SimpleColorHueStrategy.h" |
| 28 | 28 | ||
| 29 | -//! Class extending the implementation of SimpleColorHueStrategy | ||
| 30 | -class ExtendedColorHueStrategy : public SimpleColorHueStrategy | 29 | +namespace hueplusplus |
| 31 | { | 30 | { |
| 32 | -public: | ||
| 33 | - //! \brief Function that lets the light perform one breath cycle in the | ||
| 34 | - //! specified color. | ||
| 35 | - //! | ||
| 36 | - //! It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 37 | - //! HueLight::alert() needs The hue ranges from 0 to 65535, whereas 65535 and | ||
| 38 | - //! 0 are red, 25500 is green and 46920 is blue. The saturation ranges from 0 | ||
| 39 | - //! to 254, whereas 0 is least saturated (white) and 254 is most saturated | ||
| 40 | - //! (vibrant). \param hue The hue of the color \param sat The saturation of | ||
| 41 | - //! the color \param light A reference of the light | ||
| 42 | - bool alertHueSaturation(uint16_t hue, uint8_t sat, HueLight& light) const override; | ||
| 43 | - //! \brief Function that lets the light perform one breath cycle in the | ||
| 44 | - //! specified color. | ||
| 45 | - //! | ||
| 46 | - //! It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 47 | - //! HueLight::alert() needs \param x The x coordinate in CIE, ranging from 0 | ||
| 48 | - //! to 1 \param y The y coordinate in CIE, ranging from 0 to 1 \param light A | ||
| 49 | - //! reference of the light | ||
| 50 | - bool alertXY(float x, float y, HueLight& light) const override; | ||
| 51 | - //! \brief Function that lets the light perform one breath cycle in the | ||
| 52 | - //! specified color. | ||
| 53 | - //! | ||
| 54 | - //! It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 55 | - //! HueLight::alert() needs Red, green and blue are ranging from 0 to 255. | ||
| 56 | - //! \param r The red portion of the color | ||
| 57 | - //! \param g The green portion of the color | ||
| 58 | - //! \param b The blue portion of the color | ||
| 59 | - //! \param light A reference of the light | ||
| 60 | - bool alertRGB(uint8_t r, uint8_t g, uint8_t b, HueLight& light) const override; | ||
| 61 | -}; | 31 | + //! Class extending the implementation of SimpleColorHueStrategy |
| 32 | + class ExtendedColorHueStrategy : public SimpleColorHueStrategy | ||
| 33 | + { | ||
| 34 | + public: | ||
| 35 | + //! \brief Function that lets the light perform one breath cycle in the | ||
| 36 | + //! specified color. | ||
| 37 | + //! | ||
| 38 | + //! It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 39 | + //! HueLight::alert() needs The hue ranges from 0 to 65535, whereas 65535 and | ||
| 40 | + //! 0 are red, 25500 is green and 46920 is blue. The saturation ranges from 0 | ||
| 41 | + //! to 254, whereas 0 is least saturated (white) and 254 is most saturated | ||
| 42 | + //! (vibrant). \param hue The hue of the color \param sat The saturation of | ||
| 43 | + //! the color \param light A reference of the light | ||
| 44 | + bool alertHueSaturation(uint16_t hue, uint8_t sat, HueLight& light) const override; | ||
| 45 | + //! \brief Function that lets the light perform one breath cycle in the | ||
| 46 | + //! specified color. | ||
| 47 | + //! | ||
| 48 | + //! It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 49 | + //! HueLight::alert() needs \param x The x coordinate in CIE, ranging from 0 | ||
| 50 | + //! to 1 \param y The y coordinate in CIE, ranging from 0 to 1 \param light A | ||
| 51 | + //! reference of the light | ||
| 52 | + bool alertXY(float x, float y, HueLight& light) const override; | ||
| 53 | + //! \brief Function that lets the light perform one breath cycle in the | ||
| 54 | + //! specified color. | ||
| 55 | + //! | ||
| 56 | + //! It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 57 | + //! HueLight::alert() needs Red, green and blue are ranging from 0 to 255. | ||
| 58 | + //! \param r The red portion of the color | ||
| 59 | + //! \param g The green portion of the color | ||
| 60 | + //! \param b The blue portion of the color | ||
| 61 | + //! \param light A reference of the light | ||
| 62 | + bool alertRGB(uint8_t r, uint8_t g, uint8_t b, HueLight& light) const override; | ||
| 63 | + }; | ||
| 64 | +} // namespace hueplusplus | ||
| 62 | 65 | ||
| 63 | #endif | 66 | #endif |
include/hueplusplus/ExtendedColorTemperatureStrategy.h
| @@ -26,27 +26,30 @@ | @@ -26,27 +26,30 @@ | ||
| 26 | #include "HueLight.h" | 26 | #include "HueLight.h" |
| 27 | #include "SimpleColorTemperatureStrategy.h" | 27 | #include "SimpleColorTemperatureStrategy.h" |
| 28 | 28 | ||
| 29 | -//! Class implementing the functions of ColorTemperatureStrategy | ||
| 30 | -class ExtendedColorTemperatureStrategy : public SimpleColorTemperatureStrategy | 29 | +namespace hueplusplus |
| 31 | { | 30 | { |
| 32 | -public: | ||
| 33 | - //! \brief Function for changing a lights color temperature in mired with a | ||
| 34 | - //! specified transition. | ||
| 35 | - //! | ||
| 36 | - //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 37 | - //! and 500 is warm. \param mired The color temperature in mired \param | ||
| 38 | - //! transition The time it takes to fade to the new color in multiples of | ||
| 39 | - //! 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 40 | - //! reference of the light | ||
| 41 | - bool setColorTemperature(unsigned int mired, uint8_t transition, HueLight& light) const override; | ||
| 42 | - //! \brief Function that lets the light perform one breath cycle in the | ||
| 43 | - //! specified color. | ||
| 44 | - //! | ||
| 45 | - //! It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 46 | - //! HueLight::alert() needs The color temperature in mired ranges from 153 to | ||
| 47 | - //! 500 whereas 153 is cold and 500 is warm. \param mired The color | ||
| 48 | - //! temperature in mired \param light A reference of the light | ||
| 49 | - bool alertTemperature(unsigned int mired, HueLight& light) const override; | ||
| 50 | -}; | 31 | + //! Class implementing the functions of ColorTemperatureStrategy |
| 32 | + class ExtendedColorTemperatureStrategy : public SimpleColorTemperatureStrategy | ||
| 33 | + { | ||
| 34 | + public: | ||
| 35 | + //! \brief Function for changing a lights color temperature in mired with a | ||
| 36 | + //! specified transition. | ||
| 37 | + //! | ||
| 38 | + //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 39 | + //! and 500 is warm. \param mired The color temperature in mired \param | ||
| 40 | + //! transition The time it takes to fade to the new color in multiples of | ||
| 41 | + //! 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 42 | + //! reference of the light | ||
| 43 | + bool setColorTemperature(unsigned int mired, uint8_t transition, HueLight& light) const override; | ||
| 44 | + //! \brief Function that lets the light perform one breath cycle in the | ||
| 45 | + //! specified color. | ||
| 46 | + //! | ||
| 47 | + //! It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 48 | + //! HueLight::alert() needs The color temperature in mired ranges from 153 to | ||
| 49 | + //! 500 whereas 153 is cold and 500 is warm. \param mired The color | ||
| 50 | + //! temperature in mired \param light A reference of the light | ||
| 51 | + bool alertTemperature(unsigned int mired, HueLight& light) const override; | ||
| 52 | + }; | ||
| 53 | +} // namespace hueplusplus | ||
| 51 | 54 | ||
| 52 | #endif | 55 | #endif |
include/hueplusplus/Hue.h
| @@ -38,245 +38,248 @@ | @@ -38,245 +38,248 @@ | ||
| 38 | 38 | ||
| 39 | #include "json/json.hpp" | 39 | #include "json/json.hpp" |
| 40 | 40 | ||
| 41 | -// forward declarations | ||
| 42 | -class Hue; | ||
| 43 | - | ||
| 44 | -//! | ||
| 45 | -//! Class to find all Hue bridges on the network and create usernames for them. | ||
| 46 | -//! | ||
| 47 | -class HueFinder | 41 | +namespace hueplusplus |
| 48 | { | 42 | { |
| 49 | -public: | ||
| 50 | - struct HueIdentification | ||
| 51 | - { | ||
| 52 | - std::string ip; | ||
| 53 | - int port = 80; | ||
| 54 | - std::string mac; | ||
| 55 | - }; | 43 | + // forward declarations |
| 44 | + class Hue; | ||
| 56 | 45 | ||
| 57 | -public: | ||
| 58 | - //! \brief Constructor of HueFinder class | ||
| 59 | //! | 46 | //! |
| 60 | - //! \param handler HttpHandler of type \ref IHttpHandler for communication with the bridge | ||
| 61 | - HueFinder(std::shared_ptr<const IHttpHandler> handler); | ||
| 62 | - | ||
| 63 | - //! \brief Finds all bridges in the network and returns them. | ||
| 64 | - //! | ||
| 65 | - //! The user should be given the opportunity to select the correct one based on the mac address. | ||
| 66 | - //! \return vector containing ip and mac of all found bridges | ||
| 67 | - //! \throws std::system_error when system or socket operations fail | ||
| 68 | - //! \throws HueException when response contained no body | ||
| 69 | - std::vector<HueIdentification> FindBridges() const; | ||
| 70 | - | ||
| 71 | - //! \brief Gets a \ref Hue bridge based on its identification | 47 | + //! Class to find all Hue bridges on the network and create usernames for them. |
| 72 | //! | 48 | //! |
| 73 | - //! \param identification \ref HueIdentification that specifies a bridge | ||
| 74 | - //! \return \ref Hue class object | ||
| 75 | - //! \throws std::system_error when system or socket operations fail | ||
| 76 | - //! \throws HueException when response contained no body or username could not be requested | ||
| 77 | - //! \throws HueAPIResponseException when response contains an error | ||
| 78 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 79 | - Hue GetBridge(const HueIdentification& identification); | ||
| 80 | - | ||
| 81 | - //! \brief Function that adds a username to the usernames map | ||
| 82 | - //! | ||
| 83 | - //! \param mac MAC address of Hue bridge | ||
| 84 | - //! \param username Username that is used to control the Hue bridge | ||
| 85 | - void AddUsername(const std::string& mac, const std::string& username); | ||
| 86 | - | ||
| 87 | - //! \brief Function that returns a map of mac addresses and usernames. | ||
| 88 | - //! | ||
| 89 | - //! Note these should be saved at the end and re-loaded with \ref AddUsername | ||
| 90 | - //! next time, so only one username is generated per bridge. \returns A map | ||
| 91 | - //! mapping mac address to username for every bridge | ||
| 92 | - const std::map<std::string, std::string>& GetAllUsernames() const; | ||
| 93 | - | ||
| 94 | - //! \brief Normalizes mac address to plain hex number. | ||
| 95 | - //! \returns \p input without separators and whitespace, in lower case. | ||
| 96 | - static std::string NormalizeMac(std::string input); | ||
| 97 | - | ||
| 98 | -private: | ||
| 99 | - //! \brief Parses mac address from description.xml | ||
| 100 | - //! | ||
| 101 | - //! \param description Content of description.xml file as returned by GET request. | ||
| 102 | - //! \returns Content of xml element \c serialNumber if description matches a Hue bridge, otherwise an empty string. | ||
| 103 | - static std::string ParseDescription(const std::string& description); | ||
| 104 | - | ||
| 105 | - std::map<std::string, std::string> usernames; //!< Maps all macs to usernames added by \ref | ||
| 106 | - //!< HueFinder::AddUsername | ||
| 107 | - std::shared_ptr<const IHttpHandler> http_handler; | ||
| 108 | -}; | ||
| 109 | - | ||
| 110 | -//! Hue class | ||
| 111 | -class Hue | ||
| 112 | -{ | ||
| 113 | - friend class HueFinder; | ||
| 114 | - | ||
| 115 | -public: | ||
| 116 | - //! \brief Constructor of Hue class | ||
| 117 | - //! | ||
| 118 | - //! \param ip IP address in dotted decimal notation like "192.168.2.1" | ||
| 119 | - //! \param port Port of the hue bridge | ||
| 120 | - //! \param username String that specifies the username that is used to control | ||
| 121 | - //! the bridge. This needs to be acquired in \ref requestUsername | ||
| 122 | - //! \param handler HttpHandler for communication with the bridge | ||
| 123 | - Hue(const std::string& ip, const int port, const std::string& username, | ||
| 124 | - std::shared_ptr<const IHttpHandler> handler); | ||
| 125 | - | ||
| 126 | - //! \brief Function to get the ip address of the hue bridge | ||
| 127 | - //! | ||
| 128 | - //! \return string containing ip | ||
| 129 | - std::string getBridgeIP(); | ||
| 130 | - | ||
| 131 | - //! \brief Function to get the port of the hue bridge | ||
| 132 | - //! | ||
| 133 | - //! \return integer containing port | ||
| 134 | - int getBridgePort(); | ||
| 135 | - | ||
| 136 | - //! \brief Send a username request to the Hue bridge. | ||
| 137 | - //! | ||
| 138 | - //! Blocks for about 30 seconds and 5 seconds to prepare. | ||
| 139 | - //! It automatically sets the username variable according to the username received and returns the username | ||
| 140 | - //! received. This function should only be called once to acquire a username to control the bridge and the username | ||
| 141 | - //! should be saved for future use. | ||
| 142 | - //! \return username for API usage | ||
| 143 | - //! \throws std::system_error when system or socket operations fail | ||
| 144 | - //! \throws HueException when response contained no body | ||
| 145 | - //! \throws HueAPIResponseException when response contains an error except link button not pressed. | ||
| 146 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 147 | - std::string requestUsername(); | ||
| 148 | - | ||
| 149 | - //! \brief Function that returns the username | ||
| 150 | - //! | ||
| 151 | - //! \return The username used for API access | ||
| 152 | - std::string getUsername(); | ||
| 153 | - | ||
| 154 | - //! \brief Function to set the ip address of this class representing a bridge | ||
| 155 | - //! | ||
| 156 | - //! \param ip String that specifies the ip in dotted decimal notation like "192.168.2.1" | ||
| 157 | - void setIP(const std::string& ip); | ||
| 158 | - | ||
| 159 | - //! \brief Function to set the port of this class representing a bridge | ||
| 160 | - //! | ||
| 161 | - //! \param port Integer that specifies the port of an address like | ||
| 162 | - //! "192.168.2.1:8080" | ||
| 163 | - void setPort(const int port); | ||
| 164 | - | ||
| 165 | - //! \brief Function that returns a \ref HueLight of specified id | ||
| 166 | - //! | ||
| 167 | - //! \param id Integer that specifies the ID of a Hue light | ||
| 168 | - //! \return \ref HueLight that can be controlled | ||
| 169 | - //! \throws std::system_error when system or socket operations fail | ||
| 170 | - //! \throws HueException when id does not exist or type is unknown | ||
| 171 | - //! \throws HueAPIResponseException when response contains an error | ||
| 172 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 173 | - HueLight& getLight(int id); | ||
| 174 | - | ||
| 175 | - //! \brief Function to remove a light from the bridge | ||
| 176 | - //! | ||
| 177 | - //! \attention Any use of the light after it was successfully removed results in undefined behavior | ||
| 178 | - //! \param id Id of the light to remove | ||
| 179 | - //! \return true on success | ||
| 180 | - //! \throws std::system_error when system or socket operations fail | ||
| 181 | - //! \throws HueException when response contains no body | ||
| 182 | - //! \throws HueAPIResponseException when response contains an error | ||
| 183 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 184 | - bool removeLight(int id); | ||
| 185 | - | ||
| 186 | - //! \brief Function that returns all light types that are associated with this bridge | ||
| 187 | - //! | ||
| 188 | - //! \return A map mapping light id's to light types for every light | ||
| 189 | - // const std::map<uint8_t, ColorType>& getAllLightTypes(); | ||
| 190 | - | ||
| 191 | - //! \brief Function that returns all lights that are associated with this | ||
| 192 | - //! bridge | ||
| 193 | - //! | ||
| 194 | - //! \return A vector containing references to every HueLight | ||
| 195 | - //! \throws std::system_error when system or socket operations fail | ||
| 196 | - //! \throws HueException when response contains no body | ||
| 197 | - //! \throws HueAPIResponseException when response contains an error | ||
| 198 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 199 | - std::vector<std::reference_wrapper<HueLight>> getAllLights(); | ||
| 200 | - | ||
| 201 | - //! \brief Function that tells whether a given light id represents an existing light | ||
| 202 | - //! | ||
| 203 | - //! Calls refreshState to update the local bridge state | ||
| 204 | - //! \param id Id of a light to check for existance | ||
| 205 | - //! \return Bool that is true when a light with the given id exists and false when not | ||
| 206 | - //! \throws std::system_error when system or socket operations fail | ||
| 207 | - //! \throws HueException when response contains no body | ||
| 208 | - //! \throws HueAPIResponseException when response contains an error | ||
| 209 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 210 | - bool lightExists(int id); | ||
| 211 | - | ||
| 212 | - //! \brief Const function that tells whether a given light id represents an | ||
| 213 | - //! existing light | ||
| 214 | - //! | ||
| 215 | - //! \note This will not update the local state of the bridge | ||
| 216 | - //! \param id Id of a light to check for existance | ||
| 217 | - //! \return Bool that is true when a light with the given id exists and false | ||
| 218 | - //! when not | ||
| 219 | - bool lightExists(int id) const; | 49 | + class HueFinder |
| 50 | + { | ||
| 51 | + public: | ||
| 52 | + struct HueIdentification | ||
| 53 | + { | ||
| 54 | + std::string ip; | ||
| 55 | + int port = 80; | ||
| 56 | + std::string mac; | ||
| 57 | + }; | ||
| 58 | + | ||
| 59 | + public: | ||
| 60 | + //! \brief Constructor of HueFinder class | ||
| 61 | + //! | ||
| 62 | + //! \param handler HttpHandler of type \ref IHttpHandler for communication with the bridge | ||
| 63 | + HueFinder(std::shared_ptr<const IHttpHandler> handler); | ||
| 64 | + | ||
| 65 | + //! \brief Finds all bridges in the network and returns them. | ||
| 66 | + //! | ||
| 67 | + //! The user should be given the opportunity to select the correct one based on the mac address. | ||
| 68 | + //! \return vector containing ip and mac of all found bridges | ||
| 69 | + //! \throws std::system_error when system or socket operations fail | ||
| 70 | + //! \throws HueException when response contained no body | ||
| 71 | + std::vector<HueIdentification> FindBridges() const; | ||
| 72 | + | ||
| 73 | + //! \brief Gets a \ref Hue bridge based on its identification | ||
| 74 | + //! | ||
| 75 | + //! \param identification \ref HueIdentification that specifies a bridge | ||
| 76 | + //! \return \ref Hue class object | ||
| 77 | + //! \throws std::system_error when system or socket operations fail | ||
| 78 | + //! \throws HueException when response contained no body or username could not be requested | ||
| 79 | + //! \throws HueAPIResponseException when response contains an error | ||
| 80 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 81 | + Hue GetBridge(const HueIdentification& identification); | ||
| 82 | + | ||
| 83 | + //! \brief Function that adds a username to the usernames map | ||
| 84 | + //! | ||
| 85 | + //! \param mac MAC address of Hue bridge | ||
| 86 | + //! \param username Username that is used to control the Hue bridge | ||
| 87 | + void AddUsername(const std::string& mac, const std::string& username); | ||
| 88 | + | ||
| 89 | + //! \brief Function that returns a map of mac addresses and usernames. | ||
| 90 | + //! | ||
| 91 | + //! Note these should be saved at the end and re-loaded with \ref AddUsername | ||
| 92 | + //! next time, so only one username is generated per bridge. \returns A map | ||
| 93 | + //! mapping mac address to username for every bridge | ||
| 94 | + const std::map<std::string, std::string>& GetAllUsernames() const; | ||
| 95 | + | ||
| 96 | + //! \brief Normalizes mac address to plain hex number. | ||
| 97 | + //! \returns \p input without separators and whitespace, in lower case. | ||
| 98 | + static std::string NormalizeMac(std::string input); | ||
| 99 | + | ||
| 100 | + private: | ||
| 101 | + //! \brief Parses mac address from description.xml | ||
| 102 | + //! | ||
| 103 | + //! \param description Content of description.xml file as returned by GET request. | ||
| 104 | + //! \returns Content of xml element \c serialNumber if description matches a Hue bridge, otherwise an empty | ||
| 105 | + //! string. | ||
| 106 | + static std::string ParseDescription(const std::string& description); | ||
| 107 | + | ||
| 108 | + std::map<std::string, std::string> usernames; //!< Maps all macs to usernames added by \ref | ||
| 109 | + //!< HueFinder::AddUsername | ||
| 110 | + std::shared_ptr<const IHttpHandler> http_handler; | ||
| 111 | + }; | ||
| 220 | 112 | ||
| 221 | - //! \brief Const function that returns the picture name of a given light id | ||
| 222 | - //! | ||
| 223 | - //! \note This will not update the local state of the bridge. | ||
| 224 | - //! \note This function will only return the filename without extension, | ||
| 225 | - //! because Philips provides different file types. \param id Id of a light to | ||
| 226 | - //! get the picture of \return String that either contains the filename of the | ||
| 227 | - //! picture of the light or if it was not found an empty string | ||
| 228 | - std::string getPictureOfLight(int id) const; | ||
| 229 | - | ||
| 230 | - //! \brief Const function that returns the picture name of a given model id | ||
| 231 | - //! | ||
| 232 | - //! \note This will not update the local state of the bridge. | ||
| 233 | - //! \note This function will only return the filename without extension, | ||
| 234 | - //! because Philips provides different file types. \param model_id Model Id of | ||
| 235 | - //! a device to get the picture of \return String that either contains the | ||
| 236 | - //! filename of the picture of the device or if it was not found an empty | ||
| 237 | - //! string | ||
| 238 | - std::string getPictureOfModel(const std::string& model_id) const; | ||
| 239 | - | ||
| 240 | - //! \brief Function that sets the HttpHandler and updates the HueCommandAPI. | ||
| 241 | - //! | ||
| 242 | - //! The HttpHandler and HueCommandAPI are used for bridge communication | ||
| 243 | - //! \param handler a HttpHandler of type \ref IHttpHandler | ||
| 244 | - void setHttpHandler(std::shared_ptr<const IHttpHandler> handler) | 113 | + //! Hue class |
| 114 | + class Hue | ||
| 245 | { | 115 | { |
| 246 | - http_handler = std::move(handler); | ||
| 247 | - commands = HueCommandAPI(ip, port, username, http_handler); | ||
| 248 | - } | ||
| 249 | - | ||
| 250 | -private: | ||
| 251 | - //! \brief Function that refreshes the local \ref state of the Hue bridge | ||
| 252 | - //! \throws std::system_error when system or socket operations fail | ||
| 253 | - //! \throws HueException when response contained no body | ||
| 254 | - //! \throws HueAPIResponseException when response contains an error | ||
| 255 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 256 | - void refreshState(); | ||
| 257 | - | ||
| 258 | -private: | ||
| 259 | - std::string ip; //!< IP-Address of the hue bridge in dotted decimal notation | ||
| 260 | - //!< like "192.168.2.1" | ||
| 261 | - std::string username; //!< Username that is ussed to access the hue bridge | ||
| 262 | - int port; | ||
| 263 | - nlohmann::json state; //!< The state of the hue bridge as it is returned from it | ||
| 264 | - std::map<uint8_t, HueLight> lights; //!< Maps ids to HueLights that are controlled by this bridge | ||
| 265 | - | ||
| 266 | - std::shared_ptr<BrightnessStrategy> simpleBrightnessStrategy; //!< Strategy that is used for controlling the | ||
| 267 | - //!< brightness of lights | ||
| 268 | - std::shared_ptr<ColorHueStrategy> simpleColorHueStrategy; //!< Strategy that is used for controlling the | ||
| 269 | - //!< color of lights | ||
| 270 | - std::shared_ptr<ColorHueStrategy> extendedColorHueStrategy; //!< Strategy that is used for controlling the | ||
| 271 | - //!< color of lights | ||
| 272 | - std::shared_ptr<ColorTemperatureStrategy> simpleColorTemperatureStrategy; //!< Strategy that is used for controlling | ||
| 273 | - //!< the color temperature of lights | ||
| 274 | - std::shared_ptr<ColorTemperatureStrategy> extendedColorTemperatureStrategy; //!< Strategy that is used for | ||
| 275 | - //!< controlling the color temperature | ||
| 276 | - //!< of lights | ||
| 277 | - std::shared_ptr<const IHttpHandler> http_handler; //!< A IHttpHandler that is used to communicate with the | ||
| 278 | - //!< bridge | ||
| 279 | - HueCommandAPI commands; //!< A HueCommandAPI that is used to communicate with the bridge | ||
| 280 | -}; | 116 | + friend class HueFinder; |
| 117 | + | ||
| 118 | + public: | ||
| 119 | + //! \brief Constructor of Hue class | ||
| 120 | + //! | ||
| 121 | + //! \param ip IP address in dotted decimal notation like "192.168.2.1" | ||
| 122 | + //! \param port Port of the hue bridge | ||
| 123 | + //! \param username String that specifies the username that is used to control | ||
| 124 | + //! the bridge. This needs to be acquired in \ref requestUsername | ||
| 125 | + //! \param handler HttpHandler for communication with the bridge | ||
| 126 | + Hue(const std::string& ip, const int port, const std::string& username, | ||
| 127 | + std::shared_ptr<const IHttpHandler> handler); | ||
| 128 | + | ||
| 129 | + //! \brief Function to get the ip address of the hue bridge | ||
| 130 | + //! | ||
| 131 | + //! \return string containing ip | ||
| 132 | + std::string getBridgeIP(); | ||
| 133 | + | ||
| 134 | + //! \brief Function to get the port of the hue bridge | ||
| 135 | + //! | ||
| 136 | + //! \return integer containing port | ||
| 137 | + int getBridgePort(); | ||
| 138 | + | ||
| 139 | + //! \brief Send a username request to the Hue bridge. | ||
| 140 | + //! | ||
| 141 | + //! Blocks for about 30 seconds and 5 seconds to prepare. | ||
| 142 | + //! It automatically sets the username variable according to the username received and returns the username | ||
| 143 | + //! received. This function should only be called once to acquire a username to control the bridge and the | ||
| 144 | + //! username should be saved for future use. \return username for API usage \throws std::system_error when | ||
| 145 | + //! system or socket operations fail \throws HueException when response contained no body \throws | ||
| 146 | + //! HueAPIResponseException when response contains an error except link button not pressed. \throws | ||
| 147 | + //! nlohmann::json::parse_error when response could not be parsed | ||
| 148 | + std::string requestUsername(); | ||
| 149 | + | ||
| 150 | + //! \brief Function that returns the username | ||
| 151 | + //! | ||
| 152 | + //! \return The username used for API access | ||
| 153 | + std::string getUsername(); | ||
| 154 | + | ||
| 155 | + //! \brief Function to set the ip address of this class representing a bridge | ||
| 156 | + //! | ||
| 157 | + //! \param ip String that specifies the ip in dotted decimal notation like "192.168.2.1" | ||
| 158 | + void setIP(const std::string& ip); | ||
| 159 | + | ||
| 160 | + //! \brief Function to set the port of this class representing a bridge | ||
| 161 | + //! | ||
| 162 | + //! \param port Integer that specifies the port of an address like | ||
| 163 | + //! "192.168.2.1:8080" | ||
| 164 | + void setPort(const int port); | ||
| 165 | + | ||
| 166 | + //! \brief Function that returns a \ref HueLight of specified id | ||
| 167 | + //! | ||
| 168 | + //! \param id Integer that specifies the ID of a Hue light | ||
| 169 | + //! \return \ref HueLight that can be controlled | ||
| 170 | + //! \throws std::system_error when system or socket operations fail | ||
| 171 | + //! \throws HueException when id does not exist or type is unknown | ||
| 172 | + //! \throws HueAPIResponseException when response contains an error | ||
| 173 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 174 | + HueLight& getLight(int id); | ||
| 175 | + | ||
| 176 | + //! \brief Function to remove a light from the bridge | ||
| 177 | + //! | ||
| 178 | + //! \attention Any use of the light after it was successfully removed results in undefined behavior | ||
| 179 | + //! \param id Id of the light to remove | ||
| 180 | + //! \return true on success | ||
| 181 | + //! \throws std::system_error when system or socket operations fail | ||
| 182 | + //! \throws HueException when response contains no body | ||
| 183 | + //! \throws HueAPIResponseException when response contains an error | ||
| 184 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 185 | + bool removeLight(int id); | ||
| 186 | + | ||
| 187 | + //! \brief Function that returns all light types that are associated with this bridge | ||
| 188 | + //! | ||
| 189 | + //! \return A map mapping light id's to light types for every light | ||
| 190 | + // const std::map<uint8_t, ColorType>& getAllLightTypes(); | ||
| 191 | + | ||
| 192 | + //! \brief Function that returns all lights that are associated with this | ||
| 193 | + //! bridge | ||
| 194 | + //! | ||
| 195 | + //! \return A vector containing references to every HueLight | ||
| 196 | + //! \throws std::system_error when system or socket operations fail | ||
| 197 | + //! \throws HueException when response contains no body | ||
| 198 | + //! \throws HueAPIResponseException when response contains an error | ||
| 199 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 200 | + std::vector<std::reference_wrapper<HueLight>> getAllLights(); | ||
| 201 | + | ||
| 202 | + //! \brief Function that tells whether a given light id represents an existing light | ||
| 203 | + //! | ||
| 204 | + //! Calls refreshState to update the local bridge state | ||
| 205 | + //! \param id Id of a light to check for existance | ||
| 206 | + //! \return Bool that is true when a light with the given id exists and false when not | ||
| 207 | + //! \throws std::system_error when system or socket operations fail | ||
| 208 | + //! \throws HueException when response contains no body | ||
| 209 | + //! \throws HueAPIResponseException when response contains an error | ||
| 210 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 211 | + bool lightExists(int id); | ||
| 212 | + | ||
| 213 | + //! \brief Const function that tells whether a given light id represents an | ||
| 214 | + //! existing light | ||
| 215 | + //! | ||
| 216 | + //! \note This will not update the local state of the bridge | ||
| 217 | + //! \param id Id of a light to check for existance | ||
| 218 | + //! \return Bool that is true when a light with the given id exists and false | ||
| 219 | + //! when not | ||
| 220 | + bool lightExists(int id) const; | ||
| 221 | + | ||
| 222 | + //! \brief Const function that returns the picture name of a given light id | ||
| 223 | + //! | ||
| 224 | + //! \note This will not update the local state of the bridge. | ||
| 225 | + //! \note This function will only return the filename without extension, | ||
| 226 | + //! because Philips provides different file types. \param id Id of a light to | ||
| 227 | + //! get the picture of \return String that either contains the filename of the | ||
| 228 | + //! picture of the light or if it was not found an empty string | ||
| 229 | + std::string getPictureOfLight(int id) const; | ||
| 230 | + | ||
| 231 | + //! \brief Const function that returns the picture name of a given model id | ||
| 232 | + //! | ||
| 233 | + //! \note This will not update the local state of the bridge. | ||
| 234 | + //! \note This function will only return the filename without extension, | ||
| 235 | + //! because Philips provides different file types. \param model_id Model Id of | ||
| 236 | + //! a device to get the picture of \return String that either contains the | ||
| 237 | + //! filename of the picture of the device or if it was not found an empty | ||
| 238 | + //! string | ||
| 239 | + std::string getPictureOfModel(const std::string& model_id) const; | ||
| 240 | + | ||
| 241 | + //! \brief Function that sets the HttpHandler and updates the HueCommandAPI. | ||
| 242 | + //! | ||
| 243 | + //! The HttpHandler and HueCommandAPI are used for bridge communication | ||
| 244 | + //! \param handler a HttpHandler of type \ref IHttpHandler | ||
| 245 | + void setHttpHandler(std::shared_ptr<const IHttpHandler> handler) | ||
| 246 | + { | ||
| 247 | + http_handler = std::move(handler); | ||
| 248 | + commands = HueCommandAPI(ip, port, username, http_handler); | ||
| 249 | + } | ||
| 250 | + | ||
| 251 | + private: | ||
| 252 | + //! \brief Function that refreshes the local \ref state of the Hue bridge | ||
| 253 | + //! \throws std::system_error when system or socket operations fail | ||
| 254 | + //! \throws HueException when response contained no body | ||
| 255 | + //! \throws HueAPIResponseException when response contains an error | ||
| 256 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 257 | + void refreshState(); | ||
| 258 | + | ||
| 259 | + private: | ||
| 260 | + std::string ip; //!< IP-Address of the hue bridge in dotted decimal notation | ||
| 261 | + //!< like "192.168.2.1" | ||
| 262 | + std::string username; //!< Username that is ussed to access the hue bridge | ||
| 263 | + int port; | ||
| 264 | + nlohmann::json state; //!< The state of the hue bridge as it is returned from it | ||
| 265 | + std::map<uint8_t, HueLight> lights; //!< Maps ids to HueLights that are controlled by this bridge | ||
| 266 | + | ||
| 267 | + std::shared_ptr<BrightnessStrategy> simpleBrightnessStrategy; //!< Strategy that is used for controlling the | ||
| 268 | + //!< brightness of lights | ||
| 269 | + std::shared_ptr<ColorHueStrategy> simpleColorHueStrategy; //!< Strategy that is used for controlling the | ||
| 270 | + //!< color of lights | ||
| 271 | + std::shared_ptr<ColorHueStrategy> extendedColorHueStrategy; //!< Strategy that is used for controlling the | ||
| 272 | + //!< color of lights | ||
| 273 | + std::shared_ptr<ColorTemperatureStrategy> | ||
| 274 | + simpleColorTemperatureStrategy; //!< Strategy that is used for controlling | ||
| 275 | + //!< the color temperature of lights | ||
| 276 | + std::shared_ptr<ColorTemperatureStrategy> extendedColorTemperatureStrategy; //!< Strategy that is used for | ||
| 277 | + //!< controlling the color | ||
| 278 | + //!< temperature of lights | ||
| 279 | + std::shared_ptr<const IHttpHandler> http_handler; //!< A IHttpHandler that is used to communicate with the | ||
| 280 | + //!< bridge | ||
| 281 | + HueCommandAPI commands; //!< A HueCommandAPI that is used to communicate with the bridge | ||
| 282 | + }; | ||
| 283 | +} // namespace hueplusplus | ||
| 281 | 284 | ||
| 282 | #endif | 285 | #endif |
include/hueplusplus/HueCommandAPI.h
| @@ -30,94 +30,98 @@ | @@ -30,94 +30,98 @@ | ||
| 30 | #include "HueException.h" | 30 | #include "HueException.h" |
| 31 | #include "IHttpHandler.h" | 31 | #include "IHttpHandler.h" |
| 32 | 32 | ||
| 33 | -//! Handles communication to the bridge via IHttpHandler and enforces a timeout | ||
| 34 | -//! between each request | ||
| 35 | -class HueCommandAPI | 33 | +namespace hueplusplus |
| 36 | { | 34 | { |
| 37 | -public: | ||
| 38 | - //! \brief Construct from ip, username and HttpHandler | ||
| 39 | - //! | ||
| 40 | - //! \param ip ip address of the Hue bridge in dotted decimal notation like "192.168.2.1" | ||
| 41 | - //! \param port of the hue bridge | ||
| 42 | - //! \param username username that is used to control the bridge | ||
| 43 | - //! \param httpHandler HttpHandler for communication with the bridge | ||
| 44 | - HueCommandAPI( | ||
| 45 | - const std::string& ip, int port, const std::string& username, std::shared_ptr<const IHttpHandler> httpHandler); | ||
| 46 | - | ||
| 47 | - //! \brief Copy construct from other HueCommandAPI | ||
| 48 | - //! \note All copies refer to the same timeout data, so even calls from different objects will be delayed | ||
| 49 | - HueCommandAPI(const HueCommandAPI&) = default; | ||
| 50 | - //! \brief Move construct from other HueCommandAPI | ||
| 51 | - //! \note All copies refer to the same timeout data, so even calls from different objects will be delayed | ||
| 52 | - HueCommandAPI(HueCommandAPI&&) = default; | ||
| 53 | - | ||
| 54 | - //! \brief Copy assign from other HueCommandAPI | ||
| 55 | - //! \note All copies refer to the same timeout data, so even calls from different objects will be delayed | ||
| 56 | - HueCommandAPI& operator=(const HueCommandAPI&) = default; | ||
| 57 | - //! \brief Move assign from other HueCommandAPI | ||
| 58 | - //! \note All copies refer to the same timeout data, so even calls from different objects will be delayed | ||
| 59 | - HueCommandAPI& operator=(HueCommandAPI&&) = default; | ||
| 60 | - | ||
| 61 | - //! \brief Sends a HTTP PUT request to the bridge and returns the response | ||
| 62 | - //! | ||
| 63 | - //! This function will block until at least \ref minDelay has passed to any previous request | ||
| 64 | - //! \param path API request path (appended after /api/{username}) | ||
| 65 | - //! \param request Request to the api, may be empty | ||
| 66 | - //! \returns The return value of the underlying \ref IHttpHandler::PUTJson call | ||
| 67 | - //! \throws std::system_error when system or socket operations fail | ||
| 68 | - //! \throws HueException when response contains no body | ||
| 69 | - //! \throws HueAPIResponseException when response contains an error | ||
| 70 | - nlohmann::json PUTRequest(const std::string& path, const nlohmann::json& request) const; | ||
| 71 | - nlohmann::json PUTRequest(const std::string& path, const nlohmann::json& request, FileInfo fileInfo) const; | ||
| 72 | - | ||
| 73 | - //! \brief Sends a HTTP GET request to the bridge and returns the response | ||
| 74 | - //! | ||
| 75 | - //! This function will block until at least \ref minDelay has passed to any previous request | ||
| 76 | - //! \param path API request path (appended after /api/{username}) | ||
| 77 | - //! \param request Request to the api, may be empty | ||
| 78 | - //! \returns The return value of the underlying \ref IHttpHandler::GETJson call | ||
| 79 | - //! \throws std::system_error when system or socket operations fail | ||
| 80 | - //! \throws HueException when response contains no body | ||
| 81 | - //! \throws HueAPIResponseException when response contains an error | ||
| 82 | - nlohmann::json GETRequest(const std::string& path, const nlohmann::json& request) const; | ||
| 83 | - nlohmann::json GETRequest(const std::string& path, const nlohmann::json& request, FileInfo fileInfo) const; | ||
| 84 | - | ||
| 85 | - //! \brief Sends a HTTP DELETE request to the bridge and returns the response | ||
| 86 | - //! | ||
| 87 | - //! This function will block until at least \ref minDelay has passed to any previous request | ||
| 88 | - //! \param path API request path (appended after /api/{username}) | ||
| 89 | - //! \param request Request to the api, may be empty | ||
| 90 | - //! \returns The return value of the underlying \ref IHttpHandler::DELETEJson call | ||
| 91 | - //! \throws std::system_error when system or socket operations fail | ||
| 92 | - //! \throws HueException when response contains no body | ||
| 93 | - //! \throws HueAPIResponseException when response contains an error | ||
| 94 | - nlohmann::json DELETERequest(const std::string& path, const nlohmann::json& request) const; | ||
| 95 | - nlohmann::json DELETERequest(const std::string& path, const nlohmann::json& request, FileInfo fileInfo) const; | ||
| 96 | - | ||
| 97 | -private: | ||
| 98 | - struct TimeoutData | 35 | + //! Handles communication to the bridge via IHttpHandler and enforces a timeout |
| 36 | + //! between each request | ||
| 37 | + class HueCommandAPI | ||
| 99 | { | 38 | { |
| 100 | - std::chrono::steady_clock::time_point timeout; | ||
| 101 | - std::mutex mutex; | 39 | + public: |
| 40 | + //! \brief Construct from ip, username and HttpHandler | ||
| 41 | + //! | ||
| 42 | + //! \param ip ip address of the Hue bridge in dotted decimal notation like "192.168.2.1" | ||
| 43 | + //! \param port of the hue bridge | ||
| 44 | + //! \param username username that is used to control the bridge | ||
| 45 | + //! \param httpHandler HttpHandler for communication with the bridge | ||
| 46 | + HueCommandAPI(const std::string& ip, int port, const std::string& username, | ||
| 47 | + std::shared_ptr<const IHttpHandler> httpHandler); | ||
| 48 | + | ||
| 49 | + //! \brief Copy construct from other HueCommandAPI | ||
| 50 | + //! \note All copies refer to the same timeout data, so even calls from different objects will be delayed | ||
| 51 | + HueCommandAPI(const HueCommandAPI&) = default; | ||
| 52 | + //! \brief Move construct from other HueCommandAPI | ||
| 53 | + //! \note All copies refer to the same timeout data, so even calls from different objects will be delayed | ||
| 54 | + HueCommandAPI(HueCommandAPI&&) = default; | ||
| 55 | + | ||
| 56 | + //! \brief Copy assign from other HueCommandAPI | ||
| 57 | + //! \note All copies refer to the same timeout data, so even calls from different objects will be delayed | ||
| 58 | + HueCommandAPI& operator=(const HueCommandAPI&) = default; | ||
| 59 | + //! \brief Move assign from other HueCommandAPI | ||
| 60 | + //! \note All copies refer to the same timeout data, so even calls from different objects will be delayed | ||
| 61 | + HueCommandAPI& operator=(HueCommandAPI&&) = default; | ||
| 62 | + | ||
| 63 | + //! \brief Sends a HTTP PUT request to the bridge and returns the response | ||
| 64 | + //! | ||
| 65 | + //! This function will block until at least \ref minDelay has passed to any previous request | ||
| 66 | + //! \param path API request path (appended after /api/{username}) | ||
| 67 | + //! \param request Request to the api, may be empty | ||
| 68 | + //! \returns The return value of the underlying \ref IHttpHandler::PUTJson call | ||
| 69 | + //! \throws std::system_error when system or socket operations fail | ||
| 70 | + //! \throws HueException when response contains no body | ||
| 71 | + //! \throws HueAPIResponseException when response contains an error | ||
| 72 | + nlohmann::json PUTRequest(const std::string& path, const nlohmann::json& request) const; | ||
| 73 | + nlohmann::json PUTRequest(const std::string& path, const nlohmann::json& request, FileInfo fileInfo) const; | ||
| 74 | + | ||
| 75 | + //! \brief Sends a HTTP GET request to the bridge and returns the response | ||
| 76 | + //! | ||
| 77 | + //! This function will block until at least \ref minDelay has passed to any previous request | ||
| 78 | + //! \param path API request path (appended after /api/{username}) | ||
| 79 | + //! \param request Request to the api, may be empty | ||
| 80 | + //! \returns The return value of the underlying \ref IHttpHandler::GETJson call | ||
| 81 | + //! \throws std::system_error when system or socket operations fail | ||
| 82 | + //! \throws HueException when response contains no body | ||
| 83 | + //! \throws HueAPIResponseException when response contains an error | ||
| 84 | + nlohmann::json GETRequest(const std::string& path, const nlohmann::json& request) const; | ||
| 85 | + nlohmann::json GETRequest(const std::string& path, const nlohmann::json& request, FileInfo fileInfo) const; | ||
| 86 | + | ||
| 87 | + //! \brief Sends a HTTP DELETE request to the bridge and returns the response | ||
| 88 | + //! | ||
| 89 | + //! This function will block until at least \ref minDelay has passed to any previous request | ||
| 90 | + //! \param path API request path (appended after /api/{username}) | ||
| 91 | + //! \param request Request to the api, may be empty | ||
| 92 | + //! \returns The return value of the underlying \ref IHttpHandler::DELETEJson call | ||
| 93 | + //! \throws std::system_error when system or socket operations fail | ||
| 94 | + //! \throws HueException when response contains no body | ||
| 95 | + //! \throws HueAPIResponseException when response contains an error | ||
| 96 | + nlohmann::json DELETERequest(const std::string& path, const nlohmann::json& request) const; | ||
| 97 | + nlohmann::json DELETERequest(const std::string& path, const nlohmann::json& request, FileInfo fileInfo) const; | ||
| 98 | + | ||
| 99 | + private: | ||
| 100 | + struct TimeoutData | ||
| 101 | + { | ||
| 102 | + std::chrono::steady_clock::time_point timeout; | ||
| 103 | + std::mutex mutex; | ||
| 104 | + }; | ||
| 105 | + | ||
| 106 | + //! \brief Throws an exception if response contains an error, passes though value | ||
| 107 | + //! \throws HueAPIResponseException when response contains an error | ||
| 108 | + //! \returns \ref response if there is no error | ||
| 109 | + nlohmann::json HandleError(FileInfo fileInfo, const nlohmann::json& response) const; | ||
| 110 | + | ||
| 111 | + //! \brief Combines path with api prefix and username | ||
| 112 | + //! \returns "/api/<username>/<path>" | ||
| 113 | + std::string CombinedPath(const std::string& path) const; | ||
| 114 | + | ||
| 115 | + public: | ||
| 116 | + static constexpr std::chrono::steady_clock::duration minDelay = std::chrono::milliseconds(100); | ||
| 117 | + | ||
| 118 | + private: | ||
| 119 | + std::string ip; | ||
| 120 | + int port; | ||
| 121 | + std::string username; | ||
| 122 | + std::shared_ptr<const IHttpHandler> httpHandler; | ||
| 123 | + std::shared_ptr<TimeoutData> timeout; | ||
| 102 | }; | 124 | }; |
| 103 | - | ||
| 104 | - //! \brief Throws an exception if response contains an error, passes though value | ||
| 105 | - //! \throws HueAPIResponseException when response contains an error | ||
| 106 | - //! \returns \ref response if there is no error | ||
| 107 | - nlohmann::json HandleError(FileInfo fileInfo, const nlohmann::json& response) const; | ||
| 108 | - | ||
| 109 | - //! \brief Combines path with api prefix and username | ||
| 110 | - //! \returns "/api/<username>/<path>" | ||
| 111 | - std::string CombinedPath(const std::string& path) const; | ||
| 112 | - | ||
| 113 | -public: | ||
| 114 | - static constexpr std::chrono::steady_clock::duration minDelay = std::chrono::milliseconds(100); | ||
| 115 | -private: | ||
| 116 | - std::string ip; | ||
| 117 | - int port; | ||
| 118 | - std::string username; | ||
| 119 | - std::shared_ptr<const IHttpHandler> httpHandler; | ||
| 120 | - std::shared_ptr<TimeoutData> timeout; | ||
| 121 | -}; | 125 | +} // namespace hueplusplus |
| 122 | 126 | ||
| 123 | #endif | 127 | #endif |
| 124 | \ No newline at end of file | 128 | \ No newline at end of file |
include/hueplusplus/HueConfig.h
| @@ -23,7 +23,10 @@ | @@ -23,7 +23,10 @@ | ||
| 23 | #ifndef _HUE_CONFIG_H | 23 | #ifndef _HUE_CONFIG_H |
| 24 | #define _HUE_CONFIG_H | 24 | #define _HUE_CONFIG_H |
| 25 | 25 | ||
| 26 | -const uint16_t c_PRE_ALERT_DELAY = 120; //!< Delay for advanced alerts before the actual alert | ||
| 27 | -const uint16_t c_POST_ALERT_DELAY = 1600; //!< Delay for advanced alerts after the actual alert | 26 | +namespace hueplusplus |
| 27 | +{ | ||
| 28 | + constexpr uint16_t c_PRE_ALERT_DELAY = 120; //!< Delay for advanced alerts before the actual alert | ||
| 29 | + constexpr uint16_t c_POST_ALERT_DELAY = 1600; //!< Delay for advanced alerts after the actual alert | ||
| 30 | +} // namespace hueplusplus | ||
| 28 | 31 | ||
| 29 | #endif | 32 | #endif |
include/hueplusplus/HueDeviceTypes.h
| @@ -20,7 +20,6 @@ | @@ -20,7 +20,6 @@ | ||
| 20 | along with hueplusplus. If not, see <http://www.gnu.org/licenses/>. | 20 | along with hueplusplus. If not, see <http://www.gnu.org/licenses/>. |
| 21 | **/ | 21 | **/ |
| 22 | 22 | ||
| 23 | - | ||
| 24 | #ifndef _HUEDEVICETYPES_H | 23 | #ifndef _HUEDEVICETYPES_H |
| 25 | #define _HUEDEVICETYPES_H | 24 | #define _HUEDEVICETYPES_H |
| 26 | 25 | ||
| @@ -29,15 +28,17 @@ | @@ -29,15 +28,17 @@ | ||
| 29 | 28 | ||
| 30 | #include "HueLight.h" | 29 | #include "HueLight.h" |
| 31 | 30 | ||
| 32 | -struct MakeHueLight { | ||
| 33 | - auto operator()(std::string type, int id, HueCommandAPI commands, | ||
| 34 | - std::shared_ptr<BrightnessStrategy> simpleBrightnessStrategy, | ||
| 35 | - std::shared_ptr<ColorTemperatureStrategy> extendedColorTemperatureStrategy, | ||
| 36 | - std::shared_ptr<ColorTemperatureStrategy> simpleColorTemperatureStrategy, | ||
| 37 | - std::shared_ptr<ColorHueStrategy> extendedColorHueStrategy, | ||
| 38 | - std::shared_ptr<ColorHueStrategy> simpleColorHueStrategy) -> HueLight; | ||
| 39 | -}; | ||
| 40 | - | 31 | +namespace hueplusplus |
| 32 | +{ | ||
| 33 | + struct MakeHueLight | ||
| 34 | + { | ||
| 35 | + auto operator()(std::string type, int id, HueCommandAPI commands, | ||
| 36 | + std::shared_ptr<BrightnessStrategy> simpleBrightnessStrategy, | ||
| 37 | + std::shared_ptr<ColorTemperatureStrategy> extendedColorTemperatureStrategy, | ||
| 38 | + std::shared_ptr<ColorTemperatureStrategy> simpleColorTemperatureStrategy, | ||
| 39 | + std::shared_ptr<ColorHueStrategy> extendedColorHueStrategy, | ||
| 40 | + std::shared_ptr<ColorHueStrategy> simpleColorHueStrategy) -> HueLight; | ||
| 41 | + }; | ||
| 42 | +} // namespace hueplusplus | ||
| 41 | 43 | ||
| 42 | #endif | 44 | #endif |
| 43 | - |
include/hueplusplus/HueException.h
| @@ -28,91 +28,94 @@ | @@ -28,91 +28,94 @@ | ||
| 28 | 28 | ||
| 29 | #include "json/json.hpp" | 29 | #include "json/json.hpp" |
| 30 | 30 | ||
| 31 | -//! \brief Contains information about error location, use CURRENT_FILE_INFO to create | ||
| 32 | -struct FileInfo | 31 | +namespace hueplusplus |
| 33 | { | 32 | { |
| 34 | - //! \brief Current file name from __FILE__. Empty if unknown | ||
| 35 | - std::string filename; | ||
| 36 | - //! \brief Current line number from __LINE__. -1 if unknown | ||
| 37 | - int line = -1; | ||
| 38 | - //! \brief Current function from __func__. Empty if unknown | ||
| 39 | - std::string func; | ||
| 40 | - | ||
| 41 | - //! \brief String representation of func, file and line. | ||
| 42 | - //! \returns "<func> in <filename>:<line>" or "Unknown file" if unknown. | ||
| 43 | - std::string ToString() const; | ||
| 44 | -}; | ||
| 45 | - | ||
| 46 | -//! \brief Exception class with file information. Base class of all custom exception classes | ||
| 47 | -class HueException : public std::exception | ||
| 48 | -{ | ||
| 49 | -public: | ||
| 50 | - //! \brief Creates HueException with information about the error and source | ||
| 51 | - //! \param fileInfo Source of the error. Must not always be the throw location, | ||
| 52 | - //! can also be a calling function which matches the cause better. | ||
| 53 | - //! \param message Human readable error message. | ||
| 54 | - HueException(FileInfo fileInfo, const std::string& message); | ||
| 55 | - | ||
| 56 | - //! \brief What message of the exception | ||
| 57 | - //! \returns exception name, file info and constructor message as char* into member string | ||
| 58 | - const char* what() const noexcept override; | ||
| 59 | - | ||
| 60 | - //! \brief Filename and line where the exception was thrown or caused by | ||
| 61 | - const FileInfo& GetFile() const noexcept; | ||
| 62 | - | ||
| 63 | -protected: | ||
| 64 | - //! \brief Creates HueException with child class name | ||
| 65 | - //! | ||
| 66 | - //! Should be used by subclasses which can append additional information to the end of whatMessage. | ||
| 67 | - //! \param exceptionName class name of the subclass | ||
| 68 | - //! \param fileInfo Source of the error. Must not always be the throw location, | ||
| 69 | - //! can also be a calling function which matches the cause better. | ||
| 70 | - //! \param message Human readable error message | ||
| 71 | - HueException(const char* exceptionName, FileInfo fileInfo, const std::string& message); | ||
| 72 | - | ||
| 73 | -private: | ||
| 74 | - std::string whatMessage; | ||
| 75 | - FileInfo fileInfo; | ||
| 76 | -}; | ||
| 77 | - | ||
| 78 | -//! \brief Exception caused by a Hue API "error" response with additional information | ||
| 79 | -//! | ||
| 80 | -//! Refer to Hue developer documentation for more detail on specific error codes. | ||
| 81 | -class HueAPIResponseException : public HueException | ||
| 82 | -{ | ||
| 83 | -public: | ||
| 84 | - //! \brief Create exception with info from Hue API error | ||
| 85 | - //! \param fileInfo Source of the error. Must not always be the throw location, | ||
| 86 | - //! can also be a calling function which matches the cause better. | ||
| 87 | - //! \param error Hue API error code from error response. | ||
| 88 | - //! \param address URI the API call referred to from error response. | ||
| 89 | - //! \param description Error description from response. | ||
| 90 | - HueAPIResponseException(FileInfo fileInfo, int error, std::string address, std::string description); | ||
| 91 | - | ||
| 92 | - //! \brief Error number from Hue API error response. | 33 | + //! \brief Contains information about error location, use CURRENT_FILE_INFO to create |
| 34 | + struct FileInfo | ||
| 35 | + { | ||
| 36 | + //! \brief Current file name from __FILE__. Empty if unknown | ||
| 37 | + std::string filename; | ||
| 38 | + //! \brief Current line number from __LINE__. -1 if unknown | ||
| 39 | + int line = -1; | ||
| 40 | + //! \brief Current function from __func__. Empty if unknown | ||
| 41 | + std::string func; | ||
| 42 | + | ||
| 43 | + //! \brief String representation of func, file and line. | ||
| 44 | + //! \returns "<func> in <filename>:<line>" or "Unknown file" if unknown. | ||
| 45 | + std::string ToString() const; | ||
| 46 | + }; | ||
| 47 | + | ||
| 48 | + //! \brief Exception class with file information. Base class of all custom exception classes | ||
| 49 | + class HueException : public std::exception | ||
| 50 | + { | ||
| 51 | + public: | ||
| 52 | + //! \brief Creates HueException with information about the error and source | ||
| 53 | + //! \param fileInfo Source of the error. Must not always be the throw location, | ||
| 54 | + //! can also be a calling function which matches the cause better. | ||
| 55 | + //! \param message Human readable error message. | ||
| 56 | + HueException(FileInfo fileInfo, const std::string& message); | ||
| 57 | + | ||
| 58 | + //! \brief What message of the exception | ||
| 59 | + //! \returns exception name, file info and constructor message as char* into member string | ||
| 60 | + const char* what() const noexcept override; | ||
| 61 | + | ||
| 62 | + //! \brief Filename and line where the exception was thrown or caused by | ||
| 63 | + const FileInfo& GetFile() const noexcept; | ||
| 64 | + | ||
| 65 | + protected: | ||
| 66 | + //! \brief Creates HueException with child class name | ||
| 67 | + //! | ||
| 68 | + //! Should be used by subclasses which can append additional information to the end of whatMessage. | ||
| 69 | + //! \param exceptionName class name of the subclass | ||
| 70 | + //! \param fileInfo Source of the error. Must not always be the throw location, | ||
| 71 | + //! can also be a calling function which matches the cause better. | ||
| 72 | + //! \param message Human readable error message | ||
| 73 | + HueException(const char* exceptionName, FileInfo fileInfo, const std::string& message); | ||
| 74 | + | ||
| 75 | + private: | ||
| 76 | + std::string whatMessage; | ||
| 77 | + FileInfo fileInfo; | ||
| 78 | + }; | ||
| 79 | + | ||
| 80 | + //! \brief Exception caused by a Hue API "error" response with additional information | ||
| 93 | //! | 81 | //! |
| 94 | - //! Refer to Hue developer documentation for meaning of error codes. | ||
| 95 | - int GetErrorNumber() const noexcept; | ||
| 96 | - //! \brief Address the API call tried to access. | ||
| 97 | - const std::string& GetAddress() const noexcept; | ||
| 98 | - //! \brief Error description | ||
| 99 | - const std::string& GetDescription() const noexcept; | ||
| 100 | - | ||
| 101 | - //! \brief Creates exception from API response. | ||
| 102 | - //! \param fileInfo Location of the cause | ||
| 103 | - //! \param response Hue API response. Must contain a member "error" with "type", "address" and "description". | ||
| 104 | - //! \returns HueAPIResponseException with info from the response. | ||
| 105 | - //! If response does not contain the required members, they are defaulted to -1 or "". | ||
| 106 | - static HueAPIResponseException Create(FileInfo fileInfo, const nlohmann::json& response); | ||
| 107 | - | ||
| 108 | -private: | ||
| 109 | - //! \brief Creates exception message containing the given information | ||
| 110 | - static std::string GetMessage(int error, const std::string& addr, const std::string& description); | ||
| 111 | - | ||
| 112 | -private: | ||
| 113 | - int error; | ||
| 114 | - std::string address; | ||
| 115 | - std::string description; | ||
| 116 | -}; | 82 | + //! Refer to Hue developer documentation for more detail on specific error codes. |
| 83 | + class HueAPIResponseException : public HueException | ||
| 84 | + { | ||
| 85 | + public: | ||
| 86 | + //! \brief Create exception with info from Hue API error | ||
| 87 | + //! \param fileInfo Source of the error. Must not always be the throw location, | ||
| 88 | + //! can also be a calling function which matches the cause better. | ||
| 89 | + //! \param error Hue API error code from error response. | ||
| 90 | + //! \param address URI the API call referred to from error response. | ||
| 91 | + //! \param description Error description from response. | ||
| 92 | + HueAPIResponseException(FileInfo fileInfo, int error, std::string address, std::string description); | ||
| 93 | + | ||
| 94 | + //! \brief Error number from Hue API error response. | ||
| 95 | + //! | ||
| 96 | + //! Refer to Hue developer documentation for meaning of error codes. | ||
| 97 | + int GetErrorNumber() const noexcept; | ||
| 98 | + //! \brief Address the API call tried to access. | ||
| 99 | + const std::string& GetAddress() const noexcept; | ||
| 100 | + //! \brief Error description | ||
| 101 | + const std::string& GetDescription() const noexcept; | ||
| 102 | + | ||
| 103 | + //! \brief Creates exception from API response. | ||
| 104 | + //! \param fileInfo Location of the cause | ||
| 105 | + //! \param response Hue API response. Must contain a member "error" with "type", "address" and "description". | ||
| 106 | + //! \returns HueAPIResponseException with info from the response. | ||
| 107 | + //! If response does not contain the required members, they are defaulted to -1 or "". | ||
| 108 | + static HueAPIResponseException Create(FileInfo fileInfo, const nlohmann::json& response); | ||
| 109 | + | ||
| 110 | + private: | ||
| 111 | + //! \brief Creates exception message containing the given information | ||
| 112 | + static std::string GetMessage(int error, const std::string& addr, const std::string& description); | ||
| 113 | + | ||
| 114 | + private: | ||
| 115 | + int error; | ||
| 116 | + std::string address; | ||
| 117 | + std::string description; | ||
| 118 | + }; | ||
| 119 | +} // namespace hueplusplus | ||
| 117 | 120 | ||
| 118 | #endif | 121 | #endif |
| 119 | \ No newline at end of file | 122 | \ No newline at end of file |
include/hueplusplus/HueExceptionMacro.h
| @@ -23,5 +23,5 @@ | @@ -23,5 +23,5 @@ | ||
| 23 | #include "HueException.h" | 23 | #include "HueException.h" |
| 24 | 24 | ||
| 25 | #ifndef CURRENT_FILE_INFO | 25 | #ifndef CURRENT_FILE_INFO |
| 26 | -#define CURRENT_FILE_INFO (FileInfo{__FILE__, __LINE__, __func__}) | 26 | +#define CURRENT_FILE_INFO (::hueplusplus::FileInfo{__FILE__, __LINE__, __func__}) |
| 27 | #endif | 27 | #endif |
| 28 | \ No newline at end of file | 28 | \ No newline at end of file |
include/hueplusplus/HueLight.h
| @@ -32,61 +32,63 @@ | @@ -32,61 +32,63 @@ | ||
| 32 | 32 | ||
| 33 | #include "json/json.hpp" | 33 | #include "json/json.hpp" |
| 34 | 34 | ||
| 35 | -/*enum ModelType | 35 | +namespace hueplusplus |
| 36 | { | 36 | { |
| 37 | -UNDEFINED, // undefined model | ||
| 38 | -LCT001, // Hue bulb A19, Color Gamut B, ECL | ||
| 39 | -LCT007, // Hue bulb A19, Color Gamut B, ECL | ||
| 40 | -LCT010, // Hue bulb A19, Color Gamut C, ECL | ||
| 41 | -LCT014, // Hue bulb A19, Color Gamut C, ECL | ||
| 42 | - | ||
| 43 | -LCT002, // Hue Spot BR30, Color Gamut B, ECL | ||
| 44 | -LCT003, // Hue Spot GU10, Color Gamut B, ECL | ||
| 45 | - | ||
| 46 | -LCT011, // Hue BR30, Color Gamut C, ECL | ||
| 47 | - | ||
| 48 | -LST001, // Hue LightStrips, Color Gamut A, CL | ||
| 49 | -LST002, // Hue LightStrips Plus, Color Gamut C, ECL | ||
| 50 | - | ||
| 51 | -LLC010, // Hue Living Colors Iris, Color Gamut A, CL | ||
| 52 | -LLC011, // Hue Living Colors Bloom, Color Gamut A, CL | ||
| 53 | -LLC012, // Hue Living Colors Bloom, Color Gamut A, CL | ||
| 54 | -LLC006, // Living Colors Gen3 Iris, Color Gamut A, CL, NO HUE FRIEND | ||
| 55 | -LLC007, // Living Colors Gen3 Bloom, Aura, Color Gamut A, CL, NO HUE FRIEND | ||
| 56 | -LLC013, // Disney Living Colors, Color Gamut A, CL | ||
| 57 | - | ||
| 58 | -LWB004, // Hue A19 Lux, Color Gamut -, DL | ||
| 59 | -LWB006, // Hue A19 Lux, Color Gamut -, DL | ||
| 60 | -LWB007, // Hue A19 Lux, Color Gamut -, DL | ||
| 61 | -LWB010, // Hue A19 Lux, Color Gamut -, DL | ||
| 62 | -LWB014, // Hue A19 Lux, Color Gamut -, DL | ||
| 63 | - | ||
| 64 | -LLM001, // Color Light Module, Color Gamut B, ECL | ||
| 65 | -LLM010, // Color Temperature Module, Color Gamut 2200K-6500K, CTL | ||
| 66 | -LLM011, // Color Temperature Module, Color Gamut 2200K-6500K, CTL | ||
| 67 | -LLM012, // Color Temperature Module, Color Gamut 2200K-6500K, CTL | ||
| 68 | - | ||
| 69 | -LTW001, // Hue Spot BR30, Color Gamut 2200K-6500K, CTL | ||
| 70 | -LTW004, // Hue Spot BR30, Color Gamut 2200K-6500K, CTL | ||
| 71 | -LTW013, // Hue Spot BR30, Color Gamut 2200K-6500K, CTL | ||
| 72 | -LTW014, // Hue Spot BR30, Color Gamut 2200K-6500K, CTL | ||
| 73 | - | ||
| 74 | -LLC020 // Hue Go, Color Gamut C, ECL | ||
| 75 | -};*/ | ||
| 76 | - | ||
| 77 | -//! enum that specifies the color type of all HueLights | ||
| 78 | -enum ColorType | ||
| 79 | -{ | ||
| 80 | - UNDEFINED, //!< ColorType for this light is unknown or undefined | ||
| 81 | - NONE, //!< light has no specific ColorType | ||
| 82 | - GAMUT_A, | ||
| 83 | - GAMUT_B, | ||
| 84 | - GAMUT_C, | ||
| 85 | - TEMPERATURE, | ||
| 86 | - GAMUT_A_TEMPERATURE, | ||
| 87 | - GAMUT_B_TEMPERATURE, | ||
| 88 | - GAMUT_C_TEMPERATURE | ||
| 89 | -}; | 37 | + /*enum ModelType |
| 38 | + { | ||
| 39 | + UNDEFINED, // undefined model | ||
| 40 | + LCT001, // Hue bulb A19, Color Gamut B, ECL | ||
| 41 | + LCT007, // Hue bulb A19, Color Gamut B, ECL | ||
| 42 | + LCT010, // Hue bulb A19, Color Gamut C, ECL | ||
| 43 | + LCT014, // Hue bulb A19, Color Gamut C, ECL | ||
| 44 | + | ||
| 45 | + LCT002, // Hue Spot BR30, Color Gamut B, ECL | ||
| 46 | + LCT003, // Hue Spot GU10, Color Gamut B, ECL | ||
| 47 | + | ||
| 48 | + LCT011, // Hue BR30, Color Gamut C, ECL | ||
| 49 | + | ||
| 50 | + LST001, // Hue LightStrips, Color Gamut A, CL | ||
| 51 | + LST002, // Hue LightStrips Plus, Color Gamut C, ECL | ||
| 52 | + | ||
| 53 | + LLC010, // Hue Living Colors Iris, Color Gamut A, CL | ||
| 54 | + LLC011, // Hue Living Colors Bloom, Color Gamut A, CL | ||
| 55 | + LLC012, // Hue Living Colors Bloom, Color Gamut A, CL | ||
| 56 | + LLC006, // Living Colors Gen3 Iris, Color Gamut A, CL, NO HUE FRIEND | ||
| 57 | + LLC007, // Living Colors Gen3 Bloom, Aura, Color Gamut A, CL, NO HUE FRIEND | ||
| 58 | + LLC013, // Disney Living Colors, Color Gamut A, CL | ||
| 59 | + | ||
| 60 | + LWB004, // Hue A19 Lux, Color Gamut -, DL | ||
| 61 | + LWB006, // Hue A19 Lux, Color Gamut -, DL | ||
| 62 | + LWB007, // Hue A19 Lux, Color Gamut -, DL | ||
| 63 | + LWB010, // Hue A19 Lux, Color Gamut -, DL | ||
| 64 | + LWB014, // Hue A19 Lux, Color Gamut -, DL | ||
| 65 | + | ||
| 66 | + LLM001, // Color Light Module, Color Gamut B, ECL | ||
| 67 | + LLM010, // Color Temperature Module, Color Gamut 2200K-6500K, CTL | ||
| 68 | + LLM011, // Color Temperature Module, Color Gamut 2200K-6500K, CTL | ||
| 69 | + LLM012, // Color Temperature Module, Color Gamut 2200K-6500K, CTL | ||
| 70 | + | ||
| 71 | + LTW001, // Hue Spot BR30, Color Gamut 2200K-6500K, CTL | ||
| 72 | + LTW004, // Hue Spot BR30, Color Gamut 2200K-6500K, CTL | ||
| 73 | + LTW013, // Hue Spot BR30, Color Gamut 2200K-6500K, CTL | ||
| 74 | + LTW014, // Hue Spot BR30, Color Gamut 2200K-6500K, CTL | ||
| 75 | + | ||
| 76 | + LLC020 // Hue Go, Color Gamut C, ECL | ||
| 77 | + };*/ | ||
| 78 | + | ||
| 79 | + //! enum that specifies the color type of all HueLights | ||
| 80 | + enum ColorType | ||
| 81 | + { | ||
| 82 | + UNDEFINED, //!< ColorType for this light is unknown or undefined | ||
| 83 | + NONE, //!< light has no specific ColorType | ||
| 84 | + GAMUT_A, | ||
| 85 | + GAMUT_B, | ||
| 86 | + GAMUT_C, | ||
| 87 | + TEMPERATURE, | ||
| 88 | + GAMUT_A_TEMPERATURE, | ||
| 89 | + GAMUT_B_TEMPERATURE, | ||
| 90 | + GAMUT_C_TEMPERATURE | ||
| 91 | + }; | ||
| 90 | 92 | ||
| 91 | //! | 93 | //! |
| 92 | //! Class for Hue Light fixtures | 94 | //! Class for Hue Light fixtures |
| @@ -101,690 +103,692 @@ class HueLight | @@ -101,690 +103,692 @@ class HueLight | ||
| 101 | friend class SimpleColorTemperatureStrategy; | 103 | friend class SimpleColorTemperatureStrategy; |
| 102 | friend class ExtendedColorTemperatureStrategy; | 104 | friend class ExtendedColorTemperatureStrategy; |
| 103 | 105 | ||
| 104 | -public: | ||
| 105 | - //! \brief std dtor | ||
| 106 | - ~HueLight() = default; | ||
| 107 | - | ||
| 108 | - //! \brief Function that turns the light on. | ||
| 109 | - //! | ||
| 110 | - //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 111 | - //! \return true on success | ||
| 112 | - //! \throws std::system_error when system or socket operations fail | ||
| 113 | - //! \throws HueException when response contained no body | ||
| 114 | - //! \throws HueAPIResponseException when response contains an error | ||
| 115 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 116 | - virtual bool On(uint8_t transition = 4); | ||
| 117 | - | ||
| 118 | - //! \brief Function that turns the light off. | ||
| 119 | - //! | ||
| 120 | - //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 121 | - //! \return Bool that is true on success | ||
| 122 | - //! \throws std::system_error when system or socket operations fail | ||
| 123 | - //! \throws HueException when response contained no body | ||
| 124 | - //! \throws HueAPIResponseException when response contains an error | ||
| 125 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 126 | - virtual bool Off(uint8_t transition = 4); | ||
| 127 | - | ||
| 128 | - //! \brief Function to check whether a light is on or off | ||
| 129 | - //! | ||
| 130 | - //! \return Bool that is true, when the light is on and false, when off | ||
| 131 | - //! \throws std::system_error when system or socket operations fail | ||
| 132 | - //! \throws HueException when response contained no body | ||
| 133 | - //! \throws HueAPIResponseException when response contains an error | ||
| 134 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 135 | - virtual bool isOn(); | ||
| 136 | - | ||
| 137 | - //! \brief Const function to check whether a light is on or off | ||
| 138 | - //! | ||
| 139 | - //! \note This will not refresh the light state | ||
| 140 | - //! \return Bool that is true, when the light is on and false, when off | ||
| 141 | - virtual bool isOn() const; | ||
| 142 | - | ||
| 143 | - //! \brief Const function that returns the id of this light | ||
| 144 | - //! | ||
| 145 | - //! \return integer representing the light id | ||
| 146 | - virtual int getId() const; | ||
| 147 | - | ||
| 148 | - //! \brief Const function that returns the light type | ||
| 149 | - //! | ||
| 150 | - //! \return String containing the type | ||
| 151 | - virtual std::string getType() const; | ||
| 152 | - | ||
| 153 | - //! \brief Function that returns the name of the light. | ||
| 154 | - //! | ||
| 155 | - //! \return String containig the name of the light | ||
| 156 | - //! \throws std::system_error when system or socket operations fail | ||
| 157 | - //! \throws HueException when response contained no body | ||
| 158 | - //! \throws HueAPIResponseException when response contains an error | ||
| 159 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 160 | - virtual std::string getName(); | ||
| 161 | - | ||
| 162 | - //! \brief Const function that returns the name of the light. | ||
| 163 | - //! | ||
| 164 | - //! \note This will not refresh the light state | ||
| 165 | - //! \return String containig the name of the light | ||
| 166 | - virtual std::string getName() const; | ||
| 167 | - | ||
| 168 | - //! \brief Const function that returns the modelid of the light | ||
| 169 | - //! | ||
| 170 | - //! \return String conatining the modelid | ||
| 171 | - virtual std::string getModelId() const; | ||
| 172 | - | ||
| 173 | - //! \brief Const function that returns the uniqueid of the light | ||
| 174 | - //! | ||
| 175 | - //! \note Only working on bridges with versions starting at 1.4 | ||
| 176 | - //! \return String containing the uniqueid or an empty string when the function is not supported | ||
| 177 | - virtual std::string getUId() const; | ||
| 178 | - | ||
| 179 | - //! \brief Const function that returns the manufacturername of the light | ||
| 180 | - //! | ||
| 181 | - //! \note Only working on bridges with versions starting at 1.7 | ||
| 182 | - //! \return String containing the manufacturername or an empty string when the function is not supported | ||
| 183 | - virtual std::string getManufacturername() const; | ||
| 184 | - | ||
| 185 | - //! \brief Const function that returns the productname of the light | ||
| 186 | - //! | ||
| 187 | - //! \note Only working on bridges with versions starting at 1.24 | ||
| 188 | - //! \return String containing the productname or an empty string when the function is not supported | ||
| 189 | - virtual std::string getProductname() const; | ||
| 190 | - | ||
| 191 | - //! \brief Const function that returns the luminaireuniqueid of the light | ||
| 192 | - //! | ||
| 193 | - //! \note Only working on bridges with versions starting at 1.9 | ||
| 194 | - //! \return String containing the luminaireuniqueid or an empty string when the function is not supported | ||
| 195 | - virtual std::string getLuminaireUId() const; | ||
| 196 | - | ||
| 197 | - //! \brief Function that returns the software version of the light | ||
| 198 | - //! | ||
| 199 | - //! \return String containing the software version | ||
| 200 | - //! \throws std::system_error when system or socket operations fail | ||
| 201 | - //! \throws HueException when response contained no body | ||
| 202 | - //! \throws HueAPIResponseException when response contains an error | ||
| 203 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 204 | - virtual std::string getSwVersion(); | ||
| 205 | - | ||
| 206 | - //! \brief Const function that returns the software version of the light | ||
| 207 | - //! | ||
| 208 | - //! \note This will not refresh the light state | ||
| 209 | - //! \return String containing the software version | ||
| 210 | - virtual std::string getSwVersion() const; | ||
| 211 | - | ||
| 212 | - //! \brief Function that sets the name of the light | ||
| 213 | - //! | ||
| 214 | - //! \return Bool that is true on success | ||
| 215 | - //! \throws std::system_error when system or socket operations fail | ||
| 216 | - //! \throws HueException when response contained no body | ||
| 217 | - //! \throws HueAPIResponseException when response contains an error | ||
| 218 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 219 | - virtual bool setName(const std::string& name); | ||
| 220 | - | ||
| 221 | - //! \brief Const function that returns the color type of the light. | ||
| 222 | - //! | ||
| 223 | - //! \return ColorType containig the color type of the light | ||
| 224 | - virtual ColorType getColorType() const; | ||
| 225 | - | ||
| 226 | - //! \brief Const function to check whether this light has brightness control | ||
| 227 | - //! | ||
| 228 | - //! \return Bool that is true when the light has specified abilities and false | ||
| 229 | - //! when not | ||
| 230 | - virtual bool hasBrightnessControl() const { return brightnessStrategy != nullptr; }; | ||
| 231 | - | ||
| 232 | - //! \brief Const function to check whether this light has color temperature | ||
| 233 | - //! control | ||
| 234 | - //! | ||
| 235 | - //! \return Bool that is true when the light has specified abilities and false | ||
| 236 | - //! when not | ||
| 237 | - virtual bool hasTemperatureControl() const { return colorTemperatureStrategy != nullptr; }; | ||
| 238 | - | ||
| 239 | - //! \brief Connst function to check whether this light has full color control | ||
| 240 | - //! | ||
| 241 | - //! \return Bool that is true when the light has specified abilities and false | ||
| 242 | - //! when not | ||
| 243 | - virtual bool hasColorControl() const { return colorHueStrategy != nullptr; }; | ||
| 244 | - | ||
| 245 | - //! \brief Const function that converts Kelvin to Mired. | ||
| 246 | - //! | ||
| 247 | - //! \param kelvin Unsigned integer value in Kelvin | ||
| 248 | - //! \return Unsigned integer value in Mired | ||
| 249 | - unsigned int KelvinToMired(unsigned int kelvin) const; | ||
| 250 | - | ||
| 251 | - //! \brief Const function that converts Mired to Kelvin. | ||
| 252 | - //! | ||
| 253 | - //! \param mired Unsigned integer value in Mired | ||
| 254 | - //! \return Unsigned integer value in Kelvin | ||
| 255 | - unsigned int MiredToKelvin(unsigned int mired) const; | ||
| 256 | - | ||
| 257 | - //! \brief Function that sets the brightness of this light. | ||
| 258 | - //! | ||
| 259 | - //! \note The brightness will only be set if the light has a reference to a | ||
| 260 | - //! specific \ref BrightnessStrategy. The brightness can range from 0 = off to | ||
| 261 | - //! 254 = fully lit. | ||
| 262 | - //! \param bri Unsigned int that specifies the brightness | ||
| 263 | - //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 264 | - //! \return Bool that is true on success | ||
| 265 | - //! \throws std::system_error when system or socket operations fail | ||
| 266 | - //! \throws HueException when response contained no body | ||
| 267 | - //! \throws HueAPIResponseException when response contains an error | ||
| 268 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 269 | - virtual bool setBrightness(unsigned int bri, uint8_t transition = 4) | ||
| 270 | - { | ||
| 271 | - if (brightnessStrategy) | 106 | + public: |
| 107 | + //! \brief std dtor | ||
| 108 | + ~HueLight() = default; | ||
| 109 | + | ||
| 110 | + //! \brief Function that turns the light on. | ||
| 111 | + //! | ||
| 112 | + //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 113 | + //! \return true on success | ||
| 114 | + //! \throws std::system_error when system or socket operations fail | ||
| 115 | + //! \throws HueException when response contained no body | ||
| 116 | + //! \throws HueAPIResponseException when response contains an error | ||
| 117 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 118 | + virtual bool On(uint8_t transition = 4); | ||
| 119 | + | ||
| 120 | + //! \brief Function that turns the light off. | ||
| 121 | + //! | ||
| 122 | + //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 123 | + //! \return Bool that is true on success | ||
| 124 | + //! \throws std::system_error when system or socket operations fail | ||
| 125 | + //! \throws HueException when response contained no body | ||
| 126 | + //! \throws HueAPIResponseException when response contains an error | ||
| 127 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 128 | + virtual bool Off(uint8_t transition = 4); | ||
| 129 | + | ||
| 130 | + //! \brief Function to check whether a light is on or off | ||
| 131 | + //! | ||
| 132 | + //! \return Bool that is true, when the light is on and false, when off | ||
| 133 | + //! \throws std::system_error when system or socket operations fail | ||
| 134 | + //! \throws HueException when response contained no body | ||
| 135 | + //! \throws HueAPIResponseException when response contains an error | ||
| 136 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 137 | + virtual bool isOn(); | ||
| 138 | + | ||
| 139 | + //! \brief Const function to check whether a light is on or off | ||
| 140 | + //! | ||
| 141 | + //! \note This will not refresh the light state | ||
| 142 | + //! \return Bool that is true, when the light is on and false, when off | ||
| 143 | + virtual bool isOn() const; | ||
| 144 | + | ||
| 145 | + //! \brief Const function that returns the id of this light | ||
| 146 | + //! | ||
| 147 | + //! \return integer representing the light id | ||
| 148 | + virtual int getId() const; | ||
| 149 | + | ||
| 150 | + //! \brief Const function that returns the light type | ||
| 151 | + //! | ||
| 152 | + //! \return String containing the type | ||
| 153 | + virtual std::string getType() const; | ||
| 154 | + | ||
| 155 | + //! \brief Function that returns the name of the light. | ||
| 156 | + //! | ||
| 157 | + //! \return String containig the name of the light | ||
| 158 | + //! \throws std::system_error when system or socket operations fail | ||
| 159 | + //! \throws HueException when response contained no body | ||
| 160 | + //! \throws HueAPIResponseException when response contains an error | ||
| 161 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 162 | + virtual std::string getName(); | ||
| 163 | + | ||
| 164 | + //! \brief Const function that returns the name of the light. | ||
| 165 | + //! | ||
| 166 | + //! \note This will not refresh the light state | ||
| 167 | + //! \return String containig the name of the light | ||
| 168 | + virtual std::string getName() const; | ||
| 169 | + | ||
| 170 | + //! \brief Const function that returns the modelid of the light | ||
| 171 | + //! | ||
| 172 | + //! \return String conatining the modelid | ||
| 173 | + virtual std::string getModelId() const; | ||
| 174 | + | ||
| 175 | + //! \brief Const function that returns the uniqueid of the light | ||
| 176 | + //! | ||
| 177 | + //! \note Only working on bridges with versions starting at 1.4 | ||
| 178 | + //! \return String containing the uniqueid or an empty string when the function is not supported | ||
| 179 | + virtual std::string getUId() const; | ||
| 180 | + | ||
| 181 | + //! \brief Const function that returns the manufacturername of the light | ||
| 182 | + //! | ||
| 183 | + //! \note Only working on bridges with versions starting at 1.7 | ||
| 184 | + //! \return String containing the manufacturername or an empty string when the function is not supported | ||
| 185 | + virtual std::string getManufacturername() const; | ||
| 186 | + | ||
| 187 | + //! \brief Const function that returns the productname of the light | ||
| 188 | + //! | ||
| 189 | + //! \note Only working on bridges with versions starting at 1.24 | ||
| 190 | + //! \return String containing the productname or an empty string when the function is not supported | ||
| 191 | + virtual std::string getProductname() const; | ||
| 192 | + | ||
| 193 | + //! \brief Const function that returns the luminaireuniqueid of the light | ||
| 194 | + //! | ||
| 195 | + //! \note Only working on bridges with versions starting at 1.9 | ||
| 196 | + //! \return String containing the luminaireuniqueid or an empty string when the function is not supported | ||
| 197 | + virtual std::string getLuminaireUId() const; | ||
| 198 | + | ||
| 199 | + //! \brief Function that returns the software version of the light | ||
| 200 | + //! | ||
| 201 | + //! \return String containing the software version | ||
| 202 | + //! \throws std::system_error when system or socket operations fail | ||
| 203 | + //! \throws HueException when response contained no body | ||
| 204 | + //! \throws HueAPIResponseException when response contains an error | ||
| 205 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 206 | + virtual std::string getSwVersion(); | ||
| 207 | + | ||
| 208 | + //! \brief Const function that returns the software version of the light | ||
| 209 | + //! | ||
| 210 | + //! \note This will not refresh the light state | ||
| 211 | + //! \return String containing the software version | ||
| 212 | + virtual std::string getSwVersion() const; | ||
| 213 | + | ||
| 214 | + //! \brief Function that sets the name of the light | ||
| 215 | + //! | ||
| 216 | + //! \return Bool that is true on success | ||
| 217 | + //! \throws std::system_error when system or socket operations fail | ||
| 218 | + //! \throws HueException when response contained no body | ||
| 219 | + //! \throws HueAPIResponseException when response contains an error | ||
| 220 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 221 | + virtual bool setName(const std::string& name); | ||
| 222 | + | ||
| 223 | + //! \brief Const function that returns the color type of the light. | ||
| 224 | + //! | ||
| 225 | + //! \return ColorType containig the color type of the light | ||
| 226 | + virtual ColorType getColorType() const; | ||
| 227 | + | ||
| 228 | + //! \brief Const function to check whether this light has brightness control | ||
| 229 | + //! | ||
| 230 | + //! \return Bool that is true when the light has specified abilities and false | ||
| 231 | + //! when not | ||
| 232 | + virtual bool hasBrightnessControl() const { return brightnessStrategy != nullptr; }; | ||
| 233 | + | ||
| 234 | + //! \brief Const function to check whether this light has color temperature | ||
| 235 | + //! control | ||
| 236 | + //! | ||
| 237 | + //! \return Bool that is true when the light has specified abilities and false | ||
| 238 | + //! when not | ||
| 239 | + virtual bool hasTemperatureControl() const { return colorTemperatureStrategy != nullptr; }; | ||
| 240 | + | ||
| 241 | + //! \brief Connst function to check whether this light has full color control | ||
| 242 | + //! | ||
| 243 | + //! \return Bool that is true when the light has specified abilities and false | ||
| 244 | + //! when not | ||
| 245 | + virtual bool hasColorControl() const { return colorHueStrategy != nullptr; }; | ||
| 246 | + | ||
| 247 | + //! \brief Const function that converts Kelvin to Mired. | ||
| 248 | + //! | ||
| 249 | + //! \param kelvin Unsigned integer value in Kelvin | ||
| 250 | + //! \return Unsigned integer value in Mired | ||
| 251 | + unsigned int KelvinToMired(unsigned int kelvin) const; | ||
| 252 | + | ||
| 253 | + //! \brief Const function that converts Mired to Kelvin. | ||
| 254 | + //! | ||
| 255 | + //! \param mired Unsigned integer value in Mired | ||
| 256 | + //! \return Unsigned integer value in Kelvin | ||
| 257 | + unsigned int MiredToKelvin(unsigned int mired) const; | ||
| 258 | + | ||
| 259 | + //! \brief Function that sets the brightness of this light. | ||
| 260 | + //! | ||
| 261 | + //! \note The brightness will only be set if the light has a reference to a | ||
| 262 | + //! specific \ref BrightnessStrategy. The brightness can range from 0 = off to | ||
| 263 | + //! 254 = fully lit. | ||
| 264 | + //! \param bri Unsigned int that specifies the brightness | ||
| 265 | + //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 266 | + //! \return Bool that is true on success | ||
| 267 | + //! \throws std::system_error when system or socket operations fail | ||
| 268 | + //! \throws HueException when response contained no body | ||
| 269 | + //! \throws HueAPIResponseException when response contains an error | ||
| 270 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 271 | + virtual bool setBrightness(unsigned int bri, uint8_t transition = 4) | ||
| 272 | { | 272 | { |
| 273 | - return brightnessStrategy->setBrightness(bri, transition, *this); | ||
| 274 | - } | ||
| 275 | - return false; | ||
| 276 | - }; | ||
| 277 | - | ||
| 278 | - //! \brief Const function that returns the brightness of this light. | ||
| 279 | - //! | ||
| 280 | - //! \note The brightness will only be returned if the light has a reference to | ||
| 281 | - //! a specific \ref BrightnessStrategy. \note This will not refresh the light | ||
| 282 | - //! state The brightness can range from 0 = off to 254 = fully lit. \return | ||
| 283 | - //! Unsigned int that is 0 when function failed | ||
| 284 | - virtual unsigned int getBrightness() const | ||
| 285 | - { | ||
| 286 | - if (brightnessStrategy) | 273 | + if (brightnessStrategy) |
| 274 | + { | ||
| 275 | + return brightnessStrategy->setBrightness(bri, transition, *this); | ||
| 276 | + } | ||
| 277 | + return false; | ||
| 278 | + }; | ||
| 279 | + | ||
| 280 | + //! \brief Const function that returns the brightness of this light. | ||
| 281 | + //! | ||
| 282 | + //! \note The brightness will only be returned if the light has a reference to | ||
| 283 | + //! a specific \ref BrightnessStrategy. \note This will not refresh the light | ||
| 284 | + //! state The brightness can range from 0 = off to 254 = fully lit. \return | ||
| 285 | + //! Unsigned int that is 0 when function failed | ||
| 286 | + virtual unsigned int getBrightness() const | ||
| 287 | { | 287 | { |
| 288 | - return brightnessStrategy->getBrightness(*this); | ||
| 289 | - } | ||
| 290 | - return 0; | ||
| 291 | - }; | ||
| 292 | - | ||
| 293 | - //! \brief Function that returns the brightness of this light. | ||
| 294 | - //! | ||
| 295 | - //! \note The brightness will only be returned if the light has a reference to | ||
| 296 | - //! a specific \ref BrightnessStrategy. The brightness can range from 0 = off | ||
| 297 | - //! to 254 = fully lit. | ||
| 298 | - //! \return Unsigned int that is 0 when function failed | ||
| 299 | - //! \throws std::system_error when system or socket operations fail | ||
| 300 | - //! \throws HueException when response contained no body | ||
| 301 | - //! \throws HueAPIResponseException when response contains an error | ||
| 302 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 303 | - virtual unsigned int getBrightness() | ||
| 304 | - { | ||
| 305 | - if (brightnessStrategy) | 288 | + if (brightnessStrategy) |
| 289 | + { | ||
| 290 | + return brightnessStrategy->getBrightness(*this); | ||
| 291 | + } | ||
| 292 | + return 0; | ||
| 293 | + }; | ||
| 294 | + | ||
| 295 | + //! \brief Function that returns the brightness of this light. | ||
| 296 | + //! | ||
| 297 | + //! \note The brightness will only be returned if the light has a reference to | ||
| 298 | + //! a specific \ref BrightnessStrategy. The brightness can range from 0 = off | ||
| 299 | + //! to 254 = fully lit. | ||
| 300 | + //! \return Unsigned int that is 0 when function failed | ||
| 301 | + //! \throws std::system_error when system or socket operations fail | ||
| 302 | + //! \throws HueException when response contained no body | ||
| 303 | + //! \throws HueAPIResponseException when response contains an error | ||
| 304 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 305 | + virtual unsigned int getBrightness() | ||
| 306 | { | 306 | { |
| 307 | - return brightnessStrategy->getBrightness(*this); | ||
| 308 | - } | ||
| 309 | - return 0; | ||
| 310 | - }; | ||
| 311 | - | ||
| 312 | - //! \brief Fucntion that sets the color temperature of this light in mired. | ||
| 313 | - //! | ||
| 314 | - //! \note The color temperature will only be set if the light has a reference | ||
| 315 | - //! to a specific \ref ColorTemperatureStrategy. The color temperature can | ||
| 316 | - //! range from 153 to 500. | ||
| 317 | - //! \param mired Unsigned int that specifies the color temperature in Mired | ||
| 318 | - //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 319 | - //! \return Bool that is true on success | ||
| 320 | - //! \throws std::system_error when system or socket operations fail | ||
| 321 | - //! \throws HueException when response contained no body | ||
| 322 | - //! \throws HueAPIResponseException when response contains an error | ||
| 323 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 324 | - virtual bool setColorTemperature(unsigned int mired, uint8_t transition = 4) | ||
| 325 | - { | ||
| 326 | - if (colorTemperatureStrategy) | 307 | + if (brightnessStrategy) |
| 308 | + { | ||
| 309 | + return brightnessStrategy->getBrightness(*this); | ||
| 310 | + } | ||
| 311 | + return 0; | ||
| 312 | + }; | ||
| 313 | + | ||
| 314 | + //! \brief Fucntion that sets the color temperature of this light in mired. | ||
| 315 | + //! | ||
| 316 | + //! \note The color temperature will only be set if the light has a reference | ||
| 317 | + //! to a specific \ref ColorTemperatureStrategy. The color temperature can | ||
| 318 | + //! range from 153 to 500. | ||
| 319 | + //! \param mired Unsigned int that specifies the color temperature in Mired | ||
| 320 | + //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 321 | + //! \return Bool that is true on success | ||
| 322 | + //! \throws std::system_error when system or socket operations fail | ||
| 323 | + //! \throws HueException when response contained no body | ||
| 324 | + //! \throws HueAPIResponseException when response contains an error | ||
| 325 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 326 | + virtual bool setColorTemperature(unsigned int mired, uint8_t transition = 4) | ||
| 327 | { | 327 | { |
| 328 | - return colorTemperatureStrategy->setColorTemperature(mired, transition, *this); | ||
| 329 | - } | ||
| 330 | - return false; | ||
| 331 | - }; | ||
| 332 | - | ||
| 333 | - //! \brief Const function that returns the current color temperature of the | ||
| 334 | - //! light | ||
| 335 | - //! | ||
| 336 | - //! \note The color temperature will only be returned when the light has a | ||
| 337 | - //! reference to a specific \ref ColorTemperatureStrategy. | ||
| 338 | - //! \note This will not refresh the light state | ||
| 339 | - //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 340 | - //! and 500 is warm. | ||
| 341 | - //! \return Unsigned int representing the color temperature in mired or 0 when failed | ||
| 342 | - virtual unsigned int getColorTemperature() const | ||
| 343 | - { | ||
| 344 | - if (colorTemperatureStrategy) | 328 | + if (colorTemperatureStrategy) |
| 329 | + { | ||
| 330 | + return colorTemperatureStrategy->setColorTemperature(mired, transition, *this); | ||
| 331 | + } | ||
| 332 | + return false; | ||
| 333 | + }; | ||
| 334 | + | ||
| 335 | + //! \brief Const function that returns the current color temperature of the | ||
| 336 | + //! light | ||
| 337 | + //! | ||
| 338 | + //! \note The color temperature will only be returned when the light has a | ||
| 339 | + //! reference to a specific \ref ColorTemperatureStrategy. | ||
| 340 | + //! \note This will not refresh the light state | ||
| 341 | + //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 342 | + //! and 500 is warm. | ||
| 343 | + //! \return Unsigned int representing the color temperature in mired or 0 when failed | ||
| 344 | + virtual unsigned int getColorTemperature() const | ||
| 345 | { | 345 | { |
| 346 | - return colorTemperatureStrategy->getColorTemperature(*this); | ||
| 347 | - } | ||
| 348 | - return 0; | ||
| 349 | - }; | ||
| 350 | - | ||
| 351 | - //! \brief Function that returns the current color temperature of the light | ||
| 352 | - //! | ||
| 353 | - //! \note The color temperature will only be returned when the light has a | ||
| 354 | - //! reference to a specific \ref ColorTemperatureStrategy. | ||
| 355 | - //! Updates the lights state by calling refreshState() | ||
| 356 | - //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 357 | - //! and 500 is warm. | ||
| 358 | - //! \return Unsigned int representing the color temperature in mired or 0 when failed | ||
| 359 | - //! \throws std::system_error when system or socket operations fail | ||
| 360 | - //! \throws HueException when response contained no body | ||
| 361 | - //! \throws HueAPIResponseException when response contains an error | ||
| 362 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 363 | - virtual unsigned int getColorTemperature() | ||
| 364 | - { | ||
| 365 | - if (colorTemperatureStrategy) | 346 | + if (colorTemperatureStrategy) |
| 347 | + { | ||
| 348 | + return colorTemperatureStrategy->getColorTemperature(*this); | ||
| 349 | + } | ||
| 350 | + return 0; | ||
| 351 | + }; | ||
| 352 | + | ||
| 353 | + //! \brief Function that returns the current color temperature of the light | ||
| 354 | + //! | ||
| 355 | + //! \note The color temperature will only be returned when the light has a | ||
| 356 | + //! reference to a specific \ref ColorTemperatureStrategy. | ||
| 357 | + //! Updates the lights state by calling refreshState() | ||
| 358 | + //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 359 | + //! and 500 is warm. | ||
| 360 | + //! \return Unsigned int representing the color temperature in mired or 0 when failed | ||
| 361 | + //! \throws std::system_error when system or socket operations fail | ||
| 362 | + //! \throws HueException when response contained no body | ||
| 363 | + //! \throws HueAPIResponseException when response contains an error | ||
| 364 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 365 | + virtual unsigned int getColorTemperature() | ||
| 366 | { | 366 | { |
| 367 | - return colorTemperatureStrategy->getColorTemperature(*this); | ||
| 368 | - } | ||
| 369 | - return 0; | ||
| 370 | - }; | ||
| 371 | - | ||
| 372 | - //! \brief Function to set the color of this light with specified hue. | ||
| 373 | - //! | ||
| 374 | - //! \note The color will only be set if the light has a reference to a | ||
| 375 | - //! specific \ref ColorHueStrategy. The hue can range from 0 to 65535, whereas | ||
| 376 | - //! 65535 and 0 are red, 25500 is green and 46920 is blue. | ||
| 377 | - //! \param hue uint16_t that specifies the hue | ||
| 378 | - //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 379 | - //! \return Bool that is true on success | ||
| 380 | - //! \throws std::system_error when system or socket operations fail | ||
| 381 | - //! \throws HueException when response contained no body | ||
| 382 | - //! \throws HueAPIResponseException when response contains an error | ||
| 383 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 384 | - virtual bool setColorHue(uint16_t hue, uint8_t transition = 4) | ||
| 385 | - { | ||
| 386 | - if (colorHueStrategy) | 367 | + if (colorTemperatureStrategy) |
| 368 | + { | ||
| 369 | + return colorTemperatureStrategy->getColorTemperature(*this); | ||
| 370 | + } | ||
| 371 | + return 0; | ||
| 372 | + }; | ||
| 373 | + | ||
| 374 | + //! \brief Function to set the color of this light with specified hue. | ||
| 375 | + //! | ||
| 376 | + //! \note The color will only be set if the light has a reference to a | ||
| 377 | + //! specific \ref ColorHueStrategy. The hue can range from 0 to 65535, whereas | ||
| 378 | + //! 65535 and 0 are red, 25500 is green and 46920 is blue. | ||
| 379 | + //! \param hue uint16_t that specifies the hue | ||
| 380 | + //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 381 | + //! \return Bool that is true on success | ||
| 382 | + //! \throws std::system_error when system or socket operations fail | ||
| 383 | + //! \throws HueException when response contained no body | ||
| 384 | + //! \throws HueAPIResponseException when response contains an error | ||
| 385 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 386 | + virtual bool setColorHue(uint16_t hue, uint8_t transition = 4) | ||
| 387 | { | 387 | { |
| 388 | - return colorHueStrategy->setColorHue(hue, transition, *this); | ||
| 389 | - } | ||
| 390 | - return false; | ||
| 391 | - }; | ||
| 392 | - | ||
| 393 | - //! \brief Function to set the color of this light with specified saturation. | ||
| 394 | - //! | ||
| 395 | - //! \note The color will only be set if the light has a reference to a | ||
| 396 | - //! specific \ref ColorHueStrategy. The saturation can range from 0 to 254, | ||
| 397 | - //! whereas 0 is least saturated (white) and 254 is most saturated. | ||
| 398 | - //! \param sat uint8_t that specifies the saturation | ||
| 399 | - //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 400 | - //! \return Bool that is true on success | ||
| 401 | - //! \throws std::system_error when system or socket operations fail | ||
| 402 | - //! \throws HueException when response contained no body | ||
| 403 | - //! \throws HueAPIResponseException when response contains an error | ||
| 404 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 405 | - virtual bool setColorSaturation(uint8_t sat, uint8_t transition = 4) | ||
| 406 | - { | ||
| 407 | - if (colorHueStrategy) | 388 | + if (colorHueStrategy) |
| 389 | + { | ||
| 390 | + return colorHueStrategy->setColorHue(hue, transition, *this); | ||
| 391 | + } | ||
| 392 | + return false; | ||
| 393 | + }; | ||
| 394 | + | ||
| 395 | + //! \brief Function to set the color of this light with specified saturation. | ||
| 396 | + //! | ||
| 397 | + //! \note The color will only be set if the light has a reference to a | ||
| 398 | + //! specific \ref ColorHueStrategy. The saturation can range from 0 to 254, | ||
| 399 | + //! whereas 0 is least saturated (white) and 254 is most saturated. | ||
| 400 | + //! \param sat uint8_t that specifies the saturation | ||
| 401 | + //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 402 | + //! \return Bool that is true on success | ||
| 403 | + //! \throws std::system_error when system or socket operations fail | ||
| 404 | + //! \throws HueException when response contained no body | ||
| 405 | + //! \throws HueAPIResponseException when response contains an error | ||
| 406 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 407 | + virtual bool setColorSaturation(uint8_t sat, uint8_t transition = 4) | ||
| 408 | { | 408 | { |
| 409 | - return colorHueStrategy->setColorSaturation(sat, transition, *this); | ||
| 410 | - } | ||
| 411 | - return false; | ||
| 412 | - }; | ||
| 413 | - | ||
| 414 | - //! \brief Function to set the color of this light with specified hue and | ||
| 415 | - //! saturation. | ||
| 416 | - //! | ||
| 417 | - //! \note The color will only be set if the light has a reference to a | ||
| 418 | - //! specific \ref ColorHueStrategy. | ||
| 419 | - //! \param hue uint16_t that specifies the hue | ||
| 420 | - //! \param sat uint8_t that specifies the saturation | ||
| 421 | - //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms. | ||
| 422 | - //! \return Bool that is true on success | ||
| 423 | - //! \throws std::system_error when system or socket operations fail | ||
| 424 | - //! \throws HueException when response contained no body | ||
| 425 | - //! \throws HueAPIResponseException when response contains an error | ||
| 426 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 427 | - virtual bool setColorHueSaturation(uint16_t hue, uint8_t sat, uint8_t transition = 4) | ||
| 428 | - { | ||
| 429 | - if (colorHueStrategy) | 409 | + if (colorHueStrategy) |
| 410 | + { | ||
| 411 | + return colorHueStrategy->setColorSaturation(sat, transition, *this); | ||
| 412 | + } | ||
| 413 | + return false; | ||
| 414 | + }; | ||
| 415 | + | ||
| 416 | + //! \brief Function to set the color of this light with specified hue and | ||
| 417 | + //! saturation. | ||
| 418 | + //! | ||
| 419 | + //! \note The color will only be set if the light has a reference to a | ||
| 420 | + //! specific \ref ColorHueStrategy. | ||
| 421 | + //! \param hue uint16_t that specifies the hue | ||
| 422 | + //! \param sat uint8_t that specifies the saturation | ||
| 423 | + //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms. | ||
| 424 | + //! \return Bool that is true on success | ||
| 425 | + //! \throws std::system_error when system or socket operations fail | ||
| 426 | + //! \throws HueException when response contained no body | ||
| 427 | + //! \throws HueAPIResponseException when response contains an error | ||
| 428 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 429 | + virtual bool setColorHueSaturation(uint16_t hue, uint8_t sat, uint8_t transition = 4) | ||
| 430 | { | 430 | { |
| 431 | - return colorHueStrategy->setColorHueSaturation(hue, sat, transition, *this); | ||
| 432 | - } | ||
| 433 | - return false; | ||
| 434 | - }; | ||
| 435 | - | ||
| 436 | - //! \brief Const function that returns the current color of the light as hue | ||
| 437 | - //! and saturation | ||
| 438 | - //! | ||
| 439 | - //! \note The color hue and saturation will only be returned when the light | ||
| 440 | - //! has a reference to a specific \ref ColorHueStrategy. | ||
| 441 | - //! \note This will not refresh the light state | ||
| 442 | - //! \return Pair containing the hue as first value and saturation as second value or an empty one when failed | ||
| 443 | - //! \throws std::system_error when system or socket operations fail | ||
| 444 | - //! \throws HueException when response contained no body | ||
| 445 | - //! \throws HueAPIResponseException when response contains an error | ||
| 446 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 447 | - virtual std::pair<uint16_t, uint8_t> getColorHueSaturation() const | ||
| 448 | - { | ||
| 449 | - if (colorHueStrategy) | 431 | + if (colorHueStrategy) |
| 432 | + { | ||
| 433 | + return colorHueStrategy->setColorHueSaturation(hue, sat, transition, *this); | ||
| 434 | + } | ||
| 435 | + return false; | ||
| 436 | + }; | ||
| 437 | + | ||
| 438 | + //! \brief Const function that returns the current color of the light as hue | ||
| 439 | + //! and saturation | ||
| 440 | + //! | ||
| 441 | + //! \note The color hue and saturation will only be returned when the light | ||
| 442 | + //! has a reference to a specific \ref ColorHueStrategy. | ||
| 443 | + //! \note This will not refresh the light state | ||
| 444 | + //! \return Pair containing the hue as first value and saturation as second value or an empty one when failed | ||
| 445 | + //! \throws std::system_error when system or socket operations fail | ||
| 446 | + //! \throws HueException when response contained no body | ||
| 447 | + //! \throws HueAPIResponseException when response contains an error | ||
| 448 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 449 | + virtual std::pair<uint16_t, uint8_t> getColorHueSaturation() const | ||
| 450 | { | 450 | { |
| 451 | - return colorHueStrategy->getColorHueSaturation(*this); | ||
| 452 | - } | ||
| 453 | - return {}; | ||
| 454 | - }; | ||
| 455 | - | ||
| 456 | - //! \brief Function that returns the current color of the light as hue and | ||
| 457 | - //! saturation | ||
| 458 | - //! | ||
| 459 | - //! \note The color hue and saturation will only be returned when the light | ||
| 460 | - //! has a reference to a specific \ref ColorHueStrategy. Updates the lights | ||
| 461 | - //! state by calling refreshState() | ||
| 462 | - //! \return Pair containing the hue as first value and saturation as second value or an empty one when failed | ||
| 463 | - //! \throws std::system_error when system or socket operations fail | ||
| 464 | - //! \throws HueException when response contained no body | ||
| 465 | - //! \throws HueAPIResponseException when response contains an error | ||
| 466 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 467 | - virtual std::pair<uint16_t, uint8_t> getColorHueSaturation() | ||
| 468 | - { | ||
| 469 | - if (colorHueStrategy) | 451 | + if (colorHueStrategy) |
| 452 | + { | ||
| 453 | + return colorHueStrategy->getColorHueSaturation(*this); | ||
| 454 | + } | ||
| 455 | + return {}; | ||
| 456 | + }; | ||
| 457 | + | ||
| 458 | + //! \brief Function that returns the current color of the light as hue and | ||
| 459 | + //! saturation | ||
| 460 | + //! | ||
| 461 | + //! \note The color hue and saturation will only be returned when the light | ||
| 462 | + //! has a reference to a specific \ref ColorHueStrategy. Updates the lights | ||
| 463 | + //! state by calling refreshState() | ||
| 464 | + //! \return Pair containing the hue as first value and saturation as second value or an empty one when failed | ||
| 465 | + //! \throws std::system_error when system or socket operations fail | ||
| 466 | + //! \throws HueException when response contained no body | ||
| 467 | + //! \throws HueAPIResponseException when response contains an error | ||
| 468 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 469 | + virtual std::pair<uint16_t, uint8_t> getColorHueSaturation() | ||
| 470 | { | 470 | { |
| 471 | - return colorHueStrategy->getColorHueSaturation(*this); | ||
| 472 | - } | ||
| 473 | - return {}; | ||
| 474 | - }; | ||
| 475 | - | ||
| 476 | - //! \brief Function to set the color of this light in CIE with specified x y. | ||
| 477 | - //! | ||
| 478 | - //! \note The color will only be set if the light has a reference to a | ||
| 479 | - //! specific \ref ColorHueStrategy. The values of x and y are ranging from 0 to 1. | ||
| 480 | - //! \param x float that specifies the x coordinate in CIE | ||
| 481 | - //! \param y float that specifies the y coordinate in CIE | ||
| 482 | - //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 483 | - //! \return Bool that is true on success | ||
| 484 | - //! \throws std::system_error when system or socket operations fail | ||
| 485 | - //! \throws HueException when response contained no body | ||
| 486 | - //! \throws HueAPIResponseException when response contains an error | ||
| 487 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 488 | - virtual bool setColorXY(float x, float y, uint8_t transition = 4) | ||
| 489 | - { | ||
| 490 | - if (colorHueStrategy) | 471 | + if (colorHueStrategy) |
| 472 | + { | ||
| 473 | + return colorHueStrategy->getColorHueSaturation(*this); | ||
| 474 | + } | ||
| 475 | + return {}; | ||
| 476 | + }; | ||
| 477 | + | ||
| 478 | + //! \brief Function to set the color of this light in CIE with specified x y. | ||
| 479 | + //! | ||
| 480 | + //! \note The color will only be set if the light has a reference to a | ||
| 481 | + //! specific \ref ColorHueStrategy. The values of x and y are ranging from 0 to 1. | ||
| 482 | + //! \param x float that specifies the x coordinate in CIE | ||
| 483 | + //! \param y float that specifies the y coordinate in CIE | ||
| 484 | + //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 485 | + //! \return Bool that is true on success | ||
| 486 | + //! \throws std::system_error when system or socket operations fail | ||
| 487 | + //! \throws HueException when response contained no body | ||
| 488 | + //! \throws HueAPIResponseException when response contains an error | ||
| 489 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 490 | + virtual bool setColorXY(float x, float y, uint8_t transition = 4) | ||
| 491 | { | 491 | { |
| 492 | - return colorHueStrategy->setColorXY(x, y, transition, *this); | ||
| 493 | - } | ||
| 494 | - return false; | ||
| 495 | - }; | ||
| 496 | - | ||
| 497 | - //! \brief Const function that returns the current color of the light as xy | ||
| 498 | - //! | ||
| 499 | - //! \note The color x and y will only be returned when the light has a | ||
| 500 | - //! reference to a specific \ref ColorHueStrategy. | ||
| 501 | - //! \note This does not update the lights state | ||
| 502 | - //! \return Pair containing the x as first value and y as second value or an | ||
| 503 | - //! empty one when failed | ||
| 504 | - virtual std::pair<float, float> getColorXY() const | ||
| 505 | - { | ||
| 506 | - if (colorHueStrategy) | 492 | + if (colorHueStrategy) |
| 493 | + { | ||
| 494 | + return colorHueStrategy->setColorXY(x, y, transition, *this); | ||
| 495 | + } | ||
| 496 | + return false; | ||
| 497 | + }; | ||
| 498 | + | ||
| 499 | + //! \brief Const function that returns the current color of the light as xy | ||
| 500 | + //! | ||
| 501 | + //! \note The color x and y will only be returned when the light has a | ||
| 502 | + //! reference to a specific \ref ColorHueStrategy. | ||
| 503 | + //! \note This does not update the lights state | ||
| 504 | + //! \return Pair containing the x as first value and y as second value or an | ||
| 505 | + //! empty one when failed | ||
| 506 | + virtual std::pair<float, float> getColorXY() const | ||
| 507 | { | 507 | { |
| 508 | - return colorHueStrategy->getColorXY(*this); | ||
| 509 | - } | ||
| 510 | - return {}; | ||
| 511 | - }; | ||
| 512 | - | ||
| 513 | - //! \brief Function that returns the current color of the light as xy | ||
| 514 | - //! | ||
| 515 | - //! \note The color x and y will only be returned when the light has a | ||
| 516 | - //! reference to a specific \ref ColorHueStrategy. | ||
| 517 | - //! Updates the lights state by calling refreshState() | ||
| 518 | - //! \return Pair containing the x as first value and y as second value or an empty one when failed | ||
| 519 | - //! \throws std::system_error when system or socket operations fail | ||
| 520 | - //! \throws HueException when response contained no body | ||
| 521 | - //! \throws HueAPIResponseException when response contains an error | ||
| 522 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 523 | - virtual std::pair<float, float> getColorXY() | ||
| 524 | - { | ||
| 525 | - if (colorHueStrategy) | 508 | + if (colorHueStrategy) |
| 509 | + { | ||
| 510 | + return colorHueStrategy->getColorXY(*this); | ||
| 511 | + } | ||
| 512 | + return {}; | ||
| 513 | + }; | ||
| 514 | + | ||
| 515 | + //! \brief Function that returns the current color of the light as xy | ||
| 516 | + //! | ||
| 517 | + //! \note The color x and y will only be returned when the light has a | ||
| 518 | + //! reference to a specific \ref ColorHueStrategy. | ||
| 519 | + //! Updates the lights state by calling refreshState() | ||
| 520 | + //! \return Pair containing the x as first value and y as second value or an empty one when failed | ||
| 521 | + //! \throws std::system_error when system or socket operations fail | ||
| 522 | + //! \throws HueException when response contained no body | ||
| 523 | + //! \throws HueAPIResponseException when response contains an error | ||
| 524 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 525 | + virtual std::pair<float, float> getColorXY() | ||
| 526 | { | 526 | { |
| 527 | - return colorHueStrategy->getColorXY(*this); | ||
| 528 | - } | ||
| 529 | - return {}; | ||
| 530 | - }; | ||
| 531 | - | ||
| 532 | - //! \brief Function to set the color of this light with red green and blue | ||
| 533 | - //! values. | ||
| 534 | - //! | ||
| 535 | - //! \note The color will only be set if the light has a reference to a | ||
| 536 | - //! specific \ref ColorHueStrategy. The values of red, green and blue are | ||
| 537 | - //! ranging from 0 to 255. | ||
| 538 | - //! \param r uint8_t that specifies the red color value | ||
| 539 | - //! \param g uint8_t that specifies the green color value | ||
| 540 | - //! \param b uint8_t that specifies the blue color value | ||
| 541 | - //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 542 | - //! \return Bool that is true on success | ||
| 543 | - //! \throws std::system_error when system or socket operations fail | ||
| 544 | - //! \throws HueException when response contained no body | ||
| 545 | - //! \throws HueAPIResponseException when response contains an error | ||
| 546 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 547 | - virtual bool setColorRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t transition = 4) | ||
| 548 | - { | ||
| 549 | - if (colorHueStrategy) | 527 | + if (colorHueStrategy) |
| 528 | + { | ||
| 529 | + return colorHueStrategy->getColorXY(*this); | ||
| 530 | + } | ||
| 531 | + return {}; | ||
| 532 | + }; | ||
| 533 | + | ||
| 534 | + //! \brief Function to set the color of this light with red green and blue | ||
| 535 | + //! values. | ||
| 536 | + //! | ||
| 537 | + //! \note The color will only be set if the light has a reference to a | ||
| 538 | + //! specific \ref ColorHueStrategy. The values of red, green and blue are | ||
| 539 | + //! ranging from 0 to 255. | ||
| 540 | + //! \param r uint8_t that specifies the red color value | ||
| 541 | + //! \param g uint8_t that specifies the green color value | ||
| 542 | + //! \param b uint8_t that specifies the blue color value | ||
| 543 | + //! \param transition Optional parameter to set the transition from current state to new, standard is 4 = 400ms | ||
| 544 | + //! \return Bool that is true on success | ||
| 545 | + //! \throws std::system_error when system or socket operations fail | ||
| 546 | + //! \throws HueException when response contained no body | ||
| 547 | + //! \throws HueAPIResponseException when response contains an error | ||
| 548 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 549 | + virtual bool setColorRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t transition = 4) | ||
| 550 | { | 550 | { |
| 551 | - return colorHueStrategy->setColorRGB(r, g, b, transition, *this); | ||
| 552 | - } | ||
| 553 | - return false; | ||
| 554 | - }; | ||
| 555 | - | ||
| 556 | - //! \brief Function that lets the light perform one breath cycle. | ||
| 557 | - //! | ||
| 558 | - //! Can be used for locating a light. | ||
| 559 | - //! \return bool that is true on success | ||
| 560 | - //! \throws std::system_error when system or socket operations fail | ||
| 561 | - //! \throws HueException when response contained no body | ||
| 562 | - //! \throws HueAPIResponseException when response contains an error | ||
| 563 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 564 | - virtual bool alert(); | ||
| 565 | - | ||
| 566 | - //! \brief Function that lets the light perform one breath cycle in specified | ||
| 567 | - //! color temperature. | ||
| 568 | - //! | ||
| 569 | - //! \note The breath cylce will only be performed if the light has a reference | ||
| 570 | - //! to a specific \ref ColorTemperatureStrategy. | ||
| 571 | - //! \param mired Color temperature in mired | ||
| 572 | - //! \return Bool that is true on success | ||
| 573 | - //! \throws std::system_error when system or socket operations fail | ||
| 574 | - //! \throws HueException when response contained no body | ||
| 575 | - //! \throws HueAPIResponseException when response contains an error | ||
| 576 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 577 | - virtual bool alertTemperature(unsigned int mired) | ||
| 578 | - { | ||
| 579 | - if (colorTemperatureStrategy) | 551 | + if (colorHueStrategy) |
| 552 | + { | ||
| 553 | + return colorHueStrategy->setColorRGB(r, g, b, transition, *this); | ||
| 554 | + } | ||
| 555 | + return false; | ||
| 556 | + }; | ||
| 557 | + | ||
| 558 | + //! \brief Function that lets the light perform one breath cycle. | ||
| 559 | + //! | ||
| 560 | + //! Can be used for locating a light. | ||
| 561 | + //! \return bool that is true on success | ||
| 562 | + //! \throws std::system_error when system or socket operations fail | ||
| 563 | + //! \throws HueException when response contained no body | ||
| 564 | + //! \throws HueAPIResponseException when response contains an error | ||
| 565 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 566 | + virtual bool alert(); | ||
| 567 | + | ||
| 568 | + //! \brief Function that lets the light perform one breath cycle in specified | ||
| 569 | + //! color temperature. | ||
| 570 | + //! | ||
| 571 | + //! \note The breath cylce will only be performed if the light has a reference | ||
| 572 | + //! to a specific \ref ColorTemperatureStrategy. | ||
| 573 | + //! \param mired Color temperature in mired | ||
| 574 | + //! \return Bool that is true on success | ||
| 575 | + //! \throws std::system_error when system or socket operations fail | ||
| 576 | + //! \throws HueException when response contained no body | ||
| 577 | + //! \throws HueAPIResponseException when response contains an error | ||
| 578 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 579 | + virtual bool alertTemperature(unsigned int mired) | ||
| 580 | { | 580 | { |
| 581 | - return colorTemperatureStrategy->alertTemperature(mired, *this); | ||
| 582 | - } | ||
| 583 | - return false; | ||
| 584 | - }; | ||
| 585 | - | ||
| 586 | - //! \brief Function that lets the light perform one breath cycle in specified | ||
| 587 | - //! color. | ||
| 588 | - //! | ||
| 589 | - //! \note The breath cylce will only be performed if the light has a reference | ||
| 590 | - //! to a specific \ref ColorHueStrategy. | ||
| 591 | - //! \param hue uint16_t that specifies the hue | ||
| 592 | - //! \param sat uint8_t that specifies the saturation | ||
| 593 | - //! \return Bool that is true on success | ||
| 594 | - //! \throws std::system_error when system or socket operations fail | ||
| 595 | - //! \throws HueException when response contained no body | ||
| 596 | - //! \throws HueAPIResponseException when response contains an error | ||
| 597 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 598 | - virtual bool alertHueSaturation(uint16_t hue, uint8_t sat) | ||
| 599 | - { | ||
| 600 | - if (colorHueStrategy) | 581 | + if (colorTemperatureStrategy) |
| 582 | + { | ||
| 583 | + return colorTemperatureStrategy->alertTemperature(mired, *this); | ||
| 584 | + } | ||
| 585 | + return false; | ||
| 586 | + }; | ||
| 587 | + | ||
| 588 | + //! \brief Function that lets the light perform one breath cycle in specified | ||
| 589 | + //! color. | ||
| 590 | + //! | ||
| 591 | + //! \note The breath cylce will only be performed if the light has a reference | ||
| 592 | + //! to a specific \ref ColorHueStrategy. | ||
| 593 | + //! \param hue uint16_t that specifies the hue | ||
| 594 | + //! \param sat uint8_t that specifies the saturation | ||
| 595 | + //! \return Bool that is true on success | ||
| 596 | + //! \throws std::system_error when system or socket operations fail | ||
| 597 | + //! \throws HueException when response contained no body | ||
| 598 | + //! \throws HueAPIResponseException when response contains an error | ||
| 599 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 600 | + virtual bool alertHueSaturation(uint16_t hue, uint8_t sat) | ||
| 601 | { | 601 | { |
| 602 | - return colorHueStrategy->alertHueSaturation(hue, sat, *this); | ||
| 603 | - } | ||
| 604 | - return false; | ||
| 605 | - }; | ||
| 606 | - | ||
| 607 | - //! \brief Function that lets the light perform one breath cycle in specified | ||
| 608 | - //! color. | ||
| 609 | - //! | ||
| 610 | - //! \note The breath cylce will only be performed if the light has a reference | ||
| 611 | - //! to a specific \ref ColorHueStrategy. The values of x and y are ranging | ||
| 612 | - //! from 0 to 1. | ||
| 613 | - //! \param x float that specifies the x coordinate in CIE | ||
| 614 | - //! \param y float that specifies the y coordinate in CIE | ||
| 615 | - //! \return Bool that is true on success | ||
| 616 | - //! \throws std::system_error when system or socket operations fail | ||
| 617 | - //! \throws HueException when response contained no body | ||
| 618 | - //! \throws HueAPIResponseException when response contains an error | ||
| 619 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 620 | - virtual bool alertXY(float x, float y) | ||
| 621 | - { | ||
| 622 | - if (colorHueStrategy) | 602 | + if (colorHueStrategy) |
| 603 | + { | ||
| 604 | + return colorHueStrategy->alertHueSaturation(hue, sat, *this); | ||
| 605 | + } | ||
| 606 | + return false; | ||
| 607 | + }; | ||
| 608 | + | ||
| 609 | + //! \brief Function that lets the light perform one breath cycle in specified | ||
| 610 | + //! color. | ||
| 611 | + //! | ||
| 612 | + //! \note The breath cylce will only be performed if the light has a reference | ||
| 613 | + //! to a specific \ref ColorHueStrategy. The values of x and y are ranging | ||
| 614 | + //! from 0 to 1. | ||
| 615 | + //! \param x float that specifies the x coordinate in CIE | ||
| 616 | + //! \param y float that specifies the y coordinate in CIE | ||
| 617 | + //! \return Bool that is true on success | ||
| 618 | + //! \throws std::system_error when system or socket operations fail | ||
| 619 | + //! \throws HueException when response contained no body | ||
| 620 | + //! \throws HueAPIResponseException when response contains an error | ||
| 621 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 622 | + virtual bool alertXY(float x, float y) | ||
| 623 | { | 623 | { |
| 624 | - return colorHueStrategy->alertXY(x, y, *this); | ||
| 625 | - } | ||
| 626 | - return false; | ||
| 627 | - }; | ||
| 628 | - | ||
| 629 | - //! \brief Function that lets the light perform one breath cycle in specified | ||
| 630 | - //! color. | ||
| 631 | - //! | ||
| 632 | - //! \note The breath cylce will only be performed if the light has a reference | ||
| 633 | - //! to a specific \ref ColorHueStrategy. The values of red, green and blue are | ||
| 634 | - //! ranging from 0 to 255. | ||
| 635 | - //! \param r uint8_t that specifies the red color value | ||
| 636 | - //! \param g uint8_t that specifies the green color value | ||
| 637 | - //! \param b uint8_t that specifies the blue color value | ||
| 638 | - //! \return Bool that is true on success | ||
| 639 | - //! \throws std::system_error when system or socket operations fail | ||
| 640 | - //! \throws HueException when response contained no body | ||
| 641 | - //! \throws HueAPIResponseException when response contains an error | ||
| 642 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 643 | - virtual bool alertRGB(uint8_t r, uint8_t g, uint8_t b) | ||
| 644 | - { | ||
| 645 | - if (colorHueStrategy) | 624 | + if (colorHueStrategy) |
| 625 | + { | ||
| 626 | + return colorHueStrategy->alertXY(x, y, *this); | ||
| 627 | + } | ||
| 628 | + return false; | ||
| 629 | + }; | ||
| 630 | + | ||
| 631 | + //! \brief Function that lets the light perform one breath cycle in specified | ||
| 632 | + //! color. | ||
| 633 | + //! | ||
| 634 | + //! \note The breath cylce will only be performed if the light has a reference | ||
| 635 | + //! to a specific \ref ColorHueStrategy. The values of red, green and blue are | ||
| 636 | + //! ranging from 0 to 255. | ||
| 637 | + //! \param r uint8_t that specifies the red color value | ||
| 638 | + //! \param g uint8_t that specifies the green color value | ||
| 639 | + //! \param b uint8_t that specifies the blue color value | ||
| 640 | + //! \return Bool that is true on success | ||
| 641 | + //! \throws std::system_error when system or socket operations fail | ||
| 642 | + //! \throws HueException when response contained no body | ||
| 643 | + //! \throws HueAPIResponseException when response contains an error | ||
| 644 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 645 | + virtual bool alertRGB(uint8_t r, uint8_t g, uint8_t b) | ||
| 646 | { | 646 | { |
| 647 | - return colorHueStrategy->alertRGB(r, g, b, *this); | ||
| 648 | - } | ||
| 649 | - return false; | ||
| 650 | - }; | ||
| 651 | - | ||
| 652 | - //! \brief Function to turn colorloop effect on/off. | ||
| 653 | - //! | ||
| 654 | - //! Notice this function will only be performed light has a reference to a | ||
| 655 | - //! specific \ref ColorHueStrategy. The colorloop effect will loop through all | ||
| 656 | - //! colors on current hue and saturation levels. Notice that none of the | ||
| 657 | - //! setter functions check whether this feature is enabled and the colorloop | ||
| 658 | - //! can only be disabled with this function or by simply calling | ||
| 659 | - //! Off()/OffNoRefresh() and then On()/OnNoRefresh(), so you could | ||
| 660 | - //! alternatively call Off() and then use any of the setter functions. | ||
| 661 | - //! \param on bool that enables this feature when true and disables it when false | ||
| 662 | - //! \return Bool that is true on success | ||
| 663 | - //! \throws std::system_error when system or socket operations fail | ||
| 664 | - //! \throws HueException when response contained no body | ||
| 665 | - //! \throws HueAPIResponseException when response contains an error | ||
| 666 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 667 | - virtual bool setColorLoop(bool on) | ||
| 668 | - { | ||
| 669 | - if (colorHueStrategy) | 647 | + if (colorHueStrategy) |
| 648 | + { | ||
| 649 | + return colorHueStrategy->alertRGB(r, g, b, *this); | ||
| 650 | + } | ||
| 651 | + return false; | ||
| 652 | + }; | ||
| 653 | + | ||
| 654 | + //! \brief Function to turn colorloop effect on/off. | ||
| 655 | + //! | ||
| 656 | + //! Notice this function will only be performed light has a reference to a | ||
| 657 | + //! specific \ref ColorHueStrategy. The colorloop effect will loop through all | ||
| 658 | + //! colors on current hue and saturation levels. Notice that none of the | ||
| 659 | + //! setter functions check whether this feature is enabled and the colorloop | ||
| 660 | + //! can only be disabled with this function or by simply calling | ||
| 661 | + //! Off()/OffNoRefresh() and then On()/OnNoRefresh(), so you could | ||
| 662 | + //! alternatively call Off() and then use any of the setter functions. | ||
| 663 | + //! \param on bool that enables this feature when true and disables it when false | ||
| 664 | + //! \return Bool that is true on success | ||
| 665 | + //! \throws std::system_error when system or socket operations fail | ||
| 666 | + //! \throws HueException when response contained no body | ||
| 667 | + //! \throws HueAPIResponseException when response contains an error | ||
| 668 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 669 | + virtual bool setColorLoop(bool on) | ||
| 670 | { | 670 | { |
| 671 | - return colorHueStrategy->setColorLoop(on, *this); | ||
| 672 | - } | ||
| 673 | - return false; | ||
| 674 | - }; | ||
| 675 | - | ||
| 676 | -protected: | ||
| 677 | - //! \brief Protected ctor that is used by \ref Hue class. | ||
| 678 | - //! | ||
| 679 | - //! \param id Integer that specifies the id of this light | ||
| 680 | - //! \param commands HueCommandAPI for communication with the bridge | ||
| 681 | - //! | ||
| 682 | - //! leaves strategies unset | ||
| 683 | - HueLight(int id, const HueCommandAPI& commands); | ||
| 684 | - | ||
| 685 | - //! \brief Protected ctor that is used by \ref Hue class, also sets | ||
| 686 | - //! strategies. | ||
| 687 | - //! | ||
| 688 | - //! \param id Integer that specifies the id of this light | ||
| 689 | - //! \param commands HueCommandAPI for communication with the bridge | ||
| 690 | - //! \param brightnessStrategy Strategy for brightness. May be nullptr. | ||
| 691 | - //! \param colorTempStrategy Strategy for color temperature. May be nullptr. | ||
| 692 | - //! \param colorHueStrategy Strategy for color hue/saturation. May be nullptr. | ||
| 693 | - //! \throws std::system_error when system or socket operations fail | ||
| 694 | - //! \throws HueException when response contained no body | ||
| 695 | - //! \throws HueAPIResponseException when response contains an error | ||
| 696 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 697 | - HueLight(int id, const HueCommandAPI& commands, std::shared_ptr<const BrightnessStrategy> brightnessStrategy, | ||
| 698 | - std::shared_ptr<const ColorTemperatureStrategy> colorTempStrategy, | ||
| 699 | - std::shared_ptr<const ColorHueStrategy> colorHueStrategy); | ||
| 700 | - | ||
| 701 | - //! \brief Protected function that sets the brightness strategy. | ||
| 702 | - //! | ||
| 703 | - //! The strategy defines how specific commands that deal with brightness | ||
| 704 | - //! control are executed \param strat a strategy of type \ref | ||
| 705 | - //! BrightnessStrategy | ||
| 706 | - virtual void setBrightnessStrategy(std::shared_ptr<const BrightnessStrategy> strat) | ||
| 707 | - { | ||
| 708 | - brightnessStrategy = std::move(strat); | ||
| 709 | - }; | ||
| 710 | - | ||
| 711 | - //! \brief Protected function that sets the colorTemperature strategy. | ||
| 712 | - //! | ||
| 713 | - //! The strategy defines how specific commands that deal with colortemperature | ||
| 714 | - //! control are executed \param strat a strategy of type \ref | ||
| 715 | - //! ColorTemperatureStrategy | ||
| 716 | - virtual void setColorTemperatureStrategy(std::shared_ptr<const ColorTemperatureStrategy> strat) | ||
| 717 | - { | ||
| 718 | - colorTemperatureStrategy = std::move(strat); | ||
| 719 | - }; | ||
| 720 | - | ||
| 721 | - //! \brief Protected function that sets the colorHue strategy. | ||
| 722 | - //! | ||
| 723 | - //! The strategy defines how specific commands that deal with color control | ||
| 724 | - //! are executed \param strat a strategy of type \ref ColorHueStrategy | ||
| 725 | - virtual void setColorHueStrategy(std::shared_ptr<const ColorHueStrategy> strat) | ||
| 726 | - { | ||
| 727 | - colorHueStrategy = std::move(strat); | 671 | + if (colorHueStrategy) |
| 672 | + { | ||
| 673 | + return colorHueStrategy->setColorLoop(on, *this); | ||
| 674 | + } | ||
| 675 | + return false; | ||
| 676 | + }; | ||
| 677 | + | ||
| 678 | + protected: | ||
| 679 | + //! \brief Protected ctor that is used by \ref Hue class. | ||
| 680 | + //! | ||
| 681 | + //! \param id Integer that specifies the id of this light | ||
| 682 | + //! \param commands HueCommandAPI for communication with the bridge | ||
| 683 | + //! | ||
| 684 | + //! leaves strategies unset | ||
| 685 | + HueLight(int id, const HueCommandAPI& commands); | ||
| 686 | + | ||
| 687 | + //! \brief Protected ctor that is used by \ref Hue class, also sets | ||
| 688 | + //! strategies. | ||
| 689 | + //! | ||
| 690 | + //! \param id Integer that specifies the id of this light | ||
| 691 | + //! \param commands HueCommandAPI for communication with the bridge | ||
| 692 | + //! \param brightnessStrategy Strategy for brightness. May be nullptr. | ||
| 693 | + //! \param colorTempStrategy Strategy for color temperature. May be nullptr. | ||
| 694 | + //! \param colorHueStrategy Strategy for color hue/saturation. May be nullptr. | ||
| 695 | + //! \throws std::system_error when system or socket operations fail | ||
| 696 | + //! \throws HueException when response contained no body | ||
| 697 | + //! \throws HueAPIResponseException when response contains an error | ||
| 698 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 699 | + HueLight(int id, const HueCommandAPI& commands, std::shared_ptr<const BrightnessStrategy> brightnessStrategy, | ||
| 700 | + std::shared_ptr<const ColorTemperatureStrategy> colorTempStrategy, | ||
| 701 | + std::shared_ptr<const ColorHueStrategy> colorHueStrategy); | ||
| 702 | + | ||
| 703 | + //! \brief Protected function that sets the brightness strategy. | ||
| 704 | + //! | ||
| 705 | + //! The strategy defines how specific commands that deal with brightness | ||
| 706 | + //! control are executed \param strat a strategy of type \ref | ||
| 707 | + //! BrightnessStrategy | ||
| 708 | + virtual void setBrightnessStrategy(std::shared_ptr<const BrightnessStrategy> strat) | ||
| 709 | + { | ||
| 710 | + brightnessStrategy = std::move(strat); | ||
| 711 | + }; | ||
| 712 | + | ||
| 713 | + //! \brief Protected function that sets the colorTemperature strategy. | ||
| 714 | + //! | ||
| 715 | + //! The strategy defines how specific commands that deal with colortemperature | ||
| 716 | + //! control are executed \param strat a strategy of type \ref | ||
| 717 | + //! ColorTemperatureStrategy | ||
| 718 | + virtual void setColorTemperatureStrategy(std::shared_ptr<const ColorTemperatureStrategy> strat) | ||
| 719 | + { | ||
| 720 | + colorTemperatureStrategy = std::move(strat); | ||
| 721 | + }; | ||
| 722 | + | ||
| 723 | + //! \brief Protected function that sets the colorHue strategy. | ||
| 724 | + //! | ||
| 725 | + //! The strategy defines how specific commands that deal with color control | ||
| 726 | + //! are executed \param strat a strategy of type \ref ColorHueStrategy | ||
| 727 | + virtual void setColorHueStrategy(std::shared_ptr<const ColorHueStrategy> strat) | ||
| 728 | + { | ||
| 729 | + colorHueStrategy = std::move(strat); | ||
| 730 | + }; | ||
| 731 | + | ||
| 732 | + //! \brief Protected function that sets the HueCommandAPI. | ||
| 733 | + //! | ||
| 734 | + //! The HueCommandAPI is used for bridge communication | ||
| 735 | + //! \param commandAPI the new HueCommandAPI | ||
| 736 | + virtual void setCommandAPI(const HueCommandAPI& commandAPI) { commands = commandAPI; }; | ||
| 737 | + | ||
| 738 | + //! \brief Function that turns the light on without refreshing its state. | ||
| 739 | + //! | ||
| 740 | + //! \param transition Optional parameter to set the transition from current state to new standard is 4 = 400ms | ||
| 741 | + //! \return Bool that is true on success | ||
| 742 | + //! \throws std::system_error when system or socket operations fail | ||
| 743 | + //! \throws HueException when response contained no body | ||
| 744 | + //! \throws HueAPIResponseException when response contains an error | ||
| 745 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 746 | + virtual bool OnNoRefresh(uint8_t transition = 4); | ||
| 747 | + | ||
| 748 | + //! \brief Function that turns the light off without refreshing its state. | ||
| 749 | + //! | ||
| 750 | + //! \param transition Optional parameter to set the transition from current state to new standard is 4 = 400ms | ||
| 751 | + //! \return Bool that is true on success | ||
| 752 | + //! \throws std::system_error when system or socket operations fail | ||
| 753 | + //! \throws HueException when response contained no body | ||
| 754 | + //! \throws HueAPIResponseException when response contains an error | ||
| 755 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 756 | + virtual bool OffNoRefresh(uint8_t transition = 4); | ||
| 757 | + | ||
| 758 | + //! \brief Utility function to send a put request to the light. | ||
| 759 | + //! | ||
| 760 | + //! \throws nlohmann::json::parse_error if the reply could not be parsed | ||
| 761 | + //! \param request A nlohmann::json aka the request to send | ||
| 762 | + //! \param subPath A path that is appended to the uri, note it should always start with a slash ("/") | ||
| 763 | + //! \param fileInfo FileInfo from calling function for exception details. | ||
| 764 | + //! \return The parsed reply | ||
| 765 | + //! \throws std::system_error when system or socket operations fail | ||
| 766 | + //! \throws HueException when response contained no body | ||
| 767 | + //! \throws HueAPIResponseException when response contains an error | ||
| 768 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 769 | + virtual nlohmann::json SendPutRequest( | ||
| 770 | + const nlohmann::json& request, const std::string& subPath, FileInfo fileInfo); | ||
| 771 | + | ||
| 772 | + //! \brief Virtual function that refreshes the \ref state of the light. | ||
| 773 | + //! \throws std::system_error when system or socket operations fail | ||
| 774 | + //! \throws HueException when response contained no body | ||
| 775 | + //! \throws HueAPIResponseException when response contains an error | ||
| 776 | + //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 777 | + virtual void refreshState(); | ||
| 778 | + | ||
| 779 | + protected: | ||
| 780 | + int id; //!< holds the id of the light | ||
| 781 | + nlohmann::json state; //!< holds the current state of the light updated by \ref refreshState | ||
| 782 | + ColorType colorType; //!< holds the \ref ColorType of the light | ||
| 783 | + | ||
| 784 | + std::shared_ptr<const BrightnessStrategy> | ||
| 785 | + brightnessStrategy; //!< holds a reference to the strategy that handles brightness commands | ||
| 786 | + std::shared_ptr<const ColorTemperatureStrategy> | ||
| 787 | + colorTemperatureStrategy; //!< holds a reference to the strategy that handles colortemperature commands | ||
| 788 | + std::shared_ptr<const ColorHueStrategy> | ||
| 789 | + colorHueStrategy; //!< holds a reference to the strategy that handles all color commands | ||
| 790 | + HueCommandAPI commands; //!< A IHttpHandler that is used to communicate with the bridge | ||
| 728 | }; | 791 | }; |
| 729 | - | ||
| 730 | - //! \brief Protected function that sets the HueCommandAPI. | ||
| 731 | - //! | ||
| 732 | - //! The HueCommandAPI is used for bridge communication | ||
| 733 | - //! \param commandAPI the new HueCommandAPI | ||
| 734 | - virtual void setCommandAPI(const HueCommandAPI& commandAPI) { commands = commandAPI; }; | ||
| 735 | - | ||
| 736 | - //! \brief Function that turns the light on without refreshing its state. | ||
| 737 | - //! | ||
| 738 | - //! \param transition Optional parameter to set the transition from current state to new standard is 4 = 400ms | ||
| 739 | - //! \return Bool that is true on success | ||
| 740 | - //! \throws std::system_error when system or socket operations fail | ||
| 741 | - //! \throws HueException when response contained no body | ||
| 742 | - //! \throws HueAPIResponseException when response contains an error | ||
| 743 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 744 | - virtual bool OnNoRefresh(uint8_t transition = 4); | ||
| 745 | - | ||
| 746 | - //! \brief Function that turns the light off without refreshing its state. | ||
| 747 | - //! | ||
| 748 | - //! \param transition Optional parameter to set the transition from current state to new standard is 4 = 400ms | ||
| 749 | - //! \return Bool that is true on success | ||
| 750 | - //! \throws std::system_error when system or socket operations fail | ||
| 751 | - //! \throws HueException when response contained no body | ||
| 752 | - //! \throws HueAPIResponseException when response contains an error | ||
| 753 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 754 | - virtual bool OffNoRefresh(uint8_t transition = 4); | ||
| 755 | - | ||
| 756 | - //! \brief Utility function to send a put request to the light. | ||
| 757 | - //! | ||
| 758 | - //! \throws nlohmann::json::parse_error if the reply could not be parsed | ||
| 759 | - //! \param request A nlohmann::json aka the request to send | ||
| 760 | - //! \param subPath A path that is appended to the uri, note it should always start with a slash ("/") | ||
| 761 | - //! \param fileInfo FileInfo from calling function for exception details. | ||
| 762 | - //! \return The parsed reply | ||
| 763 | - //! \throws std::system_error when system or socket operations fail | ||
| 764 | - //! \throws HueException when response contained no body | ||
| 765 | - //! \throws HueAPIResponseException when response contains an error | ||
| 766 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 767 | - virtual nlohmann::json SendPutRequest(const nlohmann::json& request, const std::string& subPath, FileInfo fileInfo); | ||
| 768 | - | ||
| 769 | - //! \brief Virtual function that refreshes the \ref state of the light. | ||
| 770 | - //! \throws std::system_error when system or socket operations fail | ||
| 771 | - //! \throws HueException when response contained no body | ||
| 772 | - //! \throws HueAPIResponseException when response contains an error | ||
| 773 | - //! \throws nlohmann::json::parse_error when response could not be parsed | ||
| 774 | - virtual void refreshState(); | ||
| 775 | - | ||
| 776 | -protected: | ||
| 777 | - int id; //!< holds the id of the light | ||
| 778 | - nlohmann::json state; //!< holds the current state of the light updated by \ref refreshState | ||
| 779 | - ColorType colorType; //!< holds the \ref ColorType of the light | ||
| 780 | - | ||
| 781 | - std::shared_ptr<const BrightnessStrategy> | ||
| 782 | - brightnessStrategy; //!< holds a reference to the strategy that handles brightness commands | ||
| 783 | - std::shared_ptr<const ColorTemperatureStrategy> | ||
| 784 | - colorTemperatureStrategy; //!< holds a reference to the strategy that handles colortemperature commands | ||
| 785 | - std::shared_ptr<const ColorHueStrategy> | ||
| 786 | - colorHueStrategy; //!< holds a reference to the strategy that handles all color commands | ||
| 787 | - HueCommandAPI commands; //!< A IHttpHandler that is used to communicate with the bridge | ||
| 788 | -}; | 792 | +} // namespace hueplusplus |
| 789 | 793 | ||
| 790 | #endif | 794 | #endif |
include/hueplusplus/IHttpHandler.h
| @@ -30,167 +30,170 @@ | @@ -30,167 +30,170 @@ | ||
| 30 | 30 | ||
| 31 | #include "json/json.hpp" | 31 | #include "json/json.hpp" |
| 32 | 32 | ||
| 33 | -//! Abstract class for classes that handle http requests and multicast requests | ||
| 34 | -class IHttpHandler | 33 | +namespace hueplusplus |
| 35 | { | 34 | { |
| 36 | -public: | ||
| 37 | - //! \brief Virtual dtor | ||
| 38 | - virtual ~IHttpHandler() = default; | ||
| 39 | - | ||
| 40 | - //! \brief Send a message to a specified host and return the response. | ||
| 41 | - //! | ||
| 42 | - //! \param msg The message that should be sent to the specified address | ||
| 43 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 44 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 45 | - //! \return The response of the host as a string | ||
| 46 | - //! \throws std::system_error when system or socket operations fail | ||
| 47 | - virtual std::string send(const std::string& msg, const std::string& adr, int port = 80) const = 0; | ||
| 48 | - | ||
| 49 | - //! \brief Send a message to a specified host and return the body of the response. | ||
| 50 | - //! | ||
| 51 | - //! \param msg The message that should sent to the specified address | ||
| 52 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 53 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 54 | - //! \return The body of the response of the host as a string | ||
| 55 | - //! \throws std::system_error when system or socket operations fail | ||
| 56 | - //! \throws HueException when response contained no body | ||
| 57 | - virtual std::string sendGetHTTPBody(const std::string& msg, const std::string& adr, int port = 80) const = 0; | ||
| 58 | - | ||
| 59 | - //! \brief Send a multicast request with a specified message. | ||
| 60 | - //! | ||
| 61 | - //! \param msg The message that should sent to the specified multicast address | ||
| 62 | - //! \param adr Optional ip or hostname in dotted decimal notation, default is "239.255.255.250" | ||
| 63 | - //! \param port Optional port the request is sent to, default is 1900 | ||
| 64 | - //! \param timeout Optional time to wait for responses in seconds, default is 5 | ||
| 65 | - //! | ||
| 66 | - //! Blocks for the duration of the timeout. | ||
| 67 | - //! | ||
| 68 | - //! \return vector of strings containing each received answer | ||
| 69 | - //! \throws std::system_error when system or socket operations fail | ||
| 70 | - virtual std::vector<std::string> sendMulticast( | ||
| 71 | - const std::string& msg, const std::string& adr = "239.255.255.250", int port = 1900, int timeout = 5) const = 0; | ||
| 72 | - | ||
| 73 | - //! \brief Send a HTTP request with the given method to the specified host and return the body of the response. | ||
| 74 | - //! | ||
| 75 | - //! \param method HTTP method type e.g. GET, HEAD, POST, PUT, DELETE, ... | ||
| 76 | - //! \param uri Uniform Resource Identifier in the request | ||
| 77 | - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 78 | - //! \param body Request body, may be empty | ||
| 79 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 80 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 81 | - //! \return Body of the response of the host | ||
| 82 | - //! \throws std::system_error when system or socket operations fail | ||
| 83 | - //! \throws HueException when response contained no body | ||
| 84 | - virtual std::string sendHTTPRequest(const std::string& method, const std::string& uri, | ||
| 85 | - const std::string& contentType, const std::string& body, const std::string& adr, int port = 80) const = 0; | ||
| 86 | - | ||
| 87 | - //! \brief Send a HTTP GET request to the specified host and return the body of the response. | ||
| 88 | - //! | ||
| 89 | - //! \param uri Uniform Resource Identifier in the request | ||
| 90 | - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 91 | - //! \param body Request body, may be empty | ||
| 92 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 93 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 94 | - //! that specifies the port to which the request is sent to. Default is 80 | ||
| 95 | - //! \return Body of the response of the host | ||
| 96 | - //! \throws std::system_error when system or socket operations fail | ||
| 97 | - //! \throws HueException when response contained no body | ||
| 98 | - virtual std::string GETString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 99 | - const std::string& adr, int port = 80) const = 0; | ||
| 100 | - | ||
| 101 | - //! \brief Send a HTTP POST request to the specified host and return the body of the response. | ||
| 102 | - //! | ||
| 103 | - //! \param uri Uniform Resource Identifier in the request | ||
| 104 | - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 105 | - //! \param body Request body, may be empty | ||
| 106 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 107 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 108 | - //! that specifies the port to which the request is sent to. Default is 80 | ||
| 109 | - //! \return Body of the response of the host | ||
| 110 | - //! \throws std::system_error when system or socket operations fail | ||
| 111 | - //! \throws HueException when response contained no body | ||
| 112 | - virtual std::string POSTString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 113 | - const std::string& adr, int port = 80) const = 0; | ||
| 114 | - | ||
| 115 | - //! \brief Send a HTTP PUT request to the specified host and return the body of the response. | ||
| 116 | - //! | ||
| 117 | - //! \param uri Uniform Resource Identifier in the request | ||
| 118 | - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 119 | - //! \param body Request body, may be empty | ||
| 120 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 121 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 122 | - //! that specifies the port to which the request is sent to. Default is 80 | ||
| 123 | - //! \return Body of the response of the host | ||
| 124 | - //! \throws std::system_error when system or socket operations fail | ||
| 125 | - //! \throws HueException when response contained no body | ||
| 126 | - virtual std::string PUTString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 127 | - const std::string& adr, int port = 80) const = 0; | ||
| 128 | - | ||
| 129 | - //! \brief Send a HTTP DELETE request to the specified host and return the body of the response. | ||
| 130 | - //! | ||
| 131 | - //! \param uri Uniform Resource Identifier in the request | ||
| 132 | - //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 133 | - //! \param body Request body, may be empty | ||
| 134 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 135 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 136 | - //! that specifies the port to which the request is sent to. Default is 80 | ||
| 137 | - //! \return Body of the response of the host | ||
| 138 | - //! \throws std::system_error when system or socket operations fail | ||
| 139 | - //! \throws HueException when response contained no body | ||
| 140 | - virtual std::string DELETEString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 141 | - const std::string& adr, int port = 80) const = 0; | ||
| 142 | - | ||
| 143 | - //! \brief Send a HTTP GET request to the specified host and return the body of the response parsed as JSON. | ||
| 144 | - //! | ||
| 145 | - //! \param uri Uniform Resource Identifier in the request | ||
| 146 | - //! \param body Request body, may be empty | ||
| 147 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 148 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 149 | - //! \return Parsed body of the response of the host | ||
| 150 | - //! \throws std::system_error when system or socket operations fail | ||
| 151 | - //! \throws HueException when response contained no body | ||
| 152 | - //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 153 | - virtual nlohmann::json GETJson( | ||
| 154 | - const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const = 0; | ||
| 155 | - | ||
| 156 | - //! \brief Send a HTTP POST request to the specified host and return the body of the response parsed as JSON. | ||
| 157 | - //! | ||
| 158 | - //! \param uri Uniform Resource Identifier in the request | ||
| 159 | - //! \param body Request body, may be empty | ||
| 160 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 161 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 162 | - //! \return Parsed body of the response of the host | ||
| 163 | - //! \throws std::system_error when system or socket operations fail | ||
| 164 | - //! \throws HueException when response contained no body | ||
| 165 | - //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 166 | - virtual nlohmann::json POSTJson( | ||
| 167 | - const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const = 0; | ||
| 168 | - | ||
| 169 | - //! \brief Send a HTTP PUT request to the specified host and return the body of the response parsed as JSON. | ||
| 170 | - //! | ||
| 171 | - //! \param uri Uniform Resource Identifier in the request | ||
| 172 | - //! \param body Request body, may be empty | ||
| 173 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 174 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 175 | - //! \return Parsed body of the response of the host | ||
| 176 | - //! \throws std::system_error when system or socket operations fail | ||
| 177 | - //! \throws HueException when response contained no body | ||
| 178 | - //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 179 | - virtual nlohmann::json PUTJson( | ||
| 180 | - const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const = 0; | ||
| 181 | - | ||
| 182 | - //! \brief Send a HTTP DELETE request to the specified host and return the body of the response parsed as JSON. | ||
| 183 | - //! | ||
| 184 | - //! \param uri Uniform Resource Identifier in the request | ||
| 185 | - //! \param body Request body, may be empty | ||
| 186 | - //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 187 | - //! \param port Optional port the request is sent to, default is 80 | ||
| 188 | - //! \return Parsed body of the response of the host | ||
| 189 | - //! \throws std::system_error when system or socket operations fail | ||
| 190 | - //! \throws HueException when response contained no body | ||
| 191 | - //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 192 | - virtual nlohmann::json DELETEJson( | ||
| 193 | - const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const = 0; | ||
| 194 | -}; | 35 | + //! Abstract class for classes that handle http requests and multicast requests |
| 36 | + class IHttpHandler | ||
| 37 | + { | ||
| 38 | + public: | ||
| 39 | + //! \brief Virtual dtor | ||
| 40 | + virtual ~IHttpHandler() = default; | ||
| 41 | + | ||
| 42 | + //! \brief Send a message to a specified host and return the response. | ||
| 43 | + //! | ||
| 44 | + //! \param msg The message that should be sent to the specified address | ||
| 45 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 46 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 47 | + //! \return The response of the host as a string | ||
| 48 | + //! \throws std::system_error when system or socket operations fail | ||
| 49 | + virtual std::string send(const std::string& msg, const std::string& adr, int port = 80) const = 0; | ||
| 50 | + | ||
| 51 | + //! \brief Send a message to a specified host and return the body of the response. | ||
| 52 | + //! | ||
| 53 | + //! \param msg The message that should sent to the specified address | ||
| 54 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 55 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 56 | + //! \return The body of the response of the host as a string | ||
| 57 | + //! \throws std::system_error when system or socket operations fail | ||
| 58 | + //! \throws HueException when response contained no body | ||
| 59 | + virtual std::string sendGetHTTPBody(const std::string& msg, const std::string& adr, int port = 80) const = 0; | ||
| 60 | + | ||
| 61 | + //! \brief Send a multicast request with a specified message. | ||
| 62 | + //! | ||
| 63 | + //! \param msg The message that should sent to the specified multicast address | ||
| 64 | + //! \param adr Optional ip or hostname in dotted decimal notation, default is "239.255.255.250" | ||
| 65 | + //! \param port Optional port the request is sent to, default is 1900 | ||
| 66 | + //! \param timeout Optional time to wait for responses in seconds, default is 5 | ||
| 67 | + //! | ||
| 68 | + //! Blocks for the duration of the timeout. | ||
| 69 | + //! | ||
| 70 | + //! \return vector of strings containing each received answer | ||
| 71 | + //! \throws std::system_error when system or socket operations fail | ||
| 72 | + virtual std::vector<std::string> sendMulticast(const std::string& msg, | ||
| 73 | + const std::string& adr = "239.255.255.250", int port = 1900, int timeout = 5) const = 0; | ||
| 74 | + | ||
| 75 | + //! \brief Send a HTTP request with the given method to the specified host and return the body of the response. | ||
| 76 | + //! | ||
| 77 | + //! \param method HTTP method type e.g. GET, HEAD, POST, PUT, DELETE, ... | ||
| 78 | + //! \param uri Uniform Resource Identifier in the request | ||
| 79 | + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 80 | + //! \param body Request body, may be empty | ||
| 81 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 82 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 83 | + //! \return Body of the response of the host | ||
| 84 | + //! \throws std::system_error when system or socket operations fail | ||
| 85 | + //! \throws HueException when response contained no body | ||
| 86 | + virtual std::string sendHTTPRequest(const std::string& method, const std::string& uri, | ||
| 87 | + const std::string& contentType, const std::string& body, const std::string& adr, int port = 80) const = 0; | ||
| 88 | + | ||
| 89 | + //! \brief Send a HTTP GET request to the specified host and return the body of the response. | ||
| 90 | + //! | ||
| 91 | + //! \param uri Uniform Resource Identifier in the request | ||
| 92 | + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 93 | + //! \param body Request body, may be empty | ||
| 94 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 95 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 96 | + //! that specifies the port to which the request is sent to. Default is 80 | ||
| 97 | + //! \return Body of the response of the host | ||
| 98 | + //! \throws std::system_error when system or socket operations fail | ||
| 99 | + //! \throws HueException when response contained no body | ||
| 100 | + virtual std::string GETString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 101 | + const std::string& adr, int port = 80) const = 0; | ||
| 102 | + | ||
| 103 | + //! \brief Send a HTTP POST request to the specified host and return the body of the response. | ||
| 104 | + //! | ||
| 105 | + //! \param uri Uniform Resource Identifier in the request | ||
| 106 | + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 107 | + //! \param body Request body, may be empty | ||
| 108 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 109 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 110 | + //! that specifies the port to which the request is sent to. Default is 80 | ||
| 111 | + //! \return Body of the response of the host | ||
| 112 | + //! \throws std::system_error when system or socket operations fail | ||
| 113 | + //! \throws HueException when response contained no body | ||
| 114 | + virtual std::string POSTString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 115 | + const std::string& adr, int port = 80) const = 0; | ||
| 116 | + | ||
| 117 | + //! \brief Send a HTTP PUT request to the specified host and return the body of the response. | ||
| 118 | + //! | ||
| 119 | + //! \param uri Uniform Resource Identifier in the request | ||
| 120 | + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 121 | + //! \param body Request body, may be empty | ||
| 122 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 123 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 124 | + //! that specifies the port to which the request is sent to. Default is 80 | ||
| 125 | + //! \return Body of the response of the host | ||
| 126 | + //! \throws std::system_error when system or socket operations fail | ||
| 127 | + //! \throws HueException when response contained no body | ||
| 128 | + virtual std::string PUTString(const std::string& uri, const std::string& contentType, const std::string& body, | ||
| 129 | + const std::string& adr, int port = 80) const = 0; | ||
| 130 | + | ||
| 131 | + //! \brief Send a HTTP DELETE request to the specified host and return the body of the response. | ||
| 132 | + //! | ||
| 133 | + //! \param uri Uniform Resource Identifier in the request | ||
| 134 | + //! \param contentType MIME type of the body data e.g. "text/html", "application/json", ... | ||
| 135 | + //! \param body Request body, may be empty | ||
| 136 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 137 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 138 | + //! that specifies the port to which the request is sent to. Default is 80 | ||
| 139 | + //! \return Body of the response of the host | ||
| 140 | + //! \throws std::system_error when system or socket operations fail | ||
| 141 | + //! \throws HueException when response contained no body | ||
| 142 | + virtual std::string DELETEString(const std::string& uri, const std::string& contentType, | ||
| 143 | + const std::string& body, const std::string& adr, int port = 80) const = 0; | ||
| 144 | + | ||
| 145 | + //! \brief Send a HTTP GET request to the specified host and return the body of the response parsed as JSON. | ||
| 146 | + //! | ||
| 147 | + //! \param uri Uniform Resource Identifier in the request | ||
| 148 | + //! \param body Request body, may be empty | ||
| 149 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 150 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 151 | + //! \return Parsed body of the response of the host | ||
| 152 | + //! \throws std::system_error when system or socket operations fail | ||
| 153 | + //! \throws HueException when response contained no body | ||
| 154 | + //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 155 | + virtual nlohmann::json GETJson( | ||
| 156 | + const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const = 0; | ||
| 157 | + | ||
| 158 | + //! \brief Send a HTTP POST request to the specified host and return the body of the response parsed as JSON. | ||
| 159 | + //! | ||
| 160 | + //! \param uri Uniform Resource Identifier in the request | ||
| 161 | + //! \param body Request body, may be empty | ||
| 162 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 163 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 164 | + //! \return Parsed body of the response of the host | ||
| 165 | + //! \throws std::system_error when system or socket operations fail | ||
| 166 | + //! \throws HueException when response contained no body | ||
| 167 | + //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 168 | + virtual nlohmann::json POSTJson( | ||
| 169 | + const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const = 0; | ||
| 170 | + | ||
| 171 | + //! \brief Send a HTTP PUT request to the specified host and return the body of the response parsed as JSON. | ||
| 172 | + //! | ||
| 173 | + //! \param uri Uniform Resource Identifier in the request | ||
| 174 | + //! \param body Request body, may be empty | ||
| 175 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 176 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 177 | + //! \return Parsed body of the response of the host | ||
| 178 | + //! \throws std::system_error when system or socket operations fail | ||
| 179 | + //! \throws HueException when response contained no body | ||
| 180 | + //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 181 | + virtual nlohmann::json PUTJson( | ||
| 182 | + const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const = 0; | ||
| 183 | + | ||
| 184 | + //! \brief Send a HTTP DELETE request to the specified host and return the body of the response parsed as JSON. | ||
| 185 | + //! | ||
| 186 | + //! \param uri Uniform Resource Identifier in the request | ||
| 187 | + //! \param body Request body, may be empty | ||
| 188 | + //! \param adr Ip or hostname in dotted decimal notation like "192.168.2.1" | ||
| 189 | + //! \param port Optional port the request is sent to, default is 80 | ||
| 190 | + //! \return Parsed body of the response of the host | ||
| 191 | + //! \throws std::system_error when system or socket operations fail | ||
| 192 | + //! \throws HueException when response contained no body | ||
| 193 | + //! \throws nlohmann::json::parse_error when the body could not be parsed | ||
| 194 | + virtual nlohmann::json DELETEJson( | ||
| 195 | + const std::string& uri, const nlohmann::json& body, const std::string& adr, int port = 80) const = 0; | ||
| 196 | + }; | ||
| 197 | +} // namespace hueplusplus | ||
| 195 | 198 | ||
| 196 | #endif | 199 | #endif |
include/hueplusplus/LinHttpHandler.h
| @@ -30,31 +30,34 @@ | @@ -30,31 +30,34 @@ | ||
| 30 | 30 | ||
| 31 | #include "json/json.hpp" | 31 | #include "json/json.hpp" |
| 32 | 32 | ||
| 33 | -//! Class to handle http requests and multicast requests on linux systems | ||
| 34 | -class LinHttpHandler : public BaseHttpHandler | 33 | +namespace hueplusplus |
| 35 | { | 34 | { |
| 36 | -public: | ||
| 37 | - //! \brief Function that sends a given message to the specified host and | ||
| 38 | - //! returns the response. | ||
| 39 | - //! | ||
| 40 | - //! \param msg String that contains the message that is sent to the specified | ||
| 41 | - //! address \param adr String that contains an ip or hostname in dotted | ||
| 42 | - //! decimal notation like "192.168.2.1" \param port Optional integer that | ||
| 43 | - //! specifies the port to which the request is sent to. Default is 80 \return | ||
| 44 | - //! String containing the response of the host | ||
| 45 | - virtual std::string send(const std::string& msg, const std::string& adr, int port = 80) const; | ||
| 46 | - | ||
| 47 | - //! \brief Function that sends a multicast request with the specified message. | ||
| 48 | - //! | ||
| 49 | - //! \param msg String that contains the request that is sent to the specified | ||
| 50 | - //! address \param adr Optional String that contains an ip or hostname in | ||
| 51 | - //! dotted decimal notation, default is "239.255.255.250" \param port Optional | ||
| 52 | - //! integer that specifies the port to which the request is sent. Default is | ||
| 53 | - //! 1900 \param timeout Optional Integer that specifies the timeout of the | ||
| 54 | - //! request in seconds. Default is 5 \return Vector containing strings of each | ||
| 55 | - //! answer received | ||
| 56 | - virtual std::vector<std::string> sendMulticast( | ||
| 57 | - const std::string& msg, const std::string& adr = "239.255.255.250", int port = 1900, int timeout = 5) const; | ||
| 58 | -}; | 35 | + //! Class to handle http requests and multicast requests on linux systems |
| 36 | + class LinHttpHandler : public BaseHttpHandler | ||
| 37 | + { | ||
| 38 | + public: | ||
| 39 | + //! \brief Function that sends a given message to the specified host and | ||
| 40 | + //! returns the response. | ||
| 41 | + //! | ||
| 42 | + //! \param msg String that contains the message that is sent to the specified | ||
| 43 | + //! address \param adr String that contains an ip or hostname in dotted | ||
| 44 | + //! decimal notation like "192.168.2.1" \param port Optional integer that | ||
| 45 | + //! specifies the port to which the request is sent to. Default is 80 \return | ||
| 46 | + //! String containing the response of the host | ||
| 47 | + virtual std::string send(const std::string& msg, const std::string& adr, int port = 80) const; | ||
| 48 | + | ||
| 49 | + //! \brief Function that sends a multicast request with the specified message. | ||
| 50 | + //! | ||
| 51 | + //! \param msg String that contains the request that is sent to the specified | ||
| 52 | + //! address \param adr Optional String that contains an ip or hostname in | ||
| 53 | + //! dotted decimal notation, default is "239.255.255.250" \param port Optional | ||
| 54 | + //! integer that specifies the port to which the request is sent. Default is | ||
| 55 | + //! 1900 \param timeout Optional Integer that specifies the timeout of the | ||
| 56 | + //! request in seconds. Default is 5 \return Vector containing strings of each | ||
| 57 | + //! answer received | ||
| 58 | + virtual std::vector<std::string> sendMulticast( | ||
| 59 | + const std::string& msg, const std::string& adr = "239.255.255.250", int port = 1900, int timeout = 5) const; | ||
| 60 | + }; | ||
| 61 | +} // namespace hueplusplus | ||
| 59 | 62 | ||
| 60 | #endif | 63 | #endif |
include/hueplusplus/SimpleBrightnessStrategy.h
| @@ -26,30 +26,33 @@ | @@ -26,30 +26,33 @@ | ||
| 26 | #include "BrightnessStrategy.h" | 26 | #include "BrightnessStrategy.h" |
| 27 | #include "HueLight.h" | 27 | #include "HueLight.h" |
| 28 | 28 | ||
| 29 | -//! Class implementing the functions of BrightnessStrategy | ||
| 30 | -class SimpleBrightnessStrategy : public BrightnessStrategy | 29 | +namespace hueplusplus |
| 31 | { | 30 | { |
| 32 | -public: | ||
| 33 | - //! \brief Function for changing a lights brightness with a specified | ||
| 34 | - //! transition. | ||
| 35 | - //! | ||
| 36 | - //! \param bri The brightness raning from 0 = off to 255 = fully lit | ||
| 37 | - //! \param transition The time it takes to fade to the new brightness in | ||
| 38 | - //! multiples of 100ms, 4 = 400ms and should be seen as the default \param | ||
| 39 | - //! light A reference of the light | ||
| 40 | - bool setBrightness(unsigned int bri, uint8_t transition, HueLight& light) const override; | ||
| 41 | - //! \brief Function that returns the current brightness of the light | ||
| 42 | - //! | ||
| 43 | - //! Updates the lights state by calling refreshState() | ||
| 44 | - //! \param light A reference of the light | ||
| 45 | - //! \return Unsigned int representing the brightness | ||
| 46 | - unsigned int getBrightness(HueLight& light) const override; | ||
| 47 | - //! \brief Function that returns the current brightness of the light | ||
| 48 | - //! | ||
| 49 | - //! \note This does not update the lights state | ||
| 50 | - //! \param light A const reference of the light | ||
| 51 | - //! \return Unsigned int representing the brightness | ||
| 52 | - unsigned int getBrightness(const HueLight& light) const override; | ||
| 53 | -}; | 31 | + //! Class implementing the functions of BrightnessStrategy |
| 32 | + class SimpleBrightnessStrategy : public BrightnessStrategy | ||
| 33 | + { | ||
| 34 | + public: | ||
| 35 | + //! \brief Function for changing a lights brightness with a specified | ||
| 36 | + //! transition. | ||
| 37 | + //! | ||
| 38 | + //! \param bri The brightness raning from 0 = off to 255 = fully lit | ||
| 39 | + //! \param transition The time it takes to fade to the new brightness in | ||
| 40 | + //! multiples of 100ms, 4 = 400ms and should be seen as the default \param | ||
| 41 | + //! light A reference of the light | ||
| 42 | + bool setBrightness(unsigned int bri, uint8_t transition, HueLight& light) const override; | ||
| 43 | + //! \brief Function that returns the current brightness of the light | ||
| 44 | + //! | ||
| 45 | + //! Updates the lights state by calling refreshState() | ||
| 46 | + //! \param light A reference of the light | ||
| 47 | + //! \return Unsigned int representing the brightness | ||
| 48 | + unsigned int getBrightness(HueLight& light) const override; | ||
| 49 | + //! \brief Function that returns the current brightness of the light | ||
| 50 | + //! | ||
| 51 | + //! \note This does not update the lights state | ||
| 52 | + //! \param light A const reference of the light | ||
| 53 | + //! \return Unsigned int representing the brightness | ||
| 54 | + unsigned int getBrightness(const HueLight& light) const override; | ||
| 55 | + }; | ||
| 56 | +} // namespace hueplusplus | ||
| 54 | 57 | ||
| 55 | #endif | 58 | #endif |
include/hueplusplus/SimpleColorHueStrategy.h
| @@ -26,127 +26,130 @@ | @@ -26,127 +26,130 @@ | ||
| 26 | #include "ColorHueStrategy.h" | 26 | #include "ColorHueStrategy.h" |
| 27 | #include "HueLight.h" | 27 | #include "HueLight.h" |
| 28 | 28 | ||
| 29 | -//! Class implementing the functions of ColorHueStrategy | ||
| 30 | -class SimpleColorHueStrategy : public ColorHueStrategy | 29 | +namespace hueplusplus |
| 31 | { | 30 | { |
| 32 | -public: | ||
| 33 | - //! \brief Function for changing a lights color in hue with a specified | ||
| 34 | - //! transition. | ||
| 35 | - //! | ||
| 36 | - //! The hue ranges from 0 to 65535, whereas 65535 and 0 are red, 25500 is | ||
| 37 | - //! green and 46920 is blue. \param hue The hue of the color \param transition | ||
| 38 | - //! The time it takes to fade to the new color in multiples of 100ms, 4 = | ||
| 39 | - //! 400ms and should be seen as the default \param light A reference of the | ||
| 40 | - //! light | ||
| 41 | - bool setColorHue(uint16_t hue, uint8_t transition, HueLight& light) const override; | ||
| 42 | - //! \brief Function for changing a lights color in saturation with a specified | ||
| 43 | - //! transition. | ||
| 44 | - //! | ||
| 45 | - //! The saturation ranges from 0 to 254, whereas 0 is least saturated (white) | ||
| 46 | - //! and 254 is most saturated (vibrant). \param sat The saturation of the | ||
| 47 | - //! color \param transition The time it takes to fade to the new color in | ||
| 48 | - //! multiples of 100ms, 4 = 400ms and should be seen as the default \param | ||
| 49 | - //! light A reference of the light | ||
| 50 | - bool setColorSaturation(uint8_t sat, uint8_t transition, HueLight& light) const override; | ||
| 51 | - //! \brief Function for changing a lights color in hue and saturation format | ||
| 52 | - //! with a specified transition. | ||
| 53 | - //! | ||
| 54 | - //! The hue ranges from 0 to 65535, whereas 65535 and 0 are red, 25500 is | ||
| 55 | - //! green and 46920 is blue. The saturation ranges from 0 to 254, whereas 0 is | ||
| 56 | - //! least saturated (white) and 254 is most saturated (vibrant). \param hue | ||
| 57 | - //! The hue of the color \param sat The saturation of the color \param | ||
| 58 | - //! transition The time it takes to fade to the new color in multiples of | ||
| 59 | - //! 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 60 | - //! reference of the light | ||
| 61 | - bool setColorHueSaturation(uint16_t hue, uint8_t sat, uint8_t transition, HueLight& light) const override; | ||
| 62 | - //! \brief Function for changing a lights color in CIE format with a specified | ||
| 63 | - //! transition. | ||
| 64 | - //! | ||
| 65 | - //! \param x The x coordinate in CIE, ranging from 0 to 1 | ||
| 66 | - //! \param y The y coordinate in CIE, ranging from 0 to 1 | ||
| 67 | - //! \param transition The time it takes to fade to the new color in multiples | ||
| 68 | - //! of 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 69 | - //! reference of the light | ||
| 70 | - bool setColorXY(float x, float y, uint8_t transition, HueLight& light) const override; | ||
| 71 | - //! \brief Function for changing a lights color in rgb format with a specified | ||
| 72 | - //! transition. | ||
| 73 | - //! | ||
| 74 | - //! Red, green and blue are ranging from 0 to 255. | ||
| 75 | - //! \param r The red portion of the color | ||
| 76 | - //! \param g The green portion of the color | ||
| 77 | - //! \param b The blue portion of the color | ||
| 78 | - //! \param transition The time it takes to fade to the new color in multiples | ||
| 79 | - //! of 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 80 | - //! reference of the light | ||
| 81 | - bool setColorRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t transition, HueLight& light) const override; | ||
| 82 | - //! \brief Function for turning on/off the color loop feature of a light. | ||
| 83 | - //! | ||
| 84 | - //! Can be theoretically set for any light, but it only works for lights that | ||
| 85 | - //! support this feature. When this feature is activated the light will fade | ||
| 86 | - //! through every color on the current hue and saturation settings. Notice | ||
| 87 | - //! that none of the setter functions check whether this feature is enabled | ||
| 88 | - //! and the colorloop can only be disabled with this function or by simply | ||
| 89 | - //! calling Off()/OffNoRefresh() and then On()/OnNoRefresh(), so you could | ||
| 90 | - //! alternatively call Off() and then use any of the setter functions. | ||
| 91 | - //! \param on Boolean to turn this feature on or off, true/1 for on and | ||
| 92 | - //! false/0 for off \param light A reference of the light | ||
| 93 | - bool setColorLoop(bool on, HueLight& light) const override; | ||
| 94 | - //! \brief Function that lets the light perform one breath cycle in the | ||
| 95 | - //! specified color. | ||
| 96 | - //! | ||
| 97 | - //! \note It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 98 | - //! HueLight::alert() needs The hue ranges from 0 to 65535, whereas 65535 and | ||
| 99 | - //! 0 are red, 25500 is green and 46920 is blue. The saturation ranges from 0 | ||
| 100 | - //! to 254, whereas 0 is least saturated (white) and 254 is most saturated | ||
| 101 | - //! (vibrant). \param hue The hue of the color \param sat The saturation of | ||
| 102 | - //! the color \param light A reference of the light | ||
| 103 | - bool alertHueSaturation(uint16_t hue, uint8_t sat, HueLight& light) const override; | ||
| 104 | - //! \brief Function that lets the light perform one breath cycle in the | ||
| 105 | - //! specified color. | ||
| 106 | - //! | ||
| 107 | - //! \note It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 108 | - //! HueLight::alert() needs \param x The x coordinate in CIE, ranging from 0 | ||
| 109 | - //! to 1 \param y The y coordinate in CIE, ranging from 0 to 1 \param light A | ||
| 110 | - //! reference of the light | ||
| 111 | - bool alertXY(float x, float y, HueLight& light) const override; | ||
| 112 | - //! \brief Function that lets the light perform one breath cycle in the | ||
| 113 | - //! specified color. | ||
| 114 | - //! | ||
| 115 | - //! \note It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 116 | - //! HueLight::alert() needs Red, green and blue are ranging from 0 to 255. | ||
| 117 | - //! \param r The red portion of the color | ||
| 118 | - //! \param g The green portion of the color | ||
| 119 | - //! \param b The blue portion of the color | ||
| 120 | - //! \param light A reference of the light | ||
| 121 | - bool alertRGB(uint8_t r, uint8_t g, uint8_t b, HueLight& light) const override; | ||
| 122 | - //! \brief Function that returns the current color of the light as hue and | ||
| 123 | - //! saturation | ||
| 124 | - //! | ||
| 125 | - //! Updates the lights state by calling refreshState() | ||
| 126 | - //! \param light A reference of the light | ||
| 127 | - //! \return Pair containing the hue as first value and saturation as second | ||
| 128 | - //! value | ||
| 129 | - std::pair<uint16_t, uint8_t> getColorHueSaturation(HueLight& light) const override; | ||
| 130 | - //! \brief Function that returns the current color of the light as hue and | ||
| 131 | - //! saturation | ||
| 132 | - //! | ||
| 133 | - //! \note This does not update the lights state | ||
| 134 | - //! \param light A const reference of the light | ||
| 135 | - //! \return Pair containing the hue as first value and saturation as second | ||
| 136 | - //! value | ||
| 137 | - std::pair<uint16_t, uint8_t> getColorHueSaturation(const HueLight& light) const override; | ||
| 138 | - //! \brief Function that returns the current color of the light as xy | ||
| 139 | - //! | ||
| 140 | - //! Updates the lights state by calling refreshState() | ||
| 141 | - //! \param light A reference of the light | ||
| 142 | - //! \return Pair containing the x as first value and y as second value | ||
| 143 | - std::pair<float, float> getColorXY(HueLight& light) const override; | ||
| 144 | - //! \brief Function that returns the current color of the light as xy | ||
| 145 | - //! | ||
| 146 | - //! \note This does not update the lights state | ||
| 147 | - //! \param light A const reference of the light | ||
| 148 | - //! \return Pair containing the x as first value and y as second value | ||
| 149 | - std::pair<float, float> getColorXY(const HueLight& light) const override; | ||
| 150 | -}; | 31 | + //! Class implementing the functions of ColorHueStrategy |
| 32 | + class SimpleColorHueStrategy : public ColorHueStrategy | ||
| 33 | + { | ||
| 34 | + public: | ||
| 35 | + //! \brief Function for changing a lights color in hue with a specified | ||
| 36 | + //! transition. | ||
| 37 | + //! | ||
| 38 | + //! The hue ranges from 0 to 65535, whereas 65535 and 0 are red, 25500 is | ||
| 39 | + //! green and 46920 is blue. \param hue The hue of the color \param transition | ||
| 40 | + //! The time it takes to fade to the new color in multiples of 100ms, 4 = | ||
| 41 | + //! 400ms and should be seen as the default \param light A reference of the | ||
| 42 | + //! light | ||
| 43 | + bool setColorHue(uint16_t hue, uint8_t transition, HueLight& light) const override; | ||
| 44 | + //! \brief Function for changing a lights color in saturation with a specified | ||
| 45 | + //! transition. | ||
| 46 | + //! | ||
| 47 | + //! The saturation ranges from 0 to 254, whereas 0 is least saturated (white) | ||
| 48 | + //! and 254 is most saturated (vibrant). \param sat The saturation of the | ||
| 49 | + //! color \param transition The time it takes to fade to the new color in | ||
| 50 | + //! multiples of 100ms, 4 = 400ms and should be seen as the default \param | ||
| 51 | + //! light A reference of the light | ||
| 52 | + bool setColorSaturation(uint8_t sat, uint8_t transition, HueLight& light) const override; | ||
| 53 | + //! \brief Function for changing a lights color in hue and saturation format | ||
| 54 | + //! with a specified transition. | ||
| 55 | + //! | ||
| 56 | + //! The hue ranges from 0 to 65535, whereas 65535 and 0 are red, 25500 is | ||
| 57 | + //! green and 46920 is blue. The saturation ranges from 0 to 254, whereas 0 is | ||
| 58 | + //! least saturated (white) and 254 is most saturated (vibrant). \param hue | ||
| 59 | + //! The hue of the color \param sat The saturation of the color \param | ||
| 60 | + //! transition The time it takes to fade to the new color in multiples of | ||
| 61 | + //! 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 62 | + //! reference of the light | ||
| 63 | + bool setColorHueSaturation(uint16_t hue, uint8_t sat, uint8_t transition, HueLight& light) const override; | ||
| 64 | + //! \brief Function for changing a lights color in CIE format with a specified | ||
| 65 | + //! transition. | ||
| 66 | + //! | ||
| 67 | + //! \param x The x coordinate in CIE, ranging from 0 to 1 | ||
| 68 | + //! \param y The y coordinate in CIE, ranging from 0 to 1 | ||
| 69 | + //! \param transition The time it takes to fade to the new color in multiples | ||
| 70 | + //! of 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 71 | + //! reference of the light | ||
| 72 | + bool setColorXY(float x, float y, uint8_t transition, HueLight& light) const override; | ||
| 73 | + //! \brief Function for changing a lights color in rgb format with a specified | ||
| 74 | + //! transition. | ||
| 75 | + //! | ||
| 76 | + //! Red, green and blue are ranging from 0 to 255. | ||
| 77 | + //! \param r The red portion of the color | ||
| 78 | + //! \param g The green portion of the color | ||
| 79 | + //! \param b The blue portion of the color | ||
| 80 | + //! \param transition The time it takes to fade to the new color in multiples | ||
| 81 | + //! of 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 82 | + //! reference of the light | ||
| 83 | + bool setColorRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t transition, HueLight& light) const override; | ||
| 84 | + //! \brief Function for turning on/off the color loop feature of a light. | ||
| 85 | + //! | ||
| 86 | + //! Can be theoretically set for any light, but it only works for lights that | ||
| 87 | + //! support this feature. When this feature is activated the light will fade | ||
| 88 | + //! through every color on the current hue and saturation settings. Notice | ||
| 89 | + //! that none of the setter functions check whether this feature is enabled | ||
| 90 | + //! and the colorloop can only be disabled with this function or by simply | ||
| 91 | + //! calling Off()/OffNoRefresh() and then On()/OnNoRefresh(), so you could | ||
| 92 | + //! alternatively call Off() and then use any of the setter functions. | ||
| 93 | + //! \param on Boolean to turn this feature on or off, true/1 for on and | ||
| 94 | + //! false/0 for off \param light A reference of the light | ||
| 95 | + bool setColorLoop(bool on, HueLight& light) const override; | ||
| 96 | + //! \brief Function that lets the light perform one breath cycle in the | ||
| 97 | + //! specified color. | ||
| 98 | + //! | ||
| 99 | + //! \note It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 100 | + //! HueLight::alert() needs The hue ranges from 0 to 65535, whereas 65535 and | ||
| 101 | + //! 0 are red, 25500 is green and 46920 is blue. The saturation ranges from 0 | ||
| 102 | + //! to 254, whereas 0 is least saturated (white) and 254 is most saturated | ||
| 103 | + //! (vibrant). \param hue The hue of the color \param sat The saturation of | ||
| 104 | + //! the color \param light A reference of the light | ||
| 105 | + bool alertHueSaturation(uint16_t hue, uint8_t sat, HueLight& light) const override; | ||
| 106 | + //! \brief Function that lets the light perform one breath cycle in the | ||
| 107 | + //! specified color. | ||
| 108 | + //! | ||
| 109 | + //! \note It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 110 | + //! HueLight::alert() needs \param x The x coordinate in CIE, ranging from 0 | ||
| 111 | + //! to 1 \param y The y coordinate in CIE, ranging from 0 to 1 \param light A | ||
| 112 | + //! reference of the light | ||
| 113 | + bool alertXY(float x, float y, HueLight& light) const override; | ||
| 114 | + //! \brief Function that lets the light perform one breath cycle in the | ||
| 115 | + //! specified color. | ||
| 116 | + //! | ||
| 117 | + //! \note It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 118 | + //! HueLight::alert() needs Red, green and blue are ranging from 0 to 255. | ||
| 119 | + //! \param r The red portion of the color | ||
| 120 | + //! \param g The green portion of the color | ||
| 121 | + //! \param b The blue portion of the color | ||
| 122 | + //! \param light A reference of the light | ||
| 123 | + bool alertRGB(uint8_t r, uint8_t g, uint8_t b, HueLight& light) const override; | ||
| 124 | + //! \brief Function that returns the current color of the light as hue and | ||
| 125 | + //! saturation | ||
| 126 | + //! | ||
| 127 | + //! Updates the lights state by calling refreshState() | ||
| 128 | + //! \param light A reference of the light | ||
| 129 | + //! \return Pair containing the hue as first value and saturation as second | ||
| 130 | + //! value | ||
| 131 | + std::pair<uint16_t, uint8_t> getColorHueSaturation(HueLight& light) const override; | ||
| 132 | + //! \brief Function that returns the current color of the light as hue and | ||
| 133 | + //! saturation | ||
| 134 | + //! | ||
| 135 | + //! \note This does not update the lights state | ||
| 136 | + //! \param light A const reference of the light | ||
| 137 | + //! \return Pair containing the hue as first value and saturation as second | ||
| 138 | + //! value | ||
| 139 | + std::pair<uint16_t, uint8_t> getColorHueSaturation(const HueLight& light) const override; | ||
| 140 | + //! \brief Function that returns the current color of the light as xy | ||
| 141 | + //! | ||
| 142 | + //! Updates the lights state by calling refreshState() | ||
| 143 | + //! \param light A reference of the light | ||
| 144 | + //! \return Pair containing the x as first value and y as second value | ||
| 145 | + std::pair<float, float> getColorXY(HueLight& light) const override; | ||
| 146 | + //! \brief Function that returns the current color of the light as xy | ||
| 147 | + //! | ||
| 148 | + //! \note This does not update the lights state | ||
| 149 | + //! \param light A const reference of the light | ||
| 150 | + //! \return Pair containing the x as first value and y as second value | ||
| 151 | + std::pair<float, float> getColorXY(const HueLight& light) const override; | ||
| 152 | + }; | ||
| 153 | +} // namespace hueplusplus | ||
| 151 | 154 | ||
| 152 | #endif | 155 | #endif |
include/hueplusplus/SimpleColorTemperatureStrategy.h
| @@ -26,41 +26,44 @@ | @@ -26,41 +26,44 @@ | ||
| 26 | #include "ColorTemperatureStrategy.h" | 26 | #include "ColorTemperatureStrategy.h" |
| 27 | #include "HueLight.h" | 27 | #include "HueLight.h" |
| 28 | 28 | ||
| 29 | -//! Class implementing the functions of ColorTemperatureStrategy | ||
| 30 | -class SimpleColorTemperatureStrategy : public ColorTemperatureStrategy | 29 | +namespace hueplusplus |
| 31 | { | 30 | { |
| 32 | -public: | ||
| 33 | - //! \brief Function for changing a lights color temperature in mired with a | ||
| 34 | - //! specified transition. | ||
| 35 | - //! | ||
| 36 | - //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 37 | - //! and 500 is warm. \param mired The color temperature in mired \param | ||
| 38 | - //! transition The time it takes to fade to the new color in multiples of | ||
| 39 | - //! 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 40 | - //! reference of the light | ||
| 41 | - bool setColorTemperature(unsigned int mired, uint8_t transition, HueLight& light) const override; | ||
| 42 | - //! \brief Function that lets the light perform one breath cycle in the | ||
| 43 | - //! specified color. | ||
| 44 | - //! | ||
| 45 | - //! It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 46 | - //! HueLight::alert() needs The color temperature in mired ranges from 153 to | ||
| 47 | - //! 500 whereas 153 is cold and 500 is warm. \param mired The color | ||
| 48 | - //! temperature in mired \param light A reference of the light | ||
| 49 | - bool alertTemperature(unsigned int mired, HueLight& light) const override; | ||
| 50 | - //! \brief Function that returns the current color temperature of the light | ||
| 51 | - //! | ||
| 52 | - //! Updates the lights state by calling refreshState() | ||
| 53 | - //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 54 | - //! and 500 is warm. \param light A reference of the light \return Unsigned | ||
| 55 | - //! int representing the color temperature in mired | ||
| 56 | - unsigned int getColorTemperature(HueLight& light) const override; | ||
| 57 | - //! \brief Function that returns the current color temperature of the light | ||
| 58 | - //! | ||
| 59 | - //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 60 | - //! and 500 is warm. \note This does not update the lights state \param light | ||
| 61 | - //! A const reference of the light \return Unsigned int representing the color | ||
| 62 | - //! temperature in mired | ||
| 63 | - unsigned int getColorTemperature(const HueLight& light) const override; | ||
| 64 | -}; | 31 | + //! Class implementing the functions of ColorTemperatureStrategy |
| 32 | + class SimpleColorTemperatureStrategy : public ColorTemperatureStrategy | ||
| 33 | + { | ||
| 34 | + public: | ||
| 35 | + //! \brief Function for changing a lights color temperature in mired with a | ||
| 36 | + //! specified transition. | ||
| 37 | + //! | ||
| 38 | + //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 39 | + //! and 500 is warm. \param mired The color temperature in mired \param | ||
| 40 | + //! transition The time it takes to fade to the new color in multiples of | ||
| 41 | + //! 100ms, 4 = 400ms and should be seen as the default \param light A | ||
| 42 | + //! reference of the light | ||
| 43 | + bool setColorTemperature(unsigned int mired, uint8_t transition, HueLight& light) const override; | ||
| 44 | + //! \brief Function that lets the light perform one breath cycle in the | ||
| 45 | + //! specified color. | ||
| 46 | + //! | ||
| 47 | + //! It uses this_thread::sleep_for to accomodate for the time an \ref | ||
| 48 | + //! HueLight::alert() needs The color temperature in mired ranges from 153 to | ||
| 49 | + //! 500 whereas 153 is cold and 500 is warm. \param mired The color | ||
| 50 | + //! temperature in mired \param light A reference of the light | ||
| 51 | + bool alertTemperature(unsigned int mired, HueLight& light) const override; | ||
| 52 | + //! \brief Function that returns the current color temperature of the light | ||
| 53 | + //! | ||
| 54 | + //! Updates the lights state by calling refreshState() | ||
| 55 | + //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 56 | + //! and 500 is warm. \param light A reference of the light \return Unsigned | ||
| 57 | + //! int representing the color temperature in mired | ||
| 58 | + unsigned int getColorTemperature(HueLight& light) const override; | ||
| 59 | + //! \brief Function that returns the current color temperature of the light | ||
| 60 | + //! | ||
| 61 | + //! The color temperature in mired ranges from 153 to 500 whereas 153 is cold | ||
| 62 | + //! and 500 is warm. \note This does not update the lights state \param light | ||
| 63 | + //! A const reference of the light \return Unsigned int representing the color | ||
| 64 | + //! temperature in mired | ||
| 65 | + unsigned int getColorTemperature(const HueLight& light) const override; | ||
| 66 | + }; | ||
| 67 | +} // namespace hueplusplus | ||
| 65 | 68 | ||
| 66 | #endif | 69 | #endif |
include/hueplusplus/UPnP.h
| @@ -29,18 +29,21 @@ | @@ -29,18 +29,21 @@ | ||
| 29 | 29 | ||
| 30 | #include "IHttpHandler.h" | 30 | #include "IHttpHandler.h" |
| 31 | 31 | ||
| 32 | -//! Class that looks for UPnP devices using an m-search package | ||
| 33 | -class UPnP | 32 | +namespace hueplusplus |
| 34 | { | 33 | { |
| 35 | -public: | ||
| 36 | - //! \brief Searches for UPnP devices and returns all found ones. | ||
| 37 | - //! | ||
| 38 | - //! It does it by sending an m-search packet and waits for all responses. | ||
| 39 | - //! Since responses can be received multiple times this function conveniently removes all duplicates. | ||
| 40 | - //! \param handler HttpHandler for communication | ||
| 41 | - //! \return A vector containing pairs of address and name of all found devices | ||
| 42 | - //! \throws std::system_error when system or socket operations fail | ||
| 43 | - std::vector<std::pair<std::string, std::string>> getDevices(std::shared_ptr<const IHttpHandler> handler); | ||
| 44 | -}; | 34 | + //! Class that looks for UPnP devices using an m-search package |
| 35 | + class UPnP | ||
| 36 | + { | ||
| 37 | + public: | ||
| 38 | + //! \brief Searches for UPnP devices and returns all found ones. | ||
| 39 | + //! | ||
| 40 | + //! It does it by sending an m-search packet and waits for all responses. | ||
| 41 | + //! Since responses can be received multiple times this function conveniently removes all duplicates. | ||
| 42 | + //! \param handler HttpHandler for communication | ||
| 43 | + //! \return A vector containing pairs of address and name of all found devices | ||
| 44 | + //! \throws std::system_error when system or socket operations fail | ||
| 45 | + std::vector<std::pair<std::string, std::string>> getDevices(std::shared_ptr<const IHttpHandler> handler); | ||
| 46 | + }; | ||
| 47 | +} // namespace hueplusplus | ||
| 45 | 48 | ||
| 46 | #endif | 49 | #endif |
include/hueplusplus/Units.h
| @@ -23,38 +23,41 @@ | @@ -23,38 +23,41 @@ | ||
| 23 | #ifndef _UNITS_H | 23 | #ifndef _UNITS_H |
| 24 | #define _UNITS_H | 24 | #define _UNITS_H |
| 25 | 25 | ||
| 26 | -struct Kelvin | 26 | +namespace hueplusplus |
| 27 | { | 27 | { |
| 28 | - int value; | ||
| 29 | -}; | ||
| 30 | - | ||
| 31 | -struct Mired | ||
| 32 | -{ | ||
| 33 | - int value; | ||
| 34 | -}; | ||
| 35 | - | ||
| 36 | -struct Brightness | ||
| 37 | -{ | ||
| 38 | - int value; | ||
| 39 | -}; | ||
| 40 | - | ||
| 41 | -struct HueSaturation | ||
| 42 | -{ | ||
| 43 | - int hue; | ||
| 44 | - int saturation; | ||
| 45 | -}; | ||
| 46 | - | ||
| 47 | -struct XY | ||
| 48 | -{ | ||
| 49 | - float x; | ||
| 50 | - float y; | ||
| 51 | -}; | ||
| 52 | - | ||
| 53 | -struct RGB | ||
| 54 | -{ | ||
| 55 | - uint8_t r; | ||
| 56 | - uint8_t g; | ||
| 57 | - uint8_t b; | ||
| 58 | -}; | 28 | + struct Kelvin |
| 29 | + { | ||
| 30 | + int value; | ||
| 31 | + }; | ||
| 32 | + | ||
| 33 | + struct Mired | ||
| 34 | + { | ||
| 35 | + int value; | ||
| 36 | + }; | ||
| 37 | + | ||
| 38 | + struct Brightness | ||
| 39 | + { | ||
| 40 | + int value; | ||
| 41 | + }; | ||
| 42 | + | ||
| 43 | + struct HueSaturation | ||
| 44 | + { | ||
| 45 | + int hue; | ||
| 46 | + int saturation; | ||
| 47 | + }; | ||
| 48 | + | ||
| 49 | + struct XY | ||
| 50 | + { | ||
| 51 | + float x; | ||
| 52 | + float y; | ||
| 53 | + }; | ||
| 54 | + | ||
| 55 | + struct RGB | ||
| 56 | + { | ||
| 57 | + uint8_t r; | ||
| 58 | + uint8_t g; | ||
| 59 | + uint8_t b; | ||
| 60 | + }; | ||
| 61 | +} // namespace hueplusplus | ||
| 59 | 62 | ||
| 60 | #endif | 63 | #endif |
include/hueplusplus/Utils.h
| @@ -25,59 +25,62 @@ | @@ -25,59 +25,62 @@ | ||
| 25 | 25 | ||
| 26 | #include "json/json.hpp" | 26 | #include "json/json.hpp" |
| 27 | 27 | ||
| 28 | -namespace utils | 28 | +namespace hueplusplus |
| 29 | { | 29 | { |
| 30 | - namespace detail | 30 | + namespace utils |
| 31 | { | 31 | { |
| 32 | - // Forward declaration | ||
| 33 | - template <typename KeyT, typename... Paths> | ||
| 34 | - nlohmann::json safeGetMemberHelper(const nlohmann::json& json, std::size_t index, Paths&&... otherPaths); | 32 | + namespace detail |
| 33 | + { | ||
| 34 | + // Forward declaration | ||
| 35 | + template <typename KeyT, typename... Paths> | ||
| 36 | + nlohmann::json safeGetMemberHelper(const nlohmann::json& json, std::size_t index, Paths&&... otherPaths); | ||
| 35 | 37 | ||
| 36 | - inline nlohmann::json safeGetMemberHelper(const nlohmann::json& json) { return json; } | 38 | + inline nlohmann::json safeGetMemberHelper(const nlohmann::json& json) { return json; } |
| 37 | 39 | ||
| 38 | - template <typename KeyT, typename... Paths, | ||
| 39 | - std::enable_if_t<!std::is_integral<std::remove_reference_t<KeyT>>::value>* = nullptr> | ||
| 40 | - nlohmann::json safeGetMemberHelper(const nlohmann::json& json, KeyT&& key, Paths&&... otherPaths) | ||
| 41 | - { | ||
| 42 | - auto memberIt = json.find(std::forward<KeyT>(key)); | ||
| 43 | - if (memberIt == json.end()) | 40 | + template <typename KeyT, typename... Paths, |
| 41 | + std::enable_if_t<!std::is_integral<std::remove_reference_t<KeyT>>::value>* = nullptr> | ||
| 42 | + nlohmann::json safeGetMemberHelper(const nlohmann::json& json, KeyT&& key, Paths&&... otherPaths) | ||
| 44 | { | 43 | { |
| 45 | - return nullptr; | 44 | + auto memberIt = json.find(std::forward<KeyT>(key)); |
| 45 | + if (memberIt == json.end()) | ||
| 46 | + { | ||
| 47 | + return nullptr; | ||
| 48 | + } | ||
| 49 | + return safeGetMemberHelper(*memberIt, std::forward<Paths>(otherPaths)...); | ||
| 46 | } | 50 | } |
| 47 | - return safeGetMemberHelper(*memberIt, std::forward<Paths>(otherPaths)...); | ||
| 48 | - } | ||
| 49 | 51 | ||
| 50 | - // Needs to be after the other safeGetMemberHelper, otherwise another forward declaration is needed | ||
| 51 | - template <typename... Paths> | ||
| 52 | - nlohmann::json safeGetMemberHelper(const nlohmann::json& json, std::size_t index, Paths&&... otherPaths) | ||
| 53 | - { | ||
| 54 | - if (!json.is_array() || json.size() <= index) | 52 | + // Needs to be after the other safeGetMemberHelper, otherwise another forward declaration is needed |
| 53 | + template <typename... Paths> | ||
| 54 | + nlohmann::json safeGetMemberHelper(const nlohmann::json& json, std::size_t index, Paths&&... otherPaths) | ||
| 55 | { | 55 | { |
| 56 | - return nullptr; | 56 | + if (!json.is_array() || json.size() <= index) |
| 57 | + { | ||
| 58 | + return nullptr; | ||
| 59 | + } | ||
| 60 | + return safeGetMemberHelper(json[index], std::forward<Paths>(otherPaths)...); | ||
| 57 | } | 61 | } |
| 58 | - return safeGetMemberHelper(json[index], std::forward<Paths>(otherPaths)...); | ||
| 59 | - } | ||
| 60 | - } // namespace detail | 62 | + } // namespace detail |
| 61 | 63 | ||
| 62 | - //! \brief Function for validating that a request was executed correctly | ||
| 63 | - //! | ||
| 64 | - //! \param request The request that was sent initially | ||
| 65 | - //! \param reply The reply that was received | ||
| 66 | - //! \param lightId The identifier of the light | ||
| 67 | - //! \return True if request was executed correctly | ||
| 68 | - bool validateReplyForLight(const nlohmann::json& request, const nlohmann::json& reply, int lightId); | 64 | + //! \brief Function for validating that a request was executed correctly |
| 65 | + //! | ||
| 66 | + //! \param request The request that was sent initially | ||
| 67 | + //! \param reply The reply that was received | ||
| 68 | + //! \param lightId The identifier of the light | ||
| 69 | + //! \return True if request was executed correctly | ||
| 70 | + bool validateReplyForLight(const nlohmann::json& request, const nlohmann::json& reply, int lightId); | ||
| 69 | 71 | ||
| 70 | - //! \brief Returns the object/array member or null if it does not exist | ||
| 71 | - //! | ||
| 72 | - //! \param json The base json value | ||
| 73 | - //! \param paths Any number of child accesses (e.g. 0, "key" would access json[0]["key"]) | ||
| 74 | - //! \returns The specified member or null if any intermediate object does not contain the specified child. | ||
| 75 | - template <typename... Paths> | ||
| 76 | - nlohmann::json safeGetMember(const nlohmann::json& json, Paths&&... paths) | ||
| 77 | - { | ||
| 78 | - return detail::safeGetMemberHelper(json, std::forward<Paths>(paths)...); | ||
| 79 | - } | 72 | + //! \brief Returns the object/array member or null if it does not exist |
| 73 | + //! | ||
| 74 | + //! \param json The base json value | ||
| 75 | + //! \param paths Any number of child accesses (e.g. 0, "key" would access json[0]["key"]) | ||
| 76 | + //! \returns The specified member or null if any intermediate object does not contain the specified child. | ||
| 77 | + template <typename... Paths> | ||
| 78 | + nlohmann::json safeGetMember(const nlohmann::json& json, Paths&&... paths) | ||
| 79 | + { | ||
| 80 | + return detail::safeGetMemberHelper(json, std::forward<Paths>(paths)...); | ||
| 81 | + } | ||
| 80 | 82 | ||
| 81 | -} // namespace utils | 83 | + } // namespace utils |
| 84 | +} // namespace hueplusplus | ||
| 82 | 85 | ||
| 83 | #endif | 86 | #endif |
| 84 | \ No newline at end of file | 87 | \ No newline at end of file |
include/hueplusplus/WinHttpHandler.h
| @@ -30,40 +30,43 @@ | @@ -30,40 +30,43 @@ | ||
| 30 | 30 | ||
| 31 | #include "BaseHttpHandler.h" | 31 | #include "BaseHttpHandler.h" |
| 32 | 32 | ||
| 33 | -//! Class to handle http requests and multicast requests on windows systems | ||
| 34 | -class WinHttpHandler : public BaseHttpHandler | 33 | +namespace hueplusplus |
| 35 | { | 34 | { |
| 36 | -public: | ||
| 37 | - //! \brief Ctor needed for initializing wsaData | ||
| 38 | - WinHttpHandler(); | 35 | + //! Class to handle http requests and multicast requests on windows systems |
| 36 | + class WinHttpHandler : public BaseHttpHandler | ||
| 37 | + { | ||
| 38 | + public: | ||
| 39 | + //! \brief Ctor needed for initializing wsaData | ||
| 40 | + WinHttpHandler(); | ||
| 39 | 41 | ||
| 40 | - //! \brief Dtor needed for wsaData cleanup | ||
| 41 | - ~WinHttpHandler(); | 42 | + //! \brief Dtor needed for wsaData cleanup |
| 43 | + ~WinHttpHandler(); | ||
| 42 | 44 | ||
| 43 | - //! \brief Function that sends a given message to the specified host and | ||
| 44 | - //! returns the response. | ||
| 45 | - //! | ||
| 46 | - //! \param msg String that contains the message that is sent to the specified | ||
| 47 | - //! address \param adr String that contains an ip or hostname in dotted | ||
| 48 | - //! decimal notation like "192.168.2.1" \param port Optional integer that | ||
| 49 | - //! specifies the port to which the request is sent to. Default is 80 \return | ||
| 50 | - //! String containing the response of the host | ||
| 51 | - std::string send(const std::string& msg, const std::string& adr, int port = 80) const override; | 45 | + //! \brief Function that sends a given message to the specified host and |
| 46 | + //! returns the response. | ||
| 47 | + //! | ||
| 48 | + //! \param msg String that contains the message that is sent to the specified | ||
| 49 | + //! address \param adr String that contains an ip or hostname in dotted | ||
| 50 | + //! decimal notation like "192.168.2.1" \param port Optional integer that | ||
| 51 | + //! specifies the port to which the request is sent to. Default is 80 \return | ||
| 52 | + //! String containing the response of the host | ||
| 53 | + std::string send(const std::string& msg, const std::string& adr, int port = 80) const override; | ||
| 52 | 54 | ||
| 53 | - //! \brief Function that sends a multicast request with the specified message. | ||
| 54 | - //! | ||
| 55 | - //! \param msg String that contains the request that is sent to the specified | ||
| 56 | - //! address \param adr Optional String that contains an ip or hostname in | ||
| 57 | - //! dotted decimal notation, default is "239.255.255.250" \param port Optional | ||
| 58 | - //! integer that specifies the port to which the request is sent. Default is | ||
| 59 | - //! 1900 \param timeout Optional Integer that specifies the timeout of the | ||
| 60 | - //! request in seconds. Default is 5 \return Vector containing strings of each | ||
| 61 | - //! answer received | ||
| 62 | - std::vector<std::string> sendMulticast(const std::string& msg, const std::string& adr = "239.255.255.250", | ||
| 63 | - int port = 1900, int timeout = 5) const override; | 55 | + //! \brief Function that sends a multicast request with the specified message. |
| 56 | + //! | ||
| 57 | + //! \param msg String that contains the request that is sent to the specified | ||
| 58 | + //! address \param adr Optional String that contains an ip or hostname in | ||
| 59 | + //! dotted decimal notation, default is "239.255.255.250" \param port Optional | ||
| 60 | + //! integer that specifies the port to which the request is sent. Default is | ||
| 61 | + //! 1900 \param timeout Optional Integer that specifies the timeout of the | ||
| 62 | + //! request in seconds. Default is 5 \return Vector containing strings of each | ||
| 63 | + //! answer received | ||
| 64 | + std::vector<std::string> sendMulticast(const std::string& msg, const std::string& adr = "239.255.255.250", | ||
| 65 | + int port = 1900, int timeout = 5) const override; | ||
| 64 | 66 | ||
| 65 | -private: | ||
| 66 | - WSADATA wsaData; | ||
| 67 | -}; | 67 | + private: |
| 68 | + WSADATA wsaData; | ||
| 69 | + }; | ||
| 70 | +} // namespace hueplusplus | ||
| 68 | 71 | ||
| 69 | #endif | 72 | #endif |
src/BaseHttpHandler.cpp
| @@ -24,7 +24,7 @@ | @@ -24,7 +24,7 @@ | ||
| 24 | 24 | ||
| 25 | #include "hueplusplus/HueExceptionMacro.h" | 25 | #include "hueplusplus/HueExceptionMacro.h" |
| 26 | 26 | ||
| 27 | -std::string BaseHttpHandler::sendGetHTTPBody(const std::string& msg, const std::string& adr, int port) const | 27 | +std::string hueplusplus::BaseHttpHandler::sendGetHTTPBody(const std::string& msg, const std::string& adr, int port) const |
| 28 | { | 28 | { |
| 29 | std::string response = send(msg, adr, port); | 29 | std::string response = send(msg, adr, port); |
| 30 | size_t start = response.find("\r\n\r\n"); | 30 | size_t start = response.find("\r\n\r\n"); |
| @@ -41,7 +41,7 @@ std::string BaseHttpHandler::sendGetHTTPBody(const std::string& msg, const std:: | @@ -41,7 +41,7 @@ std::string BaseHttpHandler::sendGetHTTPBody(const std::string& msg, const std:: | ||
| 41 | return response; | 41 | return response; |
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | -std::string BaseHttpHandler::sendHTTPRequest(const std::string& method, const std::string& uri, | 44 | +std::string hueplusplus::BaseHttpHandler::sendHTTPRequest(const std::string& method, const std::string& uri, |
| 45 | const std::string& contentType, const std::string& body, const std::string& adr, int port) const | 45 | const std::string& contentType, const std::string& body, const std::string& adr, int port) const |
| 46 | { | 46 | { |
| 47 | std::string request; | 47 | std::string request; |
| @@ -68,49 +68,49 @@ std::string BaseHttpHandler::sendHTTPRequest(const std::string& method, const st | @@ -68,49 +68,49 @@ std::string BaseHttpHandler::sendHTTPRequest(const std::string& method, const st | ||
| 68 | return sendGetHTTPBody(request.c_str(), adr, port); | 68 | return sendGetHTTPBody(request.c_str(), adr, port); |
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | -std::string BaseHttpHandler::GETString(const std::string& uri, const std::string& contentType, const std::string& body, | 71 | +std::string hueplusplus::BaseHttpHandler::GETString(const std::string& uri, const std::string& contentType, const std::string& body, |
| 72 | const std::string& adr, int port) const | 72 | const std::string& adr, int port) const |
| 73 | { | 73 | { |
| 74 | return sendHTTPRequest("GET", uri, contentType, body, adr, port); | 74 | return sendHTTPRequest("GET", uri, contentType, body, adr, port); |
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | -std::string BaseHttpHandler::POSTString(const std::string& uri, const std::string& contentType, const std::string& body, | 77 | +std::string hueplusplus::BaseHttpHandler::POSTString(const std::string& uri, const std::string& contentType, const std::string& body, |
| 78 | const std::string& adr, int port) const | 78 | const std::string& adr, int port) const |
| 79 | { | 79 | { |
| 80 | return sendHTTPRequest("POST", uri, contentType, body, adr, port); | 80 | return sendHTTPRequest("POST", uri, contentType, body, adr, port); |
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | -std::string BaseHttpHandler::PUTString(const std::string& uri, const std::string& contentType, const std::string& body, | 83 | +std::string hueplusplus::BaseHttpHandler::PUTString(const std::string& uri, const std::string& contentType, const std::string& body, |
| 84 | const std::string& adr, int port) const | 84 | const std::string& adr, int port) const |
| 85 | { | 85 | { |
| 86 | return sendHTTPRequest("PUT", uri, contentType, body, adr, port); | 86 | return sendHTTPRequest("PUT", uri, contentType, body, adr, port); |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | -std::string BaseHttpHandler::DELETEString(const std::string& uri, const std::string& contentType, | 89 | +std::string hueplusplus::BaseHttpHandler::DELETEString(const std::string& uri, const std::string& contentType, |
| 90 | const std::string& body, const std::string& adr, int port) const | 90 | const std::string& body, const std::string& adr, int port) const |
| 91 | { | 91 | { |
| 92 | return sendHTTPRequest("DELETE", uri, contentType, body, adr, port); | 92 | return sendHTTPRequest("DELETE", uri, contentType, body, adr, port); |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | -nlohmann::json BaseHttpHandler::GETJson( | 95 | +nlohmann::json hueplusplus::BaseHttpHandler::GETJson( |
| 96 | const std::string& uri, const nlohmann::json& body, const std::string& adr, int port) const | 96 | const std::string& uri, const nlohmann::json& body, const std::string& adr, int port) const |
| 97 | { | 97 | { |
| 98 | return nlohmann::json::parse(GETString(uri, "application/json", body.dump(), adr, port)); | 98 | return nlohmann::json::parse(GETString(uri, "application/json", body.dump(), adr, port)); |
| 99 | } | 99 | } |
| 100 | 100 | ||
| 101 | -nlohmann::json BaseHttpHandler::POSTJson( | 101 | +nlohmann::json hueplusplus::BaseHttpHandler::POSTJson( |
| 102 | const std::string& uri, const nlohmann::json& body, const std::string& adr, int port) const | 102 | const std::string& uri, const nlohmann::json& body, const std::string& adr, int port) const |
| 103 | { | 103 | { |
| 104 | return nlohmann::json::parse(POSTString(uri, "application/json", body.dump(), adr, port)); | 104 | return nlohmann::json::parse(POSTString(uri, "application/json", body.dump(), adr, port)); |
| 105 | } | 105 | } |
| 106 | 106 | ||
| 107 | -nlohmann::json BaseHttpHandler::PUTJson( | 107 | +nlohmann::json hueplusplus::BaseHttpHandler::PUTJson( |
| 108 | const std::string& uri, const nlohmann::json& body, const std::string& adr, int port) const | 108 | const std::string& uri, const nlohmann::json& body, const std::string& adr, int port) const |
| 109 | { | 109 | { |
| 110 | return nlohmann::json::parse(PUTString(uri, "application/json", body.dump(), adr, port)); | 110 | return nlohmann::json::parse(PUTString(uri, "application/json", body.dump(), adr, port)); |
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | -nlohmann::json BaseHttpHandler::DELETEJson( | 113 | +nlohmann::json hueplusplus::BaseHttpHandler::DELETEJson( |
| 114 | const std::string& uri, const nlohmann::json& body, const std::string& adr, int port) const | 114 | const std::string& uri, const nlohmann::json& body, const std::string& adr, int port) const |
| 115 | { | 115 | { |
| 116 | return nlohmann::json::parse(DELETEString(uri, "application/json", body.dump(), adr, port)); | 116 | return nlohmann::json::parse(DELETEString(uri, "application/json", body.dump(), adr, port)); |
src/ExtendedColorHueStrategy.cpp
| @@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
| 28 | 28 | ||
| 29 | #include "hueplusplus/HueConfig.h" | 29 | #include "hueplusplus/HueConfig.h" |
| 30 | 30 | ||
| 31 | -bool ExtendedColorHueStrategy::alertHueSaturation(uint16_t hue, uint8_t sat, HueLight& light) const | 31 | +bool hueplusplus::ExtendedColorHueStrategy::alertHueSaturation(uint16_t hue, uint8_t sat, HueLight& light) const |
| 32 | { | 32 | { |
| 33 | light.refreshState(); | 33 | light.refreshState(); |
| 34 | std::string cType = light.state["state"]["colormode"].get<std::string>(); | 34 | std::string cType = light.state["state"]["colormode"].get<std::string>(); |
| @@ -110,7 +110,7 @@ bool ExtendedColorHueStrategy::alertHueSaturation(uint16_t hue, uint8_t sat, Hue | @@ -110,7 +110,7 @@ bool ExtendedColorHueStrategy::alertHueSaturation(uint16_t hue, uint8_t sat, Hue | ||
| 110 | } | 110 | } |
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | -bool ExtendedColorHueStrategy::alertXY(float x, float y, HueLight& light) const | 113 | +bool hueplusplus::ExtendedColorHueStrategy::alertXY(float x, float y, HueLight& light) const |
| 114 | { | 114 | { |
| 115 | light.refreshState(); | 115 | light.refreshState(); |
| 116 | std::string cType = light.state["state"]["colormode"].get<std::string>(); | 116 | std::string cType = light.state["state"]["colormode"].get<std::string>(); |
| @@ -192,7 +192,7 @@ bool ExtendedColorHueStrategy::alertXY(float x, float y, HueLight& light) const | @@ -192,7 +192,7 @@ bool ExtendedColorHueStrategy::alertXY(float x, float y, HueLight& light) const | ||
| 192 | } | 192 | } |
| 193 | } | 193 | } |
| 194 | 194 | ||
| 195 | -bool ExtendedColorHueStrategy::alertRGB(uint8_t r, uint8_t g, uint8_t b, HueLight& light) const | 195 | +bool hueplusplus::ExtendedColorHueStrategy::alertRGB(uint8_t r, uint8_t g, uint8_t b, HueLight& light) const |
| 196 | { | 196 | { |
| 197 | light.refreshState(); | 197 | light.refreshState(); |
| 198 | std::string cType = light.state["state"]["colormode"].get<std::string>(); | 198 | std::string cType = light.state["state"]["colormode"].get<std::string>(); |
src/ExtendedColorTemperatureStrategy.cpp
| @@ -30,7 +30,7 @@ | @@ -30,7 +30,7 @@ | ||
| 30 | #include "hueplusplus/HueExceptionMacro.h" | 30 | #include "hueplusplus/HueExceptionMacro.h" |
| 31 | #include "hueplusplus/Utils.h" | 31 | #include "hueplusplus/Utils.h" |
| 32 | 32 | ||
| 33 | -bool ExtendedColorTemperatureStrategy::setColorTemperature( | 33 | +bool hueplusplus::ExtendedColorTemperatureStrategy::setColorTemperature( |
| 34 | unsigned int mired, uint8_t transition, HueLight& light) const | 34 | unsigned int mired, uint8_t transition, HueLight& light) const |
| 35 | { | 35 | { |
| 36 | light.refreshState(); | 36 | light.refreshState(); |
| @@ -68,7 +68,7 @@ bool ExtendedColorTemperatureStrategy::setColorTemperature( | @@ -68,7 +68,7 @@ bool ExtendedColorTemperatureStrategy::setColorTemperature( | ||
| 68 | return utils::validateReplyForLight(request, reply, light.id); | 68 | return utils::validateReplyForLight(request, reply, light.id); |
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | -bool ExtendedColorTemperatureStrategy::alertTemperature(unsigned int mired, HueLight& light) const | 71 | +bool hueplusplus::ExtendedColorTemperatureStrategy::alertTemperature(unsigned int mired, HueLight& light) const |
| 72 | { | 72 | { |
| 73 | light.refreshState(); | 73 | light.refreshState(); |
| 74 | std::string cType = light.state["state"]["colormode"].get<std::string>(); | 74 | std::string cType = light.state["state"]["colormode"].get<std::string>(); |
src/Hue.cpp
| @@ -41,9 +41,9 @@ | @@ -41,9 +41,9 @@ | ||
| 41 | #include "hueplusplus/UPnP.h" | 41 | #include "hueplusplus/UPnP.h" |
| 42 | #include "hueplusplus/Utils.h" | 42 | #include "hueplusplus/Utils.h" |
| 43 | 43 | ||
| 44 | -HueFinder::HueFinder(std::shared_ptr<const IHttpHandler> handler) : http_handler(std::move(handler)) {} | 44 | +hueplusplus::HueFinder::HueFinder(std::shared_ptr<const IHttpHandler> handler) : http_handler(std::move(handler)) {} |
| 45 | 45 | ||
| 46 | -std::vector<HueFinder::HueIdentification> HueFinder::FindBridges() const | 46 | +std::vector<hueplusplus::HueFinder::HueIdentification> hueplusplus::HueFinder::FindBridges() const |
| 47 | { | 47 | { |
| 48 | UPnP uplug; | 48 | UPnP uplug; |
| 49 | std::vector<std::pair<std::string, std::string>> foundDevices = uplug.getDevices(http_handler); | 49 | std::vector<std::pair<std::string, std::string>> foundDevices = uplug.getDevices(http_handler); |
| @@ -71,7 +71,7 @@ std::vector<HueFinder::HueIdentification> HueFinder::FindBridges() const | @@ -71,7 +71,7 @@ std::vector<HueFinder::HueIdentification> HueFinder::FindBridges() const | ||
| 71 | return foundBridges; | 71 | return foundBridges; |
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | -Hue HueFinder::GetBridge(const HueIdentification& identification) | 74 | +hueplusplus::Hue hueplusplus::HueFinder::GetBridge(const HueIdentification& identification) |
| 75 | { | 75 | { |
| 76 | std::string normalizedMac = NormalizeMac(identification.mac); | 76 | std::string normalizedMac = NormalizeMac(identification.mac); |
| 77 | auto pos = usernames.find(normalizedMac); | 77 | auto pos = usernames.find(normalizedMac); |
| @@ -91,17 +91,17 @@ Hue HueFinder::GetBridge(const HueIdentification& identification) | @@ -91,17 +91,17 @@ Hue HueFinder::GetBridge(const HueIdentification& identification) | ||
| 91 | return bridge; | 91 | return bridge; |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | -void HueFinder::AddUsername(const std::string& mac, const std::string& username) | 94 | +void hueplusplus::HueFinder::AddUsername(const std::string& mac, const std::string& username) |
| 95 | { | 95 | { |
| 96 | usernames[NormalizeMac(mac)] = username; | 96 | usernames[NormalizeMac(mac)] = username; |
| 97 | } | 97 | } |
| 98 | 98 | ||
| 99 | -const std::map<std::string, std::string>& HueFinder::GetAllUsernames() const | 99 | +const std::map<std::string, std::string>& hueplusplus::HueFinder::GetAllUsernames() const |
| 100 | { | 100 | { |
| 101 | return usernames; | 101 | return usernames; |
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | -std::string HueFinder::NormalizeMac(std::string input) | 104 | +std::string hueplusplus::HueFinder::NormalizeMac(std::string input) |
| 105 | { | 105 | { |
| 106 | // Remove any non alphanumeric characters (e.g. ':' and whitespace) | 106 | // Remove any non alphanumeric characters (e.g. ':' and whitespace) |
| 107 | input.erase(std::remove_if(input.begin(), input.end(), [](char c) { return !std::isalnum(c, std::locale()); }), | 107 | input.erase(std::remove_if(input.begin(), input.end(), [](char c) { return !std::isalnum(c, std::locale()); }), |
| @@ -111,7 +111,7 @@ std::string HueFinder::NormalizeMac(std::string input) | @@ -111,7 +111,7 @@ std::string HueFinder::NormalizeMac(std::string input) | ||
| 111 | return input; | 111 | return input; |
| 112 | } | 112 | } |
| 113 | 113 | ||
| 114 | -std::string HueFinder::ParseDescription(const std::string& description) | 114 | +std::string hueplusplus::HueFinder::ParseDescription(const std::string& description) |
| 115 | { | 115 | { |
| 116 | const char* model = "<modelName>Philips hue bridge"; | 116 | const char* model = "<modelName>Philips hue bridge"; |
| 117 | const char* serialBegin = "<serialNumber>"; | 117 | const char* serialBegin = "<serialNumber>"; |
| @@ -133,7 +133,7 @@ std::string HueFinder::ParseDescription(const std::string& description) | @@ -133,7 +133,7 @@ std::string HueFinder::ParseDescription(const std::string& description) | ||
| 133 | return std::string(); | 133 | return std::string(); |
| 134 | } | 134 | } |
| 135 | 135 | ||
| 136 | -Hue::Hue( | 136 | +hueplusplus::Hue::Hue( |
| 137 | const std::string& ip, const int port, const std::string& username, std::shared_ptr<const IHttpHandler> handler) | 137 | const std::string& ip, const int port, const std::string& username, std::shared_ptr<const IHttpHandler> handler) |
| 138 | : ip(ip), | 138 | : ip(ip), |
| 139 | port(port), | 139 | port(port), |
| @@ -147,17 +147,17 @@ Hue::Hue( | @@ -147,17 +147,17 @@ Hue::Hue( | ||
| 147 | commands(ip, port, username, http_handler) | 147 | commands(ip, port, username, http_handler) |
| 148 | {} | 148 | {} |
| 149 | 149 | ||
| 150 | -std::string Hue::getBridgeIP() | 150 | +std::string hueplusplus::Hue::getBridgeIP() |
| 151 | { | 151 | { |
| 152 | return ip; | 152 | return ip; |
| 153 | } | 153 | } |
| 154 | 154 | ||
| 155 | -int Hue::getBridgePort() | 155 | +int hueplusplus::Hue::getBridgePort() |
| 156 | { | 156 | { |
| 157 | return port; | 157 | return port; |
| 158 | } | 158 | } |
| 159 | 159 | ||
| 160 | -std::string Hue::requestUsername() | 160 | +std::string hueplusplus::Hue::requestUsername() |
| 161 | { | 161 | { |
| 162 | std::cout << "Please press the link Button! You've got 35 secs!\n"; // when the link | 162 | std::cout << "Please press the link Button! You've got 35 secs!\n"; // when the link |
| 163 | // button was | 163 | // button was |
| @@ -206,22 +206,22 @@ std::string Hue::requestUsername() | @@ -206,22 +206,22 @@ std::string Hue::requestUsername() | ||
| 206 | return username; | 206 | return username; |
| 207 | } | 207 | } |
| 208 | 208 | ||
| 209 | -std::string Hue::getUsername() | 209 | +std::string hueplusplus::Hue::getUsername() |
| 210 | { | 210 | { |
| 211 | return username; | 211 | return username; |
| 212 | } | 212 | } |
| 213 | 213 | ||
| 214 | -void Hue::setIP(const std::string& ip) | 214 | +void hueplusplus::Hue::setIP(const std::string& ip) |
| 215 | { | 215 | { |
| 216 | this->ip = ip; | 216 | this->ip = ip; |
| 217 | } | 217 | } |
| 218 | 218 | ||
| 219 | -void Hue::setPort(const int port) | 219 | +void hueplusplus::Hue::setPort(const int port) |
| 220 | { | 220 | { |
| 221 | this->port = port; | 221 | this->port = port; |
| 222 | } | 222 | } |
| 223 | 223 | ||
| 224 | -HueLight& Hue::getLight(int id) | 224 | +hueplusplus::HueLight& hueplusplus::Hue::getLight(int id) |
| 225 | { | 225 | { |
| 226 | auto pos = lights.find(id); | 226 | auto pos = lights.find(id); |
| 227 | if (pos != lights.end()) | 227 | if (pos != lights.end()) |
| @@ -245,7 +245,7 @@ HueLight& Hue::getLight(int id) | @@ -245,7 +245,7 @@ HueLight& Hue::getLight(int id) | ||
| 245 | return lights.find(id)->second; | 245 | return lights.find(id)->second; |
| 246 | } | 246 | } |
| 247 | 247 | ||
| 248 | -bool Hue::removeLight(int id) | 248 | +bool hueplusplus::Hue::removeLight(int id) |
| 249 | { | 249 | { |
| 250 | nlohmann::json result | 250 | nlohmann::json result |
| 251 | = commands.DELETERequest("/lights/" + std::to_string(id), nlohmann::json::object(), CURRENT_FILE_INFO); | 251 | = commands.DELETERequest("/lights/" + std::to_string(id), nlohmann::json::object(), CURRENT_FILE_INFO); |
| @@ -257,7 +257,7 @@ bool Hue::removeLight(int id) | @@ -257,7 +257,7 @@ bool Hue::removeLight(int id) | ||
| 257 | return success; | 257 | return success; |
| 258 | } | 258 | } |
| 259 | 259 | ||
| 260 | -std::vector<std::reference_wrapper<HueLight>> Hue::getAllLights() | 260 | +std::vector<std::reference_wrapper<hueplusplus::HueLight>> hueplusplus::Hue::getAllLights() |
| 261 | { | 261 | { |
| 262 | refreshState(); | 262 | refreshState(); |
| 263 | nlohmann::json lightsState = state["lights"]; | 263 | nlohmann::json lightsState = state["lights"]; |
| @@ -273,7 +273,7 @@ std::vector<std::reference_wrapper<HueLight>> Hue::getAllLights() | @@ -273,7 +273,7 @@ std::vector<std::reference_wrapper<HueLight>> Hue::getAllLights() | ||
| 273 | return result; | 273 | return result; |
| 274 | } | 274 | } |
| 275 | 275 | ||
| 276 | -bool Hue::lightExists(int id) | 276 | +bool hueplusplus::Hue::lightExists(int id) |
| 277 | { | 277 | { |
| 278 | refreshState(); | 278 | refreshState(); |
| 279 | auto pos = lights.find(id); | 279 | auto pos = lights.find(id); |
| @@ -288,7 +288,7 @@ bool Hue::lightExists(int id) | @@ -288,7 +288,7 @@ bool Hue::lightExists(int id) | ||
| 288 | return false; | 288 | return false; |
| 289 | } | 289 | } |
| 290 | 290 | ||
| 291 | -bool Hue::lightExists(int id) const | 291 | +bool hueplusplus::Hue::lightExists(int id) const |
| 292 | { | 292 | { |
| 293 | auto pos = lights.find(id); | 293 | auto pos = lights.find(id); |
| 294 | if (pos != lights.end()) | 294 | if (pos != lights.end()) |
| @@ -302,7 +302,7 @@ bool Hue::lightExists(int id) const | @@ -302,7 +302,7 @@ bool Hue::lightExists(int id) const | ||
| 302 | return false; | 302 | return false; |
| 303 | } | 303 | } |
| 304 | 304 | ||
| 305 | -std::string Hue::getPictureOfLight(int id) const | 305 | +std::string hueplusplus::Hue::getPictureOfLight(int id) const |
| 306 | { | 306 | { |
| 307 | std::string ret = ""; | 307 | std::string ret = ""; |
| 308 | auto pos = lights.find(id); | 308 | auto pos = lights.find(id); |
| @@ -313,7 +313,7 @@ std::string Hue::getPictureOfLight(int id) const | @@ -313,7 +313,7 @@ std::string Hue::getPictureOfLight(int id) const | ||
| 313 | return ret; | 313 | return ret; |
| 314 | } | 314 | } |
| 315 | 315 | ||
| 316 | -std::string Hue::getPictureOfModel(const std::string& model_id) const | 316 | +std::string hueplusplus::Hue::getPictureOfModel(const std::string& model_id) const |
| 317 | { | 317 | { |
| 318 | std::string ret = ""; | 318 | std::string ret = ""; |
| 319 | if (model_id == "LCT001" || model_id == "LCT007" || model_id == "LCT010" || model_id == "LCT014" | 319 | if (model_id == "LCT001" || model_id == "LCT007" || model_id == "LCT010" || model_id == "LCT014" |
| @@ -437,7 +437,7 @@ std::string Hue::getPictureOfModel(const std::string& model_id) const | @@ -437,7 +437,7 @@ std::string Hue::getPictureOfModel(const std::string& model_id) const | ||
| 437 | return ret; | 437 | return ret; |
| 438 | } | 438 | } |
| 439 | 439 | ||
| 440 | -void Hue::refreshState() | 440 | +void hueplusplus::Hue::refreshState() |
| 441 | { | 441 | { |
| 442 | if (username.empty()) | 442 | if (username.empty()) |
| 443 | { | 443 | { |
src/HueCommandAPI.cpp
| @@ -26,7 +26,7 @@ | @@ -26,7 +26,7 @@ | ||
| 26 | 26 | ||
| 27 | #include "hueplusplus/HueExceptionMacro.h" | 27 | #include "hueplusplus/HueExceptionMacro.h" |
| 28 | 28 | ||
| 29 | -constexpr std::chrono::steady_clock::duration HueCommandAPI::minDelay; | 29 | +constexpr std::chrono::steady_clock::duration hueplusplus::HueCommandAPI::minDelay; |
| 30 | 30 | ||
| 31 | namespace | 31 | namespace |
| 32 | { | 32 | { |
| @@ -63,7 +63,7 @@ namespace | @@ -63,7 +63,7 @@ namespace | ||
| 63 | } | 63 | } |
| 64 | } // namespace | 64 | } // namespace |
| 65 | 65 | ||
| 66 | -HueCommandAPI::HueCommandAPI( | 66 | +hueplusplus::HueCommandAPI::HueCommandAPI( |
| 67 | const std::string& ip, const int port, const std::string& username, std::shared_ptr<const IHttpHandler> httpHandler) | 67 | const std::string& ip, const int port, const std::string& username, std::shared_ptr<const IHttpHandler> httpHandler) |
| 68 | : ip(ip), | 68 | : ip(ip), |
| 69 | port(port), | 69 | port(port), |
| @@ -72,43 +72,43 @@ HueCommandAPI::HueCommandAPI( | @@ -72,43 +72,43 @@ HueCommandAPI::HueCommandAPI( | ||
| 72 | timeout(new TimeoutData{std::chrono::steady_clock::now(), {}}) | 72 | timeout(new TimeoutData{std::chrono::steady_clock::now(), {}}) |
| 73 | {} | 73 | {} |
| 74 | 74 | ||
| 75 | -nlohmann::json HueCommandAPI::PUTRequest(const std::string& path, const nlohmann::json& request) const | 75 | +nlohmann::json hueplusplus::HueCommandAPI::PUTRequest(const std::string& path, const nlohmann::json& request) const |
| 76 | { | 76 | { |
| 77 | return PUTRequest(path, request, CURRENT_FILE_INFO); | 77 | return PUTRequest(path, request, CURRENT_FILE_INFO); |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | -nlohmann::json HueCommandAPI::PUTRequest( | 80 | +nlohmann::json hueplusplus::HueCommandAPI::PUTRequest( |
| 81 | const std::string& path, const nlohmann::json& request, FileInfo fileInfo) const | 81 | const std::string& path, const nlohmann::json& request, FileInfo fileInfo) const |
| 82 | { | 82 | { |
| 83 | return HandleError(fileInfo, | 83 | return HandleError(fileInfo, |
| 84 | RunWithTimeout(timeout, minDelay, [&]() { return httpHandler->PUTJson(CombinedPath(path), request, ip); })); | 84 | RunWithTimeout(timeout, minDelay, [&]() { return httpHandler->PUTJson(CombinedPath(path), request, ip); })); |
| 85 | } | 85 | } |
| 86 | 86 | ||
| 87 | -nlohmann::json HueCommandAPI::GETRequest(const std::string& path, const nlohmann::json& request) const | 87 | +nlohmann::json hueplusplus::HueCommandAPI::GETRequest(const std::string& path, const nlohmann::json& request) const |
| 88 | { | 88 | { |
| 89 | return GETRequest(path, request, CURRENT_FILE_INFO); | 89 | return GETRequest(path, request, CURRENT_FILE_INFO); |
| 90 | } | 90 | } |
| 91 | 91 | ||
| 92 | -nlohmann::json HueCommandAPI::GETRequest( | 92 | +nlohmann::json hueplusplus::HueCommandAPI::GETRequest( |
| 93 | const std::string& path, const nlohmann::json& request, FileInfo fileInfo) const | 93 | const std::string& path, const nlohmann::json& request, FileInfo fileInfo) const |
| 94 | { | 94 | { |
| 95 | return HandleError(fileInfo, | 95 | return HandleError(fileInfo, |
| 96 | RunWithTimeout(timeout, minDelay, [&]() { return httpHandler->GETJson(CombinedPath(path), request, ip); })); | 96 | RunWithTimeout(timeout, minDelay, [&]() { return httpHandler->GETJson(CombinedPath(path), request, ip); })); |
| 97 | } | 97 | } |
| 98 | 98 | ||
| 99 | -nlohmann::json HueCommandAPI::DELETERequest(const std::string& path, const nlohmann::json& request) const | 99 | +nlohmann::json hueplusplus::HueCommandAPI::DELETERequest(const std::string& path, const nlohmann::json& request) const |
| 100 | { | 100 | { |
| 101 | return DELETERequest(path, request, CURRENT_FILE_INFO); | 101 | return DELETERequest(path, request, CURRENT_FILE_INFO); |
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | -nlohmann::json HueCommandAPI::DELETERequest( | 104 | +nlohmann::json hueplusplus::HueCommandAPI::DELETERequest( |
| 105 | const std::string& path, const nlohmann::json& request, FileInfo fileInfo) const | 105 | const std::string& path, const nlohmann::json& request, FileInfo fileInfo) const |
| 106 | { | 106 | { |
| 107 | return HandleError(fileInfo, | 107 | return HandleError(fileInfo, |
| 108 | RunWithTimeout(timeout, minDelay, [&]() { return httpHandler->DELETEJson(CombinedPath(path), request, ip); })); | 108 | RunWithTimeout(timeout, minDelay, [&]() { return httpHandler->DELETEJson(CombinedPath(path), request, ip); })); |
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | -nlohmann::json HueCommandAPI::HandleError(FileInfo fileInfo, const nlohmann::json& response) const | 111 | +nlohmann::json hueplusplus::HueCommandAPI::HandleError(FileInfo fileInfo, const nlohmann::json& response) const |
| 112 | { | 112 | { |
| 113 | if (response.count("error")) | 113 | if (response.count("error")) |
| 114 | { | 114 | { |
| @@ -121,7 +121,7 @@ nlohmann::json HueCommandAPI::HandleError(FileInfo fileInfo, const nlohmann::jso | @@ -121,7 +121,7 @@ nlohmann::json HueCommandAPI::HandleError(FileInfo fileInfo, const nlohmann::jso | ||
| 121 | return response; | 121 | return response; |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | -std::string HueCommandAPI::CombinedPath(const std::string& path) const | 124 | +std::string hueplusplus::HueCommandAPI::CombinedPath(const std::string& path) const |
| 125 | { | 125 | { |
| 126 | std::string result = "/api/"; | 126 | std::string result = "/api/"; |
| 127 | result.append(username); | 127 | result.append(username); |
src/HueDeviceTypes.cpp
| @@ -20,63 +20,53 @@ | @@ -20,63 +20,53 @@ | ||
| 20 | along with hueplusplus. If not, see <http://www.gnu.org/licenses/>. | 20 | along with hueplusplus. If not, see <http://www.gnu.org/licenses/>. |
| 21 | **/ | 21 | **/ |
| 22 | 22 | ||
| 23 | +#include "hueplusplus/HueDeviceTypes.h" | ||
| 24 | + | ||
| 23 | #include <set> | 25 | #include <set> |
| 24 | 26 | ||
| 25 | -#include "hueplusplus/HueDeviceTypes.h" | ||
| 26 | #include "hueplusplus/HueExceptionMacro.h" | 27 | #include "hueplusplus/HueExceptionMacro.h" |
| 27 | 28 | ||
| 28 | -const std::set<std::string> getGamutBTypes() | 29 | +namespace |
| 29 | { | 30 | { |
| 30 | - static const std::set<std::string> c_EXTENDEDCOLORLIGHT_GAMUTB_TYPES = { | ||
| 31 | - "LCT001", "LCT002", "LCT003", "LCT007", "LLM001" | 31 | + const std::set<std::string> getGamutBTypes() |
| 32 | + { | ||
| 33 | + static const std::set<std::string> c_EXTENDEDCOLORLIGHT_GAMUTB_TYPES | ||
| 34 | + = {"LCT001", "LCT002", "LCT003", "LCT007", "LLM001"}; | ||
| 35 | + return c_EXTENDEDCOLORLIGHT_GAMUTB_TYPES; | ||
| 32 | }; | 36 | }; |
| 33 | - return c_EXTENDEDCOLORLIGHT_GAMUTB_TYPES; | ||
| 34 | -}; | ||
| 35 | 37 | ||
| 38 | + const std::set<std::string> getGamutCTypes() | ||
| 39 | + { | ||
| 40 | + static const std::set<std::string> c_EXTENDEDCOLORLIGHT_GAMUTC_TYPES | ||
| 41 | + = {"LCT010", "LCT011", "LCT012", "LCT014", "LCT015", "LCT016", "LLC020", "LST002"}; | ||
| 42 | + return c_EXTENDEDCOLORLIGHT_GAMUTC_TYPES; | ||
| 43 | + } | ||
| 36 | 44 | ||
| 37 | -const std::set<std::string> getGamutCTypes() | ||
| 38 | -{ | ||
| 39 | - static const std::set<std::string> c_EXTENDEDCOLORLIGHT_GAMUTC_TYPES = { | ||
| 40 | - "LCT010", "LCT011", "LCT012", "LCT014", | ||
| 41 | - "LCT015", "LCT016", "LLC020", "LST002" | ||
| 42 | - }; | ||
| 43 | - return c_EXTENDEDCOLORLIGHT_GAMUTC_TYPES; | ||
| 44 | -} | ||
| 45 | - | ||
| 46 | -const std::set<std::string> getGamutATypes() | ||
| 47 | -{ | ||
| 48 | - static const std::set<std::string> c_EXTENDEDCOLORLIGHT_GAMUTA_TYPES = { | ||
| 49 | - "LST001", "LLC005" , "LLC006", "LLC007", | ||
| 50 | - "LLC010", "LLC011", "LLC012", "LLC013", | ||
| 51 | - "LLC014" | ||
| 52 | - }; | ||
| 53 | - return c_EXTENDEDCOLORLIGHT_GAMUTA_TYPES; | ||
| 54 | -} | 45 | + const std::set<std::string> getGamutATypes() |
| 46 | + { | ||
| 47 | + static const std::set<std::string> c_EXTENDEDCOLORLIGHT_GAMUTA_TYPES | ||
| 48 | + = {"LST001", "LLC005", "LLC006", "LLC007", "LLC010", "LLC011", "LLC012", "LLC013", "LLC014"}; | ||
| 49 | + return c_EXTENDEDCOLORLIGHT_GAMUTA_TYPES; | ||
| 50 | + } | ||
| 55 | 51 | ||
| 56 | -const std::set<std::string> getNoColorTypes() | ||
| 57 | -{ | ||
| 58 | - static const std::set<std::string> c_DIMMABLELIGHT_NO_COLOR_TYPES = { | ||
| 59 | - "LWB004", "LWB006", "LWB007", "LWB010", | ||
| 60 | - "LWB014", "LDF001", "LDF002", "LDD001", | ||
| 61 | - "LDD002", "MWM001" | ||
| 62 | - }; | ||
| 63 | - return c_DIMMABLELIGHT_NO_COLOR_TYPES; | ||
| 64 | -} | 52 | + const std::set<std::string> getNoColorTypes() |
| 53 | + { | ||
| 54 | + static const std::set<std::string> c_DIMMABLELIGHT_NO_COLOR_TYPES | ||
| 55 | + = {"LWB004", "LWB006", "LWB007", "LWB010", "LWB014", "LDF001", "LDF002", "LDD001", "LDD002", "MWM001"}; | ||
| 56 | + return c_DIMMABLELIGHT_NO_COLOR_TYPES; | ||
| 57 | + } | ||
| 65 | 58 | ||
| 66 | -const std::set<std::string> getTemperatureLightTypes() | ||
| 67 | -{ | ||
| 68 | - static const std::set<std::string> c_TEMPERATURELIGHT_TYPES = { | ||
| 69 | - "LLM010", "LLM011", "LLM012", "LTW001", "LTW004", | ||
| 70 | - "LTW010", "LTW011", "LTW012", "LTW013", "LTW014", | ||
| 71 | - "LTW015", "LTP001", "LTP002", "LTP003", "LTP004", | ||
| 72 | - "LTP005", "LTD003", "LTF001", "LTF002", "LTC001", | ||
| 73 | - "LTC002", "LTC003", "LTC004", "LTC011", "LTC012", | ||
| 74 | - "LTD001", "LTD002", "LFF001", "LTT001", "LDT001" | ||
| 75 | - }; | ||
| 76 | - return c_TEMPERATURELIGHT_TYPES; | ||
| 77 | -} | 59 | + const std::set<std::string> getTemperatureLightTypes() |
| 60 | + { | ||
| 61 | + static const std::set<std::string> c_TEMPERATURELIGHT_TYPES | ||
| 62 | + = {"LLM010", "LLM011", "LLM012", "LTW001", "LTW004", "LTW010", "LTW011", "LTW012", "LTW013", "LTW014", | ||
| 63 | + "LTW015", "LTP001", "LTP002", "LTP003", "LTP004", "LTP005", "LTD003", "LTF001", "LTF002", "LTC001", | ||
| 64 | + "LTC002", "LTC003", "LTC004", "LTC011", "LTC012", "LTD001", "LTD002", "LFF001", "LTT001", "LDT001"}; | ||
| 65 | + return c_TEMPERATURELIGHT_TYPES; | ||
| 66 | + } | ||
| 67 | +} // namespace | ||
| 78 | 68 | ||
| 79 | -auto MakeHueLight::operator()(std::string type, int id, HueCommandAPI commands, | 69 | +auto hueplusplus::MakeHueLight::operator()(std::string type, int id, HueCommandAPI commands, |
| 80 | std::shared_ptr<BrightnessStrategy> simpleBrightnessStrategy, | 70 | std::shared_ptr<BrightnessStrategy> simpleBrightnessStrategy, |
| 81 | std::shared_ptr<ColorTemperatureStrategy> extendedColorTemperatureStrategy, | 71 | std::shared_ptr<ColorTemperatureStrategy> extendedColorTemperatureStrategy, |
| 82 | std::shared_ptr<ColorTemperatureStrategy> simpleColorTemperatureStrategy, | 72 | std::shared_ptr<ColorTemperatureStrategy> simpleColorTemperatureStrategy, |
| @@ -85,14 +75,16 @@ auto MakeHueLight::operator()(std::string type, int id, HueCommandAPI commands, | @@ -85,14 +75,16 @@ auto MakeHueLight::operator()(std::string type, int id, HueCommandAPI commands, | ||
| 85 | { | 75 | { |
| 86 | if (getGamutBTypes().count(type)) | 76 | if (getGamutBTypes().count(type)) |
| 87 | { | 77 | { |
| 88 | - auto light = HueLight(id, commands, simpleBrightnessStrategy, extendedColorTemperatureStrategy, extendedColorHueStrategy); | 78 | + auto light = HueLight( |
| 79 | + id, commands, simpleBrightnessStrategy, extendedColorTemperatureStrategy, extendedColorHueStrategy); | ||
| 89 | light.colorType = ColorType::GAMUT_B; | 80 | light.colorType = ColorType::GAMUT_B; |
| 90 | return light; | 81 | return light; |
| 91 | } | 82 | } |
| 92 | 83 | ||
| 93 | else if (getGamutCTypes().count(type)) | 84 | else if (getGamutCTypes().count(type)) |
| 94 | { | 85 | { |
| 95 | - auto light = HueLight(id, commands, simpleBrightnessStrategy, extendedColorTemperatureStrategy, extendedColorHueStrategy); | 86 | + auto light = HueLight( |
| 87 | + id, commands, simpleBrightnessStrategy, extendedColorTemperatureStrategy, extendedColorHueStrategy); | ||
| 96 | light.colorType = ColorType::GAMUT_C; | 88 | light.colorType = ColorType::GAMUT_C; |
| 97 | return light; | 89 | return light; |
| 98 | } | 90 | } |
src/HueException.cpp
| @@ -22,21 +22,21 @@ | @@ -22,21 +22,21 @@ | ||
| 22 | 22 | ||
| 23 | #include "hueplusplus/HueException.h" | 23 | #include "hueplusplus/HueException.h" |
| 24 | 24 | ||
| 25 | -HueException::HueException(FileInfo fileInfo, const std::string& message) | 25 | +hueplusplus::HueException::HueException(FileInfo fileInfo, const std::string& message) |
| 26 | : HueException("HueException", std::move(fileInfo), message) | 26 | : HueException("HueException", std::move(fileInfo), message) |
| 27 | {} | 27 | {} |
| 28 | 28 | ||
| 29 | -const char* HueException::what() const noexcept | 29 | +const char* hueplusplus::HueException::what() const noexcept |
| 30 | { | 30 | { |
| 31 | return whatMessage.c_str(); | 31 | return whatMessage.c_str(); |
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | -const FileInfo& HueException::GetFile() const noexcept | 34 | +const hueplusplus::FileInfo& hueplusplus::HueException::GetFile() const noexcept |
| 35 | { | 35 | { |
| 36 | return fileInfo; | 36 | return fileInfo; |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | -HueException::HueException(const char* exceptionName, FileInfo fileInfo, const std::string& message) | 39 | +hueplusplus::HueException::HueException(const char* exceptionName, FileInfo fileInfo, const std::string& message) |
| 40 | : fileInfo(std::move(fileInfo)) | 40 | : fileInfo(std::move(fileInfo)) |
| 41 | { | 41 | { |
| 42 | whatMessage = exceptionName; | 42 | whatMessage = exceptionName; |
| @@ -46,7 +46,7 @@ HueException::HueException(const char* exceptionName, FileInfo fileInfo, const s | @@ -46,7 +46,7 @@ HueException::HueException(const char* exceptionName, FileInfo fileInfo, const s | ||
| 46 | whatMessage.append(message); | 46 | whatMessage.append(message); |
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | -HueAPIResponseException::HueAPIResponseException( | 49 | +hueplusplus::HueAPIResponseException::HueAPIResponseException( |
| 50 | FileInfo fileInfo, int error, std::string address, std::string description) | 50 | FileInfo fileInfo, int error, std::string address, std::string description) |
| 51 | : HueException("HueApiResponseException", std::move(fileInfo), GetMessage(error, address, description)), | 51 | : HueException("HueApiResponseException", std::move(fileInfo), GetMessage(error, address, description)), |
| 52 | error(error), | 52 | error(error), |
| @@ -54,22 +54,22 @@ HueAPIResponseException::HueAPIResponseException( | @@ -54,22 +54,22 @@ HueAPIResponseException::HueAPIResponseException( | ||
| 54 | description(std::move(description)) | 54 | description(std::move(description)) |
| 55 | {} | 55 | {} |
| 56 | 56 | ||
| 57 | -int HueAPIResponseException::GetErrorNumber() const noexcept | 57 | +int hueplusplus::HueAPIResponseException::GetErrorNumber() const noexcept |
| 58 | { | 58 | { |
| 59 | return error; | 59 | return error; |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | -const std::string& HueAPIResponseException::GetAddress() const noexcept | 62 | +const std::string& hueplusplus::HueAPIResponseException::GetAddress() const noexcept |
| 63 | { | 63 | { |
| 64 | return address; | 64 | return address; |
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | -const std::string& HueAPIResponseException::GetDescription() const noexcept | 67 | +const std::string& hueplusplus::HueAPIResponseException::GetDescription() const noexcept |
| 68 | { | 68 | { |
| 69 | return description; | 69 | return description; |
| 70 | } | 70 | } |
| 71 | 71 | ||
| 72 | -HueAPIResponseException HueAPIResponseException::Create(FileInfo fileInfo, const nlohmann::json& response) | 72 | +hueplusplus::HueAPIResponseException hueplusplus::HueAPIResponseException::Create(FileInfo fileInfo, const nlohmann::json& response) |
| 73 | { | 73 | { |
| 74 | const nlohmann::json error = response.at("error"); | 74 | const nlohmann::json error = response.at("error"); |
| 75 | int errorCode = error.value("type", -1); | 75 | int errorCode = error.value("type", -1); |
| @@ -78,7 +78,7 @@ HueAPIResponseException HueAPIResponseException::Create(FileInfo fileInfo, const | @@ -78,7 +78,7 @@ HueAPIResponseException HueAPIResponseException::Create(FileInfo fileInfo, const | ||
| 78 | return HueAPIResponseException(std::move(fileInfo), errorCode, std::move(address), std::move(description)); | 78 | return HueAPIResponseException(std::move(fileInfo), errorCode, std::move(address), std::move(description)); |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | -std::string HueAPIResponseException::GetMessage(int error, const std::string& addr, const std::string& description) | 81 | +std::string hueplusplus::HueAPIResponseException::GetMessage(int error, const std::string& addr, const std::string& description) |
| 82 | { | 82 | { |
| 83 | std::string result = std::to_string(error); | 83 | std::string result = std::to_string(error); |
| 84 | result.append(" "); | 84 | result.append(" "); |
| @@ -88,7 +88,7 @@ std::string HueAPIResponseException::GetMessage(int error, const std::string& ad | @@ -88,7 +88,7 @@ std::string HueAPIResponseException::GetMessage(int error, const std::string& ad | ||
| 88 | return result; | 88 | return result; |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | -std::string FileInfo::ToString() const | 91 | +std::string hueplusplus::FileInfo::ToString() const |
| 92 | { | 92 | { |
| 93 | if (filename.empty() || line < 0) | 93 | if (filename.empty() || line < 0) |
| 94 | { | 94 | { |
src/HueLight.cpp
| @@ -30,56 +30,56 @@ | @@ -30,56 +30,56 @@ | ||
| 30 | #include "hueplusplus/Utils.h" | 30 | #include "hueplusplus/Utils.h" |
| 31 | #include "json/json.hpp" | 31 | #include "json/json.hpp" |
| 32 | 32 | ||
| 33 | -bool HueLight::On(uint8_t transition) | 33 | +bool hueplusplus::HueLight::On(uint8_t transition) |
| 34 | { | 34 | { |
| 35 | refreshState(); | 35 | refreshState(); |
| 36 | return OnNoRefresh(transition); | 36 | return OnNoRefresh(transition); |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | -bool HueLight::Off(uint8_t transition) | 39 | +bool hueplusplus::HueLight::Off(uint8_t transition) |
| 40 | { | 40 | { |
| 41 | refreshState(); | 41 | refreshState(); |
| 42 | return OffNoRefresh(transition); | 42 | return OffNoRefresh(transition); |
| 43 | } | 43 | } |
| 44 | 44 | ||
| 45 | -bool HueLight::isOn() | 45 | +bool hueplusplus::HueLight::isOn() |
| 46 | { | 46 | { |
| 47 | refreshState(); | 47 | refreshState(); |
| 48 | return state["state"]["on"].get<bool>(); | 48 | return state["state"]["on"].get<bool>(); |
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | -bool HueLight::isOn() const | 51 | +bool hueplusplus::HueLight::isOn() const |
| 52 | { | 52 | { |
| 53 | return state["state"]["on"].get<bool>(); | 53 | return state["state"]["on"].get<bool>(); |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | -int HueLight::getId() const | 56 | +int hueplusplus::HueLight::getId() const |
| 57 | { | 57 | { |
| 58 | return id; | 58 | return id; |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | -std::string HueLight::getType() const | 61 | +std::string hueplusplus::HueLight::getType() const |
| 62 | { | 62 | { |
| 63 | return state["type"].get<std::string>(); | 63 | return state["type"].get<std::string>(); |
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | -std::string HueLight::getName() | 66 | +std::string hueplusplus::HueLight::getName() |
| 67 | { | 67 | { |
| 68 | refreshState(); | 68 | refreshState(); |
| 69 | return state["name"].get<std::string>(); | 69 | return state["name"].get<std::string>(); |
| 70 | } | 70 | } |
| 71 | 71 | ||
| 72 | -std::string HueLight::getName() const | 72 | +std::string hueplusplus::HueLight::getName() const |
| 73 | { | 73 | { |
| 74 | return state["name"].get<std::string>(); | 74 | return state["name"].get<std::string>(); |
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | -std::string HueLight::getModelId() const | 77 | +std::string hueplusplus::HueLight::getModelId() const |
| 78 | { | 78 | { |
| 79 | return state["modelid"].get<std::string>(); | 79 | return state["modelid"].get<std::string>(); |
| 80 | } | 80 | } |
| 81 | 81 | ||
| 82 | -std::string HueLight::getUId() const | 82 | +std::string hueplusplus::HueLight::getUId() const |
| 83 | { | 83 | { |
| 84 | if (state.count("uniqueid")) | 84 | if (state.count("uniqueid")) |
| 85 | { | 85 | { |
| @@ -88,7 +88,7 @@ std::string HueLight::getUId() const | @@ -88,7 +88,7 @@ std::string HueLight::getUId() const | ||
| 88 | return std::string(); | 88 | return std::string(); |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | -std::string HueLight::getManufacturername() const | 91 | +std::string hueplusplus::HueLight::getManufacturername() const |
| 92 | { | 92 | { |
| 93 | if (state.count("manufacturername")) | 93 | if (state.count("manufacturername")) |
| 94 | { | 94 | { |
| @@ -97,7 +97,7 @@ std::string HueLight::getManufacturername() const | @@ -97,7 +97,7 @@ std::string HueLight::getManufacturername() const | ||
| 97 | return std::string(); | 97 | return std::string(); |
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | -std::string HueLight::getProductname() const | 100 | +std::string hueplusplus::HueLight::getProductname() const |
| 101 | { | 101 | { |
| 102 | if (state.count("productname")) | 102 | if (state.count("productname")) |
| 103 | { | 103 | { |
| @@ -106,7 +106,7 @@ std::string HueLight::getProductname() const | @@ -106,7 +106,7 @@ std::string HueLight::getProductname() const | ||
| 106 | return std::string(); | 106 | return std::string(); |
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | -std::string HueLight::getLuminaireUId() const | 109 | +std::string hueplusplus::HueLight::getLuminaireUId() const |
| 110 | { | 110 | { |
| 111 | if (state.count("luminaireuniqueid")) | 111 | if (state.count("luminaireuniqueid")) |
| 112 | { | 112 | { |
| @@ -115,18 +115,18 @@ std::string HueLight::getLuminaireUId() const | @@ -115,18 +115,18 @@ std::string HueLight::getLuminaireUId() const | ||
| 115 | return std::string(); | 115 | return std::string(); |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | -std::string HueLight::getSwVersion() | 118 | +std::string hueplusplus::HueLight::getSwVersion() |
| 119 | { | 119 | { |
| 120 | refreshState(); | 120 | refreshState(); |
| 121 | return state["swversion"].get<std::string>(); | 121 | return state["swversion"].get<std::string>(); |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | -std::string HueLight::getSwVersion() const | 124 | +std::string hueplusplus::HueLight::getSwVersion() const |
| 125 | { | 125 | { |
| 126 | return state["swversion"].get<std::string>(); | 126 | return state["swversion"].get<std::string>(); |
| 127 | } | 127 | } |
| 128 | 128 | ||
| 129 | -bool HueLight::setName(const std::string& name) | 129 | +bool hueplusplus::HueLight::setName(const std::string& name) |
| 130 | { | 130 | { |
| 131 | nlohmann::json request = nlohmann::json::object(); | 131 | nlohmann::json request = nlohmann::json::object(); |
| 132 | request["name"] = name; | 132 | request["name"] = name; |
| @@ -136,22 +136,22 @@ bool HueLight::setName(const std::string& name) | @@ -136,22 +136,22 @@ bool HueLight::setName(const std::string& name) | ||
| 136 | return utils::safeGetMember(reply, 0, "success", "/lights/" + std::to_string(id) + "/name") == name; | 136 | return utils::safeGetMember(reply, 0, "success", "/lights/" + std::to_string(id) + "/name") == name; |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | -ColorType HueLight::getColorType() const | 139 | +hueplusplus::ColorType hueplusplus::HueLight::getColorType() const |
| 140 | { | 140 | { |
| 141 | return colorType; | 141 | return colorType; |
| 142 | } | 142 | } |
| 143 | 143 | ||
| 144 | -unsigned int HueLight::KelvinToMired(unsigned int kelvin) const | 144 | +unsigned int hueplusplus::HueLight::KelvinToMired(unsigned int kelvin) const |
| 145 | { | 145 | { |
| 146 | return int(0.5f + (1000000 / kelvin)); | 146 | return int(0.5f + (1000000 / kelvin)); |
| 147 | } | 147 | } |
| 148 | 148 | ||
| 149 | -unsigned int HueLight::MiredToKelvin(unsigned int mired) const | 149 | +unsigned int hueplusplus::HueLight::MiredToKelvin(unsigned int mired) const |
| 150 | { | 150 | { |
| 151 | return int(0.5f + (1000000 / mired)); | 151 | return int(0.5f + (1000000 / mired)); |
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | -bool HueLight::alert() | 154 | +bool hueplusplus::HueLight::alert() |
| 155 | { | 155 | { |
| 156 | nlohmann::json request; | 156 | nlohmann::json request; |
| 157 | request["alert"] = "select"; | 157 | request["alert"] = "select"; |
| @@ -161,9 +161,9 @@ bool HueLight::alert() | @@ -161,9 +161,9 @@ bool HueLight::alert() | ||
| 161 | return utils::validateReplyForLight(request, reply, id); | 161 | return utils::validateReplyForLight(request, reply, id); |
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | -HueLight::HueLight(int id, const HueCommandAPI& commands) : HueLight(id, commands, nullptr, nullptr, nullptr) {} | 164 | +hueplusplus::HueLight::HueLight(int id, const HueCommandAPI& commands) : HueLight(id, commands, nullptr, nullptr, nullptr) {} |
| 165 | 165 | ||
| 166 | -HueLight::HueLight(int id, const HueCommandAPI& commands, std::shared_ptr<const BrightnessStrategy> brightnessStrategy, | 166 | +hueplusplus::HueLight::HueLight(int id, const HueCommandAPI& commands, std::shared_ptr<const BrightnessStrategy> brightnessStrategy, |
| 167 | std::shared_ptr<const ColorTemperatureStrategy> colorTempStrategy, | 167 | std::shared_ptr<const ColorTemperatureStrategy> colorTempStrategy, |
| 168 | std::shared_ptr<const ColorHueStrategy> colorHueStrategy) | 168 | std::shared_ptr<const ColorHueStrategy> colorHueStrategy) |
| 169 | : id(id), | 169 | : id(id), |
| @@ -176,7 +176,7 @@ HueLight::HueLight(int id, const HueCommandAPI& commands, std::shared_ptr<const | @@ -176,7 +176,7 @@ HueLight::HueLight(int id, const HueCommandAPI& commands, std::shared_ptr<const | ||
| 176 | refreshState(); | 176 | refreshState(); |
| 177 | } | 177 | } |
| 178 | 178 | ||
| 179 | -bool HueLight::OnNoRefresh(uint8_t transition) | 179 | +bool hueplusplus::HueLight::OnNoRefresh(uint8_t transition) |
| 180 | { | 180 | { |
| 181 | nlohmann::json request = nlohmann::json::object(); | 181 | nlohmann::json request = nlohmann::json::object(); |
| 182 | if (transition != 4) | 182 | if (transition != 4) |
| @@ -200,7 +200,7 @@ bool HueLight::OnNoRefresh(uint8_t transition) | @@ -200,7 +200,7 @@ bool HueLight::OnNoRefresh(uint8_t transition) | ||
| 200 | return utils::validateReplyForLight(request, reply, id); | 200 | return utils::validateReplyForLight(request, reply, id); |
| 201 | } | 201 | } |
| 202 | 202 | ||
| 203 | -bool HueLight::OffNoRefresh(uint8_t transition) | 203 | +bool hueplusplus::HueLight::OffNoRefresh(uint8_t transition) |
| 204 | { | 204 | { |
| 205 | nlohmann::json request = nlohmann::json::object(); | 205 | nlohmann::json request = nlohmann::json::object(); |
| 206 | if (transition != 4) | 206 | if (transition != 4) |
| @@ -224,12 +224,12 @@ bool HueLight::OffNoRefresh(uint8_t transition) | @@ -224,12 +224,12 @@ bool HueLight::OffNoRefresh(uint8_t transition) | ||
| 224 | return utils::validateReplyForLight(request, reply, id); | 224 | return utils::validateReplyForLight(request, reply, id); |
| 225 | } | 225 | } |
| 226 | 226 | ||
| 227 | -nlohmann::json HueLight::SendPutRequest(const nlohmann::json& request, const std::string& subPath, FileInfo fileInfo) | 227 | +nlohmann::json hueplusplus::HueLight::SendPutRequest(const nlohmann::json& request, const std::string& subPath, FileInfo fileInfo) |
| 228 | { | 228 | { |
| 229 | return commands.PUTRequest("/lights/" + std::to_string(id) + subPath, request, std::move(fileInfo)); | 229 | return commands.PUTRequest("/lights/" + std::to_string(id) + subPath, request, std::move(fileInfo)); |
| 230 | } | 230 | } |
| 231 | 231 | ||
| 232 | -void HueLight::refreshState() | 232 | +void hueplusplus::HueLight::refreshState() |
| 233 | { | 233 | { |
| 234 | // std::chrono::steady_clock::time_point start = | 234 | // std::chrono::steady_clock::time_point start = |
| 235 | // std::chrono::steady_clock::now(); std::cout << "\tRefreshing lampstate of | 235 | // std::chrono::steady_clock::now(); std::cout << "\tRefreshing lampstate of |
src/LinHttpHandler.cpp
| @@ -48,7 +48,7 @@ private: | @@ -48,7 +48,7 @@ private: | ||
| 48 | int s; | 48 | int s; |
| 49 | }; | 49 | }; |
| 50 | 50 | ||
| 51 | -std::string LinHttpHandler::send(const std::string& msg, const std::string& adr, int port) const | 51 | +std::string hueplusplus::LinHttpHandler::send(const std::string& msg, const std::string& adr, int port) const |
| 52 | { | 52 | { |
| 53 | // create socket | 53 | // create socket |
| 54 | int socketFD = socket(AF_INET, SOCK_STREAM, 0); | 54 | int socketFD = socket(AF_INET, SOCK_STREAM, 0); |
| @@ -136,7 +136,7 @@ std::string LinHttpHandler::send(const std::string& msg, const std::string& adr, | @@ -136,7 +136,7 @@ std::string LinHttpHandler::send(const std::string& msg, const std::string& adr, | ||
| 136 | return response; | 136 | return response; |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | -std::vector<std::string> LinHttpHandler::sendMulticast( | 139 | +std::vector<std::string> hueplusplus::LinHttpHandler::sendMulticast( |
| 140 | const std::string& msg, const std::string& adr, int port, int timeout) const | 140 | const std::string& msg, const std::string& adr, int port, int timeout) const |
| 141 | { | 141 | { |
| 142 | hostent* server; // host information | 142 | hostent* server; // host information |
src/SimpleBrightnessStrategy.cpp
| @@ -29,7 +29,7 @@ | @@ -29,7 +29,7 @@ | ||
| 29 | #include "hueplusplus/HueExceptionMacro.h" | 29 | #include "hueplusplus/HueExceptionMacro.h" |
| 30 | #include "hueplusplus/Utils.h" | 30 | #include "hueplusplus/Utils.h" |
| 31 | 31 | ||
| 32 | -bool SimpleBrightnessStrategy::setBrightness(unsigned int bri, uint8_t transition, HueLight& light) const | 32 | +bool hueplusplus::SimpleBrightnessStrategy::setBrightness(unsigned int bri, uint8_t transition, HueLight& light) const |
| 33 | { | 33 | { |
| 34 | light.refreshState(); | 34 | light.refreshState(); |
| 35 | if (bri == 0) | 35 | if (bri == 0) |
| @@ -76,13 +76,13 @@ bool SimpleBrightnessStrategy::setBrightness(unsigned int bri, uint8_t transitio | @@ -76,13 +76,13 @@ bool SimpleBrightnessStrategy::setBrightness(unsigned int bri, uint8_t transitio | ||
| 76 | } | 76 | } |
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | -unsigned int SimpleBrightnessStrategy::getBrightness(HueLight& light) const | 79 | +unsigned int hueplusplus::SimpleBrightnessStrategy::getBrightness(HueLight& light) const |
| 80 | { | 80 | { |
| 81 | light.refreshState(); | 81 | light.refreshState(); |
| 82 | return light.state["state"]["bri"].get<unsigned int>(); | 82 | return light.state["state"]["bri"].get<unsigned int>(); |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | -unsigned int SimpleBrightnessStrategy::getBrightness(const HueLight& light) const | 85 | +unsigned int hueplusplus::SimpleBrightnessStrategy::getBrightness(const HueLight& light) const |
| 86 | { | 86 | { |
| 87 | return light.state["state"]["bri"].get<unsigned int>(); | 87 | return light.state["state"]["bri"].get<unsigned int>(); |
| 88 | } | 88 | } |
src/SimpleColorHueStrategy.cpp
| @@ -30,7 +30,7 @@ | @@ -30,7 +30,7 @@ | ||
| 30 | #include "hueplusplus/HueExceptionMacro.h" | 30 | #include "hueplusplus/HueExceptionMacro.h" |
| 31 | #include "hueplusplus/Utils.h" | 31 | #include "hueplusplus/Utils.h" |
| 32 | 32 | ||
| 33 | -bool SimpleColorHueStrategy::setColorHue(uint16_t hue, uint8_t transition, HueLight& light) const | 33 | +bool hueplusplus::SimpleColorHueStrategy::setColorHue(uint16_t hue, uint8_t transition, HueLight& light) const |
| 34 | { | 34 | { |
| 35 | light.refreshState(); | 35 | light.refreshState(); |
| 36 | nlohmann::json request = nlohmann::json::object(); | 36 | nlohmann::json request = nlohmann::json::object(); |
| @@ -60,7 +60,7 @@ bool SimpleColorHueStrategy::setColorHue(uint16_t hue, uint8_t transition, HueLi | @@ -60,7 +60,7 @@ bool SimpleColorHueStrategy::setColorHue(uint16_t hue, uint8_t transition, HueLi | ||
| 60 | return utils::validateReplyForLight(request, reply, light.id); | 60 | return utils::validateReplyForLight(request, reply, light.id); |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | -bool SimpleColorHueStrategy::setColorSaturation(uint8_t sat, uint8_t transition, HueLight& light) const | 63 | +bool hueplusplus::SimpleColorHueStrategy::setColorSaturation(uint8_t sat, uint8_t transition, HueLight& light) const |
| 64 | { | 64 | { |
| 65 | light.refreshState(); | 65 | light.refreshState(); |
| 66 | nlohmann::json request = nlohmann::json::object(); | 66 | nlohmann::json request = nlohmann::json::object(); |
| @@ -93,7 +93,7 @@ bool SimpleColorHueStrategy::setColorSaturation(uint8_t sat, uint8_t transition, | @@ -93,7 +93,7 @@ bool SimpleColorHueStrategy::setColorSaturation(uint8_t sat, uint8_t transition, | ||
| 93 | return utils::validateReplyForLight(request, reply, light.id); | 93 | return utils::validateReplyForLight(request, reply, light.id); |
| 94 | } | 94 | } |
| 95 | 95 | ||
| 96 | -bool SimpleColorHueStrategy::setColorHueSaturation(uint16_t hue, uint8_t sat, uint8_t transition, HueLight& light) const | 96 | +bool hueplusplus::SimpleColorHueStrategy::setColorHueSaturation(uint16_t hue, uint8_t sat, uint8_t transition, HueLight& light) const |
| 97 | { | 97 | { |
| 98 | light.refreshState(); | 98 | light.refreshState(); |
| 99 | nlohmann::json request = nlohmann::json::object(); | 99 | nlohmann::json request = nlohmann::json::object(); |
| @@ -132,7 +132,7 @@ bool SimpleColorHueStrategy::setColorHueSaturation(uint16_t hue, uint8_t sat, ui | @@ -132,7 +132,7 @@ bool SimpleColorHueStrategy::setColorHueSaturation(uint16_t hue, uint8_t sat, ui | ||
| 132 | return utils::validateReplyForLight(request, reply, light.id); | 132 | return utils::validateReplyForLight(request, reply, light.id); |
| 133 | } | 133 | } |
| 134 | 134 | ||
| 135 | -bool SimpleColorHueStrategy::setColorXY(float x, float y, uint8_t transition, HueLight& light) const | 135 | +bool hueplusplus::SimpleColorHueStrategy::setColorXY(float x, float y, uint8_t transition, HueLight& light) const |
| 136 | { | 136 | { |
| 137 | light.refreshState(); | 137 | light.refreshState(); |
| 138 | nlohmann::json request = nlohmann::json::object(); | 138 | nlohmann::json request = nlohmann::json::object(); |
| @@ -165,7 +165,7 @@ bool SimpleColorHueStrategy::setColorXY(float x, float y, uint8_t transition, Hu | @@ -165,7 +165,7 @@ bool SimpleColorHueStrategy::setColorXY(float x, float y, uint8_t transition, Hu | ||
| 165 | return utils::validateReplyForLight(request, reply, light.id); | 165 | return utils::validateReplyForLight(request, reply, light.id); |
| 166 | } | 166 | } |
| 167 | 167 | ||
| 168 | -bool SimpleColorHueStrategy::setColorRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t transition, HueLight& light) const | 168 | +bool hueplusplus::SimpleColorHueStrategy::setColorRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t transition, HueLight& light) const |
| 169 | { | 169 | { |
| 170 | if ((r == 0) && (g == 0) && (b == 0)) | 170 | if ((r == 0) && (g == 0) && (b == 0)) |
| 171 | { | 171 | { |
| @@ -191,7 +191,7 @@ bool SimpleColorHueStrategy::setColorRGB(uint8_t r, uint8_t g, uint8_t b, uint8_ | @@ -191,7 +191,7 @@ bool SimpleColorHueStrategy::setColorRGB(uint8_t r, uint8_t g, uint8_t b, uint8_ | ||
| 191 | return light.setColorXY(x, y, transition); | 191 | return light.setColorXY(x, y, transition); |
| 192 | } | 192 | } |
| 193 | 193 | ||
| 194 | -bool SimpleColorHueStrategy::setColorLoop(bool on, HueLight& light) const | 194 | +bool hueplusplus::SimpleColorHueStrategy::setColorLoop(bool on, HueLight& light) const |
| 195 | { | 195 | { |
| 196 | // colorloop | 196 | // colorloop |
| 197 | light.refreshState(); | 197 | light.refreshState(); |
| @@ -218,7 +218,7 @@ bool SimpleColorHueStrategy::setColorLoop(bool on, HueLight& light) const | @@ -218,7 +218,7 @@ bool SimpleColorHueStrategy::setColorLoop(bool on, HueLight& light) const | ||
| 218 | return utils::validateReplyForLight(request, reply, light.id); | 218 | return utils::validateReplyForLight(request, reply, light.id); |
| 219 | } | 219 | } |
| 220 | 220 | ||
| 221 | -bool SimpleColorHueStrategy::alertHueSaturation(uint16_t hue, uint8_t sat, HueLight& light) const | 221 | +bool hueplusplus::SimpleColorHueStrategy::alertHueSaturation(uint16_t hue, uint8_t sat, HueLight& light) const |
| 222 | { | 222 | { |
| 223 | light.refreshState(); | 223 | light.refreshState(); |
| 224 | std::string cType = light.state["state"]["colormode"].get<std::string>(); | 224 | std::string cType = light.state["state"]["colormode"].get<std::string>(); |
| @@ -277,7 +277,7 @@ bool SimpleColorHueStrategy::alertHueSaturation(uint16_t hue, uint8_t sat, HueLi | @@ -277,7 +277,7 @@ bool SimpleColorHueStrategy::alertHueSaturation(uint16_t hue, uint8_t sat, HueLi | ||
| 277 | } | 277 | } |
| 278 | } | 278 | } |
| 279 | 279 | ||
| 280 | -bool SimpleColorHueStrategy::alertXY(float x, float y, HueLight& light) const | 280 | +bool hueplusplus::SimpleColorHueStrategy::alertXY(float x, float y, HueLight& light) const |
| 281 | { | 281 | { |
| 282 | light.refreshState(); | 282 | light.refreshState(); |
| 283 | std::string cType = light.state["state"]["colormode"].get<std::string>(); | 283 | std::string cType = light.state["state"]["colormode"].get<std::string>(); |
| @@ -336,7 +336,7 @@ bool SimpleColorHueStrategy::alertXY(float x, float y, HueLight& light) const | @@ -336,7 +336,7 @@ bool SimpleColorHueStrategy::alertXY(float x, float y, HueLight& light) const | ||
| 336 | } | 336 | } |
| 337 | } | 337 | } |
| 338 | 338 | ||
| 339 | -bool SimpleColorHueStrategy::alertRGB(uint8_t r, uint8_t g, uint8_t b, HueLight& light) const | 339 | +bool hueplusplus::SimpleColorHueStrategy::alertRGB(uint8_t r, uint8_t g, uint8_t b, HueLight& light) const |
| 340 | { | 340 | { |
| 341 | light.refreshState(); | 341 | light.refreshState(); |
| 342 | std::string cType = light.state["state"]["colormode"].get<std::string>(); | 342 | std::string cType = light.state["state"]["colormode"].get<std::string>(); |
| @@ -395,24 +395,24 @@ bool SimpleColorHueStrategy::alertRGB(uint8_t r, uint8_t g, uint8_t b, HueLight& | @@ -395,24 +395,24 @@ bool SimpleColorHueStrategy::alertRGB(uint8_t r, uint8_t g, uint8_t b, HueLight& | ||
| 395 | } | 395 | } |
| 396 | } | 396 | } |
| 397 | 397 | ||
| 398 | -std::pair<uint16_t, uint8_t> SimpleColorHueStrategy::getColorHueSaturation(HueLight& light) const | 398 | +std::pair<uint16_t, uint8_t> hueplusplus::SimpleColorHueStrategy::getColorHueSaturation(HueLight& light) const |
| 399 | { | 399 | { |
| 400 | light.refreshState(); | 400 | light.refreshState(); |
| 401 | return std::make_pair(light.state["state"]["hue"].get<uint16_t>(), light.state["state"]["sat"].get<uint8_t>()); | 401 | return std::make_pair(light.state["state"]["hue"].get<uint16_t>(), light.state["state"]["sat"].get<uint8_t>()); |
| 402 | } | 402 | } |
| 403 | 403 | ||
| 404 | -std::pair<uint16_t, uint8_t> SimpleColorHueStrategy::getColorHueSaturation(const HueLight& light) const | 404 | +std::pair<uint16_t, uint8_t> hueplusplus::SimpleColorHueStrategy::getColorHueSaturation(const HueLight& light) const |
| 405 | { | 405 | { |
| 406 | return std::make_pair(light.state["state"]["hue"].get<uint16_t>(), light.state["state"]["sat"].get<uint8_t>()); | 406 | return std::make_pair(light.state["state"]["hue"].get<uint16_t>(), light.state["state"]["sat"].get<uint8_t>()); |
| 407 | } | 407 | } |
| 408 | 408 | ||
| 409 | -std::pair<float, float> SimpleColorHueStrategy::getColorXY(HueLight& light) const | 409 | +std::pair<float, float> hueplusplus::SimpleColorHueStrategy::getColorXY(HueLight& light) const |
| 410 | { | 410 | { |
| 411 | light.refreshState(); | 411 | light.refreshState(); |
| 412 | return std::make_pair(light.state["state"]["xy"][0].get<float>(), light.state["state"]["xy"][1].get<float>()); | 412 | return std::make_pair(light.state["state"]["xy"][0].get<float>(), light.state["state"]["xy"][1].get<float>()); |
| 413 | } | 413 | } |
| 414 | 414 | ||
| 415 | -std::pair<float, float> SimpleColorHueStrategy::getColorXY(const HueLight& light) const | 415 | +std::pair<float, float> hueplusplus::SimpleColorHueStrategy::getColorXY(const HueLight& light) const |
| 416 | { | 416 | { |
| 417 | return std::make_pair(light.state["state"]["xy"][0].get<float>(), light.state["state"]["xy"][1].get<float>()); | 417 | return std::make_pair(light.state["state"]["xy"][0].get<float>(), light.state["state"]["xy"][1].get<float>()); |
| 418 | } | 418 | } |
src/SimpleColorTemperatureStrategy.cpp
| @@ -30,7 +30,7 @@ | @@ -30,7 +30,7 @@ | ||
| 30 | #include "hueplusplus/HueExceptionMacro.h" | 30 | #include "hueplusplus/HueExceptionMacro.h" |
| 31 | #include "hueplusplus/Utils.h" | 31 | #include "hueplusplus/Utils.h" |
| 32 | 32 | ||
| 33 | -bool SimpleColorTemperatureStrategy::setColorTemperature(unsigned int mired, uint8_t transition, HueLight& light) const | 33 | +bool hueplusplus::SimpleColorTemperatureStrategy::setColorTemperature(unsigned int mired, uint8_t transition, HueLight& light) const |
| 34 | { | 34 | { |
| 35 | light.refreshState(); | 35 | light.refreshState(); |
| 36 | nlohmann::json request = nlohmann::json::object(); | 36 | nlohmann::json request = nlohmann::json::object(); |
| @@ -67,7 +67,7 @@ bool SimpleColorTemperatureStrategy::setColorTemperature(unsigned int mired, uin | @@ -67,7 +67,7 @@ bool SimpleColorTemperatureStrategy::setColorTemperature(unsigned int mired, uin | ||
| 67 | return utils::validateReplyForLight(request, reply, light.id); | 67 | return utils::validateReplyForLight(request, reply, light.id); |
| 68 | } | 68 | } |
| 69 | 69 | ||
| 70 | -bool SimpleColorTemperatureStrategy::alertTemperature(unsigned int mired, HueLight& light) const | 70 | +bool hueplusplus::SimpleColorTemperatureStrategy::alertTemperature(unsigned int mired, HueLight& light) const |
| 71 | { | 71 | { |
| 72 | light.refreshState(); | 72 | light.refreshState(); |
| 73 | std::string cType = light.state["state"]["colormode"].get<std::string>(); | 73 | std::string cType = light.state["state"]["colormode"].get<std::string>(); |
| @@ -101,13 +101,13 @@ bool SimpleColorTemperatureStrategy::alertTemperature(unsigned int mired, HueLig | @@ -101,13 +101,13 @@ bool SimpleColorTemperatureStrategy::alertTemperature(unsigned int mired, HueLig | ||
| 101 | } | 101 | } |
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | -unsigned int SimpleColorTemperatureStrategy::getColorTemperature(HueLight& light) const | 104 | +unsigned int hueplusplus::SimpleColorTemperatureStrategy::getColorTemperature(HueLight& light) const |
| 105 | { | 105 | { |
| 106 | light.refreshState(); | 106 | light.refreshState(); |
| 107 | return light.state["state"]["ct"].get<unsigned int>(); | 107 | return light.state["state"]["ct"].get<unsigned int>(); |
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | -unsigned int SimpleColorTemperatureStrategy::getColorTemperature(const HueLight& light) const | 110 | +unsigned int hueplusplus::SimpleColorTemperatureStrategy::getColorTemperature(const HueLight& light) const |
| 111 | { | 111 | { |
| 112 | return light.state["state"]["ct"].get<unsigned int>(); | 112 | return light.state["state"]["ct"].get<unsigned int>(); |
| 113 | } | 113 | } |
src/UPnP.cpp
| @@ -25,7 +25,7 @@ | @@ -25,7 +25,7 @@ | ||
| 25 | #include <algorithm> | 25 | #include <algorithm> |
| 26 | #include <iostream> | 26 | #include <iostream> |
| 27 | 27 | ||
| 28 | -std::vector<std::pair<std::string, std::string>> UPnP::getDevices(std::shared_ptr<const IHttpHandler> handler) | 28 | +std::vector<std::pair<std::string, std::string>> hueplusplus::UPnP::getDevices(std::shared_ptr<const IHttpHandler> handler) |
| 29 | { | 29 | { |
| 30 | // send UPnP M-Search request | 30 | // send UPnP M-Search request |
| 31 | std::vector<std::string> foundDevices | 31 | std::vector<std::string> foundDevices |
src/Utils.cpp
| @@ -24,59 +24,55 @@ | @@ -24,59 +24,55 @@ | ||
| 24 | 24 | ||
| 25 | #include <iostream> | 25 | #include <iostream> |
| 26 | 26 | ||
| 27 | -namespace utils | 27 | +bool hueplusplus::utils::validateReplyForLight(const nlohmann::json& request, const nlohmann::json& reply, int lightId) |
| 28 | { | 28 | { |
| 29 | - bool validateReplyForLight(const nlohmann::json& request, const nlohmann::json& reply, int lightId) | 29 | + bool success = false; |
| 30 | + std::string path = "/lights/" + std::to_string(lightId) + "/state/"; | ||
| 31 | + for (auto it = reply.begin(); it != reply.end(); ++it) | ||
| 30 | { | 32 | { |
| 31 | - bool success = false; | ||
| 32 | - std::string path = "/lights/" + std::to_string(lightId) + "/state/"; | ||
| 33 | - for (auto it = reply.begin(); it != reply.end(); ++it) | 33 | + success = it.value().count("success"); |
| 34 | + if (success) | ||
| 34 | { | 35 | { |
| 35 | - success = it.value().count("success"); | ||
| 36 | - if (success) | 36 | + // Traverse through first object |
| 37 | + nlohmann::json successObject = it.value()["success"]; | ||
| 38 | + for (auto successIt = successObject.begin(); successIt != successObject.end(); ++successIt) | ||
| 37 | { | 39 | { |
| 38 | - // Traverse through first object | ||
| 39 | - nlohmann::json successObject = it.value()["success"]; | ||
| 40 | - for (auto successIt = successObject.begin(); successIt != successObject.end(); ++successIt) | 40 | + const std::string successPath = successIt.key(); |
| 41 | + if (successPath.find(path) == 0) | ||
| 41 | { | 42 | { |
| 42 | - const std::string successPath = successIt.key(); | ||
| 43 | - if (successPath.find(path) == 0) | 43 | + const std::string valueKey = successPath.substr(path.size()); |
| 44 | + auto requestIt = request.find(valueKey); | ||
| 45 | + success = requestIt != request.end(); | ||
| 46 | + if (success) | ||
| 44 | { | 47 | { |
| 45 | - const std::string valueKey = successPath.substr(path.size()); | ||
| 46 | - auto requestIt = request.find(valueKey); | ||
| 47 | - success = requestIt != request.end(); | ||
| 48 | - if (success) | 48 | + if (valueKey == "xy") |
| 49 | { | 49 | { |
| 50 | - if (valueKey == "xy") | ||
| 51 | - { | ||
| 52 | - success | ||
| 53 | - = std::abs(requestIt.value()[0].get<float>() - successIt.value()[0].get<float>()) | ||
| 54 | - <= 1E-4f | ||
| 55 | - && std::abs(requestIt.value()[1].get<float>() - successIt.value()[1].get<float>()) | ||
| 56 | - <= 1E-4f; | ||
| 57 | - } | ||
| 58 | - else | ||
| 59 | - { | ||
| 60 | - success = requestIt.value() == successIt.value(); | ||
| 61 | - } | ||
| 62 | - if (!success) | ||
| 63 | - { | ||
| 64 | - std::cout << "Value " << requestIt.value() << " does not match reply " | ||
| 65 | - << successIt.value() << std::endl; | ||
| 66 | - } | 50 | + success = std::abs(requestIt.value()[0].get<float>() - successIt.value()[0].get<float>()) |
| 51 | + <= 1E-4f | ||
| 52 | + && std::abs(requestIt.value()[1].get<float>() - successIt.value()[1].get<float>()) | ||
| 53 | + <= 1E-4f; | ||
| 54 | + } | ||
| 55 | + else | ||
| 56 | + { | ||
| 57 | + success = requestIt.value() == successIt.value(); | ||
| 58 | + } | ||
| 59 | + if (!success) | ||
| 60 | + { | ||
| 61 | + std::cout << "Value " << requestIt.value() << " does not match reply " << successIt.value() | ||
| 62 | + << std::endl; | ||
| 67 | } | 63 | } |
| 68 | - } | ||
| 69 | - else | ||
| 70 | - { | ||
| 71 | - success = false; | ||
| 72 | } | 64 | } |
| 73 | } | 65 | } |
| 66 | + else | ||
| 67 | + { | ||
| 68 | + success = false; | ||
| 69 | + } | ||
| 74 | } | 70 | } |
| 75 | - if (!success) // Fail fast | ||
| 76 | - { | ||
| 77 | - break; | ||
| 78 | - } | ||
| 79 | } | 71 | } |
| 80 | - return success; | 72 | + if (!success) // Fail fast |
| 73 | + { | ||
| 74 | + break; | ||
| 75 | + } | ||
| 81 | } | 76 | } |
| 82 | -} // namespace utils | ||
| 83 | \ No newline at end of file | 77 | \ No newline at end of file |
| 78 | + return success; | ||
| 79 | +} | ||
| 84 | \ No newline at end of file | 80 | \ No newline at end of file |
src/WinHttpHandler.cpp
| @@ -54,7 +54,7 @@ namespace | @@ -54,7 +54,7 @@ namespace | ||
| 54 | }; | 54 | }; |
| 55 | } // namespace | 55 | } // namespace |
| 56 | 56 | ||
| 57 | -WinHttpHandler::WinHttpHandler() | 57 | +hueplusplus::WinHttpHandler::WinHttpHandler() |
| 58 | { | 58 | { |
| 59 | // Initialize Winsock | 59 | // Initialize Winsock |
| 60 | int return_code = WSAStartup(MAKEWORD(2, 2), &wsaData); | 60 | int return_code = WSAStartup(MAKEWORD(2, 2), &wsaData); |
| @@ -65,12 +65,12 @@ WinHttpHandler::WinHttpHandler() | @@ -65,12 +65,12 @@ WinHttpHandler::WinHttpHandler() | ||
| 65 | } | 65 | } |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | -WinHttpHandler::~WinHttpHandler() | 68 | +hueplusplus::WinHttpHandler::~WinHttpHandler() |
| 69 | { | 69 | { |
| 70 | WSACleanup(); | 70 | WSACleanup(); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | -std::string WinHttpHandler::send(const std::string& msg, const std::string& adr, int port) const | 73 | +std::string hueplusplus::WinHttpHandler::send(const std::string& msg, const std::string& adr, int port) const |
| 74 | { | 74 | { |
| 75 | struct addrinfo hints = {}; | 75 | struct addrinfo hints = {}; |
| 76 | hints.ai_family = AF_INET; | 76 | hints.ai_family = AF_INET; |
| @@ -171,7 +171,7 @@ std::string WinHttpHandler::send(const std::string& msg, const std::string& adr, | @@ -171,7 +171,7 @@ std::string WinHttpHandler::send(const std::string& msg, const std::string& adr, | ||
| 171 | return response; | 171 | return response; |
| 172 | } | 172 | } |
| 173 | 173 | ||
| 174 | -std::vector<std::string> WinHttpHandler::sendMulticast( | 174 | +std::vector<std::string> hueplusplus::WinHttpHandler::sendMulticast( |
| 175 | const std::string& msg, const std::string& adr, int port, int timeout) const | 175 | const std::string& msg, const std::string& adr, int port, int timeout) const |
| 176 | { | 176 | { |
| 177 | struct addrinfo hints = {}; | 177 | struct addrinfo hints = {}; |
test/mocks/mock_BaseHttpHandler.h
| @@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
| 32 | #include "json/json.hpp" | 32 | #include "json/json.hpp" |
| 33 | 33 | ||
| 34 | //! Mock Class | 34 | //! Mock Class |
| 35 | -class MockBaseHttpHandler : public BaseHttpHandler | 35 | +class MockBaseHttpHandler : public hueplusplus::BaseHttpHandler |
| 36 | { | 36 | { |
| 37 | public: | 37 | public: |
| 38 | MOCK_CONST_METHOD3(send, std::string(const std::string& msg, const std::string& adr, int port)); | 38 | MOCK_CONST_METHOD3(send, std::string(const std::string& msg, const std::string& adr, int port)); |
test/mocks/mock_HttpHandler.h
| @@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
| 32 | #include "json/json.hpp" | 32 | #include "json/json.hpp" |
| 33 | 33 | ||
| 34 | //! Mock Class | 34 | //! Mock Class |
| 35 | -class MockHttpHandler : public IHttpHandler | 35 | +class MockHttpHandler : public hueplusplus::IHttpHandler |
| 36 | { | 36 | { |
| 37 | public: | 37 | public: |
| 38 | MOCK_CONST_METHOD3(send, std::string(const std::string& msg, const std::string& adr, int port)); | 38 | MOCK_CONST_METHOD3(send, std::string(const std::string& msg, const std::string& adr, int port)); |
test/mocks/mock_HueLight.h
| @@ -33,11 +33,11 @@ | @@ -33,11 +33,11 @@ | ||
| 33 | #include "../testhelper.h" | 33 | #include "../testhelper.h" |
| 34 | 34 | ||
| 35 | //! Mock Class | 35 | //! Mock Class |
| 36 | -class MockHueLight : public HueLight | 36 | +class MockHueLight : public hueplusplus::HueLight |
| 37 | { | 37 | { |
| 38 | public: | 38 | public: |
| 39 | - MockHueLight(std::shared_ptr<const IHttpHandler> handler) | ||
| 40 | - : HueLight(1, HueCommandAPI(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler)) {}; | 39 | + MockHueLight(std::shared_ptr<const hueplusplus::IHttpHandler> handler) |
| 40 | + : HueLight(1, hueplusplus::HueCommandAPI(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler)) {}; | ||
| 41 | 41 | ||
| 42 | nlohmann::json& getState() { return state; }; | 42 | nlohmann::json& getState() { return state; }; |
| 43 | 43 | ||
| @@ -71,7 +71,7 @@ public: | @@ -71,7 +71,7 @@ public: | ||
| 71 | 71 | ||
| 72 | MOCK_METHOD1(setName, bool(std::string& name)); | 72 | MOCK_METHOD1(setName, bool(std::string& name)); |
| 73 | 73 | ||
| 74 | - MOCK_CONST_METHOD0(getColorType, ColorType()); | 74 | + MOCK_CONST_METHOD0(getColorType, hueplusplus::ColorType()); |
| 75 | 75 | ||
| 76 | MOCK_CONST_METHOD0(hasBrightnessControl, bool()); | 76 | MOCK_CONST_METHOD0(hasBrightnessControl, bool()); |
| 77 | 77 | ||
| @@ -126,7 +126,7 @@ public: | @@ -126,7 +126,7 @@ public: | ||
| 126 | MOCK_METHOD1(OffNoRefresh, bool(uint8_t transition)); | 126 | MOCK_METHOD1(OffNoRefresh, bool(uint8_t transition)); |
| 127 | 127 | ||
| 128 | MOCK_METHOD3( | 128 | MOCK_METHOD3( |
| 129 | - SendPutRequest, nlohmann::json(const nlohmann::json& request, const std::string& subPath, FileInfo fileInfo)); | 129 | + SendPutRequest, nlohmann::json(const nlohmann::json& request, const std::string& subPath, hueplusplus::FileInfo fileInfo)); |
| 130 | 130 | ||
| 131 | MOCK_METHOD0(refreshState, void()); | 131 | MOCK_METHOD0(refreshState, void()); |
| 132 | }; | 132 | }; |
test/test_BaseHttpHandler.cpp
| @@ -32,6 +32,8 @@ | @@ -32,6 +32,8 @@ | ||
| 32 | #include "mocks/mock_BaseHttpHandler.h" | 32 | #include "mocks/mock_BaseHttpHandler.h" |
| 33 | #include "hueplusplus/HueException.h" | 33 | #include "hueplusplus/HueException.h" |
| 34 | 34 | ||
| 35 | +using namespace hueplusplus; | ||
| 36 | + | ||
| 35 | TEST(BaseHttpHandler, sendGetHTTPBody) | 37 | TEST(BaseHttpHandler, sendGetHTTPBody) |
| 36 | { | 38 | { |
| 37 | using namespace ::testing; | 39 | using namespace ::testing; |
test/test_ExtendedColorHueStrategy.cpp
| @@ -33,6 +33,8 @@ | @@ -33,6 +33,8 @@ | ||
| 33 | #include "mocks/mock_HttpHandler.h" | 33 | #include "mocks/mock_HttpHandler.h" |
| 34 | #include "mocks/mock_HueLight.h" | 34 | #include "mocks/mock_HueLight.h" |
| 35 | 35 | ||
| 36 | +using namespace hueplusplus; | ||
| 37 | + | ||
| 36 | TEST(ExtendedColorHueStrategy, alertHueSaturation) | 38 | TEST(ExtendedColorHueStrategy, alertHueSaturation) |
| 37 | { | 39 | { |
| 38 | using namespace ::testing; | 40 | using namespace ::testing; |
test/test_ExtendedColorTemperatureStrategy.cpp
| @@ -33,6 +33,8 @@ | @@ -33,6 +33,8 @@ | ||
| 33 | #include "mocks/mock_HttpHandler.h" | 33 | #include "mocks/mock_HttpHandler.h" |
| 34 | #include "mocks/mock_HueLight.h" | 34 | #include "mocks/mock_HueLight.h" |
| 35 | 35 | ||
| 36 | +using namespace hueplusplus; | ||
| 37 | + | ||
| 36 | TEST(ExtendedColorTemperatureStrategy, setColorTemperature) | 38 | TEST(ExtendedColorTemperatureStrategy, setColorTemperature) |
| 37 | { | 39 | { |
| 38 | using namespace ::testing; | 40 | using namespace ::testing; |
test/test_Hue.cpp
| @@ -34,6 +34,8 @@ | @@ -34,6 +34,8 @@ | ||
| 34 | #include "json/json.hpp" | 34 | #include "json/json.hpp" |
| 35 | #include "mocks/mock_HttpHandler.h" | 35 | #include "mocks/mock_HttpHandler.h" |
| 36 | 36 | ||
| 37 | +using namespace hueplusplus; | ||
| 38 | + | ||
| 37 | class HueFinderTest : public ::testing::Test | 39 | class HueFinderTest : public ::testing::Test |
| 38 | { | 40 | { |
| 39 | protected: | 41 | protected: |
test/test_HueCommandAPI.cpp
| @@ -29,6 +29,8 @@ | @@ -29,6 +29,8 @@ | ||
| 29 | #include "json/json.hpp" | 29 | #include "json/json.hpp" |
| 30 | #include "mocks/mock_HttpHandler.h" | 30 | #include "mocks/mock_HttpHandler.h" |
| 31 | 31 | ||
| 32 | +using namespace hueplusplus; | ||
| 33 | + | ||
| 32 | TEST(HueCommandAPI, PUTRequest) | 34 | TEST(HueCommandAPI, PUTRequest) |
| 33 | { | 35 | { |
| 34 | using namespace ::testing; | 36 | using namespace ::testing; |
test/test_HueLight.cpp
| @@ -30,6 +30,8 @@ | @@ -30,6 +30,8 @@ | ||
| 30 | #include "json/json.hpp" | 30 | #include "json/json.hpp" |
| 31 | #include "mocks/mock_HttpHandler.h" | 31 | #include "mocks/mock_HttpHandler.h" |
| 32 | 32 | ||
| 33 | +using namespace hueplusplus; | ||
| 34 | + | ||
| 33 | class HueLightTest : public ::testing::Test | 35 | class HueLightTest : public ::testing::Test |
| 34 | { | 36 | { |
| 35 | protected: | 37 | protected: |
test/test_SimpleBrightnessStrategy.cpp
| @@ -34,6 +34,8 @@ | @@ -34,6 +34,8 @@ | ||
| 34 | #include "mocks/mock_HttpHandler.h" | 34 | #include "mocks/mock_HttpHandler.h" |
| 35 | #include "mocks/mock_HueLight.h" | 35 | #include "mocks/mock_HueLight.h" |
| 36 | 36 | ||
| 37 | +using namespace hueplusplus; | ||
| 38 | + | ||
| 37 | TEST(SimpleBrightnessStrategy, setBrightness) | 39 | TEST(SimpleBrightnessStrategy, setBrightness) |
| 38 | { | 40 | { |
| 39 | using namespace ::testing; | 41 | using namespace ::testing; |
test/test_SimpleColorHueStrategy.cpp
| @@ -33,6 +33,8 @@ | @@ -33,6 +33,8 @@ | ||
| 33 | #include "mocks/mock_HttpHandler.h" | 33 | #include "mocks/mock_HttpHandler.h" |
| 34 | #include "mocks/mock_HueLight.h" | 34 | #include "mocks/mock_HueLight.h" |
| 35 | 35 | ||
| 36 | +using namespace hueplusplus; | ||
| 37 | + | ||
| 36 | TEST(SimpleColorHueStrategy, setColorHue) | 38 | TEST(SimpleColorHueStrategy, setColorHue) |
| 37 | { | 39 | { |
| 38 | using namespace ::testing; | 40 | using namespace ::testing; |
test/test_SimpleColorTemperatureStrategy.cpp
| @@ -34,6 +34,8 @@ | @@ -34,6 +34,8 @@ | ||
| 34 | #include "mocks/mock_HttpHandler.h" | 34 | #include "mocks/mock_HttpHandler.h" |
| 35 | #include "mocks/mock_HueLight.h" | 35 | #include "mocks/mock_HueLight.h" |
| 36 | 36 | ||
| 37 | +using namespace hueplusplus; | ||
| 38 | + | ||
| 37 | TEST(SimpleColorTemperatureStrategy, setColorTemperature) | 39 | TEST(SimpleColorTemperatureStrategy, setColorTemperature) |
| 38 | { | 40 | { |
| 39 | using namespace ::testing; | 41 | using namespace ::testing; |
test/test_UPnP.cpp
| @@ -30,6 +30,8 @@ | @@ -30,6 +30,8 @@ | ||
| 30 | #include "json/json.hpp" | 30 | #include "json/json.hpp" |
| 31 | #include "mocks/mock_HttpHandler.h" | 31 | #include "mocks/mock_HttpHandler.h" |
| 32 | 32 | ||
| 33 | +using namespace hueplusplus; | ||
| 34 | + | ||
| 33 | const std::vector<std::pair<std::string, std::string>> expected_uplug_dev | 35 | const std::vector<std::pair<std::string, std::string>> expected_uplug_dev |
| 34 | = {{"http://192.168.2.1:1900/gatedesc.xml", "Linux/2.6.36, UPnP/1.0, Portable SDK for UPnP devices/1.6.19"}, | 36 | = {{"http://192.168.2.1:1900/gatedesc.xml", "Linux/2.6.36, UPnP/1.0, Portable SDK for UPnP devices/1.6.19"}, |
| 35 | {"http://192.168.2.116:80/description.xml", "Linux/3.14.0 UPnP/1.0 IpBridge/1.21.0"}}; | 37 | {"http://192.168.2.116:80/description.xml", "Linux/3.14.0 UPnP/1.0 IpBridge/1.21.0"}}; |