#include "sigrokdecode-internal.h"
#include <glib.h>
+/**
+ * @file
+ *
+ * Listing, loading, unloading, and handling protocol decoders.
+ */
+
+/**
+ * @defgroup grp_decoder Protocol decoders
+ *
+ * Handling protocol decoders.
+ *
+ * @{
+ */
+
+/** @cond PRIVATE */
+
/* The list of protocol decoders. */
SRD_PRIV GSList *pd_list = NULL;
/* module_sigrokdecode.c */
extern SRD_PRIV PyObject *mod_sigrokdecode;
+/** @endcond */
+
/**
* Returns the list of supported/loaded protocol decoders.
*
*
* @return List of decoders, NULL if none are supported or loaded.
*/
-SRD_API GSList *srd_decoder_list(void)
+SRD_API const GSList *srd_decoder_list(void)
{
return pd_list;
}
GSList *l;
struct srd_decoder *dec;
- for (l = srd_decoder_list(); l; l = l->next) {
+ for (l = pd_list; l; l = l->next) {
dec = l->data;
if (!strcmp(dec->id, id))
return dec;
struct srd_decoder *d;
int alen, ret, i;
char **ann;
+ struct srd_probe *p;
+ GSList *l;
srd_dbg("Loading protocol decoder '%s'.", module_name);
if (get_probes(d, "optional_probes", &d->opt_probes) != SRD_OK)
goto err_out;
+ /*
+ * Fix order numbers for the optional probes.
+ *
+ * Example:
+ * Required probes: r1, r2, r3. Optional: o1, o2, o3, o4.
+ * 'order' fields in the d->probes list = 0, 1, 2.
+ * 'order' fields in the d->opt_probes list = 3, 4, 5, 6.
+ */
+ for (l = d->opt_probes; l; l = l->next) {
+ p = l->data;
+ p->order += g_slist_length(d->probes);
+ }
+
/* Store required fields in newly allocated strings. */
if (py_attr_as_str(d->py_dec, "id", &(d->id)) != SRD_OK)
goto err_out;
GSList *l;
struct srd_decoder *dec;
- for (l = srd_decoder_list(); l; l = l->next) {
+ for (l = pd_list; l; l = l->next) {
dec = l->data;
srd_decoder_unload(dec);
}
return SRD_OK;
}
+
+/** @} */