Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: ngscopeclient/scopehal
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 503efe002d09
Choose a base ref
...
head repository: ngscopeclient/scopehal
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 3e26d4e52dbc
Choose a head ref
  • 4 commits
  • 191 files changed
  • 1 contributor

Commits on Dec 18, 2021

  1. Copy the full SHA
    84fc7b0 View commit details
  2. Copy the full SHA
    dd447ce View commit details
  3. Copy the full SHA
    54f20c6 View commit details
  4. OscilloscopeChannel: fixed bug in refactoring causing SetOffset / Set…

    …VoltageRange to not work correctly
    azonenberg committed Dec 18, 2021
    Copy the full SHA
    3e26d4e View commit details
Showing with 856 additions and 1,270 deletions.
  1. +6 −6 scopehal/AgilentOscilloscope.cpp
  2. +6 −6 scopehal/AgilentOscilloscope.h
  3. +8 −8 scopehal/AntikernelLabsOscilloscope.cpp
  4. +6 −6 scopehal/AntikernelLabsOscilloscope.h
  5. +4 −4 scopehal/AntikernelLogicAnalyzer.cpp
  6. +4 −4 scopehal/AntikernelLogicAnalyzer.h
  7. +0 −1 scopehal/CMakeLists.txt
  8. +4 −4 scopehal/DemoOscilloscope.cpp
  9. +6 −6 scopehal/DemoOscilloscope.h
  10. +33 −5 scopehal/Filter.cpp
  11. +15 −0 scopehal/FlowGraphNode.h
  12. +6 −6 scopehal/LeCroyOscilloscope.cpp
  13. +6 −6 scopehal/LeCroyOscilloscope.h
  14. +39 −43 scopehal/MockOscilloscope.cpp
  15. +6 −6 scopehal/MockOscilloscope.h
  16. +61 −33 scopehal/Oscilloscope.cpp
  17. +8 −4 scopehal/Oscilloscope.h
  18. +19 −22 scopehal/OscilloscopeChannel.cpp
  19. +50 −34 scopehal/OscilloscopeChannel.h
  20. +6 −7 scopehal/PicoOscilloscope.cpp
  21. +6 −6 scopehal/PicoOscilloscope.h
  22. +10 −10 scopehal/RigolOscilloscope.cpp
  23. +6 −6 scopehal/RigolOscilloscope.h
  24. +8 −8 scopehal/RohdeSchwarzOscilloscope.cpp
  25. +6 −6 scopehal/RohdeSchwarzOscilloscope.h
  26. +11 −11 scopehal/SiglentSCPIOscilloscope.cpp
  27. +7 −7 scopehal/SiglentSCPIOscilloscope.h
  28. +0 −357 scopehal/SignalGeneratorOscilloscope.cpp
  29. +0 −120 scopehal/SignalGeneratorOscilloscope.h
  30. +0 −5 scopehal/Statistic.cpp
  31. +1 −3 scopehal/Statistic.h
  32. +10 −10 scopehal/TektronixOscilloscope.cpp
  33. +6 −6 scopehal/TektronixOscilloscope.h
  34. +0 −2 scopehal/scopehal.cpp
  35. +2 −2 scopeprotocols/ACCoupleFilter.cpp
  36. +1 −1 scopeprotocols/ACCoupleFilter.h
  37. +0 −5 scopeprotocols/ADL5205Decoder.cpp
  38. +0 −1 scopeprotocols/ADL5205Decoder.h
  39. +3 −3 scopeprotocols/AutocorrelationFilter.cpp
  40. +4 −4 scopeprotocols/AutocorrelationFilter.h
  41. +7 −7 scopeprotocols/AverageStatistic.cpp
  42. +3 −3 scopeprotocols/AverageStatistic.h
  43. +2 −2 scopeprotocols/BaseMeasurement.cpp
  44. +4 −4 scopeprotocols/BaseMeasurement.h
  45. +0 −6 scopeprotocols/ClockRecoveryFilter.cpp
  46. +0 −2 scopeprotocols/ClockRecoveryFilter.h
  47. +7 −7 scopeprotocols/CurrentShuntFilter.cpp
  48. +2 −2 scopeprotocols/CurrentShuntFilter.h
  49. +3 −3 scopeprotocols/DCDMeasurement.cpp
  50. +2 −2 scopeprotocols/DCDMeasurement.h
  51. +7 −2 scopeprotocols/DCOffsetFilter.cpp
  52. +2 −1 scopeprotocols/DCOffsetFilter.h
  53. +4 −4 scopeprotocols/DDJMeasurement.cpp
  54. +2 −2 scopeprotocols/DDJMeasurement.h
  55. +0 −5 scopeprotocols/DPhyDataDecoder.cpp
  56. +0 −1 scopeprotocols/DPhyDataDecoder.h
  57. +0 −6 scopeprotocols/DPhyHSClockRecoveryFilter.cpp
  58. +0 −2 scopeprotocols/DPhyHSClockRecoveryFilter.h
  59. +0 −5 scopeprotocols/DSIPacketDecoder.cpp
  60. +0 −1 scopeprotocols/DSIPacketDecoder.h
  61. +2 −2 scopeprotocols/DeEmbedFilter.cpp
  62. +2 −2 scopeprotocols/DeEmbedFilter.h
  63. +4 −4 scopeprotocols/DeskewFilter.cpp
  64. +2 −2 scopeprotocols/DeskewFilter.h
  65. +16 −0 scopeprotocols/DigitalToNRZFilter.cpp
  66. +3 −0 scopeprotocols/DigitalToNRZFilter.h
  67. +32 −0 scopeprotocols/DigitalToPAM4Filter.cpp
  68. +3 −0 scopeprotocols/DigitalToPAM4Filter.h
  69. +4 −4 scopeprotocols/DivideFilter.cpp
  70. +2 −2 scopeprotocols/DivideFilter.h
  71. +9 −4 scopeprotocols/DownconvertFilter.cpp
  72. +2 −1 scopeprotocols/DownconvertFilter.h
  73. +7 −2 scopeprotocols/DownsampleFilter.cpp
  74. +2 −1 scopeprotocols/DownsampleFilter.h
  75. +2 −2 scopeprotocols/DramClockFilter.cpp
  76. +3 −3 scopeprotocols/DramRefreshActivateMeasurement.cpp
  77. +4 −4 scopeprotocols/DramRefreshActivateMeasurement.h
  78. +3 −3 scopeprotocols/DramRowColumnLatencyMeasurement.cpp
  79. +4 −4 scopeprotocols/DramRowColumnLatencyMeasurement.h
  80. +7 −7 scopeprotocols/DutyCycleMeasurement.cpp
  81. +6 −6 scopeprotocols/DutyCycleMeasurement.h
  82. +3 −3 scopeprotocols/EmphasisFilter.cpp
  83. +2 −2 scopeprotocols/EmphasisFilter.h
  84. +3 −3 scopeprotocols/EmphasisRemovalFilter.cpp
  85. +2 −2 scopeprotocols/EmphasisRemovalFilter.h
  86. +3 −3 scopeprotocols/EyeBitRateMeasurement.cpp
  87. +2 −2 scopeprotocols/EyeBitRateMeasurement.h
  88. +4 −4 scopeprotocols/EyeHeightMeasurement.cpp
  89. +2 −2 scopeprotocols/EyeHeightMeasurement.h
  90. +4 −4 scopeprotocols/EyeJitterMeasurement.cpp
  91. +2 −2 scopeprotocols/EyeJitterMeasurement.h
  92. +9 −9 scopeprotocols/EyePattern.cpp
  93. +2 −2 scopeprotocols/EyePattern.h
  94. +3 −3 scopeprotocols/EyePeriodMeasurement.cpp
  95. +2 −2 scopeprotocols/EyePeriodMeasurement.h
  96. +4 −4 scopeprotocols/EyeWidthMeasurement.cpp
  97. +2 −2 scopeprotocols/EyeWidthMeasurement.h
  98. +5 −5 scopeprotocols/FFTFilter.cpp
  99. +4 −4 scopeprotocols/FFTFilter.h
  100. +3 −3 scopeprotocols/FIRFilter.cpp
  101. +2 −2 scopeprotocols/FIRFilter.h
  102. +3 −3 scopeprotocols/FallMeasurement.cpp
  103. +4 −4 scopeprotocols/FallMeasurement.h
  104. +3 −3 scopeprotocols/FrequencyMeasurement.cpp
  105. +4 −4 scopeprotocols/FrequencyMeasurement.h
  106. +6 −6 scopeprotocols/GroupDelayFilter.cpp
  107. +4 −4 scopeprotocols/GroupDelayFilter.h
  108. +4 −4 scopeprotocols/HistogramFilter.cpp
  109. +4 −4 scopeprotocols/HistogramFilter.h
  110. +4 −4 scopeprotocols/HorizontalBathtub.cpp
  111. +2 −2 scopeprotocols/HorizontalBathtub.h
  112. +0 −5 scopeprotocols/I2CEepromDecoder.cpp
  113. +0 −1 scopeprotocols/I2CEepromDecoder.h
  114. +0 −5 scopeprotocols/IPv4Decoder.cpp
  115. +0 −1 scopeprotocols/IPv4Decoder.h
  116. +3 −3 scopeprotocols/ISIMeasurement.cpp
  117. +2 −2 scopeprotocols/ISIMeasurement.h
  118. +2 −2 scopeprotocols/JitterSpectrumFilter.cpp
  119. +4 −4 scopeprotocols/MagnitudeFilter.cpp
  120. +4 −4 scopeprotocols/MagnitudeFilter.h
  121. +5 −5 scopeprotocols/MaximumStatistic.cpp
  122. +2 −2 scopeprotocols/MaximumStatistic.h
  123. +5 −5 scopeprotocols/MinimumStatistic.cpp
  124. +2 −2 scopeprotocols/MinimumStatistic.h
  125. +3 −3 scopeprotocols/MovingAverageFilter.cpp
  126. +2 −2 scopeprotocols/MovingAverageFilter.h
  127. +3 −3 scopeprotocols/MultiplyFilter.cpp
  128. +4 −4 scopeprotocols/MultiplyFilter.h
  129. +4 −4 scopeprotocols/NoiseFilter.cpp
  130. +2 −2 scopeprotocols/NoiseFilter.h
  131. +2 −2 scopeprotocols/OFDMDemodulator.cpp
  132. +4 −4 scopeprotocols/OFDMDemodulator.h
  133. +2 −2 scopeprotocols/OvershootMeasurement.cpp
  134. +4 −4 scopeprotocols/OvershootMeasurement.h
  135. +2 −2 scopeprotocols/PRBSGeneratorFilter.cpp
  136. +5 −5 scopeprotocols/PeakHoldFilter.cpp
  137. +2 −2 scopeprotocols/PeakHoldFilter.h
  138. +3 −3 scopeprotocols/PeriodMeasurement.cpp
  139. +4 −4 scopeprotocols/PeriodMeasurement.h
  140. +3 −3 scopeprotocols/PhaseMeasurement.cpp
  141. +2 −2 scopeprotocols/PhaseMeasurement.h
  142. +4 −3 scopeprotocols/PkPkMeasurement.cpp
  143. +2 −2 scopeprotocols/PkPkMeasurement.h
  144. +3 −3 scopeprotocols/QuadratureDecoder.cpp
  145. +2 −2 scopeprotocols/QuadratureDecoder.h
  146. +3 −3 scopeprotocols/RiseMeasurement.cpp
  147. +4 −4 scopeprotocols/RiseMeasurement.h
  148. +3 −3 scopeprotocols/RjBUjFilter.cpp
  149. +2 −2 scopeprotocols/RjBUjFilter.h
  150. +0 −5 scopeprotocols/SWDMemAPDecoder.cpp
  151. +0 −1 scopeprotocols/SWDMemAPDecoder.h
  152. +5 −5 scopeprotocols/SpectrogramFilter.cpp
  153. +4 −4 scopeprotocols/SpectrogramFilter.h
  154. +2 −2 scopeprotocols/StepGeneratorFilter.cpp
  155. +2 −2 scopeprotocols/StepGeneratorFilter.h
  156. +13 −13 scopeprotocols/SubtractFilter.cpp
  157. +2 −2 scopeprotocols/SubtractFilter.h
  158. +6 −6 scopeprotocols/TDRFilter.cpp
  159. +6 −6 scopeprotocols/TDRFilter.h
  160. +5 −5 scopeprotocols/TDRStepDeEmbedFilter.cpp
  161. +4 −4 scopeprotocols/TDRStepDeEmbedFilter.h
  162. +3 −3 scopeprotocols/TIEMeasurement.cpp
  163. +2 −2 scopeprotocols/TIEMeasurement.h
  164. +3 −3 scopeprotocols/TachometerFilter.cpp
  165. +4 −4 scopeprotocols/TachometerFilter.h
  166. +3 −3 scopeprotocols/TappedDelayLineFilter.cpp
  167. +2 −2 scopeprotocols/TappedDelayLineFilter.h
  168. +2 −2 scopeprotocols/TopMeasurement.cpp
  169. +4 −4 scopeprotocols/TopMeasurement.h
  170. +0 −5 scopeprotocols/USB2PCSDecoder.cpp
  171. +0 −2 scopeprotocols/USB2PCSDecoder.h
  172. +0 −5 scopeprotocols/USB2PMADecoder.cpp
  173. +0 −2 scopeprotocols/USB2PMADecoder.h
  174. +0 −5 scopeprotocols/USB2PacketDecoder.cpp
  175. +0 −2 scopeprotocols/USB2PacketDecoder.h
  176. +0 −6 scopeprotocols/UartClockRecoveryFilter.cpp
  177. +0 −2 scopeprotocols/UartClockRecoveryFilter.h
  178. +2 −2 scopeprotocols/UndershootMeasurement.cpp
  179. +4 −4 scopeprotocols/UndershootMeasurement.h
  180. +4 −4 scopeprotocols/UpsampleFilter.cpp
  181. +2 −2 scopeprotocols/UpsampleFilter.h
  182. +3 −6 scopeprotocols/VectorPhaseFilter.cpp
  183. +2 −2 scopeprotocols/VectorPhaseFilter.h
  184. +6 −5 scopeprotocols/VerticalBathtub.cpp
  185. +2 −2 scopeprotocols/VerticalBathtub.h
  186. +4 −4 scopeprotocols/Waterfall.cpp
  187. +2 −2 scopeprotocols/Waterfall.h
  188. +2 −2 scopeprotocols/WaveformGenerationFilter.cpp
  189. +2 −2 scopeprotocols/WaveformGenerationFilter.h
  190. +3 −3 scopeprotocols/WindowedAutocorrelationFilter.cpp
  191. +4 −4 scopeprotocols/WindowedAutocorrelationFilter.h
