ngscopeclient 0.1-dev+51fbda87c
Public Types | Public Member Functions | Protected Attributes | List of all members

A pattern checker channel of a BERT. More...

#include <BERTInputChannel.h>

Inheritance diagram for BERTInputChannel:
Inheritance graph
[legend]
Collaboration diagram for BERTInputChannel:
Collaboration graph
[legend]

Public Types

enum  StreamIDs { STREAM_HBATHTUB = 0 , STREAM_EYE = 1 , STREAM_BER = 2 , STREAM_MASKHITRATE = 3 }
 Well known indexes of output streams. More...
 
- Public Types inherited from OscilloscopeChannel
enum  CouplingType {
  COUPLE_DC_1M , COUPLE_AC_1M , COUPLE_DC_50 , COUPLE_AC_50 ,
  COUPLE_GND , COUPLE_SYNTHETIC
}
 
- Public Types inherited from InstrumentChannel
enum  PhysicalConnector {
  CONNECTOR_BANANA_DUAL , CONNECTOR_BMA , CONNECTOR_BNC , CONNECTOR_K ,
  CONNECTOR_K_DUAL , CONNECTOR_N , CONNECTOR_SMA
}
 
enum  VisibilityMode { VIS_HIDE , VIS_AUTO , VIS_SHOW }
 Selects how the channel should be displayed in e.g. the ngscopeclient filter graph editor.
 
enum  DownloadState {
  DOWNLOAD_UNKNOWN , DOWNLOAD_NONE , DOWNLOAD_WAITING , DOWNLOAD_IN_PROGRESS ,
  DOWNLOAD_FINISHED
}
 Enum values to be mapped to GetDownloadState() int result value for specific channel download states. More...
 
- Public Types inherited from FlowGraphNode
enum  DataLocation { LOC_CPU , LOC_GPU , LOC_DONTCARE }
 
typedef std::map< std::string, FilterParameterParameterMapType
 Short name for a map of strings to parameters.
 

Public Member Functions

 BERTInputChannel (const std::string &hwname, std::weak_ptr< BERT > bert, const std::string &color="#808080", size_t index=0)
 Initialize the channel. More...
 
virtual void Refresh (vk::raii::CommandBuffer &cmdBuf, std::shared_ptr< QueueHandle > queue) override
 
virtual bool ValidateChannel (size_t i, StreamDescriptor stream) override
 
std::weak_ptr< BERTGetBERT () const
 Get the BERT we're part of.
 
bool GetInvert ()
 Get the polarity inversion state.
 
void SetInvert (bool invert)
 Set the polarity inversion state. More...
 
bool GetCdrLockState ()
 Check if the CDR is currently locked.
 
void SetPattern (BERT::Pattern pattern)
 Set the pattern this channel is expecting to see. More...
 
BERT::Pattern GetPattern ()
 Get the pattern this channel is expecting to see.
 
std::vector< BERT::PatternGetAvailablePatterns ()
 Get a list of all patterns this channel knows how to match.
 
int64_t GetScanDepth ()
 Gets the currently selected integration depth for eye / bathtub scans. More...
 
std::vector< int64_t > GetScanDepths ()
 Gets the available integration depths for eye / bathtub scans.
 
void SetScanDepth (int64_t depth)
 Sets the currently selected integration depth for eye / bathtub scans. More...
 
StreamDescriptor GetHBathtubStream ()
 Gets the stream for the horizontal bathtub output.
 
StreamDescriptor GetEyeStream ()
 Gets the stream for the eye pattern output.
 
StreamDescriptor GetBERStream ()
 Gets the stream for the realtime BER output.
 
bool HasCTLE ()
 Returns true if the channel has a CTLE on the input.
 
std::vector< float > GetCTLEGainSteps ()
 Get the set of available gain steps for the CTLE, in dB.
 
size_t GetCTLEGainStep ()
 Gets the currently selected CTLE gain step. More...
 
void SetCTLEGainStep (size_t step)
 Sets the gain for the CTLE. More...
 
