@@ -69,20 +69,28 @@ void TemperatureView::view(time_t now, SkyModel const &model,
69
69
name ().c_str ());
70
70
debugPixelString[sizeof (debugPixelString) - 1 ] = ' \0 ' ;
71
71
}
72
- if (segId_ == DEFAULT_SEG_ID)
72
+ if (segId_ == DEFAULT_SEG_ID) {
73
+ freezeHandle_.release ();
73
74
return ; // disabled
75
+ }
74
76
if (model.temperature_forecast .empty ())
75
77
return ; // nothing to render
76
78
77
- if (segId_ < 0 || segId_ >= strip.getMaxSegments ())
79
+ if (segId_ < 0 || segId_ >= strip.getMaxSegments ()) {
80
+ freezeHandle_.release ();
81
+ return ;
82
+ }
83
+ Segment *segPtr = freezeHandle_.acquire (segId_);
84
+ if (!segPtr)
78
85
return ;
79
- Segment &seg = strip. getSegment (( uint8_t )segId_) ;
86
+ Segment &seg = *segPtr ;
80
87
int len = seg.virtualLength ();
81
- if (len <= 0 )
88
+ if (len <= 0 ) {
89
+ freezeHandle_.release ();
82
90
return ;
91
+ }
83
92
// Initialize segment drawing parameters so virtualLength()/mapping are valid
84
93
seg.beginDraw ();
85
- skystrip::util::FreezeGuard freezeGuard (seg, false );
86
94
87
95
constexpr double kHorizonSec = 48.0 * 3600.0 ;
88
96
const double step = (len > 1 ) ? (kHorizonSec / double (len - 1 )) : 0.0 ;
@@ -172,6 +180,10 @@ void TemperatureView::view(time_t now, SkyModel const &model,
172
180
}
173
181
}
174
182
183
+ void TemperatureView::deactivate () {
184
+ freezeHandle_.release ();
185
+ }
186
+
175
187
void TemperatureView::addToConfig (JsonObject &subtree) {
176
188
subtree[FPSTR (CFG_SEG_ID)] = segId_;
177
189
}
0 commit comments