12 changes: 6 additions & 6 deletions scopehal/AgilentOscilloscope.cpp
Original file line number Diff line number Diff line change
@@ -422,7 +422,7 @@ void AgilentOscilloscope::SetChannelBandwidthLimit(size_t /*i*/, unsigned int /*
//FIXME
}

double AgilentOscilloscope::GetChannelVoltageRange(size_t i)
float AgilentOscilloscope::GetChannelVoltageRange(size_t i, size_t /*stream*/)
{
if(m_channels[i]->GetType() != OscilloscopeChannel::CHANNEL_TYPE_ANALOG)
return 1;
@@ -442,13 +442,13 @@ double AgilentOscilloscope::GetChannelVoltageRange(size_t i)
reply = m_transport->ReadReply();
}

double range = stod(reply);
float range = stof(reply);
lock_guard<recursive_mutex> lock(m_cacheMutex);
m_channelVoltageRanges[i] = range;
return range;
}

void AgilentOscilloscope::SetChannelVoltageRange(size_t i, double range)
void AgilentOscilloscope::SetChannelVoltageRange(size_t i, size_t /*stream*/, float range)
{
{
lock_guard<recursive_mutex> lock(m_cacheMutex);
@@ -467,7 +467,7 @@ OscilloscopeChannel* AgilentOscilloscope::GetExternalTrigger()
return NULL;
}

double AgilentOscilloscope::GetChannelOffset(size_t i)
float AgilentOscilloscope::GetChannelOffset(size_t i, size_t /*stream*/)
{
if(!IsAnalogChannel(i))
return 0;
@@ -486,15 +486,15 @@ double AgilentOscilloscope::GetChannelOffset(size_t i)
reply = m_transport->ReadReply();
}

double offset = stod(reply);
float offset = stof(reply);
offset = -offset;

lock_guard<recursive_mutex> lock(m_cacheMutex);
m_channelOffsets[i] = offset;
return offset;
}