void SetBERSamplingPoint (int64_t dx, float dy)
 Sets the sampling location for real time offset BER measurements. More...
 
void GetBERSamplingPoint (int64_t &dx, float &dy)
 Gets the sampling location for real time offset BER measurements. More...
 
int64_t GetDataRate ()
 Gets the data rate of this channel, in symbols per second.
 
void SetDataRate (int64_t rate)
 Sets the data rate of this channel, in symbols per second. More...
 
std::string GetMaskFile ()
 Gets the path of the mask file for pass/fail testing (if any)
 
void SetMaskFile (const std::string &fname)
 Sets the path of the mask file for pass/fail testing. More...
 
EyeMaskGetMask ()
 Gets the EyeMask being used for pass/fail testing (may be blank)
 
virtual PhysicalConnector GetPhysicalConnector () override
 
int64_t GetExpectedBathtubCaptureTime ()
 Estimate the time needed to capture a bathtub curve with the current settings. More...
 
int64_t GetExpectedEyeCaptureTime ()
 Estimate the time needed to capture an eye pattern with the current settings. More...
 
bool IsEyeScanInProgress ()
 Check if an eye scan is currently executing. More...
 
float GetScanProgress ()
 Returns an estimate of the current scan progress (if an eye or bathtub scan is executing) More...
 
bool IsHBathtubScanInProgress ()
 Check if a bathtub scan is currently executing. More...
 
virtual void ClearStreams () override
 Clears out any existing streams. More...
 
virtual size_t AddStream (Unit yunit, const std::string &name, Stream::StreamType stype, uint8_t flags=0) override
 Adds a new data stream to the channel. More...
 
virtual float GetVoltageRange (size_t stream) override
 
virtual void SetVoltageRange (float range, size_t stream) override
 
virtual float GetOffset (size_t stream) override
 
virtual void SetOffset (float offset, size_t stream) override
 
- Public Member Functions inherited from OscilloscopeChannel
 OscilloscopeChannel (Oscilloscope *scope, const std::string &hwname, const std::string &color, Unit xunit=Unit(Unit::UNIT_FS), size_t index=0)
 
 OscilloscopeChannel (Oscilloscope *scope, const std::string &hwname, const std::string &color, Unit xunit=Unit(Unit::UNIT_FS), Unit yunit=Unit(Unit::UNIT_VOLTS), Stream::StreamType stype=Stream::STREAM_TYPE_ANALOG, size_t index=0)
 
OscilloscopeGetScope ()
 
size_t GetRefCount ()
 
virtual void SetDisplayName (std::string name) override
 Sets the human-readable nickname for this channel, as displayed in the GUI. More...
 
virtual std::string GetDisplayName () override
 Gets the human-readable nickname for this channel, as displayed in the GUI. More...
 
bool IsEnabled ()
 
void Enable ()
 
void Disable ()
 
virtual void AddRef ()
 
virtual void Release ()
 
virtual CouplingType GetCoupling ()
 
virtual void SetCoupling (CouplingType type)
 
virtual std::vector< OscilloscopeChannel::CouplingType > GetAvailableCouplings ()
 
virtual double GetAttenuation ()
 
virtual void SetAttenuation (double atten)
 
virtual int GetBandwidthLimit ()
 
virtual void SetBandwidthLimit (int mhz)
 
virtual void SetDeskew (int64_t skew)
 
virtual int64_t GetDeskew ()
 
bool IsPhysicalChannel ()
 
virtual float GetVoltageRange (size_t stream)
 
virtual void SetVoltageRange (float range, size_t stream)
 
virtual float GetOffset (size_t stream)
 
virtual void SetOffset (float offset, size_t stream)
 
void SetDigitalHysteresis (float level)
 
void SetDigitalThreshold (float level)
 
void SetCenterFrequency (int64_t freq)
 
bool CanAutoZero ()
 
void AutoZero ()
 
bool CanDegauss ()
 
void Degauss ()
 
