/** @cond PRIVATE */
/* The list of protocol decoders. */
-SRD_PRIV GSList *pd_list = NULL;
+static GSList *pd_list = NULL;
/* srd.c */
-extern GSList *searchpaths;
+extern SRD_PRIV GSList *searchpaths;
/* session.c */
-extern GSList *sessions;
+extern SRD_PRIV GSList *sessions;
+extern SRD_PRIV int max_session_id;
/* module_sigrokdecode.c */
extern SRD_PRIV PyObject *mod_sigrokdecode;
/** @endcond */
+static gboolean srd_check_init(void)
+{
+ if (max_session_id < 0) {
+ srd_err("Library is not initialized.");
+ return FALSE;
+ } else
+ return TRUE;
+}
+
/**
* Returns the list of supported/loaded protocol decoders.
*
*
* @return List of decoders, NULL if none are supported or loaded.
*
- * @since 0.1.0 (but the API changed in 0.2.0)
+ * @since 0.2.0
*/
SRD_API const GSList *srd_decoder_list(void)
{
}
Py_CLEAR(py_basedec);
+ /*
+ * Check that thіs decoder has the correct PD API version.
+ * PDs of different API versions are incompatible and cannot work.
+ */
+ py_long = PyObject_GetAttrString(d->py_dec, "api_version");
+ if (PyLong_AsLong(py_long) != 2) {
+ srd_err("Only PDs of API version 2 are supported.");
+ goto err_out;
+ }
+ Py_CLEAR(py_long);
+
/* Check for a proper start() method. */
if (!PyObject_HasAttrString(d->py_dec, "start")) {
srd_err("Protocol decoder %s has no start() method Decoder "