1+ #
2+ # Copyright (C) 2020 Pico Technology Ltd. See LICENSE file for terms.
3+ #
4+ """
5+ This is a Python module defining the enumerations from the PicoDeviceEnums.h C header
6+ file for use with PicoScope 6000 A Series oscilloscopes using the ps6000a driver API
7+ functions.
8+ """
9+
10+ from ctypes import *
11+ from picosdk .constants import make_enum
12+ from picosdk .library import Library
13+
14+ class PicoEnumlib (Library ):
15+ def __init__ (self ):
16+ super (PicoEnumlib , self ).__init__ ("ps6000a" )
17+
18+
19+ picoEnum = PicoEnumlib ()
20+
21+ def _define_ratio_mode ():
22+ PICO_RATIO_MODE_AGGREGATE = 1
23+ PICO_RATIO_MODE_DECIMATE = 2
24+ PICO_RATIO_MODE_AVERAGE = 4
25+ PICO_RATIO_MODE_DISTRIBUTION = 8
26+ PICO_RATIO_MODE_SUM = 16
27+ PICO_RATIO_MODE_TRIGGER_DATA_FOR_TIME_CALCUATION = 0x10000000
28+ PICO_RATIO_MODE_SEGMENT_HEADER = 0x20000000
29+ PICO_RATIO_MODE_TRIGGER = 0x40000000
30+ PICO_RATIO_MODE_RAW = 0x80000000
31+
32+ return {k .upper (): v for k , v in locals ().items () if k .startswith ("PICO" )}
33+
34+ picoEnum .PICO_RATIO_MODE = _define_ratio_mode ()
35+
36+ def _define_channel ():
37+ PICO_CHANNEL_A = 0
38+ PICO_CHANNEL_B = 1
39+ PICO_CHANNEL_C = 2
40+ PICO_CHANNEL_D = 3
41+ PICO_CHANNEL_E = 4
42+ PICO_CHANNEL_F = 5
43+ PICO_CHANNEL_G = 6
44+ PICO_CHANNEL_H = 7
45+ PICO_PORT0 = 128
46+ PICO_PORT1 = 129
47+ PICO_PORT2 = 130
48+ PICO_PORT3 = 131
49+ PIOC_EXTERNAL = 1000
50+ PICI_TRIGGER_AUX = 1001
51+ PICO_PULSE_WIDTH_SOURCE = 0x10000000
52+ PICO_DIGITAL_SOURCE = 0x10000001
53+
54+ return {k .upper (): v for k , v in locals ().items () if k .startswith ("PICO" )}
55+
56+ picoEnum .PICO_CHANNEL = _define_channel ()
57+
58+ def _define_channel_flags ():
59+ PICO_CHANNEL_A_FLAGS = 1
60+ PICO_CHANNEL_B_FLAGS = 2
61+ PICO_CHANNELS_C_FLAGS = 4
62+ PICO_CHANNEL_D_FLAGS = 8
63+ PICO_CHANNEL_E_FLAGS = 16
64+ PICO_CHANNEL_F_FLAGS = 32
65+ PICO_CHANNELS_G_FLAGS = 64
66+ PICO_CHANNEL_H_FLAGS = 128
67+ PICO_PORT0_FLAGS = 65536
68+ PICO_PORT1_FLAGS = 131072
69+ PICO_PORT2_FLAGS = 262144
70+ PICO_PORT3_FLAGS = 524288
71+
72+ return {k .upper (): v for k , v in locals ().items () if k .startswith ("PICO" )}
73+
74+ picoEnum .PICO_CHANNEL_FLAGS = _define_channel_flags ()
75+
76+ picoEnum .PICO_PORT_DIGITAL_CHANNEL = make_enum ([
77+ "PICO_PORT_DIGITAL_CHANNEL0" ,
78+ "PICO_PORT_DIGITAL_CHANNEL1" ,
79+ "PICO_PORT_DIGITAL_CHANNEL2" ,
80+ "PICO_PORT_DIGITAL_CHANNEL3" ,
81+ "PICO_PORT_DIGITAL_CHANNEL4"
82+ "PICO_PORT_DIGITAL_CHANNEL5" ,
83+ "PICO_PORT_DIGITAL_CHANNEL6" ,
84+ "PICO_PORT_DIGITAL_CHANNEL7" ,
85+ ])
86+
87+ picoEnum .PICO_DATA_TYPE = make_enum ([
88+ "PICO_INT8_T" ,
89+ "PICO_INT16_T" ,
90+ "PICO_INT32_T" ,
91+ "PICO_UINT32_T" ,
92+ "PICO_INT64_T" ,
93+ ])
94+
95+ def _define_coupling ():
96+ PICO_AC = 0
97+ PICO_DC = 1
98+ PICO_DC_50OHM = 50
99+
100+ return {k .upper (): v for k , v in locals ().items () if k .startswith ("PICO" )}
101+
102+ picoEnum .PICO_COUPLING = _define_coupling ()
103+
104+ # PicoBandwitdthLimiterFlags
105+ # needs implementing still
106+
107+ def _define_bandwidth_limiter ():
108+ PICO_BW_FULL = 0
109+ PICO_BW_100KHZ = 100000
110+ PICO_BW_20KHZ = 20000
111+ PICO_BW_1MHZ = 1000000
112+ PICO_BW_20MHZ = 20000000
113+ PICO_BW_25MHZ = 25000000
114+ PICO_BW_50MHZ = 50000000
115+ PICO_BW_250MHZ = 250000000
116+ PICO_BW_500MHZ = 500000000
117+
118+ return {k .upper (): v for k , v in locals ().items () if k .startswith ("PICO" )}
119+
120+ picoEnum .PICO_BANDWIDTH_LIMITER = _define_bandwidth_limiter ()
121+
122+ picoEnum .PICO_PULSE_WIDTH_TYPE = make_enum ([
123+ "PICO_PW_TYPE_NONE" ,
124+ "PICO_PW_TYPE_LESS_THAN" ,
125+ "PICO_PW_TYPE_GREATER_THAN" ,
126+ "PICO_PW_IN_RANGE" ,
127+ "PICO_PW_TYPE_OUT_OF_RANGE"
128+ ])
129+
130+ picoEnum .PICO_SWEEP_TYPE = make_enum ([
131+ "PICO_UP" ,
132+ "PICO_DOWN" ,
133+ "PICO_UPDOWN" ,
134+ "PICO_DOWNUP"
135+ ])
136+
137+ def _define_wave_type ():
138+ PICO_SINE = 0x00000011
139+ PICO_SQUARE = 0x00000012
140+ PICO_TRIANGLE = 0x00000013
141+ PICO_RAMP_UP = 0x00000014
142+ PICO_RAMP_DOWN = 0x00000015
143+ PICO_SINC = 0x00000016
144+ PICO_GAUSSIAN = 0x00000017
145+ PICO_HALF_SINE = 0x00000018
146+ PICO_DC_VOLTAGE = 0x00000400
147+ PICO_PWM = 0x00001000
148+ PICO_WHITENOISE = 0x00002001
149+ PICO_PRBS = 0x00002002
150+ PICO_ARBITRARY = 0x10000000
151+
152+ return {k .upper (): v for k , v in locals ().items () if k .startswith ("PICO" )}
153+
154+ picoEnum .PICO_WAVE_TYPE = _define_wave_type ()
155+
156+ picoEnum .PICO_SIGGEN_TRIG_TYPE = make_enum ([
157+ "PICO_SIGGEN_RISING" ,
158+ "PICO_SIGGEN_FALLING" ,
159+ "PICO_SIGGEN_GATE_HIGH" ,
160+ "PICO_SIGGEN_GATE_LOW"
161+ ])
162+
163+ picoEnum .PICO_SIGGEN_TRIG_SOURCE = make_enum ([
164+ "PICO_SIGGEN_NONE" ,
165+ "PICO_SIGGEN_SCOPE_TRIG" ,
166+ "PICO_SGGEN_AUX_IN" ,
167+ "PICO_SIGGEN_EXT_IN" ,
168+ "PICO_SIGGEN_SOFT_TRIG" ,
169+ "PICO_SIGGEN_TRIGGER_RAW"
170+ ])
171+
172+ picoEnum .PICO_SIGGEN_FILTER_STATE = make_enum ([
173+ "PICO_SIGGEN_FILTER_AUTO" ,
174+ "PICO_SIGGEN_FILTER_OFF" ,
175+ "PICO_SIGGEN_FILTER_ON"
176+ ])
177+
178+ picoEnum .PICO_SIGGEN_PARAMETER = make_enum ([
179+ "PICO_SIGGEN_PARAM_OUTPUT_VOLTS" ,
180+ "PICO_SIGGEN_PARAM_SAMPLE" ,
181+ "PICO_SIGGEN_BUFFER_LENGTH"
182+ ])
183+
184+ picoEnum .PICO_TIME_UNITS = make_enum ([
185+ "PICO_FS" ,
186+ "PICO_PS" ,
187+ "PICO_NS" ,
188+ "PICO_US" ,
189+ "PICO_MS" ,
190+ "PICO_S"
191+ ])
192+
193+ def _define_threshold_direction ():
194+ PICO_ABOVE = PICO_INSIDE = 0
195+ PICO_BELOW = PICO_OUTSIDE = 1
196+ PICO_RISING = PICO_ENTER = PICO_NONE = 2
197+ PICO_FALLING = PICO_EXIT = 3
198+ PICO_RISING_OR_FALLING = PICO_ENTER_OR_EXIT = 4
199+ PICO_ABOVE_LOWER = 5
200+ PICO_BELOW_LOWER = 6
201+ PICO_RISING_LOWER = 7
202+ PICO_FALLING_LOWER = 8
203+ PICO_POSITIVE_RUNT = 9
204+ PICO_NEGATIVE_RUNT = 10
205+ PICO_LOGIC_LOWER = 1000
206+ PICO_LOGIC_UPPER = 1001
207+
208+ return {k .upper (): v for k , v in locals ().items () if k .startswith ("PICO" )}
209+
210+ picoEnum .PICO_THRESHOLD_DIRECTION = _define_threshold_direction ()
211+
212+ picoEnum .PICO_THRESHOLD_MODE = make_enum ([
213+ "PICO_LEVEL" ,
214+ "PICO_WINDOW"
215+ ])
216+
217+ picoEnum .PICO_ETS_MODE = make_enum ([
218+ "PICO_ETS_OFF" ,
219+ "PICO_WINDOW" ,
220+ ])
221+
222+ picoEnum .PICO_INDEX_MODE = make_enum ([
223+ "PICO_SINGLE" ,
224+ "PICO_DUAL" ,
225+ "PICO_QUAD"
226+ ])
227+
228+ def _define_action ():
229+ PICO_CLEAR_ALL = 0x00000001
230+ PICO_ADD = 0x00000002
231+ PICO_CLEAR_THIS_DATA_BUFFER = 0x00001000
232+ PICO_CLEAR_WAVEFORM_DATA_BUFFERS = 0x00002000
233+ PICO_CLEAR_WAVEFORM_READ_DATA_BUFFERS = 0x00004000
234+
235+ return {k .upper (): v for k , v in locals ().items () if k .startswith ("PICO" )}
236+
237+ picoEnum .PICO_ACTION = _define_action ()
238+
239+ picoEnum .Pico_TRIGGER_STATE = make_enum ([
240+ "PICO_CONDITION_DONT_CARE" ,
241+ "PICO_CONDITION_TRUE" ,
242+ "PICO_CONDITION_FALSE"
243+ ])
244+
245+ def _define_resolution ():
246+ PICO_DR_8BIT = 0
247+ PICO_DR_12BIT = 1
248+ PICO_DR_14BIT = 2
249+ PICO_DR_15BIT = 3
250+ PICO_DR_16BIT = 4
251+ PICO_DR_10BIT = 10
252+
253+ return {k .upper (): v for k , v in locals ().items () if k .startswith ("PICO" )}
254+
255+ picoEnum .PICO_DEVICE_RESOLUTION = _define_resolution ()
256+
257+ picoEnum .PICO_READ_SELECTION = make_enum ([
258+ "PICO_READSELECTION_NONE" ,
259+ "PICO_TRIGGER_READ" ,
260+ "PICO_DATA_READ1" ,
261+ "PICO_DATA_READ2" ,
262+ "PICO_DATA_READ3"
263+ ])
264+
265+ picoEnum .PICO_TRIM_ACTION = make_enum ([
266+ "PICO_OLDEST" ,
267+ "PICO_RECENT"
268+ ])
269+
270+ picoEnum .PICO_DIGITAL_PORT_HYSTERESIS = make_enum ([
271+ "PICO_VERY_HIGH_400MV" ,
272+ "PICO_HIGH_200MV" ,
273+ "PICO_NORMAL_100MV" ,
274+ "PICO_LOW_50MV"
275+ ])
276+
277+ picoEnum .PICO_DIGITAL_DIRECTION = make_enum ([
278+ "PICO_DIGITAL_DONT_CARE" ,
279+ "PICO_DIGITAL_DIRECTION_LOW" ,
280+ "PICO_DIGITAL_DIRECTION_HIGH" ,
281+ "PICO_DIGITAL_DIRECTION_RISING" ,
282+ "PICO_DIGITAL_DIRECTION_FALLING" ,
283+ "PICO_DIGITAL_DIRECTION_RISING_OR_FALLING" ,
284+ "PICO_DIGITAL_DIRECTION_MAX_DIRECTION"
285+ ])
286+
287+ def _define_conditions_info ():
288+ PICO_CLEAR_CONDITIONS = 0x00000001
289+ PICO_ADD_CONDITIONS = 0x00000002
290+
291+ return {k .upper (): v for k , v in locals ().items () if k .startswith ("PICO" )}
292+
293+ picoEnum .PICO_CONDITIONS_INFO = _define_conditions_info ()
294+
295+ picoEnum .PICO_CLOCK_REFERENCE = make_enum ([
296+ "PICO_INTERNAL_REF" ,
297+ "PICO_EXTERNAL_REF"
298+ ])
299+
300+ picoEnum .PICO_TRIGGER_WITHIN_PRE_TRIGGER = make_enum ([
301+ "PICO_DISABLE" ,
302+ "PICO_ARM"
303+ ])
304+
305+ picoEnum .PICO_TEMPERATURE_REFERENCE = make_enum ([
306+ "PICO_TEMPERATURE_UNINITIALISED" ,
307+ "PICO_TEMPERATURE_NORMAL" ,
308+ "PICO_TEMPERATURE_WARNING" ,
309+ "PICO_TEMPERATURE_CRITICAL" ,
310+ "PICO_TEMPERATURE_REFERENCE"
311+ ])
312+
313+ def _define_digital_port ():
314+ Pico_DIGITAL_PORT_NONE = 0
315+ PICO_DIGITAL_PORT_MSO_POD = 1000
316+ PICO_DIGITAL_PORT_UNKNOWN_DEVICE = - 2
317+
318+ return {k .upper (): v for k , v in locals ().items () if k .startswith ("PICO" )}
319+
320+ picoEnum .PICO_DIGITAL_PORT = _define_digital_port
0 commit comments