Commit 74194aad8d3a976bb546d4696ab56b7dbcd68a78
Committed by
Moritz Wirger
1 parent
3321666f
Address review comments for previous commit
Showing
2 changed files
with
39 additions
and
18 deletions
include/hueplusplus/EntertainmentMode.h
| @@ -50,7 +50,7 @@ public: | @@ -50,7 +50,7 @@ public: | ||
| 50 | bool Connect(); | 50 | bool Connect(); |
| 51 | bool Disconnect(); | 51 | bool Disconnect(); |
| 52 | 52 | ||
| 53 | - bool SetColorRGB(unsigned int light_index, unsigned char red, unsigned char green, unsigned char blue); | 53 | + bool SetColorRGB(uint8_t light_index, uint8_t red, uint8_t green, uint8_t blue); |
| 54 | 54 | ||
| 55 | void Update(); | 55 | void Update(); |
| 56 | 56 | ||
| @@ -58,9 +58,8 @@ protected: | @@ -58,9 +58,8 @@ protected: | ||
| 58 | Bridge& bridge; | 58 | Bridge& bridge; |
| 59 | Group& group; | 59 | Group& group; |
| 60 | 60 | ||
| 61 | - unsigned char* entertainment_msg; //!< buffer containing the entertainment mode packet data | ||
| 62 | - unsigned int entertainment_msg_size; //!< size of the entertainment mode buffer | ||
| 63 | - unsigned int entertainment_num_lights; //!< number of lights in entertainment mode group | 61 | + std::vector<uint8_t> entertainment_msg; //!< buffer containing the entertainment mode packet data |
| 62 | + uint8_t entertainment_num_lights; //!< number of lights in entertainment mode group | ||
| 64 | 63 | ||
| 65 | mbedtls_ssl_context ssl; | 64 | mbedtls_ssl_context ssl; |
| 66 | mbedtls_net_context server_fd; | 65 | mbedtls_net_context server_fd; |
src/EntertainmentMode.cpp
| @@ -50,15 +50,14 @@ EntertainmentMode::EntertainmentMode(Bridge& bridge, Group& group):bridge(bridge | @@ -50,15 +50,14 @@ EntertainmentMode::EntertainmentMode(Bridge& bridge, Group& group):bridge(bridge | ||
| 50 | entertainment_num_lights = group.getLightIds().size(); | 50 | entertainment_num_lights = group.getLightIds().size(); |
| 51 | 51 | ||
| 52 | /*-------------------------------------------------*\ | 52 | /*-------------------------------------------------*\ |
| 53 | - | Create Entertainment Mode message buffer | | 53 | + | Resize Entertainment Mode message buffer | |
| 54 | \*-------------------------------------------------*/ | 54 | \*-------------------------------------------------*/ |
| 55 | - entertainment_msg_size = HUE_ENTERTAINMENT_HEADER_SIZE + (entertainment_num_lights * HUE_ENTERTAINMENT_LIGHT_SIZE); | ||
| 56 | - entertainment_msg = new unsigned char[entertainment_msg_size]; | 55 | + entertainment_msg.resize(HUE_ENTERTAINMENT_HEADER_SIZE + (entertainment_num_lights * HUE_ENTERTAINMENT_LIGHT_SIZE)); |
| 57 | 56 | ||
| 58 | /*-------------------------------------------------*\ | 57 | /*-------------------------------------------------*\ |
| 59 | | Fill in Entertainment Mode message header | | 58 | | Fill in Entertainment Mode message header | |
| 60 | \*-------------------------------------------------*/ | 59 | \*-------------------------------------------------*/ |
| 61 | - memcpy(entertainment_msg, "HueStream", 9); | 60 | + memcpy(&entertainment_msg[0], "HueStream", 9); |
| 62 | entertainment_msg[9] = 0x01; // Version Major (1) | 61 | entertainment_msg[9] = 0x01; // Version Major (1) |
| 63 | entertainment_msg[10] = 0x00; // Version Minor (0) | 62 | entertainment_msg[10] = 0x00; // Version Minor (0) |
| 64 | entertainment_msg[11] = 0x00; // Sequence ID | 63 | entertainment_msg[11] = 0x00; // Sequence ID |
| @@ -149,22 +148,45 @@ EntertainmentMode::EntertainmentMode(Bridge& bridge, Group& group):bridge(bridge | @@ -149,22 +148,45 @@ EntertainmentMode::EntertainmentMode(Bridge& bridge, Group& group):bridge(bridge | ||
| 149 | } while (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE); | 148 | } while (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE); |
| 150 | } | 149 | } |
| 151 | 150 | ||
| 152 | -bool EntertainmentMode::SetColorRGB(unsigned int light_index, unsigned char red, unsigned char green, unsigned char blue) | 151 | +bool EntertainmentMode::SetColorRGB(uint8_t light_index, uint8_t red, uint8_t green, uint8_t blue) |
| 153 | { | 152 | { |
| 154 | - unsigned int msg_idx = HUE_ENTERTAINMENT_HEADER_SIZE + (light_index * HUE_ENTERTAINMENT_LIGHT_SIZE); | 153 | + if(light_index < entertainment_num_lights) |
| 154 | + { | ||
| 155 | + unsigned int msg_idx = HUE_ENTERTAINMENT_HEADER_SIZE + (light_index * HUE_ENTERTAINMENT_LIGHT_SIZE); | ||
| 155 | 156 | ||
| 156 | - entertainment_msg[msg_idx + 3] = red; // Red MSB | ||
| 157 | - entertainment_msg[msg_idx + 4] = red; // Red LSB; | ||
| 158 | - entertainment_msg[msg_idx + 5] = green; // Green MSB; | ||
| 159 | - entertainment_msg[msg_idx + 6] = green; // Green LSB; | ||
| 160 | - entertainment_msg[msg_idx + 7] = blue; // Blue MSB; | ||
| 161 | - entertainment_msg[msg_idx + 8] = blue; // Blue LSB; | 157 | + entertainment_msg[msg_idx + 3] = red; // Red MSB |
| 158 | + entertainment_msg[msg_idx + 4] = red; // Red LSB; | ||
| 159 | + entertainment_msg[msg_idx + 5] = green; // Green MSB; | ||
| 160 | + entertainment_msg[msg_idx + 6] = green; // Green LSB; | ||
| 161 | + entertainment_msg[msg_idx + 7] = blue; // Blue MSB; | ||
| 162 | + entertainment_msg[msg_idx + 8] = blue; // Blue LSB; | ||
| 162 | 163 | ||
| 163 | - return false; | 164 | + return true; |
| 165 | + } | ||
| 166 | + else | ||
| 167 | + { | ||
| 168 | + return false; | ||
| 169 | + } | ||
| 164 | } | 170 | } |
| 165 | 171 | ||
| 166 | void EntertainmentMode::Update() | 172 | void EntertainmentMode::Update() |
| 167 | { | 173 | { |
| 168 | - mbedtls_ssl_write(&ssl, (const unsigned char*)entertainment_msg, entertainment_msg_size); | 174 | + int ret; |
| 175 | + unsigned int total = 0; | ||
| 176 | + | ||
| 177 | + while(total < entertainment_msg.size()) | ||
| 178 | + { | ||
| 179 | + ret = mbedtls_ssl_write(&ssl, (const unsigned char*)&entertainment_msg[total], entertainment_msg.size()); | ||
| 180 | + | ||
| 181 | + if(ret < 0) | ||
| 182 | + { | ||
| 183 | + // Return if mbedtls_ssl_write errors | ||
| 184 | + return; | ||
| 185 | + } | ||
| 186 | + else | ||
| 187 | + { | ||
| 188 | + total += ret; | ||
| 189 | + } | ||
| 190 | + } | ||
| 169 | } | 191 | } |
| 170 | } // namespace hueplusplus | 192 | } // namespace hueplusplus |