Commit Graph

3401 Commits

Author SHA1 Message Date
Daniel Elstner 6d9da8efbf log: Output timestamps at level SR_LOG_DBG too
SR_LOG_DBG and above are targeted at developers, so it makes sense
to extend timestamp output to that. Also sanitize the calculation
of the timestamp components a bit.
2015-09-13 00:58:36 +02:00
Daniel Elstner be92d5b4ee log: Use generalized sr_log() to implement logging helpers
Get rid of the specicialized sr_err(), sr_warn(), etc. functions.
Instead, define the logging helper macros in terms of sr_log(),
and remove the sr_log() helper macro so that no function is hidden
by a macro anymore.

Decorate sr_log() with G_GNUC_PRINTF to detect varargs errors. This
unearthed a gazillion warnings all over the place which will have
to be fixed.

Also convert the helper macros to ISO C99 __VA_ARGS__ style instead
of relying on a GNU C extension. Paste the log prefix directly into
the format string to make this work.
2015-09-12 23:46:16 +02:00
Daniel Elstner ab0b34584c session: Return immediately if there are no event sources
Some drivers, such as zeroplus-logic-cube, run everything they do
right away in dev_acquisition_start(), never installing any event
sources. Handle that evilness by returning from sr_session_run()
immediately if there are no sources.
2015-09-11 19:15:55 +02:00
Daniel Elstner c2bf5506ee session: Port to GLib main loop
Replace the custom session main loop with the GLib main loop.
This is phase one of the port, which leaves the session and
driver APIs unchanged while replacing the internals.
2015-09-10 22:46:20 +02:00
Daniel Elstner 041b579d53 serial: On Windows, include <windows.h> for HANDLE 2015-09-10 22:42:27 +02:00
Daniel Elstner 69f68553ae sigrok.m4: Remove SR_PROG_MAKE_NO_PRINT_DIRECTORY 2015-09-10 19:38:10 +02:00
Daniel Elstner bcc3694ff7 Build: Use GNUMAKEFLAGS for --no-print-directory 2015-09-10 19:35:17 +02:00
Daniel Elstner 96e05afa77 hung-chang-dso-2100: Enable only if libieee1284 is available 2015-09-10 18:36:30 +02:00
Daniel Glöckner c940446918 hung-chang-dso-2100: Add driver
The Hung-Chang DSO-2100 is a parallel port PC oscilloscope sold back
in 1999 under brand names like Protek and Voltcraft.

This inital version of the driver has the following limitations:

 - Hardcoded calibration values. All parameters are set to 50%.
 - No support for auto triggering
 - No support for TV sync trigger modes
 - No support for the "scroll acquisition" mode

In scroll acquisition mode the device behaves more like a multimeter
and reports the current voltage of a probe on request. While in this
mode the sample rate is limited by the parallel port interface, it is
the only way to capture both channels at the same time (well, sort of).

