Use SR_API to mark public API symbols, and SR_PRIV for private symbols.
Variables and functions marked 'static' are private already and don't
need SR_PRIV. However, functions which are not static (because they need
to be used in other libsigrok-internal files) but are also not meant to
be part of the public libsigrok API, must use SR_PRIV.
This uses the 'visibility' feature of gcc (requires gcc >= 4.0).
Details: http://gcc.gnu.org/wiki/Visibility
The API should be generic and only provide sr_device_instance_new() and
friends, but not sr_usb_device_instance_new(), sr_serial_device_instance_new(),
or others for other device types we may have in the future. The
frontends shouldn't have to know or care about this implementation detail.
This also fixes the problem that parts of sigrok.h contained
'#ifdef HAVE_LIBUSB_1_0' and such, which is even less desirable for the API.
The usb/serial instance specifics are now private, and each driver that
needs them keeps a pointer in its driver-specific context.
- Add Doxygen comments for all functions (some TODOs remain).
- Check for invalid input parameters (such as NULL pointers etc).
- Return SR_ERR_ARG upon invalid input parameters.
- Make sr_datastore_put() return int instead of void, so we can pass
an error code (SR_OK, SR_ERR_MALLOC, and so on) to the caller.
- Much more elaborate doxygen comments for the function and its
parameters, allowed input values, and so on.
- Make 'probelist' const, the function doesn't modify it.
- Check for invalid inputs such as NULL pointers.
- Use g_try_malloc() and g_free() for the output buffer. Document who
is expected to g_free() the buffer.
libsigrok can now be told at which loglevel to work, i.e., how many
debug/error/warning output to generate. You can also query the current
loglevel.
In sigrok-cli it is now possible to set the loglevel via -l. For example:
- Disable all output: sigrok-cli -l 0
- Only show errors: sigrok-cli -l 1
- Show errors, warnings, info, and debug messages: sigrok-cli -l 4
Until now the build would break if the user doesn't enable at least one
of the libusb1.0-based LAs. I.e., you could not compile only OLS, or
only the demo driver.