std::string GetProbeName ()
 
virtual bool CanInvert ()
 
virtual void Invert (bool invert)
 
virtual bool IsInverted ()
 
virtual bool HasInputMux ()
 
virtual size_t GetInputMuxSetting ()
 
virtual void SetInputMux (size_t select)
 
void SetDefaultDisplayName ()
 Gives a channel a default display name if there's not one already. More...
 
virtual DownloadState GetDownloadState () override
 Returns the current download state of this channel. More...
 
virtual float GetDownloadProgress () override
 returns the current completion of the download (on the range [0, 1]), if not DOWNLOAD_UNKNOWN More...
 
virtual double GetDownloadStartTime () override
 returns the start time of a download, if we are DOWNLOAD_IN_PROGRESS; undefined, otherwise More...
 
- Public Member Functions inherited from InstrumentChannel
 InstrumentChannel (Instrument *inst, const std::string &hwname, const std::string &color="#808080", Unit xunit=Unit(Unit::UNIT_FS), size_t index=0)
 
 InstrumentChannel (Instrument *inst, const std::string &hwname, const std::string &color="#808080", Unit xunit=Unit(Unit::UNIT_FS), Unit yunit=Unit(Unit::UNIT_VOLTS), Stream::StreamType stype=Stream::STREAM_TYPE_ANALOG, size_t index=0)
 
virtual void SetDisplayName (std::string name)
 Sets the human-readable nickname for this channel, as displayed in the GUI. More...
 
virtual std::string GetDisplayName ()
 Gets the human-readable nickname for this channel, as displayed in the GUI. More...
 
std::string GetHwname ()
 Gets the hardware name of the channel (m_hwname)
 
size_t GetIndex ()
 Gets the (zero based) index of the channel.
 
InstrumentGetInstrument ()
 Gets the instrument this channel is part of (if any)
 
void ClearCachedDisplayName ()
 Sets the display name to an empty string, causing a fetch from hardware. More...
 
virtual PhysicalConnector GetPhysicalConnector ()
 
void SetData (WaveformBase *pNew, size_t stream)
 Sets the waveform data for a given stream, replacing any previous waveform. More...
 
virtual Unit GetXAxisUnits ()
 Returns the X axis unit for this channel.
 
virtual Unit GetYAxisUnits (size_t stream)
 Returns the Y axis unit for a specified stream.
 
virtual void SetXAxisUnits (const Unit &rhs)
 Changes the X axis unit for this channel. More...
 
virtual void SetYAxisUnits (const Unit &rhs, size_t stream)
 Changes the X axis unit for a specified stream. More...
 
Stream::StreamType GetType (size_t stream)
 Returns the type of a specified stream.
 
size_t GetStreamCount ()
 Get the number of data streams.
 
std::string GetStreamName (size_t stream)
 Gets the name of a stream (for display in the UI)
 
WaveformBaseGetData (size_t stream)
 Get the contents of a data stream.
 
uint8_t GetStreamFlags (size_t stream)
 Get the flags of a data stream.
 
float GetScalarValue (size_t stream)
 Gets the value of a scalar data stream.
 
void SetScalarValue (size_t stream, float value)
 Sets the value of a scalar data stream.
 
WaveformBaseDetach (size_t stream)
 Detach the capture data from this channel. More...
 
virtual bool ShouldPersistWaveform ()
 Determine whether the channel's waveform(s) should be persisted to a session file. More...
 
virtual DownloadState GetDownloadState ()
 Returns the current download state of this channel. More...
 
virtual float GetDownloadProgress ()
 returns the current completion of the download (on the range [0, 1]), if not DOWNLOAD_UNKNOWN More...
 
virtual double GetDownloadStartTime ()
 returns the start time of a download, if we are DOWNLOAD_IN_PROGRESS; undefined, otherwise More...
 
- Public Member Functions inherited from FlowGraphNode
void DetachInputs ()
 Disconnects all inputs from the node without releasing them. More...
 
size_t GetInputCount ()
 
