]> sigrok.org Git - libsigrok.git/blobdiff - bindings/python/sigrok/core/lowlevel.i
python: Add conversion functions to/from GSList *
[libsigrok.git] / bindings / python / sigrok / core / lowlevel.i
index 28abd50d7850ee8cb280adf5c74ca93835910955..f50d4d0f75d2f53038fde466333db5e9a4c3dcce 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file is part of the sigrok project.
+ * This file is part of the libsigrok project.
  *
  * Copyright (C) 2013 Martin Ling <martin-sigrok@earth.li>
  *
@@ -69,6 +69,45 @@ int sr_session_datafeed_python_callback_add(PyObject *cb)
     }
 }
 
+PyObject *cdata(const void *data, unsigned long size)
+{
+#if PY_MAJOR_VERSION < 3
+    return PyString_FromStringAndSize(data, size);
+#else
+    return PyBytes_FromStringAndSize(data, size);
+#endif
+}
+
+GSList *python_to_gslist(PyObject *pylist)
+{
+    if (PyList_Check(pylist)) {
+        GSList *gslist = NULL;
+        int size = PyList_Size(pylist);
+        int i;
+        for (i = size - 1; i >= 0; i--) {
+            SwigPyObject *o = (SwigPyObject *)PyList_GetItem(pylist, i);
+            void *data = o->ptr;
+            gslist = g_slist_prepend(gslist, data);
+        }
+        return gslist;
+    }
+    return NULL;
+}
+
+PyObject *gslist_to_python(GSList *gslist)
+{
+    PyObject *pylist = PyList_New(0);
+    GSList *l;
+    for (l = gslist; l; l = l->next)
+        PyList_Append(pylist, SWIG_NewPointerObj(l->data, SWIGTYPE_p_void, 0));
+    return pylist;
+}
+
 %}
 
 int sr_session_datafeed_python_callback_add(PyObject *cb);
+
+PyObject *cdata(const void *data, unsigned long size);
+
+GSList *python_to_gslist(PyObject *pylist);
+PyObject *gslist_to_python(GSList *gslist);