58#include <shared_mutex>
60#include <sigc++/sigc++.h>
62#include <yaml-cpp/yaml.h>
64#include "../log/log.h"
65#include "../xptools/TimeUtil.h"
70#include <nvtx3/nvtx3.hpp>
75#pragma GCC diagnostic push
76#pragma GCC diagnostic ignored "-Wshadow"
77#include <vulkan/vulkan_raii.hpp>
78#pragma GCC diagnostic pop
91#define i64abs(x) llabs(x)
93#define i64abs(x) labs(x)
133#include "SCPIDevice.h"
138#if !defined(_WIN32) && !defined(__APPLE__)
174#include "PowerSupply.h"
175#include "PowerSupplyChannel.h"
176#include "RFSignalGenerator.h"
177#include "RFSignalGeneratorChannel.h"
178#include "SCPIInstrument.h"
183#include "SCPIFunctionGenerator.h"
185#include "SCPIMiscInstrument.h"
186#include "SCPIMultimeter.h"
187#include "SCPIOscilloscope.h"
188#include "SCPIPowerSupply.h"
189#include "SCPIRFSignalGenerator.h"
190#include "SpectrometerDarkFrameChannel.h"
205#include "SpectrumChannel.h"
216std::string GetDefaultChannelColor(
int i);
218std::string
Trim(
const std::string&
str);
220std::string BaseName(
const std::string& path);
222std::string
ReadFile(
const std::string& path);
235void InitializeSearchPaths();
240void ScopehalStaticCleanup();
251#define FS_PER_PICOSECOND 1e3
252#define FS_PER_NANOSECOND 1e6
253#define FS_PER_MICROSECOND 1e9
254#define FS_PER_SECOND 1e15
255#define SECONDS_PER_FS 1e-15
259#define stos(str) static_cast<size_t>(stoll(str))
261#define stos(str) static_cast<size_t>(stol(str))
264extern std::vector<std::string> g_searchPaths;
306std::string ExpandPath(
const std::string&
in);
307void CreateDirectory(
const std::string& path);
314uint32_t ColorFromString(
const std::string&
str,
unsigned int alpha = 255);
Declaration of AcceleratorBuffer.
Declaration of Bijection.
Helper class for binary driver: provides methods for handling binary data.
Declaration of CANChannel, CANSymbol, and CANWaveform.
Helper class for command line drivers: provides helper methods for command line based communication w...
Declaration of ComputePipeline.
Declaration of DigitalIOChannel.
Declaration of DigitalOutputChannel.
Declaration of FilterGraphExecutor.
Declaration of FilterParameter.
Declaration of FlowGraphNode.
Inline functions for FlowGraphNode which reference OscilloscopeChannel class.
Declaration of FunctionGeneratorChannel.
Declaration of FunctionGenerator.
Declaration of HIDInstrument.
Declaration of IBISParser, IVCurve, IBISCorner, and VTCurves.
Declaration of IDTable class.
Declaration of ImportFilter.
Declaration of Instrument.
Declaration of MockInstrument.
Declaration of ModbusInstrument.
Declaration of MultimeterChannel.
Declaration of Multimeter.
Declaration of NamedDebugRange.
Declaration of OscilloscopeChannel.
Declaration of Oscilloscope.
Declaration of PeakDetectionFilter.
Declaration of QueueManager and QueueHandle.
Declaration of SCPIHIDTransport.
Declaration of SCPILxiTransport.
Declaration of SCPINullTransport.
Declaration of SCPISocketCANTransport.
Declaration of SCPISocketTransport.
Declaration of Spectrometer.
Declaration of SCPITMCTransport.
Declaration of SCPITransport.
Declaration of SCPITwinLanTransport.
Declaration of SCPIUARTTransport.
Declaration of SParameterChannel.
Declaration of SParameterFilter.
Declaration of SParameterSourceFilter.
Declaration of SParameters and related classes.
Declaration of ScratchBufferManager.
Declaration of StreamDescriptor.
Inline functions for StreamDescriptor.
Declaration of StreamGroupDescriptor.
Inline functions for StreamGroupDescriptor.
Declaration of SwitchMatrix.
Declaration of TouchstoneParser.
Declaration of VICPSocketTransport.
Declaration of VIOOutputChannel.
Declaration of VectorGPIOChannel.
Definition AcceleratorBuffer.h:204
Definition scopehal.h:300
bool g_hasShaderAtomicFloat
Indicates whether atomic operations on the float type are available in shaders.
Definition VulkanInit.cpp:189
uint8_t g_vkComputeDeviceUuid[16]
UUID of g_vkComputeDevice.
Definition VulkanInit.cpp:130
bool VulkanInit(bool skipGLFW=false)
Initialize a Vulkan context for compute.
Definition VulkanInit.cpp:1064
bool g_vulkanDeviceIsIntelMesa
Indicates that the Vulkan driver is Mesa on an Intel GPU.
Definition VulkanInit.cpp:241
bool g_hasShaderInt64
Indicates whether the int64 type is available for use in shaders and SSBOs.
Definition VulkanInit.cpp:171
std::unique_ptr< vk::raii::Instance > g_vkInstance
Global Vulkan instance.
Definition VulkanInit.cpp:65
bool g_hasPushDescriptor
Indicates whether the VK_KHR_push_descriptor extension is available.
Definition VulkanInit.cpp:213
bool g_hasMemoryBudget
Indicates whether the VK_EXT_memory_budget extension is available.
Definition VulkanInit.cpp:207
bool g_vulkanDeviceIsApplePV
Indicates that the Vulkan driver is an Apple paravirtualization device.
Definition VulkanInit.cpp:259
std::unique_ptr< QueueManager > g_vkQueueManager
Allocates QueueHandle objects.
Definition VulkanInit.cpp:106
bool g_hasShaderInt16
Indicates whether the int16 type is available for use in shaders and SSBOs.
Definition VulkanInit.cpp:177
bool g_hasDebugUtils
Indicates whether the VK_EXT_debug_utils extension is available.
Definition VulkanInit.cpp:201
bool g_hasShaderAtomicInt64
Indicates whether atomic operations on the int64 type are available in shaders.
Definition VulkanInit.cpp:195
bool g_vulkanDeviceIsMoltenVK
Indicates that the Vulkan driver is MoltenVK.
Definition VulkanInit.cpp:253
vk::raii::Context g_vkContext
Global Vulkan context.
Definition VulkanInit.cpp:59
bool g_hasShaderFloat64
Indicates whether the float64 type is available for use in shaders and SSBOs.
Definition VulkanInit.cpp:165
uint32_t g_vkLocalMemoryHeap
Heap from which g_vkLocalMemoryType is allocated.
Definition VulkanInit.cpp:154
uint32_t g_vkPinnedMemoryHeap
Heap from which g_vkPinnedMemoryType is allocated.
Definition VulkanInit.cpp:148
size_t g_maxComputeGroupCount[3]
Maximum size of a Vulkan dispatch group for compute shaders, in each axis.
Definition VulkanInit.cpp:232
bool g_vulkanDeviceIsAnyMesa
Indicates that the Vulkan driver is Mesa on any GPU.
Definition VulkanInit.cpp:247
vk::raii::PhysicalDevice * g_vkComputePhysicalDevice
Physical device for g_vkComputeDevice.
Definition VulkanInit.cpp:142
bool g_hasShaderInt8
Indicates whether the int8 type is available for use in shaders and SSBOs.
Definition VulkanInit.cpp:183
bool g_vulkanDeviceHasUnifiedMemory
Indicates whether the Vulkan device is unified memory.
Definition VulkanInit.cpp:226
uint32_t g_vkComputeDeviceDriverVer
Driver version of g_vkComputeDevice.
Definition VulkanInit.cpp:136
string str_replace(const string &search, const string &replace, const string &subject)
Replaces all occurrences of the search string with "replace" in the given string.
Definition scopehal.cpp:1013
string TrimQuotes(const string &str)
Removes quotes from the start and end of a string.
Definition scopehal.cpp:617
vector< uint32_t > ReadDataFileUint32(const string &relpath)
Locates and returns the contents of a data file as a std::vector<uint32_t>
Definition scopehal.cpp:907
uint64_t ConvertVectorSignalToScalar(const vector< bool > &bits)
Converts a vector bus signal into a scalar (up to 64 bits wide)
Definition scopehal.cpp:409
vector< string > explode(const string &str, char separator)
Splits a string up into an array separated by delimiters.
Definition scopehal.cpp:979
string strtolower(const string &s)
Converts a string to lower case.
Definition scopehal.cpp:1002
string Trim(const string &str)
Removes whitespace from the start and end of a string.
Definition scopehal.cpp:585
string ReadFile(const string &path)
Returns the contents of a file.
Definition scopehal.cpp:727
string FindDataFile(const string &relpath)
Locates a data file.
Definition scopehal.cpp:939
string ReadDataFile(const string &relpath)
Locates and returns the contents of a data file as a std::string.
Definition scopehal.cpp:863
void TransportStaticInit()
Static initialization for SCPI transports.
Definition scopehal.cpp:224
void InitializePlugins()
Initialize all plugins.
Definition scopehal.cpp:420
const char * ScopehalGetVersion()
Returns the library version string (Semantic Version formatted)
Definition scopehal.cpp:1114
uint32_t CRC32(const uint8_t *bytes, size_t start, size_t end)
Calculates a CRC32 checksum in network byte order using the standard Ethernet polynomial.
Definition scopehal.cpp:1098
uint64_t prev_pow2(uint64_t v)
Rounds a 64-bit integer down to the next power of 2.
Definition scopehal.cpp:714
std::string GetDirOfCurrentExecutable()
Gets the path to the directory containing the current executable.
Definition scopehal.cpp:776
std::string to_string_sci(double d)
Like std::to_string, but output in scientific notation.
Definition scopehal.cpp:662
uint64_t next_pow2(uint64_t v)
Rounds a 64-bit integer up to the next power of 2.
Definition scopehal.cpp:690
std::string to_string_hex(uint64_t n, bool zeropad=false, int len=0)
Like std::to_string, but output in hex.
Definition scopehal.cpp:672
void DetectCPUFeatures()
Static initialization for CPU feature flags.
Definition scopehal.cpp:251
void DriverStaticInit()
Static initialization for instrument drivers.
Definition scopehal.cpp:293
std::shared_mutex g_vulkanActivityMutex
Mutex for controlling access to background Vulkan activity.
Definition scopehal.cpp:219
float FreqToPhase(float hz)
Converts a frequency in Hz to a phase velocity in rad/sec.
Definition scopehal.cpp:654
Definition scopehal.h:275
Definition scopehal.h:268
Definition scopehal.h:110