]> sigrok.org Git - libsigrokdecode.git/blobdiff - module_sigrokdecode.c
srd: clean up module loading/unloading, and the decoder struct
[libsigrokdecode.git] / module_sigrokdecode.c
index d2ffb0767487576de20672710038baec76fa2b55..cb43372932bec4808e9a1cff88dd0252245bb526 100644 (file)
 #include "sigrokdecode-internal.h"
 #include "config.h"
 
+
+/* When initialized, a reference to this module inside the python interpreter
+ * lives here.
+ */
+PyObject *mod_sigrokdecode = NULL;
+
 /* lives in type_logic.c */
 extern PyTypeObject srd_logic_type;
 
@@ -187,23 +193,19 @@ static PyMethodDef Decoder_methods[] = {
 };
 
 
-typedef struct {
-       PyObject_HEAD
-} sigrok_Decoder_object;
-
-static PyTypeObject srd_Decoder_type = {
+PyTypeObject srd_Decoder_type = {
        PyVarObject_HEAD_INIT(NULL, 0)
        .tp_name = "sigrokdecode.Decoder",
-       .tp_basicsize = sizeof(sigrok_Decoder_object),
+       .tp_basicsize = sizeof(srd_Decoder),
        .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-       .tp_doc = "Sigrok Decoder object",
+       .tp_doc = "Sigrok Decoder base class",
        .tp_methods = Decoder_methods,
 };
 
 static struct PyModuleDef sigrokdecode_module = {
        PyModuleDef_HEAD_INIT,
        .m_name = "sigrokdecode",
-       .m_doc = "sigrokdecode base class",
+       .m_doc = "sigrokdecode module",
        .m_size = -1,
        .m_methods = no_methods,
 };
@@ -230,16 +232,18 @@ PyMODINIT_FUNC PyInit_sigrokdecode(void)
                return NULL;
 
        /* expose output types as symbols in the sigrokdecode module */
-       if(PyModule_AddObject(mod, "SRD_OUTPUT_ANN",
+       if(PyModule_AddObject(mod, "OUTPUT_ANN",
                        PyLong_FromLong(SRD_OUTPUT_ANN)) == -1)
                return NULL;
-       if(PyModule_AddObject(mod, "SRD_OUTPUT_PROTO",
+       if(PyModule_AddObject(mod, "OUTPUT_PROTO",
                        PyLong_FromLong(SRD_OUTPUT_PROTO)) == -1)
                return NULL;
-       if(PyModule_AddObject(mod, "SRD_OUTPUT_BINARY",
+       if(PyModule_AddObject(mod, "OUTPUT_BINARY",
                        PyLong_FromLong(SRD_OUTPUT_BINARY)) == -1)
                return NULL;
 
+       mod_sigrokdecode = mod;
+
        return mod;
 }