59#include <sigc++/sigc++.h>
61#include <yaml-cpp/yaml.h>
63#include "../log/log.h"
64#include "../xptools/TimeUtil.h"
70#pragma GCC diagnostic push
71#pragma GCC diagnostic ignored "-Wshadow"
72#include <vulkan/vulkan_raii.hpp>
73#pragma GCC diagnostic pop
78extern bool g_hasAvx512F;
79extern bool g_hasAvx512VL;
80extern bool g_hasAvx512DQ;
114#include "SCPIDevice.h"
119#if !defined(_WIN32) && !defined(__APPLE__)
148#include "PowerSupply.h"
149#include "PowerSupplyChannel.h"
150#include "RFSignalGenerator.h"
151#include "RFSignalGeneratorChannel.h"
152#include "SCPIInstrument.h"
156#include "SCPIFunctionGenerator.h"
158#include "SCPIMiscInstrument.h"
159#include "SCPIMultimeter.h"
160#include "SCPIOscilloscope.h"
161#include "SCPIPowerSupply.h"
162#include "SCPIRFSignalGenerator.h"
163#include "SpectrometerDarkFrameChannel.h"
178#include "SpectrumChannel.h"
188std::string GetDefaultChannelColor(
int i);
190std::string
Trim(
const std::string& str);
191std::string
TrimQuotes(
const std::string& str);
192std::string BaseName(
const std::string& path);
194std::string
ReadFile(
const std::string& path);
198void GetTimestampOfFile(std::string path, time_t& timestamp, int64_t& fs);
201std::string
to_string_hex(uint64_t n,
bool zeropad =
false,
int len = 0);
207void InitializeSearchPaths();
212void ScopehalStaticCleanup();
219std::vector<std::string>
explode(
const std::string& str,
char separator);
220std::string
str_replace(
const std::string& search,
const std::string& replace,
const std::string& subject);
223#define FS_PER_PICOSECOND 1e3
224#define FS_PER_NANOSECOND 1e6
225#define FS_PER_MICROSECOND 1e9
226#define FS_PER_SECOND 1e15
227#define SECONDS_PER_FS 1e-15
231#define stos(str) static_cast<size_t>(stoll(str))
233#define stos(str) static_cast<size_t>(stol(str))
236extern std::vector<std::string> g_searchPaths;
260uint32_t GetComputeBlockCount(
size_t numGlobal,
size_t blockSize);
268std::string NarrowPath(
wchar_t* wide);
270std::string ExpandPath(
const std::string& in);
271void CreateDirectory(
const std::string& path);
275uint32_t
CRC32(
const uint8_t* bytes,
size_t start,
size_t end);
276uint32_t
CRC32(
const std::vector<uint8_t>& bytes);
278uint32_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 ModbusInstrument.
Declaration of MultimeterChannel.
Declaration of Multimeter.
Declaration of OscilloscopeChannel.
Declaration of Oscilloscope.
Declaration of PeakDetectionFilter.
Declaration of QueueManager and QueueHandle.
Declaration of SCPIHIDTransport.
Declaration of SCPILinuxGPIBTransport.
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 StreamDescriptor.
Inline functions for StreamDescriptor.
Declaration of SwitchMatrix.
Declaration of TouchstoneParser.
Declaration of VICPSocketTransport.
Definition: scopehal.h:264
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:258
bool g_vulkanDeviceIsIntelMesa
Indicates that the Vulkan driver is Mesa on an Intel GPU.
Definition: VulkanInit.cpp:235
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:207
bool g_hasMemoryBudget
Indicates whether the VK_EXT_memory_budget extension is available.
Definition: VulkanInit.cpp:201
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:195
bool g_vulkanDeviceIsMoltenVK
Indicates that the Vulkan driver is MoltenVK.
Definition: VulkanInit.cpp:247
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:226
bool g_vulkanDeviceIsAnyMesa
Indicates that the Vulkan driver is Mesa on any GPU.
Definition: VulkanInit.cpp:241
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:220
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:891
string TrimQuotes(const string &str)
Removes quotes from the start and end of a string.
Definition: scopehal.cpp:521
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:785
uint64_t ConvertVectorSignalToScalar(const vector< bool > &bits)
Converts a vector bus signal into a scalar (up to 64 bits wide)
Definition: scopehal.cpp:320
vector< string > explode(const string &str, char separator)
Splits a string up into an array separated by delimiters.
Definition: scopehal.cpp:857
string strtolower(const string &s)
Converts a string to lower case.
Definition: scopehal.cpp:880
string Trim(const string &str)
Removes whitespace from the start and end of a string.
Definition: scopehal.cpp:489
string ReadFile(const string &path)
Returns the contents of a file.
Definition: scopehal.cpp:631
string FindDataFile(const string &relpath)
Locates a data file.
Definition: scopehal.cpp:817
string ReadDataFile(const string &relpath)
Locates and returns the contents of a data file as a std::string.
Definition: scopehal.cpp:752
void TransportStaticInit()
Static initialization for SCPI transports.
Definition: scopehal.cpp:148
void InitializePlugins()
Initialize all plugins.
Definition: scopehal.cpp:331
const char * ScopehalGetVersion()
Returns the library version string (Semantic Version formatted)
Definition: scopehal.cpp:1008
uint32_t CRC32(const uint8_t *bytes, size_t start, size_t end)
Calculates a CRC32 checksum using the standard Ethernet polynomial.
Definition: scopehal.cpp:977
uint64_t prev_pow2(uint64_t v)
Rounds a 64-bit integer down to the next power of 2.
Definition: scopehal.cpp:618
bool g_gpuScopeDriverEnabled
True if scope drivers can use GPU acceleration.
Definition: scopehal.cpp:136
std::string GetDirOfCurrentExecutable()
Gets the path to the directory containing the current executable.
Definition: scopehal.cpp:663
std::string to_string_sci(double d)
Like std::to_string, but output in scientific notation.
Definition: scopehal.cpp:566
uint64_t next_pow2(uint64_t v)
Rounds a 64-bit integer up to the next power of 2.
Definition: scopehal.cpp:594
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:576
void DetectCPUFeatures()
Static initialization for CPU feature flags.
Definition: scopehal.cpp:178
void DriverStaticInit()
Static initialization for instrument drivers.
Definition: scopehal.cpp:220
bool g_gpuFilterEnabled
True if filters can use GPU acceleration.
Definition: scopehal.cpp:133
float FreqToPhase(float hz)
Converts a frequency in Hz to a phase velocity in rad/sec.
Definition: scopehal.cpp:558
Definition: scopehal.h:240