123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597 |
- /****************************************************************************
- *
- * Filename: ps3000.h
- * Author: MTB & MAS
- * Description:
- *
- * This header defines the interface to driver routines for the
- * PicoScope 3000 Series PC Oscilloscopes.
- *
- * Copyright � 2002 - 2022 Pico Technology Ltd. All rights reserved.
- *
- ****************************************************************************/
- #ifndef PS3000_H
- #define PS3000_H
- #include <stdint.h>
- #ifdef PREF0
- #undef PREF0
- #endif
- #ifdef PREF1
- #undef PREF1
- #endif
- #ifdef PREF2
- #undef PREF2
- #endif
- #ifdef PREF3
- #undef PREF3
- #endif
- #ifdef PREF4
- #undef PREF4
- #endif
- #ifdef __cplusplus
- #define PREF0 extern "C"
- #else
- #define PREF0
- #endif
- /* If you are dynamically linking ps3000.dll into your project #define DYNLINK here
- */
- #ifdef WIN32
- #ifdef DYNLINK
- #define PREF1 typedef
- #define PREF2
- #define PREF3(x) (__stdcall *x)
- #else
- #define PREF1
- #ifdef _USRDLL
- #define PREF2 __declspec(dllexport) __stdcall
- #else
- #define PREF2 __declspec(dllimport) __stdcall
- #endif
- #define PREF3(x) x
- #endif
- #define PREF4 __stdcall
- #else
- #ifdef DYNLINK
- #define PREF1 typedef
- #define PREF2
- #define PREF3(x) (*x)
- #else
- #ifdef _USRDLL
- #define PREF1 __attribute__((visibility("default")))
- #else
- #define PREF1
- #endif
- #define PREF2
- #define PREF3(x) x
- #endif
- #define PREF4
- #endif
- #define PS3000_FIRST_USB 1
- #if defined (_DEBUG)
- #define PS3000_LAST_USB 64
- #else
- #define PS3000_LAST_USB 127
- #endif
- /* Maximum number of PS3000 units that can be opened at once
- */
- #define PS3000_MAX_UNITS (PS3000_LAST_USB - PS3000_FIRST_USB + 1)
- #define PS3206_MAX_TIMEBASE 21
- #define PS3205_MAX_TIMEBASE 20
- #define PS3204_MAX_TIMEBASE 19
- #define PS3224_MAX_TIMEBASE 19
- #define PS3223_MAX_TIMEBASE 19
- #define PS3424_MAX_TIMEBASE 19
- #define PS3423_MAX_TIMEBASE 19
- #define PS3225_MAX_TIMEBASE 18
- #define PS3226_MAX_TIMEBASE 19
- #define PS3425_MAX_TIMEBASE 19
- #define PS3426_MAX_TIMEBASE 19
- #define PS3000_MAX_OVERSAMPLE 256
- /* Although the PS3000 uses an 8-bit ADC, it is usually possible to
- * oversample (collect multiple readings at each time) by up to 256.
- * the results are therefore ALWAYS scaled up to 16-bits, even if
- * oversampling is not used.
- *
- * The maximum and minimum values returned are therefore as follows:
- */
- #define PS3000_MAX_VALUE 32767
- #define PS3000_MIN_VALUE -32767
- #define PS3000_LOST_DATA -32768
- /*
- * Signal generator constants. Note that a signal generator is not
- * available on all variants.
- */
- #define PS3000_MIN_SIGGEN_FREQ 0.093
- #define PS3000_MAX_SIGGEN_FREQ 1000000L
- /*
- * ETS constants
- */
- #define PS3206_MAX_ETS_CYCLES 500
- #define PS3206_MAX_ETS_INTERLEAVE 100
- #define PS3205_MAX_ETS_CYCLES 250
- #define PS3205_MAX_ETS_INTERLEAVE 50
- #define PS3204_MAX_ETS_CYCLES 125
- #define PS3204_MAX_ETS_INTERLEAVE 25
- #define PS3000_MAX_ETS_CYCLES_INTERLEAVE_RATIO 10
- #define PS3000_MIN_ETS_CYCLES_INTERLEAVE_RATIO 1
- #define PS300_MAX_ETS_SAMPLES 100000
- #define MAX_PULSE_WIDTH_QUALIFIER_COUNT 16777215L
- #define MAX_HOLDOFF_COUNT 8388607L
- typedef enum enPS3000Channel
- {
- PS3000_CHANNEL_A,
- PS3000_CHANNEL_B,
- PS3000_CHANNEL_C,
- PS3000_CHANNEL_D,
- PS3000_EXTERNAL,
- PS3000_MAX_CHANNELS = PS3000_EXTERNAL,
- PS3000_NONE,
- PS3000_MAX_TRIGGER_SOURCES
- } PS3000_CHANNEL;
- typedef enum enPS3000Range
- {
- PS3000_10MV,
- PS3000_20MV,
- PS3000_50MV,
- PS3000_100MV,
- PS3000_200MV,
- PS3000_500MV,
- PS3000_1V,
- PS3000_2V,
- PS3000_5V,
- PS3000_10V,
- PS3000_20V,
- PS3000_50V,
- PS3000_100V,
- PS3000_200V,
- PS3000_400V,
- PS3000_MAX_RANGES
- } PS3000_RANGE;
- typedef enum enPS3000WaveTypes
- {
- PS3000_SQUARE,
- PS3000_TRIANGLE,
- PS3000_SINE,
- PS3000_MAX_WAVE_TYPES
- } PS3000_WAVE_TYPES;
- typedef enum enPS3000TimeUnits
- {
- PS3000_FS,
- PS3000_PS,
- PS3000_NS,
- PS3000_US,
- PS3000_MS,
- PS3000_S,
- PS3000_MAX_TIME_UNITS,
- } PS3000_TIME_UNITS;
- typedef enum enPS3000Error
- {
- PS3000_OK,
- PS3000_MAX_UNITS_OPENED, // more than PS3000_MAX_UNITS
- PS3000_MEM_FAIL, //not enough RAM on host machine
- PS3000_NOT_FOUND, //cannot find device
- PS3000_FW_FAIL, //unabled to download firmware
- PS3000_NOT_RESPONDING,
- PS3000_CONFIG_FAIL, //missing or corrupted configuration settings
- PS3000_OS_NOT_SUPPORTED, //need to use win98SE (or later) or win2k (or later)
- PS3000_PICOPP_TOO_OLD,
- } PS3000_ERROR;
- typedef enum enPS3000Info
- {
- PS3000_DRIVER_VERSION,
- PS3000_USB_VERSION,
- PS3000_HARDWARE_VERSION,
- PS3000_VARIANT_INFO,
- PS3000_BATCH_AND_SERIAL,
- PS3000_CAL_DATE,
- PS3000_ERROR_CODE,
- PS3000_KERNEL_DRIVER_VERSION,
- PS3000_DRIVER_PATH
- } PS3000_INFO;
- typedef enum enPS3000TriggerDirection
- {
- PS3000_RISING,
- PS3000_FALLING,
- PS3000_MAX_DIRS
- } PS3000_TDIR;
- typedef enum enPS3000OpenProgress
- {
- PS3000_OPEN_PROGRESS_FAIL = -1,
- PS3000_OPEN_PROGRESS_PENDING = 0,
- PS3000_OPEN_PROGRESS_COMPLETE = 1
- } PS3000_OPEN_PROGRESS;
- typedef enum enPS3000EtsMode
- {
- PS3000_ETS_OFF, // ETS disabled
- PS3000_ETS_FAST, // Return ready as soon as requested no of interleaves is available
- PS3000_ETS_SLOW, // Return ready every time a new set of no_of_cycles is collected
- PS3000_ETS_MODES_MAX
- } PS3000_ETS_MODE;
- typedef int16_t (PREF4 *PS3000_CALLBACK_FUNC)
- (
- int16_t *dataBuffer,
- int16_t noOfBuffers
- );
- typedef void (PREF4 *GetOverviewBuffersMaxMin)
- (
- int16_t **overviewBuffers,
- int16_t overflow,
- uint32_t triggeredAt,
- int16_t triggered,
- int16_t auto_stop,
- uint32_t nValues
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_open_unit)
- (
- void
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_get_unit_info)
- (
- int16_t handle,
- int8_t *string,
- int16_t string_length,
- int16_t line
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_flash_led)
- (
- int16_t handle
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_close_unit)
- (
- int16_t handle
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_set_channel)
- (
- int16_t handle,
- int16_t channel,
- int16_t enabled,
- int16_t dc,
- int16_t range
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_get_timebase)
- (
- int16_t handle,
- int16_t timebase,
- int32_t no_of_samples,
- int32_t *time_interval,
- int16_t *time_units,
- int16_t oversample,
- int32_t *max_samples
- );
- PREF0 PREF1 int32_t PREF2 PREF3(ps3000_set_siggen)
- (
- int16_t handle,
- int16_t wave_type,
- int32_t start_frequency,
- int32_t stop_frequency,
- float increment,
- int16_t dwell_time,
- int16_t repeat,
- int16_t dual_slope
- );
- PREF0 PREF1 int32_t PREF2 PREF3(ps3000_set_ets)
- (
- int16_t handle,
- int16_t mode,
- int16_t ets_cycles,
- int16_t ets_interleave
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_set_trigger)
- (
- int16_t handle,
- int16_t source,
- int16_t threshold,
- int16_t direction,
- int16_t delay,
- int16_t auto_trigger_ms
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_set_trigger2)
- (
- int16_t handle,
- int16_t source,
- int16_t threshold,
- int16_t direction,
- float delay,
- int16_t auto_trigger_ms
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_run_block)
- (
- int16_t handle,
- int32_t no_of_values,
- int16_t timebase,
- int16_t oversample,
- int32_t * time_indisposed_ms
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_run_streaming_ns)
- (
- int16_t handle,
- uint32_t sample_interval,
- PS3000_TIME_UNITS time_units,
- uint32_t max_samples,
- int16_t auto_stop,
- uint32_t noOfSamplesPerAggregate,
- uint32_t overview_buffer_size
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_run_streaming)
- (
- int16_t handle,
- int16_t sample_interval_ms,
- int32_t max_samples,
- int16_t windowed
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_ready)
- (
- int16_t handle
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_stop)
- (
- int16_t handle
- );
- PREF0 PREF1 int32_t PREF2 PREF3(ps3000_get_values)
- (
- int16_t handle,
- int16_t *buffer_a,
- int16_t *buffer_b,
- int16_t *buffer_c,
- int16_t *buffer_d,
- int16_t *overflow,
- int32_t no_of_values
- );
- PREF0 PREF1 void PREF2 PREF3 (ps3000_release_stream_buffer)
- (
- int16_t handle
- );
- PREF0 PREF1 int32_t PREF2 PREF3(ps3000_get_times_and_values)
- (
- int16_t handle,
- int32_t *times,
- int16_t *buffer_a,
- int16_t *buffer_b,
- int16_t *buffer_c,
- int16_t *buffer_d,
- int16_t *overflow,
- int16_t time_units,
- int32_t no_of_values
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_open_unit_async)
- (
- void
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_open_unit_progress)
- (
- int16_t *handle,
- int16_t * progress_percent
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_streaming_ns_get_interval_stateless)
- (
- int16_t handle,
- int16_t nChannels,
- uint32_t *sample_interval
- );
- PREF0 PREF1 int16_t PREF2 PREF3(ps3000_get_streaming_last_values)
- (
- int16_t handle,
- GetOverviewBuffersMaxMin lpGetOverviewBuffersMaxMin
- );
- PREF0 PREF1 int16_t PREF2 PREF3 (ps3000_overview_buffer_status)
- (
- int16_t handle,
- int16_t *previous_buffer_overrun
- );
- PREF0 PREF1 uint32_t PREF2 PREF3(ps3000_get_streaming_values)
- (
- int16_t handle,
- double *start_time,
- int16_t *pbuffer_a_max,
- int16_t *pbuffer_a_min,
- int16_t *pbuffer_b_max,
- int16_t *pbuffer_b_min,
- int16_t *pbuffer_c_max,
- int16_t *pbuffer_c_min,
- int16_t *pbuffer_d_max,
- int16_t *pbuffer_d_min,
- int16_t *overflow,
- uint32_t *triggerAt,
- int16_t *triggered,
- uint32_t no_of_values,
- uint32_t noOfSamplesPerAggregate
- );
- PREF0 PREF1 uint32_t PREF2 PREF3 (ps3000_get_streaming_values_no_aggregation)
- (
- int16_t handle,
- double *start_time,
- int16_t *pbuffer_a,
- int16_t *pbuffer_b,
- int16_t *pbuffer_c,
- int16_t *pbuffer_d,
- int16_t *overflow,
- uint32_t *triggerAt,
- int16_t *trigger,
- uint32_t no_of_values
- );
- PREF0 PREF1 int16_t PREF2 PREF3 (ps3000_save_streaming_data)
- (
- int16_t handle,
- PS3000_CALLBACK_FUNC lpCallbackFunc,
- int16_t *dataBuffers,
- int16_t dataBufferSize
- );
- //===========================================================
- // Adv Trigger
- //===========================================================
- typedef enum enThresholdDirection
- {
- ABOVE,
- BELOW,
- RISING,
- FALLING,
- RISING_OR_FALLING,
- INSIDE = ABOVE,
- OUTSIDE = BELOW,
- ENTER = RISING,
- EXIT = FALLING,
- ENTER_OR_EXIT = RISING_OR_FALLING,
- NONE = RISING
- } THRESHOLD_DIRECTION;
- typedef enum enThresholdMode
- {
- LEVEL,
- WINDOW
- } THRESHOLD_MODE;
- typedef enum enTriggerState
- {
- CONDITION_DONT_CARE,
- CONDITION_TRUE,
- CONDITION_FALSE,
- CONDITION_MAX
- } TRIGGER_STATE;
- typedef enum enPulseWidthType
- {
- PW_TYPE_NONE,
- PW_TYPE_LESS_THAN,
- PW_TYPE_GREATER_THAN,
- PW_TYPE_IN_RANGE,
- PW_TYPE_OUT_OF_RANGE
- } PULSE_WIDTH_TYPE;
- #pragma pack(1)
- typedef struct tTriggerChannelProperties
- {
- int16_t thresholdMajor;
- int16_t thresholdMinor;
- uint16_t hysteresis;
- int16_t channel;
- THRESHOLD_MODE thresholdMode;
- } TRIGGER_CHANNEL_PROPERTIES;
- #pragma pack()
- #pragma pack(1)
- typedef struct tTriggerConditions
- {
- TRIGGER_STATE channelA;
- TRIGGER_STATE channelB;
- TRIGGER_STATE channelC;
- TRIGGER_STATE channelD;
- TRIGGER_STATE external;
- TRIGGER_STATE pulseWidthQualifier;
- } TRIGGER_CONDITIONS;
- #pragma pack()
- #pragma pack(1)
- typedef struct tPwqConditions
- {
- TRIGGER_STATE channelA;
- TRIGGER_STATE channelB;
- TRIGGER_STATE channelC;
- TRIGGER_STATE channelD;
- TRIGGER_STATE external;
- } PWQ_CONDITIONS;
- #pragma pack()
- PREF0 PREF1 int16_t PREF2 PREF3 (ps3000SetAdvTriggerChannelProperties)
- (
- int16_t handle,
- TRIGGER_CHANNEL_PROPERTIES *channelProperties,
- int16_t nChannelProperties,
- int32_t autoTriggerMilliseconds
- );
- PREF0 PREF1 int16_t PREF2 PREF3 (ps3000SetAdvTriggerChannelConditions)
- (
- int16_t handle,
- TRIGGER_CONDITIONS *conditions,
- int16_t nConditions
- );
- PREF0 PREF1 int16_t PREF2 PREF3 (ps3000SetAdvTriggerChannelDirections)
- (
- int16_t handle,
- THRESHOLD_DIRECTION channelA,
- THRESHOLD_DIRECTION channelB,
- THRESHOLD_DIRECTION channelC,
- THRESHOLD_DIRECTION channelD,
- THRESHOLD_DIRECTION ext
- );
- PREF0 PREF1 int16_t PREF2 PREF3 (ps3000SetPulseWidthQualifier)
- (
- int16_t handle,
- PWQ_CONDITIONS *conditions,
- int16_t nConditions,
- THRESHOLD_DIRECTION direction,
- uint32_t lower,
- uint32_t upper,
- PULSE_WIDTH_TYPE type
- );
- PREF0 PREF1 int16_t PREF2 PREF3 (ps3000SetAdvTriggerDelay)
- (
- int16_t handle,
- uint32_t delay,
- float preTriggerDelay
- );
- PREF0 PREF1 int16_t PREF2 PREF3 (ps3000PingUnit)
- (
- int16_t handle
- );
- #endif /* not defined PS3000_H */
|