picoscopereader hinzugefügt
This commit is contained in:
commit
2b0b5201b5
20
PicoSopeReader.sln
Normal file
20
PicoSopeReader.sln
Normal file
@ -0,0 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||
# Visual Studio 2008
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PicoSopeReader", "PicoSopeReader\PicoSopeReader.csproj", "{DB1DED6E-A9EA-4075-8500-21D1686A64C9}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{DB1DED6E-A9EA-4075-8500-21D1686A64C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DB1DED6E-A9EA-4075-8500-21D1686A64C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DB1DED6E-A9EA-4075-8500-21D1686A64C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DB1DED6E-A9EA-4075-8500-21D1686A64C9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
478
PicoSopeReader/Imports.cs
Normal file
478
PicoSopeReader/Imports.cs
Normal file
@ -0,0 +1,478 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Filename: Imports.cs
|
||||
*
|
||||
* Copyright: Pico Technology Limited 2007
|
||||
*
|
||||
* Author: MJL
|
||||
*
|
||||
* Description:
|
||||
* This file contains all the .NET wrapper calls needed to support
|
||||
* the console example. It also has the enums and structs required
|
||||
* by the (wrapped) function calls.
|
||||
*
|
||||
* History:
|
||||
* 14Dec06 MJL Created
|
||||
*
|
||||
* Revision Info: "file %n date %f revision %v"
|
||||
* ""
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
namespace PicoSopeReader
|
||||
{
|
||||
class Imports
|
||||
{
|
||||
#region constants
|
||||
public const string _DRIVER_FILENAME = "ps5000.dll";
|
||||
|
||||
public const int MaxValue = 32512;
|
||||
#endregion
|
||||
|
||||
#region Driver enums
|
||||
|
||||
public enum Channel : int
|
||||
{
|
||||
ChannelA,
|
||||
ChannelB,
|
||||
ChannelC,
|
||||
ChannelD,
|
||||
External,
|
||||
Aux,
|
||||
None,
|
||||
}
|
||||
|
||||
public enum Range : int
|
||||
{
|
||||
Range_10MV,
|
||||
Range_20MV,
|
||||
Range_50MV,
|
||||
Range_100MV,
|
||||
Range_200MV,
|
||||
Range_500MV,
|
||||
Range_1V,
|
||||
Range_2V,
|
||||
Range_5V,
|
||||
Range_10V,
|
||||
Range_20V,
|
||||
Range_50V,
|
||||
}
|
||||
|
||||
public enum ReportedTimeUnits : int
|
||||
{
|
||||
FemtoSeconds,
|
||||
PicoSeconds,
|
||||
NanoSeconds,
|
||||
MicroSeconds,
|
||||
MilliSeconds,
|
||||
Seconds,
|
||||
}
|
||||
|
||||
public enum SiggenWaveType : int
|
||||
{
|
||||
Sine,
|
||||
Square,
|
||||
Triangle,
|
||||
RampUp,
|
||||
RampDown,
|
||||
SinXOverX,
|
||||
Gaussian,
|
||||
HalfSine,
|
||||
DcVoltage,
|
||||
MAX_WAVE_TYPES
|
||||
}
|
||||
|
||||
public enum SiggenSweepType : int
|
||||
{
|
||||
Up,
|
||||
Down,
|
||||
UpDown,
|
||||
DownUp
|
||||
}
|
||||
|
||||
public enum SiggenTrigType : int
|
||||
{
|
||||
Rising,
|
||||
Falling,
|
||||
GateHigh,
|
||||
GateLow
|
||||
}
|
||||
|
||||
public enum SiggenTrigSource : int
|
||||
{
|
||||
None,
|
||||
ScopeTrigger,
|
||||
AuxIn,
|
||||
ExtIn,
|
||||
SoftwareTrigger
|
||||
}
|
||||
|
||||
public enum SiggenIndexMode : int
|
||||
{
|
||||
Single,
|
||||
Dual,
|
||||
Quad,
|
||||
}
|
||||
|
||||
public enum EtsMode : int
|
||||
{
|
||||
Off,
|
||||
Fast,
|
||||
Slow,
|
||||
}
|
||||
|
||||
public enum ThresholdMode : int
|
||||
{
|
||||
Level,
|
||||
Window
|
||||
}
|
||||
|
||||
public enum ThresholdDirection : int
|
||||
{
|
||||
// Values for level threshold mode
|
||||
//
|
||||
Above,
|
||||
Below,
|
||||
Rising,
|
||||
Falling,
|
||||
RisingOrFalling,
|
||||
|
||||
// Values for window threshold mode
|
||||
//
|
||||
Inside = Above,
|
||||
Outside = Below,
|
||||
Enter = Rising,
|
||||
Exit = Falling,
|
||||
EnterOrExit = RisingOrFalling,
|
||||
|
||||
None = Rising,
|
||||
}
|
||||
|
||||
public enum DownSamplingMode : int
|
||||
{
|
||||
None,
|
||||
Aggregate
|
||||
}
|
||||
|
||||
public enum PulseWidthType : int
|
||||
{
|
||||
None,
|
||||
LessThan,
|
||||
GreaterThan,
|
||||
InRange,
|
||||
OutOfRange
|
||||
}
|
||||
|
||||
public enum TriggerState : int
|
||||
{
|
||||
DontCare,
|
||||
True,
|
||||
False,
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct TriggerChannelProperties
|
||||
{
|
||||
public short ThresholdMajor;
|
||||
public short ThresholdMinor;
|
||||
public ushort Hysteresis;
|
||||
public Channel Channel;
|
||||
public ThresholdMode ThresholdMode;
|
||||
|
||||
|
||||
public TriggerChannelProperties(
|
||||
short thresholdMajor,
|
||||
short thresholdMinor,
|
||||
ushort hysteresis,
|
||||
Channel channel,
|
||||
ThresholdMode thresholdMode)
|
||||
{
|
||||
this.ThresholdMajor = thresholdMajor;
|
||||
this.ThresholdMinor = thresholdMinor;
|
||||
this.Hysteresis = hysteresis;
|
||||
this.Channel = channel;
|
||||
this.ThresholdMode = thresholdMode;
|
||||
}
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct TriggerConditions
|
||||
{
|
||||
public TriggerState ChannelA;
|
||||
public TriggerState ChannelB;
|
||||
public TriggerState ChannelC;
|
||||
public TriggerState ChannelD;
|
||||
public TriggerState External;
|
||||
public TriggerState Aux;
|
||||
public TriggerState Pwq;
|
||||
|
||||
public TriggerConditions(
|
||||
TriggerState channelA,
|
||||
TriggerState channelB,
|
||||
TriggerState channelC,
|
||||
TriggerState channelD,
|
||||
TriggerState external,
|
||||
TriggerState aux,
|
||||
TriggerState pwq)
|
||||
{
|
||||
this.ChannelA = channelA;
|
||||
this.ChannelB = channelB;
|
||||
this.ChannelC = channelC;
|
||||
this.ChannelD = channelD;
|
||||
this.External = external;
|
||||
this.Aux = aux;
|
||||
this.Pwq = pwq;
|
||||
}
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct PwqConditions
|
||||
{
|
||||
public TriggerState ChannelA;
|
||||
public TriggerState ChannelB;
|
||||
public TriggerState ChannelC;
|
||||
public TriggerState ChannelD;
|
||||
public TriggerState External;
|
||||
public TriggerState Aux;
|
||||
|
||||
public PwqConditions(
|
||||
TriggerState channelA,
|
||||
TriggerState channelB,
|
||||
TriggerState channelC,
|
||||
TriggerState channelD,
|
||||
TriggerState external,
|
||||
TriggerState aux)
|
||||
{
|
||||
this.ChannelA = channelA;
|
||||
this.ChannelB = channelB;
|
||||
this.ChannelC = channelC;
|
||||
this.ChannelD = channelD;
|
||||
this.External = external;
|
||||
this.Aux = aux;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Driver Imports
|
||||
#region Callback delegates
|
||||
public delegate void ps5000BlockReady(short handle, short status, IntPtr pVoid);
|
||||
|
||||
public delegate void ps5000StreamingReady(
|
||||
short handle,
|
||||
int noOfSamples,
|
||||
uint startIndex,
|
||||
short ov,
|
||||
uint triggerAt,
|
||||
short triggered,
|
||||
short autoStop,
|
||||
IntPtr pVoid);
|
||||
|
||||
public delegate void ps5000DataReady(
|
||||
short handle,
|
||||
int noOfSamples,
|
||||
short overflow,
|
||||
uint triggerAt,
|
||||
short triggered,
|
||||
IntPtr pVoid);
|
||||
#endregion
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000OpenUnit")]
|
||||
public static extern short OpenUnit(out short handle);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000CloseUnit")]
|
||||
public static extern short CloseUnit(short handle);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000RunBlock")]
|
||||
public static extern short RunBlock(
|
||||
short handle,
|
||||
int noOfPreTriggerSamples,
|
||||
int noOfPostTriggerSamples,
|
||||
uint timebase,
|
||||
short oversample,
|
||||
out int timeIndisposedMs,
|
||||
ushort segmentIndex,
|
||||
ps5000BlockReady lpPs5000BlockReady,
|
||||
IntPtr pVoid);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000Stop")]
|
||||
public static extern short Stop(short handle);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetChannel")]
|
||||
public static extern short SetChannel(
|
||||
short handle,
|
||||
Channel channel,
|
||||
short enabled,
|
||||
short dc,
|
||||
Range range);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetDataBuffers")]
|
||||
public static extern short SetDataBuffers(
|
||||
short handle,
|
||||
Channel channel,
|
||||
short[] bufferMax,
|
||||
short[] bufferMin,
|
||||
int bufferLth);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetDataBuffer")]
|
||||
public static extern short SetDataBuffer(
|
||||
short handle,
|
||||
Channel channel,
|
||||
short[] buffer,
|
||||
long bufferLth);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetEts")]
|
||||
public static extern short SetEts(
|
||||
short handle,
|
||||
EtsMode mode,
|
||||
short etsCycles,
|
||||
short etsInterleave,
|
||||
out int sampleTimePicoseconds);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetTriggerChannelDirections")]
|
||||
public static extern short SetTriggerChannelDirections(
|
||||
short handle,
|
||||
ThresholdDirection channelA,
|
||||
ThresholdDirection channelB,
|
||||
ThresholdDirection channelC,
|
||||
ThresholdDirection channelD,
|
||||
ThresholdDirection ext,
|
||||
ThresholdDirection aux);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000GetTimebase")]
|
||||
public static extern short GetTimebase(
|
||||
short handle,
|
||||
uint timebase,
|
||||
int noSamples,
|
||||
out int timeIntervalNanoseconds,
|
||||
short oversample,
|
||||
out int maxSamples,
|
||||
ushort segmentIndex);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000GetValues")]
|
||||
public static extern short GetValues(
|
||||
short handle,
|
||||
uint startIndex,
|
||||
ref uint noOfSamples,
|
||||
uint downSampleRatio,
|
||||
DownSamplingMode downSampleDownSamplingMode,
|
||||
ushort segmentIndex,
|
||||
out short overflow);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetPulseWidthQualifier")]
|
||||
public static extern short SetPulseWidthQualifier(
|
||||
short handle,
|
||||
PwqConditions[] conditions,
|
||||
short numConditions,
|
||||
ThresholdDirection direction,
|
||||
uint lower,
|
||||
uint upper,
|
||||
PulseWidthType type);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetTriggerChannelProperties")]
|
||||
public static extern short SetTriggerChannelProperties(
|
||||
short handle,
|
||||
TriggerChannelProperties[] channelProperties,
|
||||
short numChannelProperties,
|
||||
short auxOutputEnable,
|
||||
int autoTriggerMilliseconds);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetTriggerChannelConditions")]
|
||||
public static extern short SetTriggerChannelConditions(
|
||||
short handle,
|
||||
TriggerConditions[] conditions,
|
||||
short numConditions);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetTriggerDelay")]
|
||||
public static extern short SetTriggerDelay(short handle, uint delay);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000GetUnitInfo")]
|
||||
public static extern short GetUnitInfo(short handle, StringBuilder infoString, short stringLength, out short requiredSize, int info);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetSigGenBuiltIn")]
|
||||
public static extern short SetSiggenBuiltIn(
|
||||
short handle,
|
||||
int offsetVoltage,
|
||||
uint pkToPk,
|
||||
SiggenWaveType siggenWaveType,
|
||||
float startFrequency,
|
||||
float stopFrequency,
|
||||
float increment,
|
||||
float dwellTime,
|
||||
SiggenSweepType sweepType,
|
||||
bool whiteNoise,
|
||||
uint shots,
|
||||
uint sweeps,
|
||||
SiggenTrigType triggerType,
|
||||
SiggenTrigSource triggerSource,
|
||||
short extInThreshold);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetSigGenArbitrary")]
|
||||
public static extern short SetSiggenArbitrary(
|
||||
short handle,
|
||||
int offsetVoltage,
|
||||
uint pkToPk,
|
||||
uint startDeltaPhase,
|
||||
uint stopDeltaPhase,
|
||||
uint deltaPhaseIncrement,
|
||||
uint dwellCount,
|
||||
short[] arbitraryWaveform,
|
||||
uint arbitraryWaveformSize,
|
||||
SiggenSweepType sweepType,
|
||||
bool whiteNoise,
|
||||
SiggenIndexMode indexMode,
|
||||
uint shots,
|
||||
uint sweeps,
|
||||
SiggenTrigType triggerType,
|
||||
SiggenTrigSource triggerSource,
|
||||
short extInThreshold);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000RunStreaming")]
|
||||
public static extern short RunStreaming(
|
||||
short handle,
|
||||
ref uint sampleInterval,
|
||||
ReportedTimeUnits sampleIntervalTimeUnits,
|
||||
uint maxPreTriggerSamples,
|
||||
uint maxPostPreTriggerSamples,
|
||||
bool autoStop,
|
||||
uint downSamplingRation,
|
||||
uint overviewBufferSize);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000GetStreamingLatestValues")]
|
||||
public static extern short GetStreamingLatestValues(
|
||||
short handle,
|
||||
ps5000StreamingReady lpPs5000StreamingReady,
|
||||
IntPtr pVoid);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetNoOfCaptures")]
|
||||
public static extern short SetNoOfRapidCaptures(
|
||||
short handle,
|
||||
ushort nWaveforms);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000MemorySegments")]
|
||||
public static extern short MemorySegments(
|
||||
short handle,
|
||||
ushort nSegments,
|
||||
out int nMaxSamples);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetDataBufferBulk")]
|
||||
public static extern short SetDataBuffersRapid(
|
||||
short handle,
|
||||
Channel channel,
|
||||
short[] buffer,
|
||||
int bufferLth,
|
||||
ushort waveform);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000GetValuesBulk")]
|
||||
public static extern short GetValuesRapid(
|
||||
short handle,
|
||||
ref uint noOfSamples,
|
||||
ushort fromSegmentIndex,
|
||||
ushort toSegmentIndex,
|
||||
short[] overflows);
|
||||
#endregion
|
||||
}
|
||||
}
|
147
PicoSopeReader/PicoReader.cs
Normal file
147
PicoSopeReader/PicoReader.cs
Normal file
@ -0,0 +1,147 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
|
||||
namespace PicoSopeReader
|
||||
{
|
||||
class PicoReader
|
||||
{
|
||||
private readonly short _handle;
|
||||
uint _timebase;
|
||||
short _oversample;
|
||||
bool _ready = false;
|
||||
ushort[] inputRanges = { 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000 };
|
||||
|
||||
public PicoReader(short handle)
|
||||
{
|
||||
_handle = handle;
|
||||
}
|
||||
public void Run()
|
||||
{
|
||||
char ch = ' ';
|
||||
while (ch != 'X')
|
||||
{
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("+-----------------------------------------------------+");
|
||||
Console.WriteLine("|Wilkommen zum PicoScopeReader: |");
|
||||
Console.WriteLine("|Programiert von Philip Schell |");
|
||||
Console.WriteLine("| |");
|
||||
Console.WriteLine("|Programm released under LGPLv3 |");
|
||||
Console.WriteLine("| |");
|
||||
Console.WriteLine("| S - Start Reading X - exit |");
|
||||
Console.WriteLine("+-----------------------------------------------------+");
|
||||
ch = char.ToUpper(Console.ReadKey().KeyChar);
|
||||
Console.WriteLine("\n");
|
||||
switch (ch)
|
||||
{
|
||||
case 'B':
|
||||
Tracking();
|
||||
break;
|
||||
|
||||
default:
|
||||
Console.WriteLine("Invalid operation");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
private void Tracking()
|
||||
{
|
||||
Console.WriteLine("Chan A einschalten und auf 5V: {0}", Imports.SetChannel(_handle, Imports.Channel.ChannelA, 1, 1, Imports.Range.Range_5V));
|
||||
|
||||
Console.WriteLine("Chan B einschalten und auf 1V: {0}", Imports.SetChannel(_handle, Imports.Channel.ChannelB, 1, 1, Imports.Range.Range_1V));
|
||||
|
||||
int tmp;
|
||||
Console.WriteLine("Disable ETS: {0}", Imports.SetEts(_handle, Imports.EtsMode.Off, 0, 0, out tmp));
|
||||
|
||||
int timeInterval;
|
||||
int maxSamples;
|
||||
uint sampleCount = (int)(1 * 1e6);
|
||||
_timebase = 5; //timebase = 5 => 24ns => 40mhz
|
||||
_oversample = 1;
|
||||
Console.WriteLine("Zeit Setzen: {0}", Imports.GetTimebase(_handle, _timebase, (int)sampleCount, out timeInterval, _oversample, out maxSamples, 0));
|
||||
|
||||
short triggerVoltage = mv_to_adc(3000, (short)Imports.Range.Range_5V);
|
||||
Console.WriteLine("max {0} {1}:", Imports.MaxValue, triggerVoltage);
|
||||
|
||||
Imports.TriggerChannelProperties[] sourceDetails = new Imports.TriggerChannelProperties[] {
|
||||
new Imports.TriggerChannelProperties(
|
||||
triggerVoltage,
|
||||
triggerVoltage,
|
||||
1,
|
||||
Imports.Channel.ChannelA,
|
||||
Imports.ThresholdMode.Level)};
|
||||
Console.WriteLine("Trigger Einstellungen auf Chan A setzen: {0}", Imports.SetTriggerChannelProperties(_handle, sourceDetails, (short)sourceDetails.Length, 0, 0));
|
||||
|
||||
Imports.TriggerConditions[] cond = new Imports.TriggerConditions[] {
|
||||
new Imports.TriggerConditions(
|
||||
Imports.TriggerState.True,
|
||||
Imports.TriggerState.DontCare,
|
||||
Imports.TriggerState.DontCare,
|
||||
Imports.TriggerState.DontCare,
|
||||
Imports.TriggerState.DontCare,
|
||||
Imports.TriggerState.DontCare,
|
||||
Imports.TriggerState.DontCare)};
|
||||
Console.WriteLine("Trigger Bedingung auf Chan A setzen: {0}", Imports.SetTriggerChannelConditions(_handle, cond, (short)cond.Length));
|
||||
|
||||
Imports.ThresholdDirection dir_i = Imports.ThresholdDirection.Falling;
|
||||
Imports.ThresholdDirection dir_n = Imports.ThresholdDirection.None;
|
||||
Console.WriteLine("Trigger Richtung auf Chan A setzen: {0}", Imports.SetTriggerChannelDirections(_handle, dir_i, dir_n, dir_n, dir_n, dir_n, dir_n));
|
||||
|
||||
Console.WriteLine("Trigger Verzögerung setzen: {0}", Imports.SetTriggerDelay(_handle, 0));
|
||||
|
||||
Console.WriteLine("Alloc Buffer A (Chan A)");
|
||||
short[] Buffer_A = new short[sampleCount];
|
||||
|
||||
Console.WriteLine("Alloc Buffer B (Chan B)");
|
||||
short[] Buffer_B = new short[sampleCount];
|
||||
|
||||
Console.WriteLine("Buffer ChanA Setzen: {0}", Imports.SetDataBuffer(_handle, Imports.Channel.ChannelA, Buffer_A, sampleCount));
|
||||
|
||||
Console.WriteLine("Buffer ChanB Setzen: {0}", Imports.SetDataBuffer(_handle, Imports.Channel.ChannelB, Buffer_B, sampleCount));
|
||||
|
||||
|
||||
_ready = false;
|
||||
int timeIndisposed;
|
||||
Console.WriteLine("Trigger Starten: {0}", Imports.RunBlock(_handle, 0, (int)sampleCount, _timebase, _oversample, out timeIndisposed, 0, BlockCallback, IntPtr.Zero));
|
||||
|
||||
Console.WriteLine("======================================================\n" +
|
||||
"Gestartet, wenn Sie keine Lust mehr haben, drücken sie irgend eine Taste");
|
||||
while (!_ready && !Console.KeyAvailable)
|
||||
{
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
if (Console.KeyAvailable)
|
||||
Console.ReadKey(true);
|
||||
|
||||
Imports.Stop(_handle);
|
||||
if (_ready)
|
||||
{
|
||||
short overflow;
|
||||
Console.WriteLine("Bekomme werte zurück: {0}", Imports.GetValues(_handle, 0, ref sampleCount, 1, Imports.DownSamplingMode.None, 0, out overflow));
|
||||
Console.WriteLine("Buffergröße {0}", sampleCount);
|
||||
StreamWriter chan_a = new StreamWriter("Chan_A.txt");
|
||||
StreamWriter chan_b = new StreamWriter("Chan_B.txt");
|
||||
for (int i = 0; i < sampleCount; i++)
|
||||
{
|
||||
chan_a.WriteLine(adc_to_mv(Buffer_A[i], (short)Imports.Range.Range_5V));
|
||||
chan_b.WriteLine(adc_to_mv(Buffer_B[i], (short)Imports.Range.Range_1V));
|
||||
}
|
||||
chan_a.Close();
|
||||
chan_b.Close();
|
||||
Console.WriteLine("Dateien geschrieben!");
|
||||
}
|
||||
}
|
||||
short mv_to_adc(short mv, short ch)
|
||||
{
|
||||
return (short)((mv * Imports.MaxValue) / inputRanges[ch]);
|
||||
}
|
||||
int adc_to_mv(int raw, int ch)
|
||||
{
|
||||
return (raw * inputRanges[ch]) / Imports.MaxValue;
|
||||
}
|
||||
void BlockCallback(short handle, short status, IntPtr pVoid)
|
||||
{
|
||||
_ready = true;
|
||||
}
|
||||
}
|
||||
}
|
61
PicoSopeReader/PicoSopeReader.csproj
Normal file
61
PicoSopeReader/PicoSopeReader.csproj
Normal file
@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{DB1DED6E-A9EA-4075-8500-21D1686A64C9}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>PicoSopeReader</RootNamespace>
|
||||
<AssemblyName>PicoSopeReader</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.Linq">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Data.DataSetExtensions">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Imports.cs" />
|
||||
<Compile Include="PicoReader.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
57
PicoSopeReader/Program.cs
Normal file
57
PicoSopeReader/Program.cs
Normal file
@ -0,0 +1,57 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
|
||||
namespace PicoSopeReader
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("PS5000 Reader Programm");
|
||||
Console.WriteLine("Version 1.0\n");
|
||||
Console.WriteLine("\n\nGerät öffnen...");
|
||||
short handle = 0;
|
||||
short status = 0;
|
||||
try
|
||||
{
|
||||
status = Imports.OpenUnit(out handle);
|
||||
}
|
||||
catch (System.DllNotFoundException)
|
||||
{
|
||||
Console.WriteLine("Konnte die Treiber DLL Datei nicht finden! ({0})",Imports._DRIVER_FILENAME);
|
||||
WaitForKeyAndExit();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
WaitForKeyAndExit();
|
||||
}
|
||||
finally
|
||||
{
|
||||
Console.WriteLine("Handle: {0}", handle);
|
||||
if (status != 0)
|
||||
{
|
||||
Console.WriteLine("Unable to open device");
|
||||
Console.WriteLine("Error code : {0}", status);
|
||||
WaitForKeyAndExit();
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Device opened successfully\n");
|
||||
PicoReader prog = new PicoReader(handle);
|
||||
prog.Run();
|
||||
Imports.CloseUnit(handle);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
private static void WaitForKeyAndExit()
|
||||
{
|
||||
while (!Console.KeyAvailable)
|
||||
Thread.Sleep(100);
|
||||
if (Console.KeyAvailable)
|
||||
Console.ReadKey(true);
|
||||
Environment.Exit(1);
|
||||
}
|
||||
}
|
||||
}
|
36
PicoSopeReader/Properties/AssemblyInfo.cs
Normal file
36
PicoSopeReader/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||
// die mit einer Assembly verknüpft sind.
|
||||
[assembly: AssemblyTitle("PicoSopeReader")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("PicoSopeReader")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2010")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
|
||||
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
|
||||
// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
|
||||
[assembly: Guid("83a98d9b-1322-451c-9d00-d4f2c8b4e822")]
|
||||
|
||||
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
||||
//
|
||||
// Hauptversion
|
||||
// Nebenversion
|
||||
// Buildnummer
|
||||
// Revision
|
||||
//
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
BIN
PicoSopeReader/bin/Release/PicoSopeReader.exe
Normal file
BIN
PicoSopeReader/bin/Release/PicoSopeReader.exe
Normal file
Binary file not shown.
1066
dotnet example/ConsoleExample.cs
Normal file
1066
dotnet example/ConsoleExample.cs
Normal file
File diff suppressed because it is too large
Load Diff
478
dotnet example/Imports.cs
Normal file
478
dotnet example/Imports.cs
Normal file
@ -0,0 +1,478 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Filename: Imports.cs
|
||||
*
|
||||
* Copyright: Pico Technology Limited 2007
|
||||
*
|
||||
* Author: MJL
|
||||
*
|
||||
* Description:
|
||||
* This file contains all the .NET wrapper calls needed to support
|
||||
* the console example. It also has the enums and structs required
|
||||
* by the (wrapped) function calls.
|
||||
*
|
||||
* History:
|
||||
* 14Dec06 MJL Created
|
||||
*
|
||||
* Revision Info: "file %n date %f revision %v"
|
||||
* ""
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
namespace ps5000example
|
||||
{
|
||||
class Imports
|
||||
{
|
||||
#region constants
|
||||
private const string _DRIVER_FILENAME = "ps5000.dll";
|
||||
|
||||
public const int MaxValue = 32512;
|
||||
#endregion
|
||||
|
||||
#region Driver enums
|
||||
|
||||
public enum Channel : int
|
||||
{
|
||||
ChannelA,
|
||||
ChannelB,
|
||||
ChannelC,
|
||||
ChannelD,
|
||||
External,
|
||||
Aux,
|
||||
None,
|
||||
}
|
||||
|
||||
public enum Range : int
|
||||
{
|
||||
Range_10MV,
|
||||
Range_20MV,
|
||||
Range_50MV,
|
||||
Range_100MV,
|
||||
Range_200MV,
|
||||
Range_500MV,
|
||||
Range_1V,
|
||||
Range_2V,
|
||||
Range_5V,
|
||||
Range_10V,
|
||||
Range_20V,
|
||||
Range_50V,
|
||||
}
|
||||
|
||||
public enum ReportedTimeUnits : int
|
||||
{
|
||||
FemtoSeconds,
|
||||
PicoSeconds,
|
||||
NanoSeconds,
|
||||
MicroSeconds,
|
||||
MilliSeconds,
|
||||
Seconds,
|
||||
}
|
||||
|
||||
public enum SiggenWaveType : int
|
||||
{
|
||||
Sine,
|
||||
Square,
|
||||
Triangle,
|
||||
RampUp,
|
||||
RampDown,
|
||||
SinXOverX,
|
||||
Gaussian,
|
||||
HalfSine,
|
||||
DcVoltage,
|
||||
MAX_WAVE_TYPES
|
||||
}
|
||||
|
||||
public enum SiggenSweepType : int
|
||||
{
|
||||
Up,
|
||||
Down,
|
||||
UpDown,
|
||||
DownUp
|
||||
}
|
||||
|
||||
public enum SiggenTrigType : int
|
||||
{
|
||||
Rising,
|
||||
Falling,
|
||||
GateHigh,
|
||||
GateLow
|
||||
}
|
||||
|
||||
public enum SiggenTrigSource : int
|
||||
{
|
||||
None,
|
||||
ScopeTrigger,
|
||||
AuxIn,
|
||||
ExtIn,
|
||||
SoftwareTrigger
|
||||
}
|
||||
|
||||
public enum SiggenIndexMode : int
|
||||
{
|
||||
Single,
|
||||
Dual,
|
||||
Quad,
|
||||
}
|
||||
|
||||
public enum EtsMode : int
|
||||
{
|
||||
Off,
|
||||
Fast,
|
||||
Slow,
|
||||
}
|
||||
|
||||
public enum ThresholdMode : int
|
||||
{
|
||||
Level,
|
||||
Window
|
||||
}
|
||||
|
||||
public enum ThresholdDirection : int
|
||||
{
|
||||
// Values for level threshold mode
|
||||
//
|
||||
Above,
|
||||
Below,
|
||||
Rising,
|
||||
Falling,
|
||||
RisingOrFalling,
|
||||
|
||||
// Values for window threshold mode
|
||||
//
|
||||
Inside = Above,
|
||||
Outside = Below,
|
||||
Enter = Rising,
|
||||
Exit = Falling,
|
||||
EnterOrExit = RisingOrFalling,
|
||||
|
||||
None = Rising,
|
||||
}
|
||||
|
||||
public enum DownSamplingMode : int
|
||||
{
|
||||
None,
|
||||
Aggregate
|
||||
}
|
||||
|
||||
public enum PulseWidthType : int
|
||||
{
|
||||
None,
|
||||
LessThan,
|
||||
GreaterThan,
|
||||
InRange,
|
||||
OutOfRange
|
||||
}
|
||||
|
||||
public enum TriggerState : int
|
||||
{
|
||||
DontCare,
|
||||
True,
|
||||
False,
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct TriggerChannelProperties
|
||||
{
|
||||
public short ThresholdMajor;
|
||||
public short ThresholdMinor;
|
||||
public ushort Hysteresis;
|
||||
public Channel Channel;
|
||||
public ThresholdMode ThresholdMode;
|
||||
|
||||
|
||||
public TriggerChannelProperties(
|
||||
short thresholdMajor,
|
||||
short thresholdMinor,
|
||||
ushort hysteresis,
|
||||
Channel channel,
|
||||
ThresholdMode thresholdMode)
|
||||
{
|
||||
this.ThresholdMajor = thresholdMajor;
|
||||
this.ThresholdMinor = thresholdMinor;
|
||||
this.Hysteresis = hysteresis;
|
||||
this.Channel = channel;
|
||||
this.ThresholdMode = thresholdMode;
|
||||
}
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct TriggerConditions
|
||||
{
|
||||
public TriggerState ChannelA;
|
||||
public TriggerState ChannelB;
|
||||
public TriggerState ChannelC;
|
||||
public TriggerState ChannelD;
|
||||
public TriggerState External;
|
||||
public TriggerState Aux;
|
||||
public TriggerState Pwq;
|
||||
|
||||
public TriggerConditions(
|
||||
TriggerState channelA,
|
||||
TriggerState channelB,
|
||||
TriggerState channelC,
|
||||
TriggerState channelD,
|
||||
TriggerState external,
|
||||
TriggerState aux,
|
||||
TriggerState pwq)
|
||||
{
|
||||
this.ChannelA = channelA;
|
||||
this.ChannelB = channelB;
|
||||
this.ChannelC = channelC;
|
||||
this.ChannelD = channelD;
|
||||
this.External = external;
|
||||
this.Aux = aux;
|
||||
this.Pwq = pwq;
|
||||
}
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct PwqConditions
|
||||
{
|
||||
public TriggerState ChannelA;
|
||||
public TriggerState ChannelB;
|
||||
public TriggerState ChannelC;
|
||||
public TriggerState ChannelD;
|
||||
public TriggerState External;
|
||||
public TriggerState Aux;
|
||||
|
||||
public PwqConditions(
|
||||
TriggerState channelA,
|
||||
TriggerState channelB,
|
||||
TriggerState channelC,
|
||||
TriggerState channelD,
|
||||
TriggerState external,
|
||||
TriggerState aux)
|
||||
{
|
||||
this.ChannelA = channelA;
|
||||
this.ChannelB = channelB;
|
||||
this.ChannelC = channelC;
|
||||
this.ChannelD = channelD;
|
||||
this.External = external;
|
||||
this.Aux = aux;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Driver Imports
|
||||
#region Callback delegates
|
||||
public delegate void ps5000BlockReady(short handle, short status, IntPtr pVoid);
|
||||
|
||||
public delegate void ps5000StreamingReady(
|
||||
short handle,
|
||||
int noOfSamples,
|
||||
uint startIndex,
|
||||
short ov,
|
||||
uint triggerAt,
|
||||
short triggered,
|
||||
short autoStop,
|
||||
IntPtr pVoid);
|
||||
|
||||
public delegate void ps5000DataReady(
|
||||
short handle,
|
||||
int noOfSamples,
|
||||
short overflow,
|
||||
uint triggerAt,
|
||||
short triggered,
|
||||
IntPtr pVoid);
|
||||
#endregion
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000OpenUnit")]
|
||||
public static extern short OpenUnit(out short handle);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000CloseUnit")]
|
||||
public static extern short CloseUnit(short handle);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000RunBlock")]
|
||||
public static extern short RunBlock(
|
||||
short handle,
|
||||
int noOfPreTriggerSamples,
|
||||
int noOfPostTriggerSamples,
|
||||
uint timebase,
|
||||
short oversample,
|
||||
out int timeIndisposedMs,
|
||||
ushort segmentIndex,
|
||||
ps5000BlockReady lpPs5000BlockReady,
|
||||
IntPtr pVoid);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000Stop")]
|
||||
public static extern short Stop(short handle);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetChannel")]
|
||||
public static extern short SetChannel(
|
||||
short handle,
|
||||
Channel channel,
|
||||
short enabled,
|
||||
short dc,
|
||||
Range range);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetDataBuffers")]
|
||||
public static extern short SetDataBuffers(
|
||||
short handle,
|
||||
Channel channel,
|
||||
short[] bufferMax,
|
||||
short[] bufferMin,
|
||||
int bufferLth);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetDataBuffer")]
|
||||
public static extern short SetDataBuffer(
|
||||
short handle,
|
||||
Channel channel,
|
||||
short[] buffer,
|
||||
long bufferLth);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetEts")]
|
||||
public static extern short SetEts(
|
||||
short handle,
|
||||
EtsMode mode,
|
||||
short etsCycles,
|
||||
short etsInterleave,
|
||||
out int sampleTimePicoseconds);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetTriggerChannelDirections")]
|
||||
public static extern short SetTriggerChannelDirections(
|
||||
short handle,
|
||||
ThresholdDirection channelA,
|
||||
ThresholdDirection channelB,
|
||||
ThresholdDirection channelC,
|
||||
ThresholdDirection channelD,
|
||||
ThresholdDirection ext,
|
||||
ThresholdDirection aux);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000GetTimebase")]
|
||||
public static extern short GetTimebase(
|
||||
short handle,
|
||||
uint timebase,
|
||||
int noSamples,
|
||||
out int timeIntervalNanoseconds,
|
||||
short oversample,
|
||||
out int maxSamples,
|
||||
ushort segmentIndex);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000GetValues")]
|
||||
public static extern short GetValues(
|
||||
short handle,
|
||||
uint startIndex,
|
||||
ref uint noOfSamples,
|
||||
uint downSampleRatio,
|
||||
DownSamplingMode downSampleDownSamplingMode,
|
||||
ushort segmentIndex,
|
||||
out short overflow);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetPulseWidthQualifier")]
|
||||
public static extern short SetPulseWidthQualifier(
|
||||
short handle,
|
||||
PwqConditions[] conditions,
|
||||
short numConditions,
|
||||
ThresholdDirection direction,
|
||||
uint lower,
|
||||
uint upper,
|
||||
PulseWidthType type);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetTriggerChannelProperties")]
|
||||
public static extern short SetTriggerChannelProperties(
|
||||
short handle,
|
||||
TriggerChannelProperties[] channelProperties,
|
||||
short numChannelProperties,
|
||||
short auxOutputEnable,
|
||||
int autoTriggerMilliseconds);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetTriggerChannelConditions")]
|
||||
public static extern short SetTriggerChannelConditions(
|
||||
short handle,
|
||||
TriggerConditions[] conditions,
|
||||
short numConditions);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetTriggerDelay")]
|
||||
public static extern short SetTriggerDelay(short handle, uint delay);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000GetUnitInfo")]
|
||||
public static extern short GetUnitInfo(short handle, StringBuilder infoString, short stringLength, out short requiredSize, int info);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetSigGenBuiltIn")]
|
||||
public static extern short SetSiggenBuiltIn(
|
||||
short handle,
|
||||
int offsetVoltage,
|
||||
uint pkToPk,
|
||||
SiggenWaveType siggenWaveType,
|
||||
float startFrequency,
|
||||
float stopFrequency,
|
||||
float increment,
|
||||
float dwellTime,
|
||||
SiggenSweepType sweepType,
|
||||
bool whiteNoise,
|
||||
uint shots,
|
||||
uint sweeps,
|
||||
SiggenTrigType triggerType,
|
||||
SiggenTrigSource triggerSource,
|
||||
short extInThreshold);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetSigGenArbitrary")]
|
||||
public static extern short SetSiggenArbitrary(
|
||||
short handle,
|
||||
int offsetVoltage,
|
||||
uint pkToPk,
|
||||
uint startDeltaPhase,
|
||||
uint stopDeltaPhase,
|
||||
uint deltaPhaseIncrement,
|
||||
uint dwellCount,
|
||||
short[] arbitraryWaveform,
|
||||
uint arbitraryWaveformSize,
|
||||
SiggenSweepType sweepType,
|
||||
bool whiteNoise,
|
||||
SiggenIndexMode indexMode,
|
||||
uint shots,
|
||||
uint sweeps,
|
||||
SiggenTrigType triggerType,
|
||||
SiggenTrigSource triggerSource,
|
||||
short extInThreshold);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000RunStreaming")]
|
||||
public static extern short RunStreaming(
|
||||
short handle,
|
||||
ref uint sampleInterval,
|
||||
ReportedTimeUnits sampleIntervalTimeUnits,
|
||||
uint maxPreTriggerSamples,
|
||||
uint maxPostPreTriggerSamples,
|
||||
bool autoStop,
|
||||
uint downSamplingRation,
|
||||
uint overviewBufferSize);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000GetStreamingLatestValues")]
|
||||
public static extern short GetStreamingLatestValues(
|
||||
short handle,
|
||||
ps5000StreamingReady lpPs5000StreamingReady,
|
||||
IntPtr pVoid);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetNoOfCaptures")]
|
||||
public static extern short SetNoOfRapidCaptures(
|
||||
short handle,
|
||||
ushort nWaveforms);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000MemorySegments")]
|
||||
public static extern short MemorySegments(
|
||||
short handle,
|
||||
ushort nSegments,
|
||||
out int nMaxSamples);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000SetDataBufferBulk")]
|
||||
public static extern short SetDataBuffersRapid(
|
||||
short handle,
|
||||
Channel channel,
|
||||
short[] buffer,
|
||||
int bufferLth,
|
||||
ushort waveform);
|
||||
|
||||
[DllImport(_DRIVER_FILENAME, EntryPoint = "ps5000GetValuesBulk")]
|
||||
public static extern short GetValuesRapid(
|
||||
short handle,
|
||||
ref uint noOfSamples,
|
||||
ushort fromSegmentIndex,
|
||||
ushort toSegmentIndex,
|
||||
short[] overflows);
|
||||
#endregion
|
||||
}
|
||||
}
|
47
dotnet example/PinnedArray.cs
Normal file
47
dotnet example/PinnedArray.cs
Normal file
@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace ps5000example
|
||||
{
|
||||
public class PinnedArray<T>
|
||||
{
|
||||
GCHandle _pinnedHandle;
|
||||
private bool _disposed;
|
||||
|
||||
public PinnedArray(int arraySize) : this(new T[arraySize]) { }
|
||||
|
||||
public PinnedArray(T[] array)
|
||||
{
|
||||
_pinnedHandle = GCHandle.Alloc(array, GCHandleType.Pinned);
|
||||
}
|
||||
|
||||
~PinnedArray()
|
||||
{
|
||||
Dispose();
|
||||
}
|
||||
|
||||
public T[] Target
|
||||
{
|
||||
get { return (T[])_pinnedHandle.Target; }
|
||||
}
|
||||
|
||||
public static implicit operator T[](PinnedArray<T> a)
|
||||
{
|
||||
if (a == null)
|
||||
return null;
|
||||
else
|
||||
return (T[])a._pinnedHandle.Target;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (!_disposed)
|
||||
{
|
||||
_pinnedHandle.Free();
|
||||
_disposed = true;
|
||||
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
33
dotnet example/Properties/AssemblyInfo.cs
Normal file
33
dotnet example/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,33 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("ps5000example")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("ps5000example")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2007")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(true)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("6709ad7a-5daa-4134-b34d-ec6a3ca23a4b")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
26
dotnet example/Properties/app.manifest
Normal file
26
dotnet example/Properties/app.manifest
Normal file
@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
||||
<security>
|
||||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<!-- UAC-Manifestoptionen
|
||||
Wenn Sie die Ebene der Benutzerkontensteuerung für Windows ändern
|
||||
möchten, ersetzen Sie den Knoten "requestedExecutionLevel" wie folgt:
|
||||
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
|
||||
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
|
||||
|
||||
Wenn Sie aus Gründen der Abwärtskompatibilität Datei- und Registrierungsvirtualisierung
|
||||
verwenden möchten, löschen Sie den Knoten "requestedExecutionLevel".
|
||||
-->
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||
</requestedPrivileges>
|
||||
<applicationRequestMinimum>
|
||||
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
|
||||
<defaultAssemblyRequest permissionSetReference="Custom" />
|
||||
</applicationRequestMinimum>
|
||||
</security>
|
||||
</trustInfo>
|
||||
</asmv1:assembly>
|
BIN
dotnet example/bin/Release/PS5000.dll
Normal file
BIN
dotnet example/bin/Release/PS5000.dll
Normal file
Binary file not shown.
3072
dotnet example/bin/Release/data.txt
Normal file
3072
dotnet example/bin/Release/data.txt
Normal file
File diff suppressed because it is too large
Load Diff
BIN
dotnet example/bin/Release/ps5000example.exe
Normal file
BIN
dotnet example/bin/Release/ps5000example.exe
Normal file
Binary file not shown.
111
dotnet example/ps5000example.csproj
Normal file
111
dotnet example/ps5000example.csproj
Normal file
@ -0,0 +1,111 @@
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.21022</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{105D08D9-97FD-43A7-AD6F-3DAD94F04644}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ps5000example</RootNamespace>
|
||||
<AssemblyName>ps5000example</AssemblyName>
|
||||
<FileUpgradeFlags>
|
||||
</FileUpgradeFlags>
|
||||
<UpgradeBackupLocation>
|
||||
</UpgradeBackupLocation>
|
||||
<OldToolsVersion>2.0</OldToolsVersion>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<TargetFrameworkSubset>Full</TargetFrameworkSubset>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<SignAssembly>false</SignAssembly>
|
||||
<TargetZone>LocalIntranet</TargetZone>
|
||||
<GenerateManifests>false</GenerateManifests>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
<UpdateEnabled>false</UpdateEnabled>
|
||||
<UpdateMode>Foreground</UpdateMode>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>false</UpdateRequired>
|
||||
<MapFileExtensions>true</MapFileExtensions>
|
||||
<ApplicationRevision>0</ApplicationRevision>
|
||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ConsoleExample.cs" />
|
||||
<Compile Include="PinnedArray.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Imports.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework Client Profile</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>Windows Installer 3.1</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Properties\app.manifest" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
27
dotnet example/ps5000example.csproj.user
Normal file
27
dotnet example/ps5000example.csproj.user
Normal file
@ -0,0 +1,27 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<PublishUrlHistory>publish\</PublishUrlHistory>
|
||||
<InstallUrlHistory>
|
||||
</InstallUrlHistory>
|
||||
<SupportUrlHistory>
|
||||
</SupportUrlHistory>
|
||||
<UpdateUrlHistory>
|
||||
</UpdateUrlHistory>
|
||||
<BootstrapperUrlHistory>
|
||||
</BootstrapperUrlHistory>
|
||||
<ErrorReportUrlHistory>
|
||||
</ErrorReportUrlHistory>
|
||||
<FallbackCulture>de-DE</FallbackCulture>
|
||||
<VerifyUploadedFiles>false</VerifyUploadedFiles>
|
||||
<ReferencePath>
|
||||
</ReferencePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<StartArguments>
|
||||
</StartArguments>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<StartArguments>
|
||||
</StartArguments>
|
||||
</PropertyGroup>
|
||||
</Project>
|
20
dotnet example/ps5000example.sln
Normal file
20
dotnet example/ps5000example.sln
Normal file
@ -0,0 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||
# Visual C# Express 2008
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ps5000example", "ps5000example.csproj", "{105D08D9-97FD-43A7-AD6F-3DAD94F04644}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{105D08D9-97FD-43A7-AD6F-3DAD94F04644}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{105D08D9-97FD-43A7-AD6F-3DAD94F04644}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{105D08D9-97FD-43A7-AD6F-3DAD94F04644}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{105D08D9-97FD-43A7-AD6F-3DAD94F04644}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
Loading…
Reference in New Issue
Block a user