diff options
Diffstat (limited to 'pywrap/pcipywrap.c')
-rw-r--r-- | pywrap/pcipywrap.c | 114 |
1 files changed, 109 insertions, 5 deletions
diff --git a/pywrap/pcipywrap.c b/pywrap/pcipywrap.c index bcf4561..ceb0835 100644 --- a/pywrap/pcipywrap.c +++ b/pywrap/pcipywrap.c @@ -1,4 +1,5 @@ #include "pcipywrap.h" +#include "locking.h" char* full_log = NULL; @@ -231,6 +232,7 @@ PyObject * pcilib_convert_register_info_to_pyobject(pcilib_t* ctx, pcilib_regist PyString_FromString("bank"), PyString_FromString(listItem.bank)); + //serialize modes PyObject* modes = PyList_New(0); @@ -277,6 +279,7 @@ PyObject * pcilib_convert_register_info_to_pyobject(pcilib_t* ctx, pcilib_regist if(listItem.values) { + PyObject* values = PyList_New(0); for (int j = 0; listItem.values[j].name; j++) @@ -300,12 +303,13 @@ PyObject * pcilib_convert_register_info_to_pyobject(pcilib_t* ctx, pcilib_regist pcilib_pydict_set_item(valuesItem, PyString_FromString("name"), PyString_FromString(listItem.values[j].name)); - if(listItem.values[j].description) + { pcilib_pydict_set_item(valuesItem, - PyString_FromString("name"), + PyString_FromString("description"), PyString_FromString(listItem.values[j].description)); + } pcilib_pylist_append(values, valuesItem); } @@ -315,6 +319,7 @@ PyObject * pcilib_convert_register_info_to_pyobject(pcilib_t* ctx, pcilib_regist } return pylistItem; + } Pcipywrap *new_Pcipywrap(const char* fpga_device, const char* model) @@ -454,17 +459,15 @@ PyObject* Pcipywrap_set_property(Pcipywrap *self, PyObject* val, const char *pro PyObject* Pcipywrap_get_registers_list(Pcipywrap *self, const char *bank) { pcilib_register_info_t *list = pcilib_get_register_list(self->ctx, bank, PCILIB_LIST_FLAGS_DEFAULT); - PyObject* pyList = PyList_New(0); for(int i = 0; i < ((pcilib_t*)self->ctx)->num_reg; i++) { //serialize item attributes PyObject* pylistItem = pcilib_convert_register_info_to_pyobject(self->ctx, list[i]); pcilib_pylist_append(pyList, pylistItem); + //Py_DECREF(pylistItem); } - pcilib_free_register_info(self->ctx, list); - return pyList; } @@ -501,3 +504,104 @@ PyObject* Pcipywrap_get_property_list(Pcipywrap *self, const char* branch) return pyList; } + +PyObject* Pcipywrap_read_dma(Pcipywrap *self, unsigned char dma, size_t size) +{ + int err; + void* buf = NULL; + size_t real_size; + + err = pcilib_read_dma(self->ctx, dma, (uintptr_t)NULL, size, buf, &real_size); + if(err) + { + set_python_exception("Failed pcilib_read_dma", err); + return NULL; + } + + + PyObject* py_buf = PyByteArray_FromStringAndSize((const char*)buf, real_size); + if(buf) + free(buf); + + return py_buf; +} + +PyObject* Pcipywrap_lock_global(Pcipywrap *self) +{ + int err; + + err = pcilib_lock_global(self->ctx); + if(err) + { + set_python_exception("Failed pcilib_lock_global"); + return NULL; + } + + return PyInt_FromLong((long)1); +} + +void Pcipywrap_unlock_global(Pcipywrap *self) +{ + pcilib_unlock_global(self->ctx); + return; +} + +PyObject* Pcipywrap_lock(Pcipywrap *self, const char *lock_id) +{ + pcilib_lock_t* lock = pcilib_get_lock(self->ctx, + PCILIB_LOCK_FLAGS_DEFAULT, + lock_id); + if(!lock) + { + set_python_exception("Failed pcilib_get_lock"); + return NULL; + } + + + int err = pcilib_lock(lock); + if(err) + { + set_python_exception("Failed pcilib_lock"); + return NULL; + } + + return PyInt_FromLong((long)1); +} + +PyObject* Pcipywrap_try_lock(Pcipywrap *self, const char *lock_id) +{ + pcilib_lock_t* lock = pcilib_get_lock(self->ctx, + PCILIB_LOCK_FLAGS_DEFAULT, + lock_id); + if(!lock) + { + set_python_exception("Failed pcilib_get_lock"); + return NULL; + } + + int err = pcilib_try_lock(lock); + if(err) + { + set_python_exception("Failed pcilib_try_lock"); + return NULL; + } + + return PyInt_FromLong((long)1); +} + +PyObject* Pcipywrap_unlock(Pcipywrap *self, const char *lock_id) +{ + pcilib_lock_t* lock = pcilib_get_lock(self->ctx, + PCILIB_LOCK_FLAGS_DEFAULT, + lock_id); + if(!lock) + { + set_python_exception("Failed pcilib_get_lock"); + return NULL; + } + + pcilib_unlock(lock); + return PyInt_FromLong((long)1); +} + + |