summaryrefslogtreecommitdiffstats
path: root/pywrap/pcipywrap.c
diff options
context:
space:
mode:
Diffstat (limited to 'pywrap/pcipywrap.c')
-rw-r--r--pywrap/pcipywrap.c114
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);
+}
+
+