Calibration would need auto triggering. The calibration values are very
temperature dependent and the device takes literally hours to reach its
final temperature. Every vdiv setting needs its own set of calibration
values. Without hardware modifications, the calibration settings wear
of in less than a second while waiting for a trigger because the
capacitors storing those values are not recharged in state 0x21.
2015-09-10 14:42:12 +02:00
Daniel Glöckner 05ac4a9828 hung-chang-dso-2100: Initial driver skeleton. 2015-09-10 14:42:12 +02:00
Uwe Hermann 7237e91262 portability: Use g_strerror() in favor of strerror(). 2015-09-09 15:20:10 +02:00
Uwe Hermann 34577da641 portability: Use g_ascii_strcasecmp() in favor of strcasecmp().
This is more portable and guaranteed locale-independent.
2015-09-09 15:20:10 +02:00
Uwe Hermann ba3070ff34 Makefile.am: Use @ORDER@ instead of |.
This is set to | (or left empty) by SR_PROG_MAKE_ORDER_ONLY for
portability reasons, since not all Make implementations support
order-only prerequisites.
2015-09-09 15:20:10 +02:00
Martin Ling fd31865ef4 Don't rebuild Python or Java bindings unless C++ interface changes. 2015-09-09 11:19:05 +02:00
Soeren Apel 42f4619d6b Fix #550 by allowing an empty trigger match list
1e7659609b is related
to this change and required to fix #550 as well.
2015-09-08 19:09:54 +02:00
Bert Vermeulen 1e7659609b Don't free trigger when destroying the session.
The trigger must be freed by the client.
2015-09-08 15:44:47 +02:00
Daniel Elstner 4512ccd36c Build: Show compiler versions in summary 2015-09-08 04:57:59 +02:00
Daniel Elstner a6e8a8f766 sigrok.m4: Add SR_PROG_VERSION macro 2015-09-08 04:57:59 +02:00
Daniel Elstner c178386178 sigrok.m4: Suppress make variable for ORDER 2015-09-08 04:10:44 +02:00
Daniel Elstner 39cf2004dc Build: Fix restore of LIBS after temporary change 2015-09-08 04:02:04 +02:00
Daniel Elstner 1b8d3a6d09 session: Compile USB-specific code only if available 2015-09-08 00:08:16 +02:00
Daniel Elstner c1adbb1e23 Build: Add configure check for libusb event-abstraction
This is intended to make people notice when libusb is too old
for the new Windows code. However, this is not foolproof, since
the libusb version may be different at runtime.
2015-09-08 00:08:16 +02:00
Daniel Elstner 534b634ce2 USB: Handle live changes to the set of FDs to poll
Introduce new internal session API for changing the set of polled
file descriptors for an already installed event source. Use the
new API to apply changes to the USB poll FDs when requested to do
so by libusb. Doing so is necessary to make the generic USB code
work on Windows.
2015-09-08 00:08:16 +02:00
Daniel Elstner 1b0c6b6d15 USB: On Windows, assume G_IO_IN for the event mask 2015-09-08 00:08:16 +02:00
Daniel Elstner 3a1a6d6b04 session: More main loop debug output 2015-09-08 00:08:16 +02:00
Daniel Elstner 4b9e253213 USB: Remove Windows-specific event handling code
For the generic code to work on Windows, a version of libusb
with the experimental event-abstraction changes is required.
2015-09-08 00:04:22 +02:00
Daniel Elstner 2defc4116b sigrok.m4: Update serial 2015-09-07 23:57:03 +02:00
Daniel Elstner 3841c4c58d Build: Use SR_PROG_MAKE_NO_PRINT_DIRECTORY 2015-09-07 23:54:00 +02:00
Daniel Elstner 82b01e42f8 sigrok.m4: Add SR_PROG_MAKE_NO_PRINT_DIRECTORY macro 2015-09-07 23:54:00 +02:00
Daniel Elstner 6aa7fcf16a Build: Show compiler and flags in configure summary 2015-09-07 23:20:17 +02:00
Daniel Elstner 5b9e9bba74 Build: Use SR_PROG_MAKE_ORDER_ONLY
As of now, the resulting substitution @ORDER@ is unused.
2015-09-07 23:20:17 +02:00
Daniel Elstner c2b0f42989 sigrok.m4: Add SR_PROG_MAKE_ORDER_ONLY macro 2015-09-07 23:20:17 +02:00
Daniel Elstner 8c2024e021 Build: Implement libieee1284 check via SR_ARG_OPT_CHECK 2015-09-07 23:20:17 +02:00
Daniel Elstner 38662688e8 sigrok.m4: Add generic macro for optional dependencies
Provide SR_ARG_OPT_CHECK, a generalized variant of SRG_ARG_OPT_PKG
that can be used with custom check commands. Implement the latter
in terms of SR_ARG_OPT_CHECK.
2015-09-07 23:20:17 +02:00
Martin Lederhilger aff94d065e scpi: Fix incorrect serial_read_nonblocking call().
There was a problem in scpi_serial.c in the scpi_serial_read_data()
function. Incoming data was written at the read position in the buffer,
although it should be written at the count position in the buffer.
2015-09-07 22:49:58 +02:00
Daniel Elstner dd7a4a71ca drivers: Match dummy FD passed to source add/remove 2015-09-07 14:33:30 +02:00
Daniel Elstner 5a7d8dac90 USB: Handle the case of a callback removing its event source 2015-09-05 04:21:26 +02:00
Daniel Elstner 358c4ed5b8 USB: On Windows, block to wait for libusb events
This is another attempt at getting the mess that is libusb event
handling on Windows under control. Until libusb makes its HANDLEs
available for polling, we have no choice but to block while waiting
for libusb events. Since we do not want to force drivers to deal
with multi-threading issues, that means we have to block in the
session main loop.

