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

Commits on Dec 8, 2020

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    936e889 View commit details
  2. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    3fdca1d View commit details
  3. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    47bd91f View commit details
  4. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    2a9cbb5 View commit details
  5. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    4502701 View commit details
2 changes: 2 additions & 0 deletions scopeprotocols/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -11,6 +11,7 @@ set(SCOPEPROTOCOLS_SOURCES
ClockRecoveryFilter.cpp
CTLEFilter.cpp
CurrentShuntFilter.cpp
DCDMeasurement.cpp
DCOffsetFilter.cpp
DDJMeasurement.cpp
DDR3Decoder.cpp
@@ -54,6 +55,7 @@ set(SCOPEPROTOCOLS_SOURCES
I2CEepromDecoder.cpp
IBM8b10bDecoder.cpp
IPv4Decoder.cpp
ISIMeasurement.cpp
JitterSpectrumFilter.cpp
JtagDecoder.cpp
MagnitudeFilter.cpp
154 changes: 154 additions & 0 deletions scopeprotocols/DCDMeasurement.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
/***********************************************************************************************************************
* *
* ANTIKERNEL v0.1 *
* *
* Copyright (c) 2012-2020 Andrew D. Zonenberg *
* All rights reserved. *
* *
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the *
* following conditions are met: *
* *
* * Redistributions of source code must retain the above copyright notice, this list of conditions, and the *
* following disclaimer. *
* *
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the *
* following disclaimer in the documentation and/or other materials provided with the distribution. *
* *
* * Neither the name of the author nor the names of any contributors may be used to endorse or promote products *
* derived from this software without specific prior written permission. *
* *
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL *
* THE AUTHORS BE HELD LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR *
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *
* POSSIBILITY OF SUCH DAMAGE. *
* *
***********************************************************************************************************************/

#include "scopeprotocols.h"

using namespace std;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Construction / destruction

DCDMeasurement::DCDMeasurement(const string& color)
: Filter(OscilloscopeChannel::CHANNEL_TYPE_ANALOG, color, CAT_MEASUREMENT)
{
m_yAxisUnit = Unit(Unit::UNIT_FS);

//Set up channels
CreateInput("DDJ");
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Factory methods

bool DCDMeasurement::ValidateChannel(size_t i, StreamDescriptor stream)
{
if(stream.m_channel == NULL)
return false;

if( (i == 0) && (dynamic_cast<DDJMeasurement*>(stream.m_channel) != NULL) )
return true;

return false;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Accessors

void DCDMeasurement::SetDefaultName()
{
char hwname[256];
snprintf(hwname, sizeof(hwname), "DCD(%s)", GetInputDisplayName(0).c_str());
m_hwname = hwname;
m_displayname = m_hwname;
}

string DCDMeasurement::GetProtocolName()
{
return "DCD";
}

bool DCDMeasurement::IsOverlay()
{
//we create a new analog channel
return false;
}

bool DCDMeasurement::IsScalarOutput()
{
return true;
}

bool DCDMeasurement::NeedsConfig()
{
return false;
}

double DCDMeasurement::GetVoltageRange()
{
return 1;
}

double DCDMeasurement::GetOffset()
{
return 0;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Actual decoder logic

void DCDMeasurement::Refresh()
{
if(!VerifyAllInputsOK())
{
SetData(NULL, 0);
return;
}

//Get the input data
auto din = GetAnalogInputWaveform(0);
auto ddj = dynamic_cast<DDJMeasurement*>(GetInput(0).m_channel);
float* table = ddj->GetDDJTable();

//Check all of the bins and find total jitter for rising and falling edges.
//Note that the table has LSB most recent, so 10...... is a rising edge and 01...... is a falling edge.
//We check for zero in case the table is incomplete (this should not drag the mean down).
int rising_count = 0;
float rising_sum = 0;
int falling_count = 0;
float falling_sum = 0;
for(int i=0; i<256; i++)
{
if(table[i] == 0)
continue;

if(i & 0x80)
{
rising_count ++;
rising_sum += table[i];
}
else
{
falling_count ++;
falling_sum += table[i];
}
}

float rising_avg = rising_sum / rising_count;
float falling_avg = falling_sum / falling_count;
float dcd = fabs(rising_avg - falling_avg);

auto cap = new AnalogWaveform;
cap->m_offsets.push_back(0);
cap->m_durations.push_back(1);
cap->m_samples.push_back(dcd);
cap->m_timescale = 1;
cap->m_startTimestamp = din->m_startTimestamp;
cap->m_startFemtoseconds = din->m_startFemtoseconds;
SetData(cap, 0);
}
61 changes: 61 additions & 0 deletions scopeprotocols/DCDMeasurement.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/***********************************************************************************************************************
* *
* ANTIKERNEL v0.1 *
* *
* Copyright (c) 2012-2020 Andrew D. Zonenberg *
* All rights reserved. *
* *
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the *
* following conditions are met: *
* *
* * Redistributions of source code must retain the above copyright notice, this list of conditions, and the *
* following disclaimer. *
* *
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the *
* following disclaimer in the documentation and/or other materials provided with the distribution. *
* *
* * Neither the name of the author nor the names of any contributors may be used to endorse or promote products *
* derived from this software without specific prior written permission. *
* *
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL *
* THE AUTHORS BE HELD LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR *
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *
* POSSIBILITY OF SUCH DAMAGE. *
* *
***********************************************************************************************************************/

/**
@file
@author Andrew D. Zonenberg
@brief Declaration of DCDMeasurement
*/
#ifndef DCDMeasurement_h
#define DCDMeasurement_h

class DCDMeasurement : public Filter
{
public:
DCDMeasurement(const std::string& color);

virtual void Refresh();

virtual bool IsScalarOutput();

virtual bool NeedsConfig();
virtual bool IsOverlay();

static std::string GetProtocolName();
virtual void SetDefaultName();

virtual double GetVoltageRange();
virtual double GetOffset();

virtual bool ValidateChannel(size_t i, StreamDescriptor stream);

PROTOCOL_DECODER_INITPROC(DCDMeasurement)
};

#endif
9 changes: 7 additions & 2 deletions scopeprotocols/DDJMeasurement.cpp
Original file line number Diff line number Diff line change
@@ -56,8 +56,13 @@ bool DDJMeasurement::ValidateChannel(size_t i, StreamDescriptor stream)
if(stream.m_channel == NULL)
return false;

if( (i == 0) && (stream.m_channel->GetType() == OscilloscopeChannel::CHANNEL_TYPE_ANALOG) )
if( (i == 0) &&
(stream.m_channel->GetType() == OscilloscopeChannel::CHANNEL_TYPE_ANALOG) &&
(stream.m_channel->GetYAxisUnits() == Unit::UNIT_FS)
)
{
return true;
}
if( (i <= 2) && (stream.m_channel->GetType() == OscilloscopeChannel::CHANNEL_TYPE_DIGITAL) )
return true;

@@ -70,7 +75,7 @@ bool DDJMeasurement::ValidateChannel(size_t i, StreamDescriptor stream)
void DDJMeasurement::SetDefaultName()
{
char hwname[256];
snprintf(hwname, sizeof(hwname), "DDJ(%s, %s)",
snprintf(hwname, sizeof(hwname), "DDJpp(%s, %s)",
GetInputDisplayName(0).c_str(),
GetInputDisplayName(1).c_str());
m_hwname = hwname;
Loading