Commit 39ce4c01d6ea10554069be3e38e9297f5fdba47d
Committed by
Moritz Wirger
1 parent
e57df540
Reformat all files with updated clang-format.
Showing
36 changed files
with
2143 additions
and
2133 deletions
include/hueplusplus/BaseHttpHandler.h
| ... | ... | @@ -34,145 +34,145 @@ |
| 34 | 34 | |
| 35 | 35 | namespace hueplusplus |
| 36 | 36 | { |
| 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 | - }; | |
| 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 | 176 | } // namespace hueplusplus |
| 177 | 177 | |
| 178 | 178 | #endif | ... | ... |
include/hueplusplus/BrightnessStrategy.h
| ... | ... | @@ -27,35 +27,35 @@ |
| 27 | 27 | |
| 28 | 28 | namespace hueplusplus |
| 29 | 29 | { |
| 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 | - }; | |
| 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 | 59 | } // namespace hueplusplus |
| 60 | 60 | |
| 61 | 61 | #endif | ... | ... |
include/hueplusplus/ColorHueStrategy.h
| ... | ... | @@ -28,130 +28,130 @@ |
| 28 | 28 | |
| 29 | 29 | namespace hueplusplus |
| 30 | 30 | { |
| 31 | - class HueLight; | |
| 31 | +class HueLight; | |
| 32 | 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 | - }; | |
| 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 | 155 | } // namespace hueplusplus |
| 156 | 156 | |
| 157 | 157 | #endif | ... | ... |
include/hueplusplus/ColorTemperatureStrategy.h
| ... | ... | @@ -27,47 +27,47 @@ |
| 27 | 27 | |
| 28 | 28 | namespace hueplusplus |
| 29 | 29 | { |
| 30 | - class HueLight; | |
| 30 | +class HueLight; | |
| 31 | 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 | - }; | |
| 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 | 71 | } // namespace hueplusplus |
| 72 | 72 | |
| 73 | 73 | #endif | ... | ... |
include/hueplusplus/ExtendedColorHueStrategy.h
| ... | ... | @@ -28,39 +28,39 @@ |
| 28 | 28 | |
| 29 | 29 | namespace hueplusplus |
| 30 | 30 | { |
| 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 | - }; | |
| 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 | 64 | } // namespace hueplusplus |
| 65 | 65 | |
| 66 | 66 | #endif | ... | ... |
include/hueplusplus/ExtendedColorTemperatureStrategy.h
| ... | ... | @@ -28,28 +28,28 @@ |
| 28 | 28 | |
| 29 | 29 | namespace hueplusplus |
| 30 | 30 | { |
| 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 | - }; | |
| 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 | 53 | } // namespace hueplusplus |
| 54 | 54 | |
| 55 | 55 | #endif | ... | ... |
include/hueplusplus/Hue.h
| ... | ... | @@ -40,246 +40,245 @@ |
| 40 | 40 | |
| 41 | 41 | namespace hueplusplus |
| 42 | 42 | { |
| 43 | - // forward declarations | |
| 44 | - class Hue; | |
| 43 | +// forward declarations | |
| 44 | +class Hue; | |
| 45 | 45 | |
| 46 | - //! | |
| 47 | - //! Class to find all Hue bridges on the network and create usernames for them. | |
| 48 | - //! | |
| 49 | - class HueFinder | |
| 46 | +//! | |
| 47 | +//! Class to find all Hue bridges on the network and create usernames for them. | |
| 48 | +//! | |
| 49 | +class HueFinder | |
| 50 | +{ | |
| 51 | +public: | |
| 52 | + struct HueIdentification | |
| 50 | 53 | { |
| 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; | |
| 54 | + std::string ip; | |
| 55 | + int port = 80; | |
| 56 | + std::string mac; | |
| 111 | 57 | }; |
| 112 | 58 | |
| 113 | - //! Hue class | |
| 114 | - class Hue | |
| 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 | +}; | |
| 112 | + | |
| 113 | +//! Hue class | |
| 114 | +class Hue | |
| 115 | +{ | |
| 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) | |
| 115 | 246 | { |
| 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 | - }; | |
| 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> simpleColorTemperatureStrategy; //!< Strategy that is used for controlling | |
| 274 | + //!< the color temperature of lights | |
| 275 | + std::shared_ptr<ColorTemperatureStrategy> extendedColorTemperatureStrategy; //!< Strategy that is used for | |
| 276 | + //!< controlling the color | |
| 277 | + //!< temperature of lights | |
| 278 | + std::shared_ptr<const IHttpHandler> http_handler; //!< A IHttpHandler that is used to communicate with the | |
| 279 | + //!< bridge | |
| 280 | + HueCommandAPI commands; //!< A HueCommandAPI that is used to communicate with the bridge | |
| 281 | +}; | |
| 283 | 282 | } // namespace hueplusplus |
| 284 | 283 | |
| 285 | 284 | #endif | ... | ... |
include/hueplusplus/HueCommandAPI.h
| ... | ... | @@ -32,96 +32,96 @@ |
| 32 | 32 | |
| 33 | 33 | namespace hueplusplus |
| 34 | 34 | { |
| 35 | - //! Handles communication to the bridge via IHttpHandler and enforces a timeout | |
| 36 | - //! between each request | |
| 37 | - class HueCommandAPI | |
| 35 | +//! Handles communication to the bridge via IHttpHandler and enforces a timeout | |
| 36 | +//! between each request | |
| 37 | +class HueCommandAPI | |
| 38 | +{ | |
| 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( | |
| 47 | + const std::string& ip, int port, const std::string& username, 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 | |
| 38 | 101 | { |
| 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 | + std::chrono::steady_clock::time_point timeout; | |
| 103 | + std::mutex mutex; | |
| 124 | 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; | |
| 124 | +}; | |
| 125 | 125 | } // namespace hueplusplus |
| 126 | 126 | |
| 127 | 127 | #endif |
| 128 | 128 | \ No newline at end of file | ... | ... |
include/hueplusplus/HueConfig.h
| ... | ... | @@ -25,8 +25,8 @@ |
| 25 | 25 | |
| 26 | 26 | namespace hueplusplus |
| 27 | 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 | |
| 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 | 30 | } // namespace hueplusplus |
| 31 | 31 | |
| 32 | 32 | #endif | ... | ... |
include/hueplusplus/HueDeviceTypes.h
| ... | ... | @@ -30,15 +30,15 @@ |
| 30 | 30 | |
| 31 | 31 | namespace hueplusplus |
| 32 | 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 | - }; | |
| 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 | 42 | } // namespace hueplusplus |
| 43 | 43 | |
| 44 | 44 | #endif | ... | ... |
include/hueplusplus/HueException.h
| ... | ... | @@ -30,92 +30,92 @@ |
| 30 | 30 | |
| 31 | 31 | namespace hueplusplus |
| 32 | 32 | { |
| 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 | |
| 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 | |
| 81 | +//! | |
| 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. | |
| 81 | 95 | //! |
| 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 | - }; | |
| 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 | 119 | } // namespace hueplusplus |
| 120 | 120 | |
| 121 | 121 | #endif |
| 122 | 122 | \ No newline at end of file | ... | ... |
include/hueplusplus/HueLight.h
| ... | ... | @@ -34,61 +34,61 @@ |
| 34 | 34 | |
| 35 | 35 | namespace hueplusplus |
| 36 | 36 | { |
| 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 | - }; | |
| 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 | +}; | |
| 92 | 92 | |
| 93 | 93 | //! |
| 94 | 94 | //! Class for Hue Light fixtures |
| ... | ... | @@ -103,692 +103,691 @@ class HueLight |
| 103 | 103 | friend class SimpleColorTemperatureStrategy; |
| 104 | 104 | friend class ExtendedColorTemperatureStrategy; |
| 105 | 105 | |
| 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 | - { | |
| 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 | - { | |
| 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 | - { | |
| 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) | |
| 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 | + { | |
| 273 | + if (brightnessStrategy) | |
| 327 | 274 | { |
| 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 | |
| 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 | + { | |
| 288 | + if (brightnessStrategy) | |
| 345 | 289 | { |
| 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() | |
| 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 | + { | |
| 307 | + if (brightnessStrategy) | |
| 366 | 308 | { |
| 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) | |
| 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 | + { | |
| 328 | + if (colorTemperatureStrategy) | |
| 387 | 329 | { |
| 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) | |
| 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 | + { | |
| 346 | + if (colorTemperatureStrategy) | |
| 408 | 347 | { |
| 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) | |
| 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 | + { | |
| 367 | + if (colorTemperatureStrategy) | |
| 430 | 368 | { |
| 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 | |
| 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 | + { | |
| 388 | + if (colorHueStrategy) | |
| 450 | 389 | { |
| 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() | |
| 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 | + { | |
| 409 | + if (colorHueStrategy) | |
| 470 | 410 | { |
| 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) | |
| 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 | + { | |
| 431 | + if (colorHueStrategy) | |
| 491 | 432 | { |
| 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 | |
| 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 | + { | |
| 451 | + if (colorHueStrategy) | |
| 507 | 452 | { |
| 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() | |
| 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 | + { | |
| 471 | + if (colorHueStrategy) | |
| 526 | 472 | { |
| 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) | |
| 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 | + { | |
| 492 | + if (colorHueStrategy) | |
| 550 | 493 | { |
| 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) | |
| 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 | + { | |
| 508 | + if (colorHueStrategy) | |
| 580 | 509 | { |
| 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) | |
| 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 | + { | |
| 527 | + if (colorHueStrategy) | |
| 601 | 528 | { |
| 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) | |
| 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 | + { | |
| 551 | + if (colorHueStrategy) | |
| 623 | 552 | { |
| 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) | |
| 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 | + { | |
| 581 | + if (colorTemperatureStrategy) | |
| 646 | 582 | { |
| 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) | |
| 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 | + { | |
| 602 | + if (colorHueStrategy) | |
| 670 | 603 | { |
| 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) | |
| 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 | + { | |
| 624 | + if (colorHueStrategy) | |
| 709 | 625 | { |
| 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) | |
| 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 | + { | |
| 647 | + if (colorHueStrategy) | |
| 719 | 648 | { |
| 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) | |
| 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 | + { | |
| 671 | + if (colorHueStrategy) | |
| 728 | 672 | { |
| 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 | |
| 673 | + return colorHueStrategy->setColorLoop(on, *this); | |
| 674 | + } | |
| 675 | + return false; | |
| 791 | 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(const nlohmann::json& request, const std::string& subPath, FileInfo fileInfo); | |
| 770 | + | |
| 771 | + //! \brief Virtual function that refreshes the \ref state of the light. | |
| 772 | + //! \throws std::system_error when system or socket operations fail | |
| 773 | + //! \throws HueException when response contained no body | |
| 774 | + //! \throws HueAPIResponseException when response contains an error | |
| 775 | + //! \throws nlohmann::json::parse_error when response could not be parsed | |
| 776 | + virtual void refreshState(); | |
| 777 | + | |
| 778 | +protected: | |
| 779 | + int id; //!< holds the id of the light | |
| 780 | + nlohmann::json state; //!< holds the current state of the light updated by \ref refreshState | |
| 781 | + ColorType colorType; //!< holds the \ref ColorType of the light | |
| 782 | + | |
| 783 | + std::shared_ptr<const BrightnessStrategy> | |
| 784 | + brightnessStrategy; //!< holds a reference to the strategy that handles brightness commands | |
| 785 | + std::shared_ptr<const ColorTemperatureStrategy> | |
| 786 | + colorTemperatureStrategy; //!< holds a reference to the strategy that handles colortemperature commands | |
| 787 | + std::shared_ptr<const ColorHueStrategy> | |
| 788 | + colorHueStrategy; //!< holds a reference to the strategy that handles all color commands | |
| 789 | + HueCommandAPI commands; //!< A IHttpHandler that is used to communicate with the bridge | |
| 790 | +}; | |
| 792 | 791 | } // namespace hueplusplus |
| 793 | 792 | |
| 794 | 793 | #endif | ... | ... |
include/hueplusplus/IHttpHandler.h
| ... | ... | @@ -32,168 +32,168 @@ |
| 32 | 32 | |
| 33 | 33 | namespace hueplusplus |
| 34 | 34 | { |
| 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 | - }; | |
| 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( | |
| 73 | + const std::string& msg, 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, const std::string& body, | |
| 143 | + 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 | 197 | } // namespace hueplusplus |
| 198 | 198 | |
| 199 | 199 | #endif | ... | ... |
include/hueplusplus/LinHttpHandler.h
| ... | ... | @@ -32,32 +32,32 @@ |
| 32 | 32 | |
| 33 | 33 | namespace hueplusplus |
| 34 | 34 | { |
| 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 | - }; | |
| 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 | 61 | } // namespace hueplusplus |
| 62 | 62 | |
| 63 | 63 | #endif | ... | ... |
include/hueplusplus/SimpleBrightnessStrategy.h
| ... | ... | @@ -28,31 +28,31 @@ |
| 28 | 28 | |
| 29 | 29 | namespace hueplusplus |
| 30 | 30 | { |
| 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 | - }; | |
| 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 | 56 | } // namespace hueplusplus |
| 57 | 57 | |
| 58 | 58 | #endif | ... | ... |
include/hueplusplus/SimpleColorHueStrategy.h
| ... | ... | @@ -28,128 +28,128 @@ |
| 28 | 28 | |
| 29 | 29 | namespace hueplusplus |
| 30 | 30 | { |
| 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 | - }; | |
| 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 | 153 | } // namespace hueplusplus |
| 154 | 154 | |
| 155 | 155 | #endif | ... | ... |
include/hueplusplus/SimpleColorTemperatureStrategy.h
| ... | ... | @@ -28,42 +28,42 @@ |
| 28 | 28 | |
| 29 | 29 | namespace hueplusplus |
| 30 | 30 | { |
| 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 | - }; | |
| 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 | 67 | } // namespace hueplusplus |
| 68 | 68 | |
| 69 | 69 | #endif | ... | ... |
include/hueplusplus/UPnP.h
| ... | ... | @@ -31,19 +31,19 @@ |
| 31 | 31 | |
| 32 | 32 | namespace hueplusplus |
| 33 | 33 | { |
| 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 | - }; | |
| 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 | 47 | } // namespace hueplusplus |
| 48 | 48 | |
| 49 | 49 | #endif | ... | ... |
include/hueplusplus/Units.h
| ... | ... | @@ -25,39 +25,39 @@ |
| 25 | 25 | |
| 26 | 26 | namespace hueplusplus |
| 27 | 27 | { |
| 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 | - }; | |
| 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 | 61 | } // namespace hueplusplus |
| 62 | 62 | |
| 63 | 63 | #endif | ... | ... |
include/hueplusplus/Utils.h
| ... | ... | @@ -27,60 +27,63 @@ |
| 27 | 27 | |
| 28 | 28 | namespace hueplusplus |
| 29 | 29 | { |
| 30 | - namespace utils | |
| 31 | - { | |
| 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); | |
| 30 | +namespace utils | |
| 31 | +{ | |
| 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); | |
| 37 | 37 | |
| 38 | - inline nlohmann::json safeGetMemberHelper(const nlohmann::json& json) { return json; } | |
| 38 | +inline nlohmann::json safeGetMemberHelper(const nlohmann::json& json) | |
| 39 | +{ | |
| 40 | + return json; | |
| 41 | +} | |
| 39 | 42 | |
| 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) | |
| 43 | - { | |
| 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)...); | |
| 50 | - } | |
| 43 | +template <typename KeyT, typename... Paths, | |
| 44 | + std::enable_if_t<!std::is_integral<std::remove_reference_t<KeyT>>::value>* = nullptr> | |
| 45 | +nlohmann::json safeGetMemberHelper(const nlohmann::json& json, KeyT&& key, Paths&&... otherPaths) | |
| 46 | +{ | |
| 47 | + auto memberIt = json.find(std::forward<KeyT>(key)); | |
| 48 | + if (memberIt == json.end()) | |
| 49 | + { | |
| 50 | + return nullptr; | |
| 51 | + } | |
| 52 | + return safeGetMemberHelper(*memberIt, std::forward<Paths>(otherPaths)...); | |
| 53 | +} | |
| 51 | 54 | |
| 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 | - { | |
| 56 | - if (!json.is_array() || json.size() <= index) | |
| 57 | - { | |
| 58 | - return nullptr; | |
| 59 | - } | |
| 60 | - return safeGetMemberHelper(json[index], std::forward<Paths>(otherPaths)...); | |
| 61 | - } | |
| 62 | - } // namespace detail | |
| 55 | +// Needs to be after the other safeGetMemberHelper, otherwise another forward declaration is needed | |
| 56 | +template <typename... Paths> | |
| 57 | +nlohmann::json safeGetMemberHelper(const nlohmann::json& json, std::size_t index, Paths&&... otherPaths) | |
| 58 | +{ | |
| 59 | + if (!json.is_array() || json.size() <= index) | |
| 60 | + { | |
| 61 | + return nullptr; | |
| 62 | + } | |
| 63 | + return safeGetMemberHelper(json[index], std::forward<Paths>(otherPaths)...); | |
| 64 | +} | |
| 65 | +} // namespace detail | |
| 63 | 66 | |
| 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); | |
| 67 | +//! \brief Function for validating that a request was executed correctly | |
| 68 | +//! | |
| 69 | +//! \param request The request that was sent initially | |
| 70 | +//! \param reply The reply that was received | |
| 71 | +//! \param lightId The identifier of the light | |
| 72 | +//! \return True if request was executed correctly | |
| 73 | +bool validateReplyForLight(const nlohmann::json& request, const nlohmann::json& reply, int lightId); | |
| 71 | 74 | |
| 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 | - } | |
| 75 | +//! \brief Returns the object/array member or null if it does not exist | |
| 76 | +//! | |
| 77 | +//! \param json The base json value | |
| 78 | +//! \param paths Any number of child accesses (e.g. 0, "key" would access json[0]["key"]) | |
| 79 | +//! \returns The specified member or null if any intermediate object does not contain the specified child. | |
| 80 | +template <typename... Paths> | |
| 81 | +nlohmann::json safeGetMember(const nlohmann::json& json, Paths&&... paths) | |
| 82 | +{ | |
| 83 | + return detail::safeGetMemberHelper(json, std::forward<Paths>(paths)...); | |
| 84 | +} | |
| 82 | 85 | |
| 83 | - } // namespace utils | |
| 86 | +} // namespace utils | |
| 84 | 87 | } // namespace hueplusplus |
| 85 | 88 | |
| 86 | 89 | #endif |
| 87 | 90 | \ No newline at end of file | ... | ... |
include/hueplusplus/WinHttpHandler.h
| ... | ... | @@ -32,41 +32,41 @@ |
| 32 | 32 | |
| 33 | 33 | namespace hueplusplus |
| 34 | 34 | { |
| 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(); | |
| 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(); | |
| 41 | 41 | |
| 42 | - //! \brief Dtor needed for wsaData cleanup | |
| 43 | - ~WinHttpHandler(); | |
| 42 | + //! \brief Dtor needed for wsaData cleanup | |
| 43 | + ~WinHttpHandler(); | |
| 44 | 44 | |
| 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; | |
| 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; | |
| 54 | 54 | |
| 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; | |
| 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; | |
| 66 | 66 | |
| 67 | - private: | |
| 68 | - WSADATA wsaData; | |
| 69 | - }; | |
| 67 | +private: | |
| 68 | + WSADATA wsaData; | |
| 69 | +}; | |
| 70 | 70 | } // namespace hueplusplus |
| 71 | 71 | |
| 72 | 72 | #endif | ... | ... |
src/BaseHttpHandler.cpp
| ... | ... | @@ -24,7 +24,8 @@ |
| 24 | 24 | |
| 25 | 25 | #include "hueplusplus/HueExceptionMacro.h" |
| 26 | 26 | |
| 27 | -std::string hueplusplus::BaseHttpHandler::sendGetHTTPBody(const std::string& msg, const std::string& adr, int port) const | |
| 27 | +std::string hueplusplus::BaseHttpHandler::sendGetHTTPBody( | |
| 28 | + const std::string& msg, const std::string& adr, int port) const | |
| 28 | 29 | { |
| 29 | 30 | std::string response = send(msg, adr, port); |
| 30 | 31 | size_t start = response.find("\r\n\r\n"); |
| ... | ... | @@ -68,20 +69,20 @@ std::string hueplusplus::BaseHttpHandler::sendHTTPRequest(const std::string& met |
| 68 | 69 | return sendGetHTTPBody(request.c_str(), adr, port); |
| 69 | 70 | } |
| 70 | 71 | |
| 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 | +std::string hueplusplus::BaseHttpHandler::GETString(const std::string& uri, const std::string& contentType, | |
| 73 | + const std::string& body, const std::string& adr, int port) const | |
| 73 | 74 | { |
| 74 | 75 | return sendHTTPRequest("GET", uri, contentType, body, adr, port); |
| 75 | 76 | } |
| 76 | 77 | |
| 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 | +std::string hueplusplus::BaseHttpHandler::POSTString(const std::string& uri, const std::string& contentType, | |
| 79 | + const std::string& body, const std::string& adr, int port) const | |
| 79 | 80 | { |
| 80 | 81 | return sendHTTPRequest("POST", uri, contentType, body, adr, port); |
| 81 | 82 | } |
| 82 | 83 | |
| 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 | +std::string hueplusplus::BaseHttpHandler::PUTString(const std::string& uri, const std::string& contentType, | |
| 85 | + const std::string& body, const std::string& adr, int port) const | |
| 85 | 86 | { |
| 86 | 87 | return sendHTTPRequest("PUT", uri, contentType, body, adr, port); |
| 87 | 88 | } | ... | ... |
src/Hue.cpp
| ... | ... | @@ -31,9 +31,9 @@ |
| 31 | 31 | #include <stdexcept> |
| 32 | 32 | #include <thread> |
| 33 | 33 | |
| 34 | -#include "hueplusplus/HueDeviceTypes.h" | |
| 35 | 34 | #include "hueplusplus/ExtendedColorHueStrategy.h" |
| 36 | 35 | #include "hueplusplus/ExtendedColorTemperatureStrategy.h" |
| 36 | +#include "hueplusplus/HueDeviceTypes.h" | |
| 37 | 37 | #include "hueplusplus/HueExceptionMacro.h" |
| 38 | 38 | #include "hueplusplus/SimpleBrightnessStrategy.h" |
| 39 | 39 | #include "hueplusplus/SimpleColorHueStrategy.h" |
| ... | ... | @@ -238,9 +238,8 @@ hueplusplus::HueLight& hueplusplus::Hue::getLight(int id) |
| 238 | 238 | // std::cout << state["lights"][std::to_string(id)] << std::endl; |
| 239 | 239 | std::string type = state["lights"][std::to_string(id)]["modelid"].get<std::string>(); |
| 240 | 240 | // std::cout << type << std::endl; |
| 241 | - auto light = MakeHueLight()(type, id, commands, simpleBrightnessStrategy, | |
| 242 | - extendedColorTemperatureStrategy, simpleColorTemperatureStrategy, extendedColorHueStrategy, | |
| 243 | - simpleColorHueStrategy); | |
| 241 | + auto light = MakeHueLight()(type, id, commands, simpleBrightnessStrategy, extendedColorTemperatureStrategy, | |
| 242 | + simpleColorTemperatureStrategy, extendedColorHueStrategy, simpleColorHueStrategy); | |
| 244 | 243 | lights.emplace(id, light); |
| 245 | 244 | return lights.find(id)->second; |
| 246 | 245 | } | ... | ... |
src/HueCommandAPI.cpp
| ... | ... | @@ -30,37 +30,36 @@ constexpr std::chrono::steady_clock::duration hueplusplus::HueCommandAPI::minDel |
| 30 | 30 | |
| 31 | 31 | namespace |
| 32 | 32 | { |
| 33 | - // Runs functor with appropriate timeout and retries when timed out or connection reset | |
| 34 | - template <typename Timeout, typename Fun> | |
| 35 | - nlohmann::json RunWithTimeout( | |
| 36 | - std::shared_ptr<Timeout> timeout, std::chrono::steady_clock::duration minDelay, Fun fun) | |
| 33 | +// Runs functor with appropriate timeout and retries when timed out or connection reset | |
| 34 | +template <typename Timeout, typename Fun> | |
| 35 | +nlohmann::json RunWithTimeout(std::shared_ptr<Timeout> timeout, std::chrono::steady_clock::duration minDelay, Fun fun) | |
| 36 | +{ | |
| 37 | + auto now = std::chrono::steady_clock::now(); | |
| 38 | + std::lock_guard<std::mutex> lock(timeout->mutex); | |
| 39 | + if (timeout->timeout > now) | |
| 37 | 40 | { |
| 38 | - auto now = std::chrono::steady_clock::now(); | |
| 39 | - std::lock_guard<std::mutex> lock(timeout->mutex); | |
| 40 | - if (timeout->timeout > now) | |
| 41 | - { | |
| 42 | - std::this_thread::sleep_until(timeout->timeout); | |
| 43 | - } | |
| 44 | - try | |
| 45 | - { | |
| 46 | - nlohmann::json response = fun(); | |
| 47 | - timeout->timeout = now + minDelay; | |
| 48 | - return response; | |
| 49 | - } | |
| 50 | - catch (const std::system_error& e) | |
| 41 | + std::this_thread::sleep_until(timeout->timeout); | |
| 42 | + } | |
| 43 | + try | |
| 44 | + { | |
| 45 | + nlohmann::json response = fun(); | |
| 46 | + timeout->timeout = now + minDelay; | |
| 47 | + return response; | |
| 48 | + } | |
| 49 | + catch (const std::system_error& e) | |
| 50 | + { | |
| 51 | + if (e.code() == std::errc::connection_reset || e.code() == std::errc::timed_out) | |
| 51 | 52 | { |
| 52 | - if (e.code() == std::errc::connection_reset || e.code() == std::errc::timed_out) | |
| 53 | - { | |
| 54 | - // Happens when hue is too busy, wait and try again (once) | |
| 55 | - std::this_thread::sleep_for(minDelay); | |
| 56 | - nlohmann::json v = fun(); | |
| 57 | - timeout->timeout = std::chrono::steady_clock::now() + minDelay; | |
| 58 | - return v; | |
| 59 | - } | |
| 60 | - // Cannot recover from other types of errors | |
| 61 | - throw; | |
| 53 | + // Happens when hue is too busy, wait and try again (once) | |
| 54 | + std::this_thread::sleep_for(minDelay); | |
| 55 | + nlohmann::json v = fun(); | |
| 56 | + timeout->timeout = std::chrono::steady_clock::now() + minDelay; | |
| 57 | + return v; | |
| 62 | 58 | } |
| 59 | + // Cannot recover from other types of errors | |
| 60 | + throw; | |
| 63 | 61 | } |
| 62 | +} | |
| 64 | 63 | } // namespace |
| 65 | 64 | |
| 66 | 65 | hueplusplus::HueCommandAPI::HueCommandAPI( | ... | ... |
src/HueDeviceTypes.cpp
| ... | ... | @@ -28,42 +28,42 @@ |
| 28 | 28 | |
| 29 | 29 | namespace |
| 30 | 30 | { |
| 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; | |
| 36 | - }; | |
| 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; | |
| 36 | +}; | |
| 37 | 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 | - } | |
| 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 | +} | |
| 44 | 44 | |
| 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 | - } | |
| 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 | +} | |
| 51 | 51 | |
| 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 | - } | |
| 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 | +} | |
| 58 | 58 | |
| 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 | - } | |
| 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", "LTW015", | |
| 63 | + "LTP001", "LTP002", "LTP003", "LTP004", "LTP005", "LTD003", "LTF001", "LTF002", "LTC001", "LTC002", | |
| 64 | + "LTC003", "LTC004", "LTC011", "LTC012", "LTD001", "LTD002", "LFF001", "LTT001", "LDT001"}; | |
| 65 | + return c_TEMPERATURELIGHT_TYPES; | |
| 66 | +} | |
| 67 | 67 | } // namespace |
| 68 | 68 | |
| 69 | 69 | auto hueplusplus::MakeHueLight::operator()(std::string type, int id, HueCommandAPI commands, | ... | ... |
src/HueException.cpp
| ... | ... | @@ -69,7 +69,8 @@ const std::string& hueplusplus::HueAPIResponseException::GetDescription() const |
| 69 | 69 | return description; |
| 70 | 70 | } |
| 71 | 71 | |
| 72 | -hueplusplus::HueAPIResponseException hueplusplus::HueAPIResponseException::Create(FileInfo fileInfo, const nlohmann::json& response) | |
| 72 | +hueplusplus::HueAPIResponseException hueplusplus::HueAPIResponseException::Create( | |
| 73 | + FileInfo fileInfo, const nlohmann::json& response) | |
| 73 | 74 | { |
| 74 | 75 | const nlohmann::json error = response.at("error"); |
| 75 | 76 | int errorCode = error.value("type", -1); |
| ... | ... | @@ -78,7 +79,8 @@ hueplusplus::HueAPIResponseException hueplusplus::HueAPIResponseException::Creat |
| 78 | 79 | return HueAPIResponseException(std::move(fileInfo), errorCode, std::move(address), std::move(description)); |
| 79 | 80 | } |
| 80 | 81 | |
| 81 | -std::string hueplusplus::HueAPIResponseException::GetMessage(int error, const std::string& addr, const std::string& description) | |
| 82 | +std::string hueplusplus::HueAPIResponseException::GetMessage( | |
| 83 | + int error, const std::string& addr, const std::string& description) | |
| 82 | 84 | { |
| 83 | 85 | std::string result = std::to_string(error); |
| 84 | 86 | result.append(" "); | ... | ... |
src/HueLight.cpp
| ... | ... | @@ -161,9 +161,12 @@ bool hueplusplus::HueLight::alert() |
| 161 | 161 | return utils::validateReplyForLight(request, reply, id); |
| 162 | 162 | } |
| 163 | 163 | |
| 164 | -hueplusplus::HueLight::HueLight(int id, const HueCommandAPI& commands) : HueLight(id, commands, nullptr, nullptr, nullptr) {} | |
| 164 | +hueplusplus::HueLight::HueLight(int id, const HueCommandAPI& commands) | |
| 165 | + : HueLight(id, commands, nullptr, nullptr, nullptr) | |
| 166 | +{} | |
| 165 | 167 | |
| 166 | -hueplusplus::HueLight::HueLight(int id, const HueCommandAPI& commands, std::shared_ptr<const BrightnessStrategy> brightnessStrategy, | |
| 168 | +hueplusplus::HueLight::HueLight(int id, const HueCommandAPI& commands, | |
| 169 | + std::shared_ptr<const BrightnessStrategy> brightnessStrategy, | |
| 167 | 170 | std::shared_ptr<const ColorTemperatureStrategy> colorTempStrategy, |
| 168 | 171 | std::shared_ptr<const ColorHueStrategy> colorHueStrategy) |
| 169 | 172 | : id(id), |
| ... | ... | @@ -224,7 +227,8 @@ bool hueplusplus::HueLight::OffNoRefresh(uint8_t transition) |
| 224 | 227 | return utils::validateReplyForLight(request, reply, id); |
| 225 | 228 | } |
| 226 | 229 | |
| 227 | -nlohmann::json hueplusplus::HueLight::SendPutRequest(const nlohmann::json& request, const std::string& subPath, FileInfo fileInfo) | |
| 230 | +nlohmann::json hueplusplus::HueLight::SendPutRequest( | |
| 231 | + const nlohmann::json& request, const std::string& subPath, FileInfo fileInfo) | |
| 228 | 232 | { |
| 229 | 233 | return commands.PUTRequest("/lights/" + std::to_string(id) + subPath, request, std::move(fileInfo)); |
| 230 | 234 | } | ... | ... |
src/SimpleColorHueStrategy.cpp
| ... | ... | @@ -93,7 +93,8 @@ bool hueplusplus::SimpleColorHueStrategy::setColorSaturation(uint8_t sat, uint8_ |
| 93 | 93 | return utils::validateReplyForLight(request, reply, light.id); |
| 94 | 94 | } |
| 95 | 95 | |
| 96 | -bool hueplusplus::SimpleColorHueStrategy::setColorHueSaturation(uint16_t hue, uint8_t sat, uint8_t transition, HueLight& light) const | |
| 96 | +bool hueplusplus::SimpleColorHueStrategy::setColorHueSaturation( | |
| 97 | + uint16_t hue, uint8_t sat, uint8_t transition, HueLight& light) const | |
| 97 | 98 | { |
| 98 | 99 | light.refreshState(); |
| 99 | 100 | nlohmann::json request = nlohmann::json::object(); |
| ... | ... | @@ -165,7 +166,8 @@ bool hueplusplus::SimpleColorHueStrategy::setColorXY(float x, float y, uint8_t t |
| 165 | 166 | return utils::validateReplyForLight(request, reply, light.id); |
| 166 | 167 | } |
| 167 | 168 | |
| 168 | -bool hueplusplus::SimpleColorHueStrategy::setColorRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t transition, HueLight& light) const | |
| 169 | +bool hueplusplus::SimpleColorHueStrategy::setColorRGB( | |
| 170 | + uint8_t r, uint8_t g, uint8_t b, uint8_t transition, HueLight& light) const | |
| 169 | 171 | { |
| 170 | 172 | if ((r == 0) && (g == 0) && (b == 0)) |
| 171 | 173 | { | ... | ... |
src/SimpleColorTemperatureStrategy.cpp
| ... | ... | @@ -30,7 +30,8 @@ |
| 30 | 30 | #include "hueplusplus/HueExceptionMacro.h" |
| 31 | 31 | #include "hueplusplus/Utils.h" |
| 32 | 32 | |
| 33 | -bool hueplusplus::SimpleColorTemperatureStrategy::setColorTemperature(unsigned int mired, uint8_t transition, HueLight& light) const | |
| 33 | +bool hueplusplus::SimpleColorTemperatureStrategy::setColorTemperature( | |
| 34 | + unsigned int mired, uint8_t transition, HueLight& light) const | |
| 34 | 35 | { |
| 35 | 36 | light.refreshState(); |
| 36 | 37 | nlohmann::json request = nlohmann::json::object(); | ... | ... |
src/UPnP.cpp
| ... | ... | @@ -25,7 +25,8 @@ |
| 25 | 25 | #include <algorithm> |
| 26 | 26 | #include <iostream> |
| 27 | 27 | |
| 28 | -std::vector<std::pair<std::string, std::string>> hueplusplus::UPnP::getDevices(std::shared_ptr<const IHttpHandler> handler) | |
| 28 | +std::vector<std::pair<std::string, std::string>> hueplusplus::UPnP::getDevices( | |
| 29 | + std::shared_ptr<const IHttpHandler> handler) | |
| 29 | 30 | { |
| 30 | 31 | // send UPnP M-Search request |
| 31 | 32 | std::vector<std::string> foundDevices | ... | ... |
src/WinHttpHandler.cpp
| ... | ... | @@ -34,24 +34,24 @@ |
| 34 | 34 | |
| 35 | 35 | namespace |
| 36 | 36 | { |
| 37 | - class AddrInfoFreer | |
| 38 | - { | |
| 39 | - public: | |
| 40 | - explicit AddrInfoFreer(addrinfo* p) : p(p) {} | |
| 41 | - ~AddrInfoFreer() { freeaddrinfo(p); } | |
| 42 | - | |
| 43 | - private: | |
| 44 | - addrinfo* p; | |
| 45 | - }; | |
| 46 | - class SocketCloser | |
| 47 | - { | |
| 48 | - public: | |
| 49 | - explicit SocketCloser(SOCKET s) : s(s) {} | |
| 50 | - ~SocketCloser() { closesocket(s); } | |
| 37 | +class AddrInfoFreer | |
| 38 | +{ | |
| 39 | +public: | |
| 40 | + explicit AddrInfoFreer(addrinfo* p) : p(p) {} | |
| 41 | + ~AddrInfoFreer() { freeaddrinfo(p); } | |
| 42 | + | |
| 43 | +private: | |
| 44 | + addrinfo* p; | |
| 45 | +}; | |
| 46 | +class SocketCloser | |
| 47 | +{ | |
| 48 | +public: | |
| 49 | + explicit SocketCloser(SOCKET s) : s(s) {} | |
| 50 | + ~SocketCloser() { closesocket(s); } | |
| 51 | 51 | |
| 52 | - private: | |
| 53 | - SOCKET s; | |
| 54 | - }; | |
| 52 | +private: | |
| 53 | + SOCKET s; | |
| 54 | +}; | |
| 55 | 55 | } // namespace |
| 56 | 56 | |
| 57 | 57 | hueplusplus::WinHttpHandler::WinHttpHandler() | ... | ... |
test/mocks/mock_HueLight.h
| ... | ... | @@ -28,16 +28,16 @@ |
| 28 | 28 | |
| 29 | 29 | #include <gmock/gmock.h> |
| 30 | 30 | |
| 31 | +#include "../testhelper.h" | |
| 31 | 32 | #include "hueplusplus/HueLight.h" |
| 32 | 33 | #include "json/json.hpp" |
| 33 | -#include "../testhelper.h" | |
| 34 | 34 | |
| 35 | 35 | //! Mock Class |
| 36 | 36 | class MockHueLight : public hueplusplus::HueLight |
| 37 | 37 | { |
| 38 | 38 | public: |
| 39 | 39 | MockHueLight(std::shared_ptr<const hueplusplus::IHttpHandler> handler) |
| 40 | - : HueLight(1, hueplusplus::HueCommandAPI(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler)) {}; | |
| 40 | + : HueLight(1, hueplusplus::HueCommandAPI(getBridgeIp(), getBridgePort(), getBridgeUsername(), handler)){}; | |
| 41 | 41 | |
| 42 | 42 | nlohmann::json& getState() { return state; }; |
| 43 | 43 | |
| ... | ... | @@ -125,8 +125,8 @@ public: |
| 125 | 125 | |
| 126 | 126 | MOCK_METHOD1(OffNoRefresh, bool(uint8_t transition)); |
| 127 | 127 | |
| 128 | - MOCK_METHOD3( | |
| 129 | - SendPutRequest, nlohmann::json(const nlohmann::json& request, const std::string& subPath, hueplusplus::FileInfo fileInfo)); | |
| 128 | + MOCK_METHOD3(SendPutRequest, | |
| 129 | + nlohmann::json(const nlohmann::json& request, const std::string& subPath, hueplusplus::FileInfo fileInfo)); | |
| 130 | 130 | |
| 131 | 131 | MOCK_METHOD0(refreshState, void()); |
| 132 | 132 | }; | ... | ... |
test/test_BaseHttpHandler.cpp
test/test_Hue.cpp
| ... | ... | @@ -378,14 +378,14 @@ TEST(Hue, removeLight) |
| 378 | 378 | { |
| 379 | 379 | using namespace ::testing; |
| 380 | 380 | std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>(); |
| 381 | - nlohmann::json hue_bridge_state{ {"lights", | |
| 381 | + nlohmann::json hue_bridge_state{{"lights", | |
| 382 | 382 | {{"1", |
| 383 | 383 | {{"state", |
| 384 | 384 | {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"}, |
| 385 | 385 | {"reachable", true}}}, |
| 386 | 386 | {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"}, |
| 387 | 387 | {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"}, |
| 388 | - {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}} }; | |
| 388 | + {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}}}; | |
| 389 | 389 | EXPECT_CALL( |
| 390 | 390 | *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort())) |
| 391 | 391 | .Times(1) |
| ... | ... | @@ -421,14 +421,14 @@ TEST(Hue, getAllLights) |
| 421 | 421 | { |
| 422 | 422 | using namespace ::testing; |
| 423 | 423 | std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>(); |
| 424 | - nlohmann::json hue_bridge_state{ {"lights", | |
| 424 | + nlohmann::json hue_bridge_state{{"lights", | |
| 425 | 425 | {{"1", |
| 426 | 426 | {{"state", |
| 427 | 427 | {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"}, |
| 428 | 428 | {"reachable", true}}}, |
| 429 | 429 | {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"}, |
| 430 | 430 | {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"}, |
| 431 | - {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}} }; | |
| 431 | + {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}}}; | |
| 432 | 432 | |
| 433 | 433 | EXPECT_CALL( |
| 434 | 434 | *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort())) |
| ... | ... | @@ -452,14 +452,14 @@ TEST(Hue, lightExists) |
| 452 | 452 | { |
| 453 | 453 | using namespace ::testing; |
| 454 | 454 | std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>(); |
| 455 | - nlohmann::json hue_bridge_state{ {"lights", | |
| 455 | + nlohmann::json hue_bridge_state{{"lights", | |
| 456 | 456 | {{"1", |
| 457 | 457 | {{"state", |
| 458 | 458 | {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"}, |
| 459 | 459 | {"reachable", true}}}, |
| 460 | 460 | {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"}, |
| 461 | 461 | {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"}, |
| 462 | - {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}} }; | |
| 462 | + {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}}}; | |
| 463 | 463 | EXPECT_CALL( |
| 464 | 464 | *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort())) |
| 465 | 465 | .Times(AtLeast(2)) |
| ... | ... | @@ -488,14 +488,14 @@ TEST(Hue, getPictureOfLight) |
| 488 | 488 | { |
| 489 | 489 | using namespace ::testing; |
| 490 | 490 | std::shared_ptr<MockHttpHandler> handler = std::make_shared<MockHttpHandler>(); |
| 491 | - nlohmann::json hue_bridge_state{ {"lights", | |
| 491 | + nlohmann::json hue_bridge_state{{"lights", | |
| 492 | 492 | {{"1", |
| 493 | 493 | {{"state", |
| 494 | 494 | {{"on", true}, {"bri", 254}, {"ct", 366}, {"alert", "none"}, {"colormode", "ct"}, |
| 495 | 495 | {"reachable", true}}}, |
| 496 | 496 | {"swupdate", {{"state", "noupdates"}, {"lastinstall", nullptr}}}, {"type", "Color temperature light"}, |
| 497 | 497 | {"name", "Hue ambiance lamp 1"}, {"modelid", "LTW001"}, {"manufacturername", "Philips"}, |
| 498 | - {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}} }; | |
| 498 | + {"uniqueid", "00:00:00:00:00:00:00:00-00"}, {"swversion", "5.50.1.19085"}}}}}}; | |
| 499 | 499 | |
| 500 | 500 | EXPECT_CALL( |
| 501 | 501 | *handler, GETJson("/api/" + getBridgeUsername(), nlohmann::json::object(), getBridgeIp(), getBridgePort())) | ... | ... |
test/test_HueCommandAPI.cpp
| ... | ... | @@ -163,7 +163,7 @@ TEST(HueCommandAPI, GETRequest) |
| 163 | 163 | // api returns error |
| 164 | 164 | { |
| 165 | 165 | const std::string path = "/test"; |
| 166 | - const nlohmann::json errorResponse{ {"error", {{"type", 10}, {"address", path}, {"description", "Stuff"}}} }; | |
| 166 | + const nlohmann::json errorResponse{{"error", {{"type", 10}, {"address", path}, {"description", "Stuff"}}}}; | |
| 167 | 167 | EXPECT_CALL(*httpHandler, GETJson("/api/" + getBridgeUsername() + path, request, getBridgeIp(), 80)) |
| 168 | 168 | .WillOnce(Return(errorResponse)); |
| 169 | 169 | EXPECT_THROW(api.GETRequest(path, request), HueAPIResponseException); |
| ... | ... | @@ -233,7 +233,7 @@ TEST(HueCommandAPI, DELETERequest) |
| 233 | 233 | // api returns error |
| 234 | 234 | { |
| 235 | 235 | const std::string path = "/test"; |
| 236 | - const nlohmann::json errorResponse{ {"error", {{"type", 10}, {"address", path}, {"description", "Stuff"}}} }; | |
| 236 | + const nlohmann::json errorResponse{{"error", {{"type", 10}, {"address", path}, {"description", "Stuff"}}}}; | |
| 237 | 237 | EXPECT_CALL(*httpHandler, DELETEJson("/api/" + getBridgeUsername() + path, request, getBridgeIp(), 80)) |
| 238 | 238 | .WillOnce(Return(errorResponse)); |
| 239 | 239 | EXPECT_THROW(api.DELETERequest(path, request), HueAPIResponseException); | ... | ... |
test/test_HueLight.cpp