@@ -58,6 +58,7 @@ zone::~zone()
5858
5959RGBController::RGBController ()
6060{
61+ flags = 0 ;
6162 DeviceThreadRunning = true ;
6263 DeviceCallThread = new std::thread (&RGBController::DeviceCallThreadFunction, this );
6364}
@@ -288,6 +289,14 @@ unsigned char * RGBController::GetDeviceDescription(unsigned int protocol_versio
288289 }
289290 }
290291
292+ /* ---------------------------------------------------------*\
293+ | Controller flags |
294+ \*---------------------------------------------------------*/
295+ if (protocol_version >= 5 )
296+ {
297+ data_size += sizeof (flags);
298+ }
299+
291300 data_size += sizeof (num_colors);
292301 data_size += num_colors * sizeof (RGBColor);
293302
@@ -731,6 +740,15 @@ unsigned char * RGBController::GetDeviceDescription(unsigned int protocol_versio
731740 }
732741 }
733742
743+ /* ---------------------------------------------------------*\
744+ | Controller flags data |
745+ \*---------------------------------------------------------*/
746+ if (protocol_version >= 5 )
747+ {
748+ memcpy (&data_buf[data_ptr], &flags, sizeof (flags));
749+ data_ptr += sizeof (flags);
750+ }
751+
734752 delete[] mode_name_len;
735753 delete[] zone_name_len;
736754 delete[] led_name_len;
@@ -1188,6 +1206,15 @@ void RGBController::ReadDeviceDescription(unsigned char* data_buf, unsigned int
11881206 }
11891207 }
11901208
1209+ /* ---------------------------------------------------------*\
1210+ | Copy in controller flags data |
1211+ \*---------------------------------------------------------*/
1212+ if (protocol_version >= 5 )
1213+ {
1214+ memcpy (&flags, &data_buf[data_ptr], sizeof (flags));
1215+ data_ptr += sizeof (flags);
1216+ }
1217+
11911218 /* ---------------------------------------------------------*\
11921219 | Setup colors |
11931220 \*---------------------------------------------------------*/
@@ -2090,13 +2117,29 @@ void RGBController::DeviceCallThreadFunction()
20902117 {
20912118 if (CallFlag_UpdateMode.load () == true )
20922119 {
2093- DeviceUpdateMode ();
2094- CallFlag_UpdateMode = false ;
2120+ if (flags & CONTROLLER_FLAG_RESET_BEFORE_UPDATE)
2121+ {
2122+ CallFlag_UpdateMode = false ;
2123+ DeviceUpdateMode ();
2124+ }
2125+ else
2126+ {
2127+ DeviceUpdateMode ();
2128+ CallFlag_UpdateMode = false ;
2129+ }
20952130 }
20962131 if (CallFlag_UpdateLEDs.load () == true )
20972132 {
2098- DeviceUpdateLEDs ();
2099- CallFlag_UpdateLEDs = false ;
2133+ if (flags & CONTROLLER_FLAG_RESET_BEFORE_UPDATE)
2134+ {
2135+ CallFlag_UpdateLEDs = false ;
2136+ DeviceUpdateLEDs ();
2137+ }
2138+ else
2139+ {
2140+ DeviceUpdateLEDs ();
2141+ CallFlag_UpdateLEDs = false ;
2142+ }
21002143 }
21012144 else
21022145 {
0 commit comments