@@ -72,6 +72,7 @@ TektronixOscilloscope::TektronixOscilloscope(SCPITransport* transport)
7272 , m_dmmModeValid(false )
7373 , m_dmmMode(Multimeter::DC_VOLTAGE)
7474 , m_digitalChannelBase(0 )
75+ , m_digitalChannelCount(0 )
7576 , m_triggerArmed(false )
7677 , m_triggerOneShot(false )
7778 , m_maxBandwidth(1000 )
@@ -225,6 +226,7 @@ TektronixOscilloscope::TektronixOscilloscope(SCPITransport* transport)
225226 m_flexChannelParents[chan] = i;
226227 m_flexChannelLanes[chan] = j;
227228 m_channels.push_back (chan);
229+ m_digitalChannelCount++;
228230 }
229231 }
230232 break ;
@@ -428,6 +430,7 @@ void TektronixOscilloscope::FlushConfigCache()
428430
429431 m_channelOffsets.clear ();
430432 m_channelVoltageRanges.clear ();
433+ m_channelDigitalThresholds.clear ();
431434 m_channelCouplings.clear ();
432435 m_channelsEnabled.clear ();
433436 m_probeTypes.clear ();
@@ -3598,7 +3601,17 @@ float TektronixOscilloscope::GetDigitalHysteresis(size_t /*channel*/)
35983601
35993602float TektronixOscilloscope::GetDigitalThreshold (size_t channel)
36003603{
3601- // TODO: caching?
3604+ if ( (channel < m_digitalChannelBase) || (m_digitalChannelCount == 0 ) )
3605+ return 0 ;
3606+
3607+ {
3608+ lock_guard<recursive_mutex> lock (m_cacheMutex);
3609+
3610+ if (m_channelDigitalThresholds.find (channel) != m_channelDigitalThresholds.end ())
3611+ return m_channelDigitalThresholds[channel];
3612+ }
3613+
3614+ float result = -1 ;
36023615
36033616 auto chan = GetOscilloscopeChannel (channel);
36043617
@@ -3607,14 +3620,17 @@ float TektronixOscilloscope::GetDigitalThreshold(size_t channel)
36073620 case FAMILY_MSO5:
36083621 case FAMILY_MSO6:
36093622 // note, group IDs are one based but lane IDs are zero based!
3610- return stof (m_transport->SendCommandQueuedWithReply (
3623+ result = stof (m_transport->SendCommandQueuedWithReply (
36113624 string (" DIGGRP" ) + to_string (m_flexChannelParents[chan]+1 ) +
36123625 " :D" + to_string (m_flexChannelLanes[chan]) + " :THR?" ));
36133626
36143627 default :
36153628 break ;
36163629 }
3617- return -1 ;
3630+
3631+ lock_guard<recursive_mutex> lock (m_cacheMutex);
3632+ m_channelDigitalThresholds[channel] = result;
3633+ return result;
36183634}
36193635
36203636void TektronixOscilloscope::SetDigitalHysteresis (size_t /* channel*/ , float /* level*/ )
0 commit comments