std::string GetInputName (size_t i)
 
void SetInput (size_t i, StreamDescriptor stream, bool force=false)
 Connects a stream to the input of this node. More...
 
void SetInput (const std::string &name, StreamDescriptor stream, bool force=false)
 
virtual bool ValidateChannel (size_t i, StreamDescriptor stream)
 
StreamDescriptor GetInput (size_t i)
 Gets the descriptor for one of our inputs.
 
FilterParameterGetParameter (std::string s)
 
bool HasParameter (std::string s)
 Checks if we have a parameter with a given name. More...
 
ParameterMapType::iterator GetParamBegin ()
 Returns an iterator to the beginning of our parameter map.
 
ParameterMapType::iterator GetParamEnd ()
 Returns an iterator to the end of our parameter map.
 
size_t GetParamCount ()
 Returns the number of parameter we have.
 
virtual YAML::Node SerializeConfiguration (IDTable &table)
 Serializes this trigger's configuration to a YAML string. More...
 
virtual void LoadParameters (const YAML::Node &node, IDTable &table)
 Load configuration from a save file. More...
 
virtual void LoadInputs (const YAML::Node &node, IDTable &table)
 
bool IsDownstreamOf (std::set< FlowGraphNode * > nodes)
 Determines if this node is downstream of any of the specified other nodes. More...
 
virtual DataLocation GetInputLocation ()
 Gets the desired location of the nodes's input data. More...
 
virtual void Refresh ()
 Evaluates a filter graph node. More...
 
virtual void Refresh (vk::raii::CommandBuffer &cmdBuf, std::shared_ptr< QueueHandle > queue)
 
sigc::signal< void()> signal_parametersChanged ()
 
sigc::signal< void()> signal_inputsChanged ()
 

Protected Attributes

std::vector< float > m_ranges
 Voltage range of each stream.
 
std::vector< float > m_offsets
 Vertical offset of each stream.
 
std::string m_maskFile
 Path to the YAML file, if any, that m_mask was loaded from.
 
EyeMask m_mask
 Eye mask used for pass/fail testing.
 
std::weak_ptr< BERTm_bert
 Pointer to the parent instrument. More...
 
- Protected Attributes inherited from OscilloscopeChannel
size_t m_refcount
 Number of references (channel is disabled when last ref is released)
 
- Protected Attributes inherited from InstrumentChannel
Instrumentm_instrument
 The instrument we're part of (may be null in the case of filters etc)
 
std::string m_hwname
 Hardware name of the channel. More...
 
std::string m_displayname
 Display name (user defined, defaults to m_hwname). More...
 
size_t m_index
 Zero based index of the channel within the instrument.
 
Unit m_xAxisUnit
 Unit of measurement for our horizontal axis (common to all streams)
 
std::vector< Streamm_streams
 Configuration data for each of our output streams.
 
- Protected Attributes inherited from FlowGraphNode
std::vector< std::string > m_signalNames
 Names of signals we take as input.
 
std::vector< StreamDescriptorm_inputs
 The channel (if any) connected to each of our inputs.
 
ParameterMapType m_parameters
 
sigc::signal< void()> m_parametersChangedSignal
 Signal emitted when the set of parameters changes.
 
sigc::signal< void()> m_inputsChangedSignal
 Signal emitted when the set of inputs changes.
 

Additional Inherited Members

