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: 345d64b75eca
Choose a base ref
...
head repository: ngscopeclient/scopehal
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: b7ad0ebb9a65
Choose a head ref
  • 2 commits
  • 7 files changed
  • 1 contributor

Commits on May 17, 2020

  1. Whitespace fixes

    azonenberg committed May 17, 2020
    Copy the full SHA
    2a36ebe View commit details
  2. Copy the full SHA
    b7ad0eb View commit details
1 change: 0 additions & 1 deletion scopehal/LeCroyOscilloscope.cpp
Original file line number Diff line number Diff line change
@@ -1464,7 +1464,6 @@ bool LeCroyOscilloscope::AcquireData(bool toQueue)
}
}


//TODO: proper support for sequenced capture when digital channels are active
//(seems like this doesn't work right on at least wavesurfer 3000 series)

4 changes: 2 additions & 2 deletions scopeprotocols/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@ set(SCOPEPROTOCOLS_SOURCES
ClockJitterDecoder.cpp
ClockRecoveryDecoder.cpp
DCOffsetDecoder.cpp
#DDR3Decoder.cpp
DDR3Decoder.cpp
DifferenceDecoder.cpp
#DramRefreshActivateMeasurementDecoder.cpp
#DramRowColumnLatencyMeasurementDecoder.cpp
@@ -34,7 +34,7 @@ set(SCOPEPROTOCOLS_SOURCES
#RiseMeasurementDecoder.cpp
#SincInterpolationDecoder.cpp
#SPIDecoder.cpp
#ThresholdDecoder.cpp
ThresholdDecoder.cpp
TMDSDecoder.cpp
#TopMeasurementDecoder.cpp
#ARTDecoder.cpp
67 changes: 31 additions & 36 deletions scopeprotocols/DDR3Decoder.cpp
Original file line number Diff line number Diff line change
@@ -35,6 +35,7 @@

#include "../scopehal/scopehal.h"
#include "DDR3Decoder.h"
#include <algorithm>

using namespace std;

@@ -101,15 +102,15 @@ void DDR3Decoder::SetDefaultName()
void DDR3Decoder::Refresh()
{
//Get the input data
DigitalCapture* caps[7] = {0};
DigitalWaveform* caps[7] = {0};
for(int i=0; i<7; i++)
{
if(m_channels[i] == NULL)
{
SetData(NULL);
return;
}
DigitalCapture* cap = dynamic_cast<DigitalCapture*>(m_channels[i]->GetData());
auto cap = dynamic_cast<DigitalWaveform*>(m_channels[i]->GetData());
if(cap == NULL)
{
SetData(NULL);
@@ -119,13 +120,13 @@ void DDR3Decoder::Refresh()
}

//Sample all of the inputs
DigitalCapture* cclk = caps[0];
vector<DigitalSample> we;
vector<DigitalSample> ras;
vector<DigitalSample> cas;
vector<DigitalSample> cs;
vector<DigitalSample> a12;
vector<DigitalSample> a10;
DigitalWaveform* cclk = caps[0];
DigitalWaveform we;
DigitalWaveform ras;
DigitalWaveform cas;
DigitalWaveform cs;
DigitalWaveform a12;
DigitalWaveform a10;
SampleOnRisingEdges(caps[1], cclk, we);
SampleOnRisingEdges(caps[2], cclk, ras);
SampleOnRisingEdges(caps[3], cclk, cas);
@@ -134,30 +135,26 @@ void DDR3Decoder::Refresh()
SampleOnRisingEdges(caps[6], cclk, a10);

//Create the capture
DDR3Capture* cap = new DDR3Capture;
auto cap = new DDR3Waveform;
cap->m_timescale = 1;
cap->m_startTimestamp = cclk->m_startTimestamp;
cap->m_startPicoseconds = 0;

//Loop over the data and look for events on clock edges
for(size_t i=0; i<we.size(); i++)
size_t len = we.m_samples.size();
len = min(len, ras.m_samples.size());
len = min(len, cas.m_samples.size());
len = min(len, cs.m_samples.size());
len = min(len, a12.m_samples.size());
len = min(len, a10.m_samples.size());
for(size_t i=0; i<len; i++)
{
//Abort if one of the other waveforms ends earlier
if( (i >= ras.size()) ||
(i >= cas.size()) ||
(i >= cs.size()) ||
(i >= a12.size()) ||
(i >= a10.size()) )
{
break;
}

bool swe = we[i];
bool sras = ras[i];
bool scas = cas[i];
bool scs = cs[i];
bool sa12 = a12[i];
bool sa10 = a10[i];
bool swe = we.m_samples[i];
bool sras = ras.m_samples[i];
bool scas = cas.m_samples[i];
bool scs = cs.m_samples[i];
bool sa12 = a12.m_samples[i];
bool sa10 = a10.m_samples[i];

if(!scs)
{
@@ -198,22 +195,20 @@ void DDR3Decoder::Refresh()
LogDebug("[%zu] Unknown command (RAS=%d, CAS=%d, WE=%d, A12=%d, A10=%d)\n", i, sras, scas, swe, sa12, sa10);

//Create the symbol
cap->m_samples.push_back(DDR3Sample(
we[i].m_offset,
we[i].m_duration,
sym));
cap->m_offsets.push_back(we.m_offsets[i]);
cap->m_durations.push_back(we.m_durations[i]);
cap->m_samples.push_back(sym);
}
}

SetData(cap);
}

Gdk::Color DDR3Decoder::GetColor(int i)
{
DDR3Capture* capture = dynamic_cast<DDR3Capture*>(GetData());
auto capture = dynamic_cast<DDR3Waveform*>(GetData());
if(capture != NULL)
{
const DDR3Symbol& s = capture->m_samples[i].m_sample;
const DDR3Symbol& s = capture->m_samples[i];

switch(s.m_stype)
{
@@ -242,10 +237,10 @@ Gdk::Color DDR3Decoder::GetColor(int i)

string DDR3Decoder::GetText(int i)
{
DDR3Capture* capture = dynamic_cast<DDR3Capture*>(GetData());
auto capture = dynamic_cast<DDR3Waveform*>(GetData());
if(capture != NULL)
{
const DDR3Symbol& s = capture->m_samples[i].m_sample;
const DDR3Symbol& s = capture->m_samples[i];

switch(s.m_stype)
{
6 changes: 4 additions & 2 deletions scopeprotocols/DDR3Decoder.h
Original file line number Diff line number Diff line change
@@ -56,6 +56,9 @@ class DDR3Symbol
TYPE_ERROR
};

DDR3Symbol()
{}

DDR3Symbol(stype t, int bank = 0)
: m_stype(t)
, m_bank(bank)
@@ -70,8 +73,7 @@ class DDR3Symbol
}
};

typedef OscilloscopeSample<DDR3Symbol> DDR3Sample;
typedef CaptureChannel<DDR3Symbol> DDR3Capture;
typedef Waveform<DDR3Symbol> DDR3Waveform;

class DDR3Decoder : public ProtocolDecoder
{
18 changes: 8 additions & 10 deletions scopeprotocols/ThresholdDecoder.cpp
Original file line number Diff line number Diff line change
@@ -89,31 +89,29 @@ void ThresholdDecoder::Refresh()
SetData(NULL);
return;
}
AnalogCapture* din = dynamic_cast<AnalogCapture*>(m_channels[0]->GetData());
auto din = dynamic_cast<AnalogWaveform*>(m_channels[0]->GetData());
if(din == NULL)
{
SetData(NULL);
return;
}

//Can't do much if we have no samples to work with
if(din->GetDepth() == 0)
auto len = din->m_samples.size();
if(len == 0)
{
SetData(NULL);
return;
}

//Threshold all of our samples
float midpoint = m_parameters[m_threshname].GetFloatVal();
DigitalCapture* cap = new DigitalCapture;
cap->m_samples.resize(din->m_samples.size());
DigitalWaveform* cap = new DigitalWaveform;
cap->Resize(len);
cap->CopyTimestamps(din);
#pragma omp parallel for
for(size_t i=0; i<din->m_samples.size(); i++)
{
AnalogSample sin = din->m_samples[i];
bool b = (float)sin > midpoint;
cap->m_samples[i] = DigitalSample(sin.m_offset, sin.m_duration, b);
}
for(size_t i=0; i<len; i++)
cap->m_samples[i] = din->m_samples[i] > midpoint;
SetData(cap);

//Copy our time scales from the input
4 changes: 3 additions & 1 deletion scopeprotocols/scopeprotocols.cpp
Original file line number Diff line number Diff line change
@@ -49,7 +49,7 @@ void ScopeProtocolStaticInit()
AddDecoderClass(ClockRecoveryDecoder);
AddDecoderClass(ClockJitterDecoder);
AddDecoderClass(DCOffsetDecoder);
//AddDecoderClass(DDR3Decoder);
AddDecoderClass(DDR3Decoder);
AddDecoderClass(DifferenceDecoder);
/*
AddDecoderClass(DramRefreshActivateMeasurementDecoder);
@@ -80,7 +80,9 @@ void ScopeProtocolStaticInit()
AddDecoderClass(RiseMeasurementDecoder);
AddDecoderClass(SincInterpolationDecoder);
AddDecoderClass(SPIDecoder);
*/
AddDecoderClass(ThresholdDecoder);
/*
AddDecoderClass(TMDSDecoder);
AddDecoderClass(TopMeasurementDecoder);
AddDecoderClass(UARTDecoder);
4 changes: 3 additions & 1 deletion scopeprotocols/scopeprotocols.h
Original file line number Diff line number Diff line change
@@ -49,7 +49,7 @@
#include "ClockJitterDecoder.h"
#include "ClockRecoveryDecoder.h"
#include "DCOffsetDecoder.h"
//#include "DDR3Decoder.h"
#include "DDR3Decoder.h"
#include "DifferenceDecoder.h"
/*
#include "DramRefreshActivateMeasurementDecoder.h"
@@ -81,7 +81,9 @@
#include "RiseMeasurementDecoder.h"
#include "SincInterpolationDecoder.h"
#include "SPIDecoder.h"
*/
#include "ThresholdDecoder.h"
/*
#include "TMDSDecoder.h"
#include "TopMeasurementDecoder.h"
#include "UARTDecoder.h"