Fortunately, it turns out that our drivers aren't using multiple
event sources, so it is actually possible to block the main loop
without disrupting too much. This also gets rid of the USB thread
on Windows. Thankfully, libusb does not seem to care that we are
now calling libusb_handle_events_timeout_completed() twice per
iteration: first a blocking call (with timeout) in the callback
wrapper, followed by the non-blocking call in the driver-supplied
callback.
2015-09-04 19:04:23 +02:00
Daniel Elstner 92248e7821 session: Allow multiple poll FDs per event source
Turns out that having one event source per libusb poll FD is
a bad idea. There is only a single callback for all poll FDs,
and libusb expects to be called only once per poll iteration,
no matter how many FDs triggered.

Also, they should all share the same timeout, which should get
reset on events from any polled FD. The new timeout handling made
this problem apparent, as it caused the callback to be invoked
multiple times on timeouts, once for each separate event source.

In order to fix this, change the implementation to allow for an
arbitrary number of poll FDs per event source. This number is
zero for timer FDs, one for normal I/O sources, and one or more
for libusb sources (Unix only).

Also, on Windows, do not get an additional timeout from libusb
in the event loop. This is only appropriate when polling the
libusb FDs directly, which we aren't doing on Windows.
2015-09-03 19:37:09 +02:00
Daniel Elstner 7637fa35b5 session: More poll spewing 2015-09-03 19:37:09 +02:00
Daniel Elstner 15408b51f3 log: Output time stamps at log level spew 2015-09-03 19:37:09 +02:00
Daniel Elstner c650d3ecbf drivers: Use timer sources instead of polling stdin 2015-09-03 19:37:09 +02:00
Daniel Elstner 027bf07796 demo: Use simple timer source instead of pipe
Get rid of the Unix pipe and the GIOChannel wrapping it. Instead,
install a simple timer event source with the appropriate timeout.
2015-09-03 19:37:09 +02:00
Daniel Elstner b5887bd0c3 session: Add poll debug spew 2015-09-03 19:37:09 +02:00
Daniel Elstner faa5d7d997 session: Unify handling of I/O and timer sources
Handle I/O sources and timer ("dummy") sources within the same
polling loop, so that both may be used together. Slightly change
the API to improve consistency: a timeout value of -1 now disables
the timeout, and 0 makes the source always time out immediately.
The "dummy" sources already behaved that way, although it wasn't
documented as such.

Make sure that I/O events are processed preferentially: Skip any
timeout callbacks if an I/O event occurred within the same poll
iteration. This applies to both timer/idle sources and timeouts
of I/O sources.

Do not create dummy GPollFDs for timer/idle sources. Instead,
split the sources array into an I/O section and a timer section,
and create corresponding GPollFDs only for the I/O section. Use
GArray to simplify the handling of the dynamic arrays.
2015-09-03 19:37:09 +02:00
Daniel Elstner 62d7945f80 session: Properly accumulate event source timeouts
Keep track of when source timeouts are due and properly compare
against accumulated elapsed time between invocations. This prevents
sources with short timeouts from blocking other sources with longer
timeouts indefinitely.
2015-09-03 19:37:09 +02:00
Daniel Elstner 4399cc0f41 session: Do not expect meaningful errno on non-UNIX
Looking at the g_poll() implementations for various systems, it
appears that on Windows the return value is 0 if the wait was
interrupted, and errno is never set. Also, the MacOS X wrapper
around select() does not clear revents on timeout.

To deal with these issues, check for EINTR only on Unices, and
assume revents to be invalid unless g_poll() returned a positive
value.
2015-09-03 19:37:09 +02:00
Daniel Elstner 32af282c5e session: Check for errors from g_poll()
If the call to g_poll() in sr_session_iteration() fails, report
the error back to the caller. Do not treat EINTR as error though.

Check for session abort only if a source callback was actually
invoked, or at least once if none of the callbacks are invoked.
Stop checking for abort if the session has already been stopped,
just in case a callback sets abort_session again.

Also change the documentation to match the actual behavior.
2015-09-03 19:37:09 +02:00
Daniel Elstner 89efe06460 session: Fix USB timeout handling
In sr_session_iteration(), remove the inverted evaluation of the
block parameter if a USB source is present. This stops the deluge
of USB event callbacks due to the timeout always being zero.

Also, just for cleanliness, initialize the revents member of each
GPollFD instance to zero.
2015-09-03 19:37:09 +02:00
Daniel Elstner 452986bec4 Build: Fix installation of Python bindings
Apparently setup.py install behaves differently when given
the --root option, so omit that if DESTDIR is empty.

Fixes #644.
2015-09-02 14:07:06 +02:00