- Public Attributes inherited from InstrumentChannel
std::string m_displaycolor
 Display color (HTML hex notation with optional alpha channel: #RRGGBB or ##RRGGBBAA)
 
enum InstrumentChannel::VisibilityMode m_visibilityMode
 
- Protected Member Functions inherited from OscilloscopeChannel
void SharedCtorInit (Unit unit)
 
virtual void ClearStreams ()
 Clears out any existing streams. More...
 
virtual size_t AddStream (Unit yunit, const std::string &name, Stream::StreamType stype, uint8_t flags=0)
 Adds a new data stream to the channel. More...
 
- Protected Member Functions inherited from FlowGraphNode
virtual void OnInputChanged (size_t i)
 Called when a new input is connected to the node. More...
 
WaveformBaseGetInputWaveform (size_t i)
 Gets the waveform attached to the specified input. More...
 
SparseAnalogWaveformGetSparseAnalogInputWaveform (size_t i)
 Gets the analog waveform attached to the specified input.
 
UniformAnalogWaveformGetUniformAnalogInputWaveform (size_t i)
 Gets the analog waveform attached to the specified input.
 
SparseDigitalWaveformGetSparseDigitalInputWaveform (size_t i)
 Gets the digital waveform attached to the specified input.
 
UniformDigitalWaveformGetUniformDigitalInputWaveform (size_t i)
 Gets the digital waveform attached to the specified input.
 
SparseDigitalBusWaveformGetSparseDigitalBusInputWaveform (size_t i)
 Gets the digital bus waveform attached to the specified input.
 
void CreateInput (const std::string &name)
 Creates and names an input signal.
 
std::string GetInputDisplayName (size_t i)
 Gets the display name for one of our inputs. More...
 

Detailed Description

A pattern checker channel of a BERT.

Derived from OscilloscopeChannel because we can output time domain bathtub curves etc

Member Enumeration Documentation

◆ StreamIDs

Well known indexes of output streams.

Enumerator
STREAM_HBATHTUB 

Horizontal bathtub.

STREAM_EYE 
Parameters
Eyepattern
STREAM_BER 
Parameters
Realtimebit error rate
STREAM_MASKHITRATE 
Parameters
Maskhit rate

Constructor & Destructor Documentation

◆ BERTInputChannel()

BERTInputChannel::BERTInputChannel ( const std::string &  hwname,
std::weak_ptr< BERT bert,
const std::string &  color = "#808080",
size_t  index = 0 
)

Initialize the channel.

Parameters
hwnameHardware name of the channel
bertBERT the channel is part of
colorInitial display color of the channel
indexNumber of the channel

Member Function Documentation

◆ AddStream()

size_t BERTInputChannel::AddStream ( Unit  yunit,
const std::string &  name,
Stream::StreamType  stype,
uint8_t  flags = 0 
)
overridevirtual

Adds a new data stream to the channel.

Returns
Index of the new stream

Reimplemented from InstrumentChannel.

◆ ClearStreams()

void BERTInputChannel::ClearStreams ( )
overridevirtual

Clears out any existing streams.

Reimplemented from InstrumentChannel.

◆ GetBERSamplingPoint()

void BERTInputChannel::GetBERSamplingPoint ( int64_t &  dx,
float &  dy 
)
inline

Gets the sampling location for real time offset BER measurements.

Parameters
dxHorizontal offset of the sampling point from the center of the eye, in femtoseconds
dyVertical offset of the sampling point from the center of the eye, in volts

◆ GetCTLEGainStep()

size_t BERTInputChannel::GetCTLEGainStep ( )
inline

Gets the currently selected CTLE gain step.

The actual gain value can be looked up in the table returned by GetCTLEGainSteps().

◆ GetExpectedBathtubCaptureTime()

int64_t BERTInputChannel::GetExpectedBathtubCaptureTime ( )
inline

Estimate the time needed to capture a bathtub curve with the current settings.

This can be used for displaying progress bars, hints in the GUI, etc.

Returns
Expected capture time, in femtoseconds

◆ GetExpectedEyeCaptureTime()

int64_t BERTInputChannel::GetExpectedEyeCaptureTime ( )
inline

Estimate the time needed to capture an eye pattern with the current settings.

This can be used for displaying progress bars, hints in the GUI, etc.

Returns
Expected capture time, in femtoseconds

◆ GetOffset()

float BERTInputChannel::GetOffset ( size_t  stream)
overridevirtual

Reimplemented from OscilloscopeChannel.

◆ GetPhysicalConnector()

InstrumentChannel::PhysicalConnector BERTInputChannel::GetPhysicalConnector ( )
overridevirtual

Reimplemented from InstrumentChannel.

◆ GetScanDepth()

int64_t BERTInputChannel::GetScanDepth ( )
inline

Gets the currently selected integration depth for eye / bathtub scans.

Returns
Integration depth, in UIs per pixel or point

◆ GetScanProgress()

float BERTInputChannel::GetScanProgress ( )
inline

Returns an estimate of the current scan progress (if an eye or bathtub scan is executing)

Returns
Estimated progress in the range [0, 1]

◆ GetVoltageRange()

float BERTInputChannel::GetVoltageRange ( size_t  stream)
overridevirtual

Reimplemented from OscilloscopeChannel.

◆ IsEyeScanInProgress()

bool BERTInputChannel::IsEyeScanInProgress ( )
inline

Check if an eye scan is currently executing.

Returns
True if scan is in progress, false if not

◆ IsHBathtubScanInProgress()

bool BERTInputChannel::IsHBathtubScanInProgress ( )
inline

Check if a bathtub scan is currently executing.

Returns
True if scan is in progress, false if not

◆ Refresh()

void BERTInputChannel::Refresh ( vk::raii::CommandBuffer &  cmdBuf,
std::shared_ptr< QueueHandle queue 
)
overridevirtual

Reimplemented from FlowGraphNode.

◆ SetBERSamplingPoint()

void BERTInputChannel::SetBERSamplingPoint ( int64_t  dx,
float  dy 
)
inline

Sets the sampling location for real time offset BER measurements.

Parameters
dxHorizontal offset of the sampling point from the center of the eye, in femtoseconds
dyVertical offset of the sampling point from the center of the eye, in volts

◆ SetCTLEGainStep()

void BERTInputChannel::SetCTLEGainStep ( size_t  step)
inline

Sets the gain for the CTLE.

The actual gain value can be looked up in the table returned by GetCTLEGainSteps().

Parameters
stepStep index

◆ SetDataRate()

void BERTInputChannel::SetDataRate ( int64_t  rate)
inline

Sets the data rate of this channel, in symbols per second.

Depending on the clocking architecture of the instrument, this may affect other channels.

For example, on MultiLane BERTs all channels share a single timebase. Antikernel Labs BERTs are based on Xilinx FPGAs and channels are divided into quads which each share some clocking resources.

Parameters
rateDesired data rate

◆ SetInvert()

void BERTInputChannel::SetInvert ( bool  invert)
inline

Set the polarity inversion state.

Parameters
invertTrue for inverted polarity, false for normal

◆ SetMaskFile()

void BERTInputChannel::SetMaskFile ( const std::string &  fname)

Sets the path of the mask file for pass/fail testing.

Parameters
fnamePath of the YAML mask file

◆ SetOffset()

void BERTInputChannel::SetOffset ( float  offset,
size_t  stream 
)
overridevirtual

Reimplemented from OscilloscopeChannel.

◆ SetPattern()

void BERTInputChannel::SetPattern ( BERT::Pattern  pattern)
inline

Set the pattern this channel is expecting to see.

Parameters
patternExpected pattern

◆ SetScanDepth()

void BERTInputChannel::SetScanDepth ( int64_t  depth)
inline

Sets the currently selected integration depth for eye / bathtub scans.

Parameters
depthIntegration depth, in UIs per pixel or point

◆ SetVoltageRange()

void BERTInputChannel::SetVoltageRange ( float  range,
size_t  stream 
)
overridevirtual

Reimplemented from OscilloscopeChannel.

◆ ValidateChannel()

bool BERTInputChannel::ValidateChannel ( size_t  i,
StreamDescriptor  stream 
)
overridevirtual

Reimplemented from FlowGraphNode.

Member Data Documentation

◆ m_bert

std::weak_ptr<BERT> BERTInputChannel::m_bert
protected

Pointer to the parent instrument.

TODO: this needs to get refactored away so we can just use InstrumentChannel::m_instrument


The documentation for this class was generated from the following files: