22 #include "libsigrokdecode-internal.h" 75 srd_err(
"Invalid session pointer.");
79 *
sess = g_malloc(
sizeof(
struct srd_session));
80 (*sess)->session_id = ++max_session_id;
81 (*sess)->di_list = (*sess)->callbacks = NULL;
84 sessions = g_slist_append(sessions, *
sess);
86 srd_dbg(
"Created session %d.", (*sess)->session_id);
110 srd_err(
"Invalid session pointer.");
114 srd_dbg(
"Calling start() on all instances in session %d.",
sess->session_id);
118 for (d =
sess->di_list; d; d = d->next) {
120 if ((ret = srd_inst_start(di)) !=
SRD_OK)
139 if (PyObject_HasAttrString(di->
py_inst,
"metadata")) {
140 py_ret = PyObject_CallMethod(di->
py_inst,
"metadata",
"lK",
142 (
unsigned long long)g_variant_get_uint64(data));
147 for (l = di->
next_di; l; l = l->next) {
149 if ((ret = srd_inst_send_meta(
next_di, key, data)) !=
SRD_OK)
176 srd_err(
"Invalid session.");
181 srd_err(
"Invalid key.");
186 srd_err(
"Invalid value.");
193 srd_err(
"Unknown config key %d.", key);
196 if (!g_variant_is_of_type(data, G_VARIANT_TYPE_UINT64)) {
197 srd_err(
"Invalid value type: expected uint64, got %s",
198 g_variant_get_type_string(data));
202 srd_dbg(
"Setting session %d samplerate to %"PRIu64
".",
203 sess->session_id, g_variant_get_uint64(data));
206 for (l =
sess->di_list; l; l = l->next) {
207 if ((ret = srd_inst_send_meta(l->data, key, data)) !=
SRD_OK)
211 g_variant_unref(data);
282 srd_err(
"Invalid session.");
286 for (d =
sess->di_list; d; d = d->next) {
311 srd_err(
"Invalid session.");
315 session_id =
sess->session_id;
317 srd_inst_free_all(
sess);
319 g_slist_free_full(
sess->callbacks, g_free);
320 sessions = g_slist_remove(sessions,
sess);
323 srd_dbg(
"Destroyed session %d.", session_id);
348 if (session_is_valid(sess) !=
SRD_OK) {
349 srd_err(
"Invalid session.");
353 srd_dbg(
"Registering new callback for output type %d.",
output_type);
359 sess->callbacks = g_slist_append(sess->callbacks, pd_cb);
371 if (session_is_valid(sess) !=
SRD_OK) {
372 srd_err(
"Invalid session.");
377 for (l = sess->callbacks; l; l = l->next) {
int srd_session_send(struct srd_session *sess, uint64_t abs_start_samplenum, uint64_t abs_end_samplenum, const uint8_t *inbuf, uint64_t inbuflen, uint64_t unitsize)
Send a chunk of logic sample data to a running decoder session.
uint64_t abs_end_samplenum
Absolute end sample number.
struct srd_session * sess
srd_pd_output_callback cb
int srd_session_start(struct srd_session *sess)
Start a decoding session.
uint64_t inbuflen
Length (in bytes) of the input sample buffer.
int srd_pd_output_callback_add(struct srd_session *sess, int output_type, srd_pd_output_callback cb, void *cb_data)
Register/add a decoder output callback function.
const uint8_t * inbuf
Pointer to the buffer/chunk of input samples.
Generic/unspecified error.
int srd_session_destroy(struct srd_session *sess)
Destroy a decoding session.
int srd_session_new(struct srd_session **sess)
Create a decoding session.
int srd_session_metadata_set(struct srd_session *sess, int key, GVariant *data)
Set a metadata configuration key in a session.
The public libsigrokdecode header file to be used by frontends.
uint64_t abs_start_samplenum
Absolute start sample number.
void(* srd_pd_output_callback)(struct srd_proto_data *pdata, void *cb_data)