27
* \brief Sets python exeption text. Function interface same as printf.
29
void setPyExeptionText(const char* msg, ...)
38
sz = vsnprintf(NULL, 0, msg, vl);
39
buf = (char *)malloc(sz + 1);
43
PyErr_SetString(PyExc_Exception, "Memory error");
47
vsnprintf(buf, sz+1, msg, vl_copy);
51
PyErr_SetString(PyExc_Exception, buf);
28
56
* \brief Sets pcilib context to wraper.
29
57
* \param[in] addr Pointer to pcilib_t, serialized to bytearray
58
* \return true, serialized to PyObject, NULL with exeption text, if failed.
31
void __setPcilib(PyObject* addr)
60
PyObject* __setPcilib(PyObject* addr)
33
62
if(!PyByteArray_Check(addr))
35
PyErr_SetString(PyExc_Exception, "Incorrect addr type. Only bytearray is allowed");
64
setPyExeptionText(PyExc_Exception, "Incorrect addr type. Only bytearray is allowed");
39
68
//deserializing adress
44
73
((char*)&__ctx)[i] = pAddr[i];
77
return PyInt_FromLong((long)1);
80
PyObject* pcilib_convert_val_to_pyobject(pcilib_t* ctx, pcilib_value_t *val, void (*errstream)(const char* msg, ...))
86
case PCILIB_TYPE_INVALID:
87
errstream("Invalid register output type (PCILIB_TYPE_INVALID)");
90
case PCILIB_TYPE_STRING:
91
errstream("Invalid register output type (PCILIB_TYPE_STRING)");
94
case PCILIB_TYPE_LONG:
97
ret = pcilib_get_value_as_int(__ctx, val, &err);
101
errstream("Failed: pcilib_get_value_as_int (%i)", err);
104
return PyInt_FromLong((long) ret);
107
case PCILIB_TYPE_DOUBLE:
110
ret = pcilib_get_value_as_float(__ctx, val, &err);
114
errstream("Failed: pcilib_get_value_as_int (%i)", err);
117
return PyFloat_FromDouble((double) ret);
121
errstream("Invalid register output type (unknown)");
126
int pcilib_convert_pyobject_to_val(pcilib_t* ctx, PyObject* pyVal, pcilib_value_t *val)
130
if(PyInt_Check(pyVal))
132
err = pcilib_set_value_from_int(ctx, val, PyInt_AsLong(pyVal));
135
if(PyFloat_Check(pyVal))
136
err = pcilib_set_value_from_float(ctx, val, PyFloat_AsDouble(pyVal));
138
if(PyString_Check(pyVal))
139
err = pcilib_set_value_from_static_string(ctx, val, PyString_AsString(pyVal));
142
pcilib_error("Invalid input. Input type should be int, float or string.");
143
return PCILIB_ERROR_NOTSUPPORTED;
50
153
* \brief Reads register value.
70
173
err = pcilib_read_register(__ctx, bank, regname, ®_value);
73
PyErr_SetString(PyExc_Exception, "Failed: read_register");
176
setPyExeptionText("Failed: read_register (%i)", err);
77
180
err = pcilib_set_value_from_register_value(__ctx, &val, reg_value);
81
PyErr_SetString(PyExc_Exception, "Failed: pcilib_set_value_from_register_value");
87
case PCILIB_TYPE_INVALID:
88
PyErr_SetString(PyExc_Exception, "Invalid register output type (PCILIB_TYPE_INVALID)");
91
case PCILIB_TYPE_STRING:
92
PyErr_SetString(PyExc_Exception, "Invalid register output type (PCILIB_TYPE_STRING)");
95
case PCILIB_TYPE_LONG:
98
ret = pcilib_get_value_as_int(__ctx, &val, &err);
102
PyErr_SetString(PyExc_Exception, "Failed: pcilib_get_value_as_int");
105
return PyInt_FromLong((long) ret);
108
case PCILIB_TYPE_DOUBLE:
111
ret = pcilib_get_value_as_float(__ctx, &val, &err);
115
PyErr_SetString(PyExc_Exception, "Failed: pcilib_get_value_as_int");
118
return PyFloat_FromDouble((double) ret);
122
PyErr_SetString(PyExc_Exception, "Invalid register output type (unknown)");
183
setPyExeptionText("Failed: pcilib_set_value_from_register_value (%i)", err);
187
return pcilib_convert_val_to_pyobject(__ctx, &val, setPyExeptionText);
191
PyObject* get_property(const char *prop)
195
setPyExeptionText("pcilib_t handler not initialized");
200
pcilib_value_t val = {0};
202
err = pcilib_get_property(__ctx, prop, &val);
206
setPyExeptionText("Failed pcilib_get_property (%i)", err);
210
return pcilib_convert_val_to_pyobject(__ctx, &val, setPyExeptionText);
213
PyObject* set_property(const char *prop, PyObject* val)
219
setPyExeptionText("pcilib_t handler not initialized");
223
pcilib_value_t val_internal = {0};
224
err = pcilib_convert_pyobject_to_val(__ctx, val, &val_internal);
227
setPyExeptionText("pcilib_convert_pyobject_to_val (%i)", err);
231
err = pcilib_set_property(__ctx, prop, &val_internal);
235
setPyExeptionText("Failed pcilib_get_property (%i)", err);
239
return PyInt_FromLong((long)1);