libsigrok
0.2.2
sigrok hardware access and backend library
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerator
Macros
Groups
Pages
libsigrok.h
Go to the documentation of this file.
1
/*
2
* This file is part of the libsigrok project.
3
*
4
* Copyright (C) 2013 Bert Vermeulen <bert@biot.com>
5
*
6
* This program is free software: you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation, either version 3 of the License, or
9
* (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
20
#ifndef LIBSIGROK_SIGROK_H
21
#define LIBSIGROK_SIGROK_H
22
23
#include <stdio.h>
24
#include <sys/time.h>
25
#include <stdint.h>
26
#include <inttypes.h>
27
#include <glib.h>
28
29
#ifdef __cplusplus
30
extern
"C"
{
31
#endif
32
33
/**
34
* @file
35
*
36
* The public libsigrok header file to be used by frontends.
37
*
38
* This is the only file that libsigrok users (frontends) are supposed to
39
* use and \#include. There are other header files which get installed with
40
* libsigrok, but those are not meant to be used directly by frontends.
41
*
42
* The correct way to get/use the libsigrok API functions is:
43
*
44
* @code{.c}
45
* #include <libsigrok/libsigrok.h>
46
* @endcode
47
*/
48
49
/*
50
* All possible return codes of libsigrok functions must be listed here.
51
* Functions should never return hardcoded numbers as status, but rather
52
* use these enum values. All error codes are negative numbers.
53
*
54
* The error codes are globally unique in libsigrok, i.e. if one of the
55
* libsigrok functions returns a "malloc error" it must be exactly the same
56
* return value as used by all other functions to indicate "malloc error".
57
* There must be no functions which indicate two different errors via the
58
* same return code.
59
*
60
* Also, for compatibility reasons, no defined return codes are ever removed
61
* or reused for different errors later. You can only add new entries and
62
* return codes, but never remove or redefine existing ones.
63
*/
64
65
/** Status/error codes returned by libsigrok functions. */
66
enum
{
67
SR_OK
= 0,
/**< No error. */
68
SR_ERR
= -1,
/**< Generic/unspecified error. */
69
SR_ERR_MALLOC
= -2,
/**< Malloc/calloc/realloc error. */
70
SR_ERR_ARG
= -3,
/**< Function argument error. */
71
SR_ERR_BUG
= -4,
/**< Errors hinting at internal bugs. */
72
SR_ERR_SAMPLERATE
= -5,
/**< Incorrect samplerate. */
73
SR_ERR_NA
= -6,
/**< Not applicable. */
74
SR_ERR_DEV_CLOSED
= -7,
/**< Device is closed, but needs to be open. */
75
SR_ERR_TIMEOUT
= -8,
/**< A timeout occurred. */
76
77
/*
78
* Note: When adding entries here, don't forget to also update the
79
* sr_strerror() and sr_strerror_name() functions in error.c.
80
*/
81
};
82
83
#define SR_MAX_PROBENAME_LEN 32
84
85
/* Handy little macros */
86
#define SR_HZ(n) (n)
87
#define SR_KHZ(n) ((n) * (uint64_t)(1000ULL))
88
#define SR_MHZ(n) ((n) * (uint64_t)(1000000ULL))
89
#define SR_GHZ(n) ((n) * (uint64_t)(1000000000ULL))
90
91
#define SR_HZ_TO_NS(n) ((uint64_t)(1000000000ULL) / (n))
92
93
/** libsigrok loglevels. */
94
enum
{
95
SR_LOG_NONE
= 0,
/**< Output no messages at all. */
96
SR_LOG_ERR
= 1,
/**< Output error messages. */
97
SR_LOG_WARN
= 2,
/**< Output warnings. */
98
SR_LOG_INFO
= 3,
/**< Output informational messages. */
99
SR_LOG_DBG
= 4,
/**< Output debug messages. */
100
SR_LOG_SPEW
= 5,
/**< Output very noisy debug messages. */
101
};
102
103
/*
104
* Use SR_API to mark public API symbols, and SR_PRIV for private symbols.
105
*
106
* Variables and functions marked 'static' are private already and don't
107
* need SR_PRIV. However, functions which are not static (because they need
108
* to be used in other libsigrok-internal files) but are also not meant to
109
* be part of the public libsigrok API, must use SR_PRIV.
110
*
111
* This uses the 'visibility' feature of gcc (requires gcc >= 4.0).
112
*
113
* This feature is not available on MinGW/Windows, as it is a feature of
114
* ELF files and MinGW/Windows uses PE files.
115
*
116
* Details: http://gcc.gnu.org/wiki/Visibility
117
*/
118
119
/* Marks public libsigrok API symbols. */
120
#ifndef _WIN32
121
#define SR_API __attribute__((visibility("default")))
122
#else
123
#define SR_API
124
#endif
125
126
/* Marks private, non-public libsigrok symbols (not part of the API). */
127
#ifndef _WIN32
128
#define SR_PRIV __attribute__((visibility("hidden")))
129
#else
130
#define SR_PRIV
131
#endif
132
133
typedef
int (*
sr_receive_data_callback_t
)(
int
fd,
int
revents,
void
*cb_data);
134
135
/** Data types used by sr_config_info(). */
136
enum
{
137
SR_T_UINT64
= 10000,
138
SR_T_CHAR
,
139
SR_T_BOOL
,
140
SR_T_FLOAT
,
141
SR_T_RATIONAL_PERIOD
,
142
SR_T_RATIONAL_VOLT
,
143
SR_T_KEYVALUE
,
144
SR_T_UINT64_RANGE
,
145
SR_T_DOUBLE_RANGE
,
146
};
147
148
/** Value for sr_datafeed_packet.type. */
149
enum
{
150
SR_DF_HEADER
= 10000,
151
SR_DF_END
,
152
SR_DF_META
,
153
SR_DF_TRIGGER
,
154
SR_DF_LOGIC
,
155
SR_DF_ANALOG
,
156
SR_DF_FRAME_BEGIN
,
157
SR_DF_FRAME_END
,
158
};
159
160
/** Values for sr_datafeed_analog.mq. */
161
enum
{
162
SR_MQ_VOLTAGE
= 10000,
163
SR_MQ_CURRENT
,
164
SR_MQ_RESISTANCE
,
165
SR_MQ_CAPACITANCE
,
166
SR_MQ_TEMPERATURE
,
167
SR_MQ_FREQUENCY
,
168
SR_MQ_DUTY_CYCLE
,
169
SR_MQ_CONTINUITY
,
170
SR_MQ_PULSE_WIDTH
,
171
SR_MQ_CONDUCTANCE
,
172
/** Electrical power, usually in W, or dBm. */
173
SR_MQ_POWER
,
174
/** Gain (a transistor's gain, or hFE, for example). */
175
SR_MQ_GAIN
,
176
/** Logarithmic representation of sound pressure relative to a
177
* reference value. */
178
SR_MQ_SOUND_PRESSURE_LEVEL
,
179
SR_MQ_CARBON_MONOXIDE
,
180
SR_MQ_RELATIVE_HUMIDITY
,
181
};
182
183
/** Values for sr_datafeed_analog.unit. */
184
enum
{
185
SR_UNIT_VOLT
= 10000,
186
SR_UNIT_AMPERE
,
187
SR_UNIT_OHM
,
188
SR_UNIT_FARAD
,
189
SR_UNIT_KELVIN
,
190
SR_UNIT_CELSIUS
,
191
SR_UNIT_FAHRENHEIT
,
192
SR_UNIT_HERTZ
,
193
SR_UNIT_PERCENTAGE
,
194
SR_UNIT_BOOLEAN
,
195
SR_UNIT_SECOND
,
196
/** Unit of conductance, the inverse of resistance. */
197
SR_UNIT_SIEMENS
,
198
/**
199
* An absolute measurement of power, in decibels, referenced to
200
* 1 milliwatt (dBu).
201
*/
202
SR_UNIT_DECIBEL_MW
,
203
/** Voltage in decibel, referenced to 1 volt (dBV). */
204
SR_UNIT_DECIBEL_VOLT
,
205
/**
206
* Measurements that intrinsically do not have units attached, such
207
* as ratios, gains, etc. Specifically, a transistor's gain (hFE) is
208
* a unitless quantity, for example.
209
*/
210
SR_UNIT_UNITLESS
,
211
/** Sound pressure level relative so 20 micropascals. */
212
SR_UNIT_DECIBEL_SPL
,
213
/**
214
* Normalized (0 to 1) concentration of a substance or compound with 0
215
* representing a concentration of 0%, and 1 being 100%. This is
216
* represented as the fraction of number of particles of the substance.
217
*/
218
SR_UNIT_CONCENTRATION
,
219
SR_UNIT_REVOLUTIONS_PER_MINUTE
,
220
SR_UNIT_VOLT_AMPERE
,
221
SR_UNIT_WATT
,
222
SR_UNIT_WATT_HOUR
,
223
};
224
225
/** Values for sr_datafeed_analog.flags. */
226
enum
{
227
/** Voltage measurement is alternating current (AC). */
228
SR_MQFLAG_AC
= 0x01,
229
/** Voltage measurement is direct current (DC). */
230
SR_MQFLAG_DC
= 0x02,
231
/** This is a true RMS measurement. */
232
SR_MQFLAG_RMS
= 0x04,
233
/** Value is voltage drop across a diode, or NAN. */
234
SR_MQFLAG_DIODE
= 0x08,
235
/** Device is in "hold" mode (repeating the last measurement). */
236
SR_MQFLAG_HOLD
= 0x10,
237
/** Device is in "max" mode, only updating upon a new max value. */
238
SR_MQFLAG_MAX
= 0x20,
239
/** Device is in "min" mode, only updating upon a new min value. */
240
SR_MQFLAG_MIN
= 0x40,
241
/** Device is in autoranging mode. */
242
SR_MQFLAG_AUTORANGE
= 0x80,
243
/** Device is in relative mode. */
244
SR_MQFLAG_RELATIVE
= 0x100,
245
/** Sound pressure level is A-weighted in the frequency domain,
246
* according to IEC 61672:2003. */
247
SR_MQFLAG_SPL_FREQ_WEIGHT_A
= 0x200,
248
/** Sound pressure level is C-weighted in the frequency domain,
249
* according to IEC 61672:2003. */
250
SR_MQFLAG_SPL_FREQ_WEIGHT_C
= 0x400,
251
/** Sound pressure level is Z-weighted (i.e. not at all) in the
252
* frequency domain, according to IEC 61672:2003. */
253
SR_MQFLAG_SPL_FREQ_WEIGHT_Z
= 0x800,
254
/** Sound pressure level is not weighted in the frequency domain,
255
* albeit without standards-defined low and high frequency limits. */
256
SR_MQFLAG_SPL_FREQ_WEIGHT_FLAT
= 0x1000,
257
/** Sound pressure level measurement is S-weighted (1s) in the
258
* time domain. */
259
SR_MQFLAG_SPL_TIME_WEIGHT_S
= 0x2000,
260
/** Sound pressure level measurement is F-weighted (125ms) in the
261
* time domain. */
262
SR_MQFLAG_SPL_TIME_WEIGHT_F
= 0x4000,
263
/** Sound pressure level is time-averaged (LAT), also known as
264
* Equivalent Continuous A-weighted Sound Level (LEQ). */
265
SR_MQFLAG_SPL_LAT
= 0x8000,
266
/** Sound pressure level represented as a percentage of measurements
267
* that were over a preset alarm level. */
268
SR_MQFLAG_SPL_PCT_OVER_ALARM
= 0x10000,
269
};
270
271
struct
sr_context;
272
273
struct
sr_datafeed_packet
{
274
uint16_t
type
;
275
const
void
*
payload
;
276
};
277
278
struct
sr_datafeed_header
{
279
int
feed_version
;
280
struct
timeval
starttime
;
281
};
282
283
struct
sr_datafeed_meta
{
284
GSList *
config
;
285
};
286
287
struct
sr_datafeed_logic
{
288
uint64_t
length
;
289
uint16_t
unitsize
;
290
void
*
data
;
291
};
292
293
struct
sr_datafeed_analog
{
294
/** The probes for which data is included in this packet. */
295
GSList *
probes
;
296
int
num_samples
;
297
/** Measured quantity (voltage, current, temperature, and so on). */
298
int
mq
;
299
/** Unit in which the MQ is measured. */
300
int
unit
;
301
/** Bitmap with extra information about the MQ. */
302
uint64_t
mqflags
;
303
/** The analog value(s). The data is interleaved according to
304
* the probes list. */
305
float
*
data
;
306
};
307
308
/** Input (file) format struct. */
309
struct
sr_input
{
310
/**
311
* A pointer to this input format's 'struct sr_input_format'.
312
* The frontend can use this to call the module's callbacks.
313
*/
314
struct
sr_input_format
*
format
;
315
316
GHashTable *
param
;
317
318
struct
sr_dev_inst
*
sdi
;
319
320
void
*
internal
;
321
};
322
323
struct
sr_input_format
{
324
/** The unique ID for this input format. Must not be NULL. */
325
char
*
id
;
326
327
/**
328
* A short description of the input format, which can (for example)
329
* be displayed to the user by frontends. Must not be NULL.
330
*/
331
char
*
description
;
332
333
/**
334
* Check if this input module can load and parse the specified file.
335
*
336
* @param filename The name (and path) of the file to check.
337
*
338
* @return TRUE if this module knows the format, FALSE if it doesn't.
339
*/
340
int (*
format_match
) (
const
char
*filename);
341
342
/**
343
* Initialize the input module.
344
*
345
* @param in A pointer to a valid 'struct sr_input' that the caller
346
* has to allocate and provide to this function. It is also
347
* the responsibility of the caller to free it later.
348
* @param filename The name (and path) of the file to use.
349
*
350
* @return SR_OK upon success, a negative error code upon failure.
351
*/
352
int (*
init
) (
struct
sr_input
*in,
const
char
*filename);
353
354
/**
355
* Load a file, parsing the input according to the file's format.
356
*
357
* This function will send datafeed packets to the session bus, so
358
* the calling frontend must have registered its session callbacks
359
* beforehand.
360
*
361
* The packet types sent across the session bus by this function must
362
* include at least SR_DF_HEADER, SR_DF_END, and an appropriate data
363
* type such as SR_DF_LOGIC. It may also send a SR_DF_TRIGGER packet
364
* if appropriate.
365
*
366
* @param in A pointer to a valid 'struct sr_input' that the caller
367
* has to allocate and provide to this function. It is also
368
* the responsibility of the caller to free it later.
369
* @param filename The name (and path) of the file to use.
370
*
371
* @return SR_OK upon success, a negative error code upon failure.
372
*/
373
int (*
loadfile
) (
struct
sr_input
*in,
const
char
*filename);
374
};
375
376
/** Output (file) format struct. */
377
struct
sr_output
{
378
/**
379
* A pointer to this output format's 'struct sr_output_format'.
380
* The frontend can use this to call the module's callbacks.
381
*/
382
struct
sr_output_format
*
format
;
383
384
/**
385
* The device for which this output module is creating output. This
386
* can be used by the module to find out probe names and numbers.
387
*/
388
struct
sr_dev_inst
*
sdi
;
389
390
/**
391
* An optional parameter which the frontend can pass in to the
392
* output module. How the string is interpreted is entirely up to
393
* the module.
394
*/
395
char
*
param
;
396
397
/**
398
* A generic pointer which can be used by the module to keep internal
399
* state between calls into its callback functions.
400
*
401
* For example, the module might store a pointer to a chunk of output
402
* there, and only flush it when it reaches a certain size.
403
*/
404
void
*
internal
;
405
};
406
407
struct
sr_output_format
{
408
/**
409
* A unique ID for this output format. Must not be NULL.
410
*
411
* It can be used by frontends to select this output format for use.
412
*
413
* For example, calling sigrok-cli with <code>-O hex</code> will
414
* select the hexadecimal text output format.
415
*/
416
char
*
id
;
417
418
/**
419
* A short description of the output format. Must not be NULL.
420
*
421
* This can be displayed by frontends, e.g. when selecting the output
422
* format for saving a file.
423
*/
424
char
*
description
;
425
426
int
df_type
;
427
428
/**
429
* This function is called once, at the beginning of an output stream.
430
*
431
* The device struct will be available in the output struct passed in,
432
* as well as the param field -- which may be NULL or an empty string,
433
* if no parameter was passed.
434
*
435
* The module can use this to initialize itself, create a struct for
436
* keeping state and storing it in the <code>internal</code> field.
437
*
438
* @param o Pointer to the respective 'struct sr_output'.
439
*
440
* @return SR_OK upon success, a negative error code otherwise.
441
*/
442
int (*
init
) (
struct
sr_output
*o);
443
444
/**
445
* Whenever a chunk of data comes in, it will be passed to the
446
* output module via this function. The <code>data_in</code> and
447
* <code>length_in</code> values refers to this data; the module
448
* must not alter or g_free() this buffer.
449
*
450
* The function must allocate a buffer for storing its output, and
451
* pass along a pointer to this buffer in the <code>data_out</code>
452
* parameter, as well as storing the length of the buffer in
453
* <code>length_out</code>. The calling frontend will g_free()
454
* this buffer when it's done with it.
455
*
456
* IMPORTANT: The memory allocation much happen using a glib memory
457
* allocation call (not a "normal" malloc) since g_free() will be
458
* used to free the memory!
459
*
460
* If there is no output, this function MUST store NULL in the
461
* <code>data_out</code> parameter, so the caller knows not to try
462
* and g_free() it.
463
*
464
* Note: This API call is obsolete, use receive() instead.
465
*
466
* @param o Pointer to the respective 'struct sr_output'.
467
* @param data_in Pointer to the input data buffer.
468
* @param length_in Length of the input.
469
* @param data_out Pointer to the allocated output buffer.
470
* @param length_out Length (in bytes) of the output.
471
*
472
* @return SR_OK upon success, a negative error code otherwise.
473
*/
474
int (*
data
) (
struct
sr_output
*o,
const
uint8_t *data_in,
475
uint64_t length_in, uint8_t **data_out,
476
uint64_t *length_out);
477
478
/**
479
* This function is called when an event occurs in the datafeed
480
* which the output module may need to be aware of. No data is
481
* passed in, only the fact that the event occurs. The following
482
* events can currently be passed in:
483
*
484
* - SR_DF_TRIGGER: At this point in the datafeed, the trigger
485
* matched. The output module may mark this in some way, e.g. by
486
* plotting a red line on a graph.
487
*
488
* - SR_DF_END: This marks the end of the datafeed. No more calls
489
* into the output module will be done, so this is a good time to
490
* free up any memory used to keep state, for example.
491
*
492
* Any output generated by this function must have a reference to
493
* it stored in the <code>data_out</code> and <code>length_out</code>
494
* parameters, or NULL if no output was generated.
495
*
496
* Note: This API call is obsolete, use receive() instead.
497
*
498
* @param o Pointer to the respective 'struct sr_output'.
499
* @param event_type Type of event that occured.
500
* @param data_out Pointer to the allocated output buffer.
501
* @param length_out Length (in bytes) of the output.
502
*
503
* @return SR_OK upon success, a negative error code otherwise.
504
*/
505
int (*
event
) (
struct
sr_output
*o,
int
event_type, uint8_t **data_out,
506
uint64_t *length_out);
507
508
/**
509
* This function is passed a copy of every packed in the data feed.
510
* Any output generated by the output module in response to the
511
* packet should be returned in a newly allocated GString
512
* <code>out</code>, which will be freed by the caller.
513
*
514
* Packets not of interest to the output module can just be ignored,
515
* and the <code>out</code> parameter set to NULL.
516
*
517
* @param o Pointer to the respective 'struct sr_output'.
518
* @param sdi The device instance that generated the packet.
519
* @param packet The complete packet.
520
* @param out A pointer where a GString * should be stored if
521
* the module generates output, or NULL if not.
522
*
523
* @return SR_OK upon success, a negative error code otherwise.
524
*/
525
int (*
receive
) (
struct
sr_output
*o,
const
struct
sr_dev_inst
*sdi,
526
const
struct
sr_datafeed_packet
*packet, GString **out);
527
528
/**
529
* This function is called after the caller is finished using
530
* the output module, and can be used to free any internal
531
* resources the module may keep.
532
*
533
* @return SR_OK upon success, a negative error code otherwise.
534
*/
535
int (*
cleanup
) (
struct
sr_output
*o);
536
};
537
538
enum
{
539
SR_PROBE_LOGIC
= 10000,
540
SR_PROBE_ANALOG
,
541
};
542
543
struct
sr_probe
{
544
/* The index field will go: use g_slist_length(sdi->probes) instead. */
545
int
index
;
546
int
type
;
547
gboolean
enabled
;
548
char
*
name
;
549
char
*
trigger
;
550
};
551
552
struct
sr_config
{
553
int
key
;
554
GVariant *
data
;
555
};
556
557
struct
sr_config_info
{
558
int
key
;
559
int
datatype
;
560
char
*
id
;
561
char
*
name
;
562
char
*
description
;
563
};
564
565
enum
{
566
/*--- Device classes ------------------------------------------------*/
567
568
/** The device can act as logic analyzer. */
569
SR_CONF_LOGIC_ANALYZER
= 10000,
570
571
/** The device can act as an oscilloscope. */
572
SR_CONF_OSCILLOSCOPE
,
573
574
/** The device can act as a multimeter. */
575
SR_CONF_MULTIMETER
,
576
577
/** The device is a demo device. */
578
SR_CONF_DEMO_DEV
,
579
580
/** The device can act as a sound level meter. */
581
SR_CONF_SOUNDLEVELMETER
,
582
583
/** The device can measure temperature. */
584
SR_CONF_THERMOMETER
,
585
586
/** The device can measure humidity. */
587
SR_CONF_HYGROMETER
,
588
589
/** The device can measure energy consumption. */
590
SR_CONF_ENERGYMETER
,
591
592
/*--- Driver scan options -------------------------------------------*/
593
594
/**
595
* Specification on how to connect to a device.
596
*
597
* In combination with SR_CONF_SERIALCOMM, this is a serial port in
598
* the form which makes sense to the OS (e.g., /dev/ttyS0).
599
* Otherwise this specifies a USB device, either in the form of
600
* @verbatim <bus>.<address> @endverbatim (decimal, e.g. 1.65) or
601
* @verbatim <vendorid>.<productid> @endverbatim
602
* (hexadecimal, e.g. 1d6b.0001).
603
*/
604
SR_CONF_CONN
= 20000,
605
606
/**
607
* Serial communication specification, in the form:
608
*
609
* @verbatim <baudrate>/<databits><parity><stopbits> @endverbatim
610
*
611
* Example: 9600/8n1
612
*
613
* The string may also be followed by one or more special settings,
614
* in the form "/key=value". Supported keys and their values are:
615
*
616
* rts 0,1 set the port's RTS pin to low or high
617
* dtr 0,1 set the port's DTR pin to low or high
618
* flow 0 no flow control
619
* 1 hardware-based (RTS/CTS) flow control
620
* 2 software-based (XON/XOFF) flow control
621
*
622
* This is always an optional parameter, since a driver typically
623
* knows the speed at which the device wants to communicate.
624
*/
625
SR_CONF_SERIALCOMM
,
626
627
/*--- Device configuration ------------------------------------------*/
628
629
/** The device supports setting its samplerate, in Hz. */
630
SR_CONF_SAMPLERATE
= 30000,
631
632
/** The device supports setting a pre/post-trigger capture ratio. */
633
SR_CONF_CAPTURE_RATIO
,
634
635
/** The device supports setting a pattern (pattern generator mode). */
636
SR_CONF_PATTERN_MODE
,
637
638
/** The device supports Run Length Encoding. */
639
SR_CONF_RLE
,
640
641
/** The device supports setting trigger slope. */
642
SR_CONF_TRIGGER_SLOPE
,
643
644
/** Trigger source. */
645
SR_CONF_TRIGGER_SOURCE
,
646
647
/** Horizontal trigger position. */
648
SR_CONF_HORIZ_TRIGGERPOS
,
649
650
/** Buffer size. */
651
SR_CONF_BUFFERSIZE
,
652
653
/** Time base. */
654
SR_CONF_TIMEBASE
,
655
656
/** Filter. */
657
SR_CONF_FILTER
,
658
659
/** Volts/div. */
660
SR_CONF_VDIV
,
661
662
/** Coupling. */
663
SR_CONF_COUPLING
,
664
665
/** Trigger types. */
666
SR_CONF_TRIGGER_TYPE
,
667
668
/** The device supports setting its sample interval, in ms. */
669
SR_CONF_SAMPLE_INTERVAL
,
670
671
/** Number of timebases, as related to SR_CONF_TIMEBASE. */
672
SR_CONF_NUM_TIMEBASE
,
673
674
/** Number of vertical divisions, as related to SR_CONF_VDIV. */
675
SR_CONF_NUM_VDIV
,
676
677
/** Sound pressure level frequency weighting. */
678
SR_CONF_SPL_WEIGHT_FREQ
,
679
680
/** Sound pressure level time weighting. */
681
SR_CONF_SPL_WEIGHT_TIME
,
682
683
/** Sound pressure level measurement range. */
684
SR_CONF_SPL_MEASUREMENT_RANGE
,
685
686
/** Max hold mode. */
687
SR_CONF_HOLD_MAX
,
688
689
/** Min hold mode. */
690
SR_CONF_HOLD_MIN
,
691
692
/** Logic low-high threshold range. */
693
SR_CONF_VOLTAGE_THRESHOLD
,
694
695
/** The device supports using a external clock. */
696
SR_CONF_EXTERNAL_CLOCK
,
697
698
/**
699
* The device supports swapping channels. Typical this is between
700
* buffered and unbuffered channels.
701
*/
702
SR_CONF_SWAP
,
703
704
/*--- Special stuff -------------------------------------------------*/
705
706
/** Scan options supported by the driver. */
707
SR_CONF_SCAN_OPTIONS
= 40000,
708
709
/** Device options for a particular device. */
710
SR_CONF_DEVICE_OPTIONS
,
711
712
/** Session filename. */
713
SR_CONF_SESSIONFILE
,
714
715
/** The device supports specifying a capturefile to inject. */
716
SR_CONF_CAPTUREFILE
,
717
718
/** The device supports specifying the capturefile unit size. */
719
SR_CONF_CAPTURE_UNITSIZE
,
720
721
/** The device supports setting the number of probes. */
722
SR_CONF_CAPTURE_NUM_PROBES
,
723
724
/** Power off the device. */
725
SR_CONF_POWER_OFF
,
726
727
/** Data source for acquisition. If not present, acquisition from
728
* the device is always "live", i.e. acquisition starts when the
729
* frontend asks and the results are sent out as soon as possible.
730
*
731
* If present, it indicates that either the device has no live
732
* acquisition capability (for example a pure data logger), or
733
* there is a choice. sr_config_list() returns those choices.
734
*
735
* In any case if a device has live acquisition capabilities, it
736
* is always the default. */
737
SR_CONF_DATA_SOURCE
,
738
739
/*--- Acquisition modes ---------------------------------------------*/
740
741
/**
742
* The device supports setting a sample time limit (how long
743
* the sample acquisition should run, in ms).
744
*/
745
SR_CONF_LIMIT_MSEC
= 50000,
746
747
/**
748
* The device supports setting a sample number limit (how many
749
* samples should be acquired).
750
*/
751
SR_CONF_LIMIT_SAMPLES
,
752
753
/**
754
* The device supports setting a frame limit (how many
755
* frames should be acquired).
756
*/
757
SR_CONF_LIMIT_FRAMES
,
758
759
/**
760
* The device supports continuous sampling. Neither a time limit
761
* nor a sample number limit has to be supplied, it will just acquire
762
* samples continuously, until explicitly stopped by a certain command.
763
*/
764
SR_CONF_CONTINUOUS
,
765
766
/** The device has internal storage, into which data is logged. This
767
* starts or stops the internal logging. */
768
SR_CONF_DATALOG
,
769
};
770
771
struct
sr_dev_inst
{
772
struct
sr_dev_driver
*
driver
;
773
int
index
;
774
int
status
;
775
int
inst_type
;
776
char
*
vendor
;
777
char
*
model
;
778
char
*
version
;
779
GSList *
probes
;
780
void
*
conn
;
781
void
*
priv
;
782
};
783
784
/** Types of device instances (sr_dev_inst). */
785
enum
{
786
/** Device instance type for USB devices. */
787
SR_INST_USB
= 10000,
788
/** Device instance type for serial port devices. */
789
SR_INST_SERIAL
,
790
};
791
792
/** Device instance status. */
793
enum
{
794
/** The device instance was not found. */
795
SR_ST_NOT_FOUND
= 10000,
796
/** The device instance was found, but is still booting. */
797
SR_ST_INITIALIZING
,
798
/** The device instance is live, but not in use. */
799
SR_ST_INACTIVE
,
800
/** The device instance is actively in use in a session. */
801
SR_ST_ACTIVE
,
802
/** The device is winding down its session. */
803
SR_ST_STOPPING
,
804
};
805
806
struct
sr_dev_driver
{
807
/* Driver-specific */
808
char
*
name
;
809
char
*
longname
;
810
int
api_version
;
811
int (*
init
) (
struct
sr_context *sr_ctx);
812
int (*
cleanup
) (void);
813
GSList *(*scan) (GSList *options);
814
GSList *(*dev_list) (void);
815
int (*
dev_clear
) (void);
816
int (*
config_get
) (
int
id, GVariant **data,
817
const
struct
sr_dev_inst
*sdi);
818
int (*
config_set
) (
int
id, GVariant *data,
819
const
struct
sr_dev_inst
*sdi);
820
int (*
config_list
) (
int
info_id, GVariant **data,
821
const
struct
sr_dev_inst
*sdi);
822
823
/* Device-specific */
824
int (*
dev_open
) (
struct
sr_dev_inst
*sdi);
825
int (*
dev_close
) (
struct
sr_dev_inst
*sdi);
826
int (*
dev_acquisition_start
) (
const
struct
sr_dev_inst
*sdi,
827
void
*cb_data);
828
int (*
dev_acquisition_stop
) (
struct
sr_dev_inst
*sdi,
829
void
*cb_data);
830
831
/* Dynamic */
832
void
*
priv
;
833
};
834
835
struct
sr_session
{
836
/** List of struct sr_dev pointers. */
837
GSList *
devs
;
838
/** List of struct datafeed_callback pointers. */
839
GSList *
datafeed_callbacks
;
840
GTimeVal
starttime
;
841
gboolean
running
;
842
843
unsigned
int
num_sources
;
844
845
/*
846
* Both "sources" and "pollfds" are of the same size and contain pairs
847
* of descriptor and callback function. We can not embed the GPollFD
848
* into the source struct since we want to be able to pass the array
849
* of all poll descriptors to g_poll().
850
*/
851
struct
source *
sources
;
852
GPollFD *
pollfds
;
853
int
source_timeout
;
854
855
/*
856
* These are our synchronization primitives for stopping the session in
857
* an async fashion. We need to make sure the session is stopped from
858
* within the session thread itself.
859
*/
860
GMutex
stop_mutex
;
861
gboolean
abort_session
;
862
};
863
864
#include "
proto.h
"
865
#include "
version.h
"
866
867
#ifdef __cplusplus
868
}
869
#endif
870
871
#endif
Generated on Tue Nov 5 2013 10:23:04 for libsigrok by
1.8.3.1