12
* \brief Sets python exeption text. Function interface same as printf.
12
* \brief Wraping for vsnprintf function, that saves string to char*
13
* \return saved from vsnprintf string
14
void __setPyExeptionText(const char* msg, ...)
15
char* vmake_str(const char* msg, va_list vl)
16
if(!Py_IsInitialized())
24
21
va_copy(vl_copy, vl);
26
23
sz = vsnprintf(NULL, 0, msg, vl);
31
PyErr_SetString(PyExc_Exception, "Memory error");
35
31
vsnprintf(buf, sz+1, msg, vl_copy);
38
* \brief Wraping for vsnprintf function, that saves string to char*
39
* \return saved from vsnprintf string
41
char* make_str(const char* msg, ...)
45
char *buf = vmake_str(msg, vl);
39
PyErr_SetString(PyExc_Exception, buf);
50
* \brief Version of pcilib_logger_t, that saves error text to Python exeption
52
void pcilib_print_error_to_py(void *arg, const char *file, int line,
53
pcilib_log_priority_t prio, const char *msg,
55
char* buf_raw_msg = vmake_str(msg, va);
56
char* buf_wrapped_message = make_str("%s [%s:%d]\n", buf_raw_msg, file, line);
58
printf("%s", buf_wrapped_message);
59
PyErr_SetString(PyExc_Exception, buf_wrapped_message);
61
free(buf_wrapped_message);
66
* \brief Inits pcipywrap module at importing
68
void init_pcipywrap_module()
70
pcilib_set_logger(pcilib_get_logger_min_prio(),
71
pcilib_print_error_to_py,
72
pcilib_get_logger_argument());
52
84
pcilib_t* ctx = pcilib_open(fpga_device, model);
55
__setPyExeptionText("Failed pcilib_open(%s, %s)", fpga_device, model);
59
88
//serializing object
60
89
return PyByteArray_FromStringAndSize((const char*)&ctx, sizeof(pcilib_t*));
104
133
return PyInt_FromLong((long)1);
107
PyObject* pcilib_convert_val_to_pyobject(pcilib_t* ctx, pcilib_value_t *val, void (*errstream)(const char* msg, ...))
113
case PCILIB_TYPE_INVALID:
115
errstream("Invalid register output type (PCILIB_TYPE_INVALID)");
118
case PCILIB_TYPE_STRING:
120
errstream("Invalid register output type (PCILIB_TYPE_STRING)");
123
case PCILIB_TYPE_LONG:
126
ret = pcilib_get_value_as_int(__ctx, val, &err);
131
errstream("Failed: pcilib_get_value_as_int (%i)", err);
134
return PyInt_FromLong((long) ret);
137
case PCILIB_TYPE_DOUBLE:
140
ret = pcilib_get_value_as_float(__ctx, val, &err);
145
errstream("Failed: pcilib_get_value_as_int (%i)", err);
148
return PyFloat_FromDouble((double) ret);
153
errstream("Invalid register output type (unknown)");
158
int pcilib_convert_pyobject_to_val(pcilib_t* ctx, PyObject* pyVal, pcilib_value_t *val)
162
if(PyInt_Check(pyVal))
164
err = pcilib_set_value_from_int(ctx, val, PyInt_AsLong(pyVal));
167
if(PyFloat_Check(pyVal))
168
err = pcilib_set_value_from_float(ctx, val, PyFloat_AsDouble(pyVal));
170
if(PyString_Check(pyVal))
171
err = pcilib_set_value_from_static_string(ctx, val, PyString_AsString(pyVal));
174
pcilib_error("Invalid input. Input type should be int, float or string.");
175
return PCILIB_ERROR_NOTSUPPORTED;
185
138
* \brief Reads register value. Wrap for pcilib_read_register function.
203
156
err = pcilib_read_register(__ctx, bank, regname, ®_value);
206
__setPyExeptionText("Failed: pcilib_read_register (%i)", err);
159
pcilib_error("Failed: pcilib_read_register (%i)", err);
210
163
err = pcilib_set_value_from_register_value(__ctx, &val, reg_value);
213
__setPyExeptionText("Failed: pcilib_set_value_from_register_value (%i)", err);
166
pcilib_error("Failed: pcilib_set_value_from_register_value (%i)", err);
217
return pcilib_convert_val_to_pyobject(__ctx, &val, __setPyExeptionText);
170
return pcilib_convert_val_to_pyobject(__ctx, &val);
239
192
err = pcilib_convert_pyobject_to_val(__ctx, val, &val_internal);
242
__setPyExeptionText("Failed pcilib_convert_pyobject_to_val (%i)", err);
195
pcilib_error("Failed pcilib_convert_pyobject_to_val (%i)", err);
246
199
reg_value = pcilib_get_value_as_register_value(__ctx, &val_internal, &err);
249
__setPyExeptionText("Failed: pcilib_get_value_as_register_value (%i)", err);
202
pcilib_error("Failed: pcilib_get_value_as_register_value (%i)", err);
253
206
err = pcilib_write_register(__ctx, bank, regname, reg_value);
256
__setPyExeptionText("Failed: pcilib_write_register (%i)", err);
209
pcilib_error("Failed: pcilib_write_register (%i)", err);
259
212
return PyInt_FromLong((long)1);
282
__setPyExeptionText("Failed pcilib_get_property (%i)", err);
235
pcilib_error("Failed pcilib_get_property (%i)", err);
286
return pcilib_convert_val_to_pyobject(__ctx, &val, __setPyExeptionText);
239
return pcilib_convert_val_to_pyobject(__ctx, &val);
306
259
err = pcilib_convert_pyobject_to_val(__ctx, val, &val_internal);
309
__setPyExeptionText("Failed pcilib_convert_pyobject_to_val (%i)", err);
262
pcilib_error("Failed pcilib_convert_pyobject_to_val (%i)", err);
324
277
void add_pcilib_value_to_dict(PyObject* dict, pcilib_value_t* val, const char *name)
326
PyObject *py_val = pcilib_convert_val_to_pyobject(__ctx, val, NULL);
279
PyObject *py_val = pcilib_convert_val_to_pyobject(__ctx, val);
329
282
PyDict_SetItem(dict,