37#ifndef AntikernelLabsTriggerCrossbar_h
38#define AntikernelLabsTriggerCrossbar_h
76 virtual void SetTxInvert(
size_t i,
bool invert)
override;
80 virtual void SetTxEnable(
size_t i,
bool enable)
override;
89 virtual void SetRxInvert(
size_t i,
bool invert)
override;
109 virtual std::vector<int64_t>
GetScanDepths(
size_t i)
override;
111 virtual void SetScanDepth(
size_t i, int64_t depth)
override;
128 virtual void SetDataRate(
size_t i, int64_t rate)
override;
136 virtual void SetMuxPath(
size_t dstchan,
size_t srcchan)
override;
150 virtual void SetChannelCoupling(
size_t i, OscilloscopeChannel::CouplingType type)
override;
160 virtual void SetChannelOffset(
size_t i,
size_t stream,
float offset)
override;
164 virtual void Start()
override;
166 virtual void Stop()
override;
175 virtual std::set< InterleaveConflict > GetInterleaveConflicts()
override;
186 size_t m_triggerInChannelBase;
187 size_t m_triggerBidirChannelBase;
188 size_t m_triggerOutChannelBase;
189 size_t m_txChannelBase;
190 size_t m_rxChannelBase;
198 {
return 16 << m_rxClkDiv[i - m_rxChannelBase]; }
201 float m_trigDrive[12];
202 float m_trigThreshold[12];
211 float m_txPreCursor[2];
212 float m_txPostCursor[2];
213 int64_t m_scanDepth[2];
222 uint64_t m_txDataRate[2];
223 uint64_t m_rxDataRate[2];
224 int64_t m_rxClkDiv[2];
233 std::atomic<bool> m_bathtubScanInProgress;
234 std::atomic<bool> m_eyeScanInProgress;
235 std::atomic<size_t> m_activeScanChannel;
236 std::atomic<float> m_activeScanProgress;
239 bool m_laChannelEnabled[2];
240 size_t m_maxLogicDepth;
242 bool m_triggerOneShot;
243 int64_t m_triggerOffsetSamples;
An AKL-TXB1 trigger crossbar.
Definition: AntikernelLabsTriggerCrossbar.h:50
virtual void SetTxPreCursor(size_t i, float precursor) override
Set the pre-cursor equalizer tap for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:747
virtual unsigned int GetInstrumentTypes() const override
Returns a bitfield describing the set of instrument types that this instrument supports.
Definition: AntikernelLabsTriggerCrossbar.cpp:467
virtual void SetMuxOutputDrive(size_t dstchan, float v) override
Sets the drive level of an output channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:419
virtual size_t GetRefclkOutMux() override
Gets the currently selected reference clock output mux setting.
Definition: AntikernelLabsTriggerCrossbar.cpp:783
virtual void SetMuxPath(size_t dstchan, size_t srcchan) override
Sets the mux selector for an output channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:367
virtual bool HasConfigurableScanDepth() override
Determines whether this instrument has configurable integration depth for eye / bathtub scans.
Definition: AntikernelLabsTriggerCrossbar.cpp:964
virtual bool CanInterleave() override
Returns true if we have no interleave conflicts, false if we have conflicts.
Definition: AntikernelLabsTriggerCrossbar.cpp:1398
virtual std::vector< int64_t > GetAvailableDataRates() override
Gets the list of available data rates, in symbols/sec.
Definition: AntikernelLabsTriggerCrossbar.cpp:909
virtual void SetBERIntegrationLength(int64_t uis) override
Set the integration period for BER measurements.
Definition: AntikernelLabsTriggerCrossbar.cpp:946
virtual bool HasRefclkIn() override
Returns true if this instrument has a reference clock input port.
Definition: AntikernelLabsTriggerCrossbar.cpp:773
virtual uint64_t GetSampleRate() override
Gets the current sampling rate (in Hz) of this scope.
Definition: AntikernelLabsTriggerCrossbar.cpp:1502
virtual void SetTxPattern(size_t i, Pattern pattern) override
Sets the transmit pattern for the selected channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:616
virtual bool MuxHasConfigurableThreshold(size_t dstchan) override
Checks if an input channel has configurable voltage level.
Definition: AntikernelLabsTriggerCrossbar.cpp:438
virtual void SetChannelDisplayName(size_t i, std::string name) override
Sets the hardware display name for a channel. This is an arbitrary user-selected string.
Definition: AntikernelLabsTriggerCrossbar.cpp:485
virtual void StartSingleTrigger() override
Arms the trigger for a single acquistion.
Definition: AntikernelLabsTriggerCrossbar.cpp:1473
virtual void SetRxPattern(size_t i, Pattern pattern) override
Sets the receive pattern for the selected channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:500
virtual bool GetRxCdrLockState(size_t i) override
Gets the RX CDR lock state (true=lock, false=unlock)
Definition: AntikernelLabsTriggerCrossbar.cpp:958
virtual std::vector< float > GetAvailableTxDriveStrengths(size_t i) override
Gets the list of available drive strengths (in volts) for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:685
virtual void SetRxInvert(size_t i, bool invert) override
Sets the receive invert flag for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:547
virtual void PushTrigger() override
Pushes changes made to m_trigger to the instrument.
Definition: AntikernelLabsTriggerCrossbar.cpp:1461
virtual int64_t GetTriggerOffset() override
Gets the trigger offset.
Definition: AntikernelLabsTriggerCrossbar.cpp:1535
virtual float GetMuxOutputDrive(size_t dstchan) override
Gets the drive level of an output channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:405
virtual void SetRxCTLEGainStep(size_t i, size_t step) override
Sets the RX CTLE gain index.
Definition: AntikernelLabsTriggerCrossbar.cpp:589
virtual int64_t GetExpectedBathtubCaptureTime(size_t i) override
Returns the expected time, in femtoseconds, to complete a bathtub scan with the current settings.
Definition: AntikernelLabsTriggerCrossbar.cpp:996
virtual void SetScanDepth(size_t i, int64_t depth) override
Set the configured scan depth for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:985
virtual void Stop() override
Stops triggering.
Definition: AntikernelLabsTriggerCrossbar.cpp:1490
virtual OscilloscopeChannel::CouplingType GetChannelCoupling(size_t i) override
Gets the coupling used for an input channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:1315
virtual bool GetRxInvert(size_t i) override
Gets the transmit invert flag for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:541
virtual std::vector< Pattern > GetAvailableRxPatterns(size_t i) override
Gets the list of available receive patterns for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:528
ssize_t GetScanHalfWidth(size_t i)
Returns the number of points on either side of the center for a full eye/bathtub scan.
Definition: AntikernelLabsTriggerCrossbar.h:197
virtual void SetRefclkOutMux(size_t i) override
Sets the reference clock output mux.
Definition: AntikernelLabsTriggerCrossbar.cpp:788
virtual void Start() override
Starts the instrument in continuous trigger mode.
Definition: AntikernelLabsTriggerCrossbar.cpp:1466
virtual unsigned int GetChannelBandwidthLimit(size_t i) override
Gets the bandwidth limit for an input channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:1343
virtual void SetChannelBandwidthLimit(size_t i, unsigned int limit_mhz) override
Sets the bandwidth limit for an input channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:1348
virtual std::vector< Pattern > GetAvailableTxPatterns(size_t i) override
Gets the list of available transmit patterns for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:598
virtual bool HasRefclkOut() override
Returns true if this instrument has a reference clock output port.
Definition: AntikernelLabsTriggerCrossbar.cpp:778
virtual float GetScanProgress(size_t i) override
Gets the estimated completion status (0-1) of the current scan.
Definition: AntikernelLabsTriggerCrossbar.cpp:938
virtual float GetMuxInputThreshold(size_t dstchan) override
Gets the threshold level of an input channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:443
virtual void GetBERSamplingPoint(size_t i, int64_t &dx, float &dy) override
Get the sampling point for BER measurements.
Definition: AntikernelLabsTriggerCrossbar.cpp:840
virtual uint64_t GetSampleDepth() override
Gets the current sample depth of this scope.
Definition: AntikernelLabsTriggerCrossbar.cpp:1514
bool m_loadInProgress
True if in a constructor or similar initialization path (getting hardware state)
Definition: AntikernelLabsTriggerCrossbar.h:231
virtual float GetTxPostCursor(size_t i) override
Get the post-cursor equalizer tap for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:756
virtual void DisableChannel(size_t i) override
Turn a channel off, given the index.
Definition: AntikernelLabsTriggerCrossbar.cpp:1431
virtual void SetUseExternalRefclk(bool external) override
Sets the reference clock source (internal or external)
Definition: AntikernelLabsTriggerCrossbar.cpp:808
virtual Pattern GetTxPattern(size_t i) override
Gets the currently selected transmit pattern for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:611
virtual void SetChannelOffset(size_t i, size_t stream, float offset) override
Sets the offset for a given channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:1376
virtual void SetTxInvert(size_t i, bool invert) override
Sets the transmit invert flag for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:675
virtual uint32_t GetInstrumentTypesForChannel(size_t i) const override
Returns a bitfield describing the set of instrument types that a given channel supports.
Definition: AntikernelLabsTriggerCrossbar.cpp:472
virtual bool AcquireData() override
Pull data from the instrument.
Definition: AntikernelLabsTriggerCrossbar.cpp:1214
virtual bool IsHBathtubScanInProgress(size_t i) override
Returns true if a horizontal bathtub scan is in progress.
Definition: AntikernelLabsTriggerCrossbar.cpp:933
virtual std::vector< OscilloscopeChannel::CouplingType > GetAvailableCouplings(size_t i) override
Gets the set of legal coupling values for an input channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:1326
virtual void SetTxEnable(size_t i, bool enable) override
Sets the transmit enable flag for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:727
virtual void SetGlobalCustomPattern(uint64_t pattern) override
Sets the global custom pattern (only valid if IsCustomPatternPerChannel returns false)
Definition: AntikernelLabsTriggerCrossbar.cpp:658
virtual std::vector< uint64_t > GetSampleDepthsInterleaved() override
Get the legal memory depths for this scope in combined-channels mode.
Definition: AntikernelLabsTriggerCrossbar.cpp:1409
virtual std::vector< std::string > GetRefclkOutMuxNames() override
Gets the list of available reference clock mux settings.
Definition: AntikernelLabsTriggerCrossbar.cpp:792
virtual void SetTxDriveStrength(size_t i, float drive) override
Set the drive strength for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:712
virtual void SetMuxInputThreshold(size_t dstchan, float v) override
Sets the threshold level of an input channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:450
virtual void SetDataRate(size_t i, int64_t rate) override
Sets the data rate (in symbols/sec)
Definition: AntikernelLabsTriggerCrossbar.cpp:864
virtual double GetChannelAttenuation(size_t i) override
Gets the probe attenuation for an input channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:1334
virtual Oscilloscope::TriggerMode PollTrigger() override
Checks the curent trigger status.
Definition: AntikernelLabsTriggerCrossbar.cpp:1438
virtual void MeasureEye(size_t i) override
Acquires an eye pattern.
Definition: AntikernelLabsTriggerCrossbar.cpp:1097
virtual std::vector< uint64_t > GetSampleDepthsNonInterleaved() override
Get the legal memory depths for this scope in all-channels mode.
Definition: AntikernelLabsTriggerCrossbar.cpp:1507
virtual void SetTriggerOffset(int64_t offset) override
Sets the trigger offset.
Definition: AntikernelLabsTriggerCrossbar.cpp:1527
virtual int64_t GetScanDepth(size_t i) override
Get the configured scan depth for a channel, in UIs per sample/pixel.
Definition: AntikernelLabsTriggerCrossbar.cpp:978
virtual bool IsDataRatePerChannel() override
Determines whether the TX/RX clock is a per-instrument or per-channel setting.
Definition: AntikernelLabsTriggerCrossbar.cpp:848
virtual void SetTxPostCursor(size_t i, float postcursor) override
Set the post-cursor equalizer tap for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:761
virtual bool MuxHasConfigurableDrive(size_t dstchan) override
Checks if an output channel has configurable voltage level.
Definition: AntikernelLabsTriggerCrossbar.cpp:390
virtual std::vector< int64_t > GetScanDepths(size_t i) override
Returns the list of integration depths for eye / bathtub scans.
Definition: AntikernelLabsTriggerCrossbar.cpp:969
virtual bool IsTriggerArmed() override
Checks if the trigger is currently armed.
Definition: AntikernelLabsTriggerCrossbar.cpp:1480
virtual bool IsCustomPatternPerChannel() override
Determines whether custom patterns are settable per channel, or shared by the whole device.
Definition: AntikernelLabsTriggerCrossbar.cpp:648
virtual size_t GetCustomPatternLength() override
Returns the number of bits in a custom pattern (may change with line rate)
Definition: AntikernelLabsTriggerCrossbar.cpp:653
virtual int64_t GetDataRate(size_t i) override
Gets the currently selected line rate (in symbols/sec)
Definition: AntikernelLabsTriggerCrossbar.cpp:853
AntikernelLabsTriggerCrossbar(SCPITransport *transport)
Initialize the driver.
Definition: AntikernelLabsTriggerCrossbar.cpp:55
virtual Pattern GetRxPattern(size_t i) override
Gets the currently selected receive pattern for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:494
virtual bool IsChannelEnabled(size_t i) override
Checks if a channel is enabled in hardware.
Definition: AntikernelLabsTriggerCrossbar.cpp:1417
virtual bool HasRxCTLE() override
Determines whether the input buffer has a continuous-time linear equalizer.
Definition: AntikernelLabsTriggerCrossbar.cpp:557
virtual std::vector< uint64_t > GetSampleRatesNonInterleaved() override
Get the legal sampling rates (in Hz) for this scope in all-channels mode.
Definition: AntikernelLabsTriggerCrossbar.cpp:1495
virtual size_t GetRxCTLEGainStep(size_t i) override
Gets the currently selected RX CTLE gain index.
Definition: AntikernelLabsTriggerCrossbar.cpp:583
virtual void SetMuxPathOpen(size_t dstchan) override
Removes a mux path for an output channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:382
virtual std::vector< uint64_t > GetSampleRatesInterleaved() override
Get the legal sampling rates (in Hz) for this scope in combined-channels mode.
Definition: AntikernelLabsTriggerCrossbar.cpp:1383
virtual bool GetTxInvert(size_t i) override
Gets the transmit invert flag for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:670
virtual OscilloscopeChannel * GetExternalTrigger() override
Returns the external trigger input channel, if we have one.
Definition: AntikernelLabsTriggerCrossbar.cpp:1354
virtual void SetSampleRate(uint64_t rate) override
Sets the sample rate of the scope, in Hz.
Definition: AntikernelLabsTriggerCrossbar.cpp:1523
virtual int64_t GetRefclkInFrequency() override
Gets the refclk in frequency, in Hz, required to generate the currently selected data rate.
Definition: AntikernelLabsTriggerCrossbar.cpp:803
virtual float GetChannelOffset(size_t i, size_t stream) override
Gets the offset, in volts, for a given channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:1371
virtual void ForceTrigger() override
Forces a single acquisition as soon as possible.
Definition: AntikernelLabsTriggerCrossbar.cpp:1485
virtual float GetChannelVoltageRange(size_t i, size_t stream) override
Gets the range of the current channel configuration.
Definition: AntikernelLabsTriggerCrossbar.cpp:1359
virtual void PostCtorInit() override
Does any initialization that can't happen during the constructor.
Definition: AntikernelLabsTriggerCrossbar.cpp:81
virtual int64_t GetExpectedEyeCaptureTime(size_t i) override
Returns the expected time, in femtoseconds, to complete an eye scan with the current settings.
Definition: AntikernelLabsTriggerCrossbar.cpp:1005
static std::string GetDriverNameInternal()
Returns the constant driver name "akl.crossbar".
Definition: AntikernelLabsTriggerCrossbar.cpp:462
virtual int64_t GetRefclkOutFrequency() override
Gets the currently selected refclk out frequency, in Hz.
Definition: AntikernelLabsTriggerCrossbar.cpp:798
virtual void SetChannelVoltageRange(size_t i, size_t stream, float range) override
Sets the range of the current channel configuration.
Definition: AntikernelLabsTriggerCrossbar.cpp:1364
virtual void SetSampleDepth(uint64_t depth) override
Sets the sample depth of the scope.
Definition: AntikernelLabsTriggerCrossbar.cpp:1519
virtual void SetChannelCoupling(size_t i, OscilloscopeChannel::CouplingType type) override
Sets the coupling used for an input channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:1320
virtual bool GetTxEnable(size_t i) override
Gets the transmit enable flag for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:737
virtual float GetTxDriveStrength(size_t i) override
Get the drive strength for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:707
virtual void EnableChannel(size_t i) override
Turn a channel on, given the index.
Definition: AntikernelLabsTriggerCrossbar.cpp:1424
virtual float GetTxPreCursor(size_t i) override
Get the pre-cursor equalizer tap for a channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:742
virtual int64_t GetBERIntegrationLength() override
Get the integration period for BER measurements.
Definition: AntikernelLabsTriggerCrossbar.cpp:952
virtual bool IsInterleaving() override
Checks if the scope is currently combining channels.
Definition: AntikernelLabsTriggerCrossbar.cpp:1388
virtual bool GetUseExternalRefclk() override
Sets the reference clock source.
Definition: AntikernelLabsTriggerCrossbar.cpp:812
virtual bool IsEyeScanInProgress(size_t i) override
Returns true if an eye scan is in progress.
Definition: AntikernelLabsTriggerCrossbar.cpp:928
virtual void SetBERSamplingPoint(size_t i, int64_t dx, float dy) override
Set the sampling point for BER measurements.
Definition: AntikernelLabsTriggerCrossbar.cpp:820
virtual uint64_t GetGlobalCustomPattern() override
Gets the global custom pattern (only valid if IsCustomPatternPerChannel returns false)
Definition: AntikernelLabsTriggerCrossbar.cpp:662
virtual void PullTrigger() override
Updates m_trigger with any changes made from the instrument side.
Definition: AntikernelLabsTriggerCrossbar.cpp:1449
virtual void SetChannelAttenuation(size_t i, double atten) override
Sets the probe attenuation used for an input channel.
Definition: AntikernelLabsTriggerCrossbar.cpp:1339
virtual void MeasureHBathtub(size_t i) override
Acquires a bathtub curve.
Definition: AntikernelLabsTriggerCrossbar.cpp:1011
virtual bool SetInterleaving(bool combine) override
Configures the scope to combine channels.
Definition: AntikernelLabsTriggerCrossbar.cpp:1393
virtual std::vector< float > GetRxCTLEGainSteps() override
Get the list of available RX CTLE gain values (in dB)
Definition: AntikernelLabsTriggerCrossbar.cpp:562
Pattern
Set of patterns we can generate or accept.
Definition: BERT.h:54
A single channel on an oscilloscope.
Definition: OscilloscopeChannel.h:49
TriggerMode
Definition: Oscilloscope.h:411
An SCPI-based BERT.
Definition: SCPIBERT.h:38
An SCPI-based device.
Definition: SCPIDevice.h:37
An SCPI-based oscilloscope.
Definition: SCPIOscilloscope.h:38
Abstraction of a transport layer for moving SCPI data between endpoints.
Definition: SCPITransport.h:47
Base class for switch matrixes.
Definition: SwitchMatrix.h:47