@@ -285,16 +285,21 @@ vector< pair<int64_t, int64_t> > SetupHoldMeasurement::GetEdgeTimestamps(
285285 float vin = wfm->m_samples [i];
286286 int64_t tstamp = GetOffsetScaled (wfm, i);
287287
288+ float lerpHi = InterpolateTime (wfm, i-1 , vih);
289+ float lerpLo = InterpolateTime (wfm, i-1 , vil);
290+
291+ int64_t thi = tstamp + lerpHi * wfm->m_timescale ;
292+ int64_t tlo = tstamp + lerpLo * wfm->m_timescale ;
293+
288294 switch (state)
289295 {
290296 // Look for rising edges
291297 case STATE_UNKNOWN_WAS_LOW:
292298
293- // TODO: interpolate Vih level crossing?
294299 if (vin > vih)
295300 {
296301 if (matchRising)
297- ret.push_back ( pair<int64_t , int64_t >(edgestart, tstamp ));
302+ ret.push_back ( pair<int64_t , int64_t >(edgestart, thi ));
298303
299304 state = STATE_HIGH;
300305 }
@@ -303,11 +308,10 @@ vector< pair<int64_t, int64_t> > SetupHoldMeasurement::GetEdgeTimestamps(
303308
304309 case STATE_UNKNOWN_WAS_HIGH:
305310
306- // TODO: interpolate Vil level crossing?
307311 if (vin < vil)
308312 {
309313 if (matchFalling)
310- ret.push_back ( pair<int64_t , int64_t >(edgestart, tstamp ));
314+ ret.push_back ( pair<int64_t , int64_t >(edgestart, tlo ));
311315
312316 state = STATE_LOW;
313317 }
@@ -320,7 +324,7 @@ vector< pair<int64_t, int64_t> > SetupHoldMeasurement::GetEdgeTimestamps(
320324 if (vin > vil)
321325 {
322326 state = STATE_UNKNOWN_WAS_LOW;
323- edgestart = tstamp ;
327+ edgestart = tlo ;
324328 }
325329
326330 break ;
@@ -331,7 +335,7 @@ vector< pair<int64_t, int64_t> > SetupHoldMeasurement::GetEdgeTimestamps(
331335 if (vin < vih)
332336 {
333337 state = STATE_UNKNOWN_WAS_HIGH;
334- edgestart = tstamp ;
338+ edgestart = thi ;
335339 }
336340
337341 break ;
0 commit comments