X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fpython%2Fsigrok%2Fcore%2Flowlevel.i;h=f50d4d0f75d2f53038fde466333db5e9a4c3dcce;hb=3f239f0803b9fbc073dd7abe9fc7b2a0c606fbb6;hp=eaf02a0e82fd4fcef8186c9b17fff7597ed6adf7;hpb=0220626994c6bac7bce967fe6dc8804667cce03e;p=libsigrok.git diff --git a/bindings/python/sigrok/core/lowlevel.i b/bindings/python/sigrok/core/lowlevel.i index eaf02a0e..f50d4d0f 100644 --- a/bindings/python/sigrok/core/lowlevel.i +++ b/bindings/python/sigrok/core/lowlevel.i @@ -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 * @@ -54,15 +54,60 @@ void sr_datafeed_python_callback(const struct sr_dev_inst *sdi, PyGILState_Release(gstate); } -void sr_session_datafeed_python_callback_add(PyObject *cb) +int sr_session_datafeed_python_callback_add(PyObject *cb) { + int ret; + if (!PyCallable_Check(cb)) - PyErr_SetString(PyExc_TypeError, "Object passed is not callable"); - else - sr_session_datafeed_callback_add( + return SR_ERR_ARG; + else { + ret = sr_session_datafeed_callback_add( sr_datafeed_python_callback, cb); + if (ret == SR_OK) + Py_XINCREF(cb); + return ret; + } +} + +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; } %} -void sr_session_datafeed_python_callback_add(PyObject *cb); +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);