summaryrefslogtreecommitdiff
path: root/session.c
AgeCommit message (Collapse)Author
2021-12-26session: introduce the public "send EOF" API routineGerhard Sittig
Introduce the public srd_session_send_eof() routine which is backed by the internal srd_inst_send_eof() helper. Applications can tell decoders when the input stream of sample data is exhausted, so that decoders can optionally "flush" their previously accumulated information when desired. Previous implementations just kept decoders in blocking .wait() calls and somehow terminated them at arbitrary times afterwards. When EOF is sent to the decoder session, then calls to the .wait() method which typically are done from .decode() or its descendents will end with an EOFError Python exception. Termination of .decode() with the EOFError exception is non-fatal for backwards compatibility and to keep the convenience for current decoder implementations. Decoders can either catch the exception, or use context managers, or do nothing. This API extension is motivated by research for bug #1581 and provides the infrastructure to address bug #292. Decoders need to remain careful, and should not claim that protocol activities would have completed when their end condition was not even seen in the capture. Marking incomplete activities with warnings is the most appropriate reaction.
2018-10-16Update a few Doxygen @since tags.Uwe Hermann
Drop @since tags for non-public functions.
2018-10-13Various log message improvements.Uwe Hermann
2018-10-13log: Use human-readable output type name everywhere.Uwe Hermann
2018-05-18Simplify code by dropping session_is_valid().Uwe Hermann
A simple NULL check is sufficient here, max_session_id is being properly handled by srd_init(), srd_exit(), srd_session_new(). This might also have a small performance benefit.
2018-05-18Random whitespace/cosmetic/consistency fixes.Uwe Hermann
2018-03-31session: add "terminate and reset" support for protocol stacksGerhard Sittig
Implement routines which terminate currently pending decoder operations and reset internal state (on the C and Python sides) for instances as well as sessions. This allows to re-use previously created stacks for new input data.
2017-06-30Acquire/release the Python GIL where needed to avoid threading issues.Uwe Hermann
With these additions, frontends can now call libsigrokdecode API functions from different threads without running into threading issues. The backend releases the GIL when it is performing tasks that might take a while and it doesn't need to run Python/C API calls during that time. This allows frontends to run multiple PD stacks (in multiple frontend threads) "at the same time" in a time-sharing, "interlocked" manner. Whenever one of the decoders is inside e.g. self.wait() it releases the GIL and thus allows other decoders to do some work in the mean time. The user-visible effect is that for use-cases such as running 3 different decoder stacks at the same time for an acquisition, the user will not have to wait for PD 1 to finish decoding, then wait for PD 2 to finish decoding, and only *then* being able to see annotations from PD 3. Instead, all three PDs will decode some chunks of data from time to time, thus the user is able to inspect annotations from all 3 PDs while the acquisition and decoding is still going on.
2017-06-15session.c: Fix a compiler warning on Mac OS X.Uwe Hermann
session.c:203:22: warning: format specifies type 'unsigned long long' but the argument has type 'guint64' (aka 'unsigned long') [-Wformat] sess->session_id, g_variant_get_uint64(data)); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ libsigrokdecode-internal.h:103:44: note: expanded from macro 'srd_dbg' #define srd_dbg(...) srd_log(SRD_LOG_DBG, __VA_ARGS__) ^~~~~~~~~~~
2017-02-21Clarify that {start,end,cur}_samplenum are absolute numbers.Uwe Hermann
2017-02-20Support adding multiple instances of a decoderKarl Palsson
srd_inst_new() used the decoder ID as the instance ID, preventing the use of multiple instances of the same decoder in the same session. Simply append a numerical suffix to later instances to allow more. Required changes to cleanup to reliably free all memory. Valgrind checked. This fixes parts of bug #868. Based on original work by: Soeren Apel <soeren@apelpie.net> Signed-off-by: Karl Palsson <karlp@etactica.com>
2016-08-25srd_session_send(): Improve Doxygen comments.Uwe Hermann
2016-05-11Supply metadata to stacked decodersStefan BrĂ¼ns
Currently only toplevel decoders receive the samplerate, thus stacked decoders are not able to derive e.g. timestamps from the sample number. This fixes bug #664.
2015-09-13Build: Include <config.h> first in all source filesDaniel Elstner
Since Autoconf places some important feature flags only into the configuration header, it is necessary to include it globally to guarantee a consistent build.
2015-08-20Pass unitsize per sample chunk.Uwe Hermann
Don't pass unitsize to srd_inst_channel_set_all(), have that only set the channel map. Instead, srd_session_send() now has a parameter for the unitsize which is passed with every new chunk to be decoded. This is in preparation to fix issues with devices or files which have a unitsize != 1 and where the "guessed" unitsize based on the number of channels is not correct. This also allows for (potential) future changes where every chunk can indeed have a different unitsize. This fixes (parts of) bug #352.
2015-07-23Slightly more verbose logging in srd_inst_decode().Uwe Hermann
2015-04-01Use g_malloc*() consistently, simplify error handling.Uwe Hermann
Use g_malloc*() for small allocations and assume they always succeed. Simplify error handling in a few places accordingly. Document the rules in the README file.
2014-07-08Remove dependency on Python.h from public API headerMarcus Comstedt
This prevents Python.h from being included into client code, where it can mess things up by e.g. redefining _POSIX_C_SOURCE.
2014-05-04Mark some variables more consistently as SRD_PRIV.Uwe Hermann
2014-05-03Don't define names ending with _t (POSIX reserved).Uwe Hermann
Avoid defining any names ending in _t, those are generally reserved for POSIX usage. For details see: http://pubs.opengroup.org/onlinepubs/007904975/functions/xsh_chap02_02.html http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html
2014-04-13Rename 'probe' to 'channel' everywhere.Uwe Hermann
Variables of type 'struct srd_channel *' are consistently named 'pdch' to make them easily distinguishable from libsigrok's 'struct sr_channel *' variables that are consistently named 'ch'.
2014-02-24Make the data unit size configurableDaniel Elstner
2014-01-30Fix warnings exposed by -Wmissing-prototypes.Uwe Hermann
2013-11-19Add a missing #include.Uwe Hermann
This causes compiler errors in some setups otherwise, e.g.: CC libsigrokdecode_la-session.lo session.c: In function 'srd_session_metadata_set': session.c:195:46: error: expected ')' before 'PRIu64' srd_dbg("Setting session %d samplerate to %"PRIu64".", ^ session.c: In function 'srd_session_send': session.c:242:15: error: expected ')' before 'PRIu64' "number %" PRIu64 ", %" PRIu64 " bytes at 0x%p", ^
2013-11-18Better error checking on session metadataBert Vermeulen
2013-11-16Move session-specific functionality into session.cBert Vermeulen