void AgilentOscilloscope::SetChannelOffset(size_t i, double offset)
void AgilentOscilloscope::SetChannelOffset(size_t i, size_t /*stream*/, float offset)
{
{
lock_guard<recursive_mutex> lock(m_cacheMutex);
12 changes: 6 additions & 6 deletions scopehal/AgilentOscilloscope.h
Original file line number Diff line number Diff line change
@@ -62,11 +62,11 @@ class AgilentOscilloscope : public SCPIOscilloscope
virtual void SetChannelAttenuation(size_t i, double atten);
virtual int GetChannelBandwidthLimit(size_t i);
virtual void SetChannelBandwidthLimit(size_t i, unsigned int limit_mhz);
virtual double GetChannelVoltageRange(size_t i);
virtual void SetChannelVoltageRange(size_t i, double range);
virtual float GetChannelVoltageRange(size_t i, size_t stream);
virtual void SetChannelVoltageRange(size_t i, size_t stream, float range);
virtual OscilloscopeChannel* GetExternalTrigger();
virtual double GetChannelOffset(size_t i);
virtual void SetChannelOffset(size_t i, double offset);
virtual float GetChannelOffset(size_t i, size_t stream);
virtual void SetChannelOffset(size_t i, size_t stream, float offset);

//Triggering
virtual Oscilloscope::TriggerMode PollTrigger();
@@ -112,8 +112,8 @@ class AgilentOscilloscope : public SCPIOscilloscope
};

//config cache
std::map<size_t, double> m_channelOffsets;
std::map<size_t, double> m_channelVoltageRanges;
std::map<size_t, float> m_channelOffsets;
std::map<size_t, float> m_channelVoltageRanges;
std::map<size_t, OscilloscopeChannel::CouplingType> m_channelCouplings;
std::map<size_t, double> m_channelAttenuations;
std::map<size_t, int> m_channelBandwidthLimits;
16 changes: 8 additions & 8 deletions scopehal/AntikernelLabsOscilloscope.cpp
Original file line number Diff line number Diff line change
@@ -257,7 +257,7 @@ void AntikernelLabsOscilloscope::SetChannelBandwidthLimit(size_t /*i*/, unsigned
LogWarning("AntikernelLabsOscilloscope::SetChannelBandwidthLimit unimplemented\n");
}

double AntikernelLabsOscilloscope::GetChannelVoltageRange(size_t i)
float AntikernelLabsOscilloscope::GetChannelVoltageRange(size_t i, size_t /*stream*/)
{
{
lock_guard<recursive_mutex> lock(m_cacheMutex);
@@ -288,7 +288,7 @@ double AntikernelLabsOscilloscope::GetChannelVoltageRange(size_t i)
return vfs;
}

void AntikernelLabsOscilloscope::SetChannelVoltageRange(size_t i, double range)
void AntikernelLabsOscilloscope::SetChannelVoltageRange(size_t i, size_t /*stream*/, float range)
{
//Convert requested range to gain
float frac_gain = 2.0 / range;
@@ -324,7 +324,7 @@ OscilloscopeChannel* AntikernelLabsOscilloscope::GetExternalTrigger()
return NULL;
}

double AntikernelLabsOscilloscope::GetChannelOffset(size_t i)
float AntikernelLabsOscilloscope::GetChannelOffset(size_t i, size_t /*stream*/)
{
{
lock_guard<recursive_mutex> lock(m_cacheMutex);
@@ -338,14 +338,14 @@ double AntikernelLabsOscilloscope::GetChannelOffset(size_t i)
m_transport->SendCommand(m_channels[i]->GetHwname() + ":OFFS?");

string reply = m_transport->ReadReply();
double offset;
sscanf(reply.c_str(), "%lf", &offset);
float offset;
sscanf(reply.c_str(), "%f", &offset);
lock_guard<recursive_mutex> lock(m_cacheMutex);
m_channelOffsets[i] = offset;
return offset;
}

void AntikernelLabsOscilloscope::SetChannelOffset(size_t i, double offset)
void AntikernelLabsOscilloscope::SetChannelOffset(size_t i, size_t /*stream*/, float offset)
{
lock_guard<recursive_mutex> lock(m_mutex);

@@ -383,9 +383,9 @@ bool AntikernelLabsOscilloscope::AcquireData()
cap->m_startFemtoseconds = (t - cap->m_startTimestamp) * FS_PER_SECOND;

//Process the samples
float fullscale = GetChannelVoltageRange(0);
float fullscale = GetChannelVoltageRange(0, 0);
float scale = fullscale / 256.0f;
float offset = GetChannelOffset(0);
float offset = GetChannelOffset(0, 0);
cap->Resize(depth);
for(size_t i=0; i<depth; i++)
{
12 changes: 6 additions & 6 deletions scopehal/AntikernelLabsOscilloscope.h
Original file line number Diff line number Diff line change
@@ -57,11 +57,11 @@ class AntikernelLabsOscilloscope : public SCPIOscilloscope
virtual void SetChannelAttenuation(size_t i, double atten);
virtual int GetChannelBandwidthLimit(size_t i);
virtual void SetChannelBandwidthLimit(size_t i, unsigned int limit_mhz);
virtual double GetChannelVoltageRange(size_t i);
virtual void SetChannelVoltageRange(size_t i, double range);
virtual float GetChannelVoltageRange(size_t i, size_t stream);
virtual void SetChannelVoltageRange(size_t i, size_t stream, float range);
virtual OscilloscopeChannel* GetExternalTrigger();
virtual double GetChannelOffset(size_t i);
virtual void SetChannelOffset(size_t i, double offset);
virtual float GetChannelOffset(size_t i, size_t stream);
virtual void SetChannelOffset(size_t i, size_t stream, float offset);

//Triggering
virtual Oscilloscope::TriggerMode PollTrigger();
@@ -101,8 +101,8 @@ class AntikernelLabsOscilloscope : public SCPIOscilloscope
unsigned int m_analogChannelCount;

//config cache
std::map<size_t, double> m_channelOffsets;
std::map<size_t, double> m_channelVoltageRanges;
std::map<size_t, float> m_channelOffsets;
std::map<size_t, float> m_channelVoltageRanges;
/*
std::map<int, bool> m_channelsEnabled;
bool m_triggerChannelValid;
8 changes: 4 additions & 4 deletions scopehal/AntikernelLogicAnalyzer.cpp
Original file line number Diff line number Diff line change
@@ -519,12 +519,12 @@ void AntikernelLogicAnalyzer::SetChannelBandwidthLimit(size_t /*i*/, unsigned in
//no-op, all channels are digital
}

double AntikernelLogicAnalyzer::GetChannelVoltageRange(size_t /*i*/)
float AntikernelLogicAnalyzer::GetChannelVoltageRange(size_t /*i*/, size_t /*stream*/)
{
return 1;
}

void AntikernelLogicAnalyzer::SetChannelVoltageRange(size_t /*i*/, double /*range*/)
void AntikernelLogicAnalyzer::SetChannelVoltageRange(size_t /*i*/, size_t /*stream*/, float /*range*/)
{
//no-op, all channels are digital
}
@@ -534,12 +534,12 @@ OscilloscopeChannel* AntikernelLogicAnalyzer::GetExternalTrigger()
return NULL;
}

double AntikernelLogicAnalyzer::GetChannelOffset(size_t /*i*/)
float AntikernelLogicAnalyzer::GetChannelOffset(size_t /*i*/, size_t /*stream*/)
{
return 0;
}

void AntikernelLogicAnalyzer::SetChannelOffset(size_t /*i*/, double /*offset*/)
void AntikernelLogicAnalyzer::SetChannelOffset(size_t /*i*/, size_t /*stream*/, float /*offset*/)
{
//no-op, all channels are digital
}
8 changes: 4 additions & 4 deletions scopehal/AntikernelLogicAnalyzer.h
Original file line number Diff line number Diff line change
@@ -68,11 +68,11 @@ class AntikernelLogicAnalyzer
virtual void SetChannelAttenuation(size_t i, double atten);
virtual int GetChannelBandwidthLimit(size_t i);
virtual void SetChannelBandwidthLimit(size_t i, unsigned int limit_mhz);
virtual double GetChannelVoltageRange(size_t i);
virtual void SetChannelVoltageRange(size_t i, double range);
virtual float GetChannelVoltageRange(size_t i, size_t stream);
virtual void SetChannelVoltageRange(size_t i, size_t stream, float range);
virtual OscilloscopeChannel* GetExternalTrigger();
virtual double GetChannelOffset(size_t i);
virtual void SetChannelOffset(size_t i, double offset);
virtual float GetChannelOffset(size_t i, size_t stream);
virtual void SetChannelOffset(size_t i, size_t stream, float offset);

//Triggering
virtual Oscilloscope::TriggerMode PollTrigger();
1 change: 0 additions & 1 deletion scopehal/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -93,7 +93,6 @@ set(SCOPEHAL_SOURCES
PicoOscilloscope.cpp
RigolOscilloscope.cpp
SiglentSCPIOscilloscope.cpp
SignalGeneratorOscilloscope.cpp
TektronixOscilloscope.cpp
RohdeSchwarzOscilloscope.cpp
RohdeSchwarzHMC8012Multimeter.cpp
8 changes: 4 additions & 4 deletions scopehal/DemoOscilloscope.cpp
Original file line number Diff line number Diff line change
@@ -272,12 +272,12 @@ void DemoOscilloscope::SetChannelBandwidthLimit(size_t i, unsigned int limit_mhz
m_channelBandwidth[i] = limit_mhz;
}

double DemoOscilloscope::GetChannelVoltageRange(size_t i)
float DemoOscilloscope::GetChannelVoltageRange(size_t i, size_t /*stream*/)
{
return m_channelVoltageRange[i];
}

void DemoOscilloscope::SetChannelVoltageRange(size_t i, double range)
void DemoOscilloscope::SetChannelVoltageRange(size_t i, size_t /*stream*/, float range)
{
m_channelVoltageRange[i] = range;
}
@@ -287,12 +287,12 @@ OscilloscopeChannel* DemoOscilloscope::GetExternalTrigger()
return m_extTrigger;
}

double DemoOscilloscope::GetChannelOffset(size_t i)
float DemoOscilloscope::GetChannelOffset(size_t i, size_t /*stream*/)
{
return m_channelOffset[i];
}

void DemoOscilloscope::SetChannelOffset(size_t i, double offset)
void DemoOscilloscope::SetChannelOffset(size_t i, size_t /*stream*/, float offset)
{
m_channelOffset[i] = offset;
}
12 changes: 6 additions & 6 deletions scopehal/DemoOscilloscope.h
Original file line number Diff line number Diff line change
@@ -65,11 +65,11 @@ class DemoOscilloscope : public SCPIOscilloscope
virtual void SetChannelAttenuation(size_t i, double atten);
virtual int GetChannelBandwidthLimit(size_t i);
virtual void SetChannelBandwidthLimit(size_t i, unsigned int limit_mhz);
virtual double GetChannelVoltageRange(size_t i);
virtual void SetChannelVoltageRange(size_t i, double range);
virtual float GetChannelVoltageRange(size_t i, size_t stream);
virtual void SetChannelVoltageRange(size_t i, size_t stream, float range);
virtual OscilloscopeChannel* GetExternalTrigger();
virtual double GetChannelOffset(size_t i);
virtual void SetChannelOffset(size_t i, double offset);
virtual float GetChannelOffset(size_t i, size_t stream);
virtual void SetChannelOffset(size_t i, size_t stream, float offset);

//Triggering
virtual Oscilloscope::TriggerMode PollTrigger();
@@ -114,8 +114,8 @@ class DemoOscilloscope : public SCPIOscilloscope
std::map<size_t, OscilloscopeChannel::CouplingType> m_channelCoupling;
std::map<size_t, double> m_channelAttenuation;
std::map<size_t, unsigned int> m_channelBandwidth;
std::map<size_t, double> m_channelVoltageRange;
std::map<size_t, double> m_channelOffset;
std::map<size_t, float> m_channelVoltageRange;
std::map<size_t, float> m_channelOffset;
std::map<size_t, size_t> m_channelModes;

enum ChannelModes
38 changes: 33 additions & 5 deletions scopehal/Filter.cpp
Original file line number Diff line number Diff line change
@@ -803,10 +803,20 @@ string Filter::SerializeConfiguration(IDTable& table, size_t /*indent*/)
config += tmp;

//Save gain and offset (not applicable to all filters, but save it just in case)
snprintf(tmp, sizeof(tmp), " vrange: %f\n", GetVoltageRange());
config += tmp;
snprintf(tmp, sizeof(tmp), " offset: %f\n", GetOffset());
snprintf(tmp, sizeof(tmp), " streams:\n");
config += tmp;
for(size_t i=0; i<GetStreamCount(); i++)
{
snprintf(tmp, sizeof(tmp), " stream%zu:\n", i);
config += tmp;

snprintf(tmp, sizeof(tmp), " index: %zu\n", i);
config += tmp;
snprintf(tmp, sizeof(tmp), " vrange: %f\n", GetVoltageRange(i));
config += tmp;
snprintf(tmp, sizeof(tmp), " offset: %f\n", GetOffset(i));
config += tmp;
}

return config;
}
@@ -819,10 +829,28 @@ void Filter::LoadParameters(const YAML::Node& node, IDTable& table)
m_displayname = node["nick"].as<string>();
m_hwname = node["name"].as<string>();

//Load legacy single-stream range/offset parameters
if(node["vrange"])
SetVoltageRange(node["vrange"].as<double>());
SetVoltageRange(node["vrange"].as<float>(), 0);
if(node["offset"])
SetOffset(node["offset"].as<double>());
SetOffset(node["offset"].as<float>(), 0);

//Load stream configuration
auto streams = node["streams"];
if(streams)
{
for(auto it : streams)
{
auto snode = it.second;
if(!snode["index"])
continue;
auto index = snode["index"].as<int>();
if(snode["vrange"])
SetVoltageRange(snode["vrange"].as<float>(), index);
if(snode["offset"])
SetOffset(snode["offset"].as<float>(), index);
}
}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
15 changes: 15 additions & 0 deletions scopehal/FlowGraphNode.h
Original file line number Diff line number Diff line change
@@ -61,6 +61,9 @@ class StreamDescriptor
OscilloscopeChannel* m_channel;
size_t m_stream;

Unit GetYAxisUnits()
{ return m_channel->GetYAxisUnits(m_stream); }

WaveformBase* GetData()
{ return m_channel->GetData(m_stream); }

@@ -79,6 +82,18 @@ class StreamDescriptor

return false;
}

float GetVoltageRange()
{ return m_channel->GetVoltageRange(m_stream); }

float GetOffset()
{ return m_channel->GetOffset(m_stream); }

void SetVoltageRange(float v)
{ m_channel->SetVoltageRange(v, m_stream); }

void SetOffset(float v)
{ m_channel->SetOffset(v, m_stream); }
};

/**
Loading