130
130
pcilib_pydict_set_item(dict,
131
PyString_FromString(name),
131
PyUnicode_FromString(name),
134
134
pcilib_pydict_set_item(dict,
135
PyString_FromString("defvalue"),
136
PyString_FromString("invalid"));
135
PyUnicode_FromString("defvalue"),
136
PyUnicode_FromString("invalid"));
139
139
PyObject * pcilib_convert_property_info_to_pyobject(pcilib_t* ctx, pcilib_property_info_t listItem)
143
143
if(listItem.name)
144
144
pcilib_pydict_set_item(pylistItem,
145
PyString_FromString("name"),
146
PyString_FromString(listItem.name));
145
PyUnicode_FromString("name"),
146
PyUnicode_FromString(listItem.name));
148
148
if(listItem.description)
149
149
pcilib_pydict_set_item(pylistItem,
150
PyString_FromString("description"),
151
PyString_FromString(listItem.description));
150
PyUnicode_FromString("description"),
151
PyUnicode_FromString(listItem.description));
153
153
if(listItem.path)
154
154
pcilib_pydict_set_item(pylistItem,
155
PyString_FromString("path"),
156
PyString_FromString(listItem.path));
155
PyUnicode_FromString("path"),
156
PyUnicode_FromString(listItem.path));
158
158
//serialize types
159
159
const char* type = "invalid";
177
177
pcilib_pydict_set_item(pylistItem,
178
PyString_FromString("type"),
179
PyString_FromString(type));
178
PyUnicode_FromString("type"),
179
PyUnicode_FromString(type));
182
182
//serialize modes
183
183
PyObject* modes = PyList_New(0);
185
185
if((listItem.mode & PCILIB_ACCESS_R ) == PCILIB_REGISTER_R)
186
pcilib_pylist_append(modes, PyString_FromString("R"));
186
pcilib_pylist_append(modes, PyUnicode_FromString("R"));
187
187
if((listItem.mode & PCILIB_ACCESS_W ) == PCILIB_REGISTER_W)
188
pcilib_pylist_append(modes, PyString_FromString("W"));
188
pcilib_pylist_append(modes, PyUnicode_FromString("W"));
189
189
if((listItem.mode & PCILIB_ACCESS_RW ) == PCILIB_REGISTER_RW)
190
pcilib_pylist_append(modes, PyString_FromString("RW"));
190
pcilib_pylist_append(modes, PyUnicode_FromString("RW"));
191
191
if((listItem.mode & PCILIB_REGISTER_INCONSISTENT) == PCILIB_REGISTER_INCONSISTENT)
192
pcilib_pylist_append(modes, PyString_FromString("NO_CHK"));
192
pcilib_pylist_append(modes, PyUnicode_FromString("NO_CHK"));
194
194
pcilib_pydict_set_item(pylistItem,
195
PyString_FromString("mode"),
195
PyUnicode_FromString("mode"),
198
198
//serialize flags
199
199
PyObject* flags = PyList_New(0);
201
201
if((listItem.flags & PCILIB_LIST_FLAG_CHILDS ) == PCILIB_LIST_FLAG_CHILDS)
202
pcilib_pylist_append(flags, PyString_FromString("childs"));
202
pcilib_pylist_append(flags, PyUnicode_FromString("childs"));
204
204
pcilib_pydict_set_item(pylistItem,
205
PyString_FromString("flags"),
205
PyUnicode_FromString("flags"),
208
208
if(listItem.unit)
209
209
pcilib_pydict_set_item(pylistItem,
210
PyString_FromString("unit"),
211
PyString_FromString(listItem.unit));
210
PyUnicode_FromString("unit"),
211
PyUnicode_FromString(listItem.unit));
213
213
return pylistItem;
220
220
if(listItem.name)
221
221
pcilib_pydict_set_item(pylistItem,
222
PyString_FromString("name"),
223
PyString_FromString(listItem.name));
222
PyUnicode_FromString("name"),
223
PyUnicode_FromString(listItem.name));
225
225
if(listItem.description)
226
226
pcilib_pydict_set_item(pylistItem,
227
PyString_FromString("description"),
228
PyString_FromString(listItem.description));
227
PyUnicode_FromString("description"),
228
PyUnicode_FromString(listItem.description));
230
230
if(listItem.bank)
231
231
pcilib_pydict_set_item(pylistItem,
232
PyString_FromString("bank"),
233
PyString_FromString(listItem.bank));
232
PyUnicode_FromString("bank"),
233
PyUnicode_FromString(listItem.bank));
236
236
//serialize modes
237
237
PyObject* modes = PyList_New(0);
239
239
if((listItem.mode & PCILIB_REGISTER_R) == PCILIB_REGISTER_R)
240
pcilib_pylist_append(modes, PyString_FromString("R"));
240
pcilib_pylist_append(modes, PyUnicode_FromString("R"));
241
241
if((listItem.mode & PCILIB_REGISTER_W) == PCILIB_REGISTER_W)
242
pcilib_pylist_append(modes, PyString_FromString("W"));
242
pcilib_pylist_append(modes, PyUnicode_FromString("W"));
243
243
if((listItem.mode & PCILIB_REGISTER_RW) == PCILIB_REGISTER_RW)
244
pcilib_pylist_append(modes, PyString_FromString("RW"));
244
pcilib_pylist_append(modes, PyUnicode_FromString("RW"));
245
245
if((listItem.mode & PCILIB_REGISTER_W1C) == PCILIB_REGISTER_W1C)
246
pcilib_pylist_append(modes, PyString_FromString("W1C"));
246
pcilib_pylist_append(modes, PyUnicode_FromString("W1C"));
247
247
if((listItem.mode & PCILIB_REGISTER_RW1C) == PCILIB_REGISTER_RW1C)
248
pcilib_pylist_append(modes, PyString_FromString("RW1C"));
248
pcilib_pylist_append(modes, PyUnicode_FromString("RW1C"));
249
249
if((listItem.mode & PCILIB_REGISTER_W1I) == PCILIB_REGISTER_W1I)
250
pcilib_pylist_append(modes, PyString_FromString("W1I"));
250
pcilib_pylist_append(modes, PyUnicode_FromString("W1I"));
251
251
if((listItem.mode & PCILIB_REGISTER_RW1I) == PCILIB_REGISTER_RW1I)
252
pcilib_pylist_append(modes, PyString_FromString("RW1I"));
252
pcilib_pylist_append(modes, PyUnicode_FromString("RW1I"));
253
253
if((listItem.mode & PCILIB_REGISTER_INCONSISTENT) == PCILIB_REGISTER_INCONSISTENT)
254
pcilib_pylist_append(modes, PyString_FromString("NO_CHK"));
254
pcilib_pylist_append(modes, PyUnicode_FromString("NO_CHK"));
256
256
pcilib_pydict_set_item(pylistItem,
257
PyString_FromString("mode"),
257
PyUnicode_FromString("mode"),
260
260
pcilib_value_t defval = {0};
273
273
add_pcilib_value_to_dict(ctx, range, &minval, "min");
274
274
add_pcilib_value_to_dict(ctx, range, &maxval, "max");
275
275
pcilib_pydict_set_item(pylistItem,
276
PyString_FromString("range"),
276
PyUnicode_FromString("range"),
302
302
if(listItem.values[j].name)
303
303
pcilib_pydict_set_item(valuesItem,
304
PyString_FromString("name"),
305
PyString_FromString(listItem.values[j].name));
304
PyUnicode_FromString("name"),
305
PyUnicode_FromString(listItem.values[j].name));
306
306
if(listItem.values[j].description)
308
308
pcilib_pydict_set_item(valuesItem,
309
PyString_FromString("description"),
310
PyString_FromString(listItem.values[j].description));
309
PyUnicode_FromString("description"),
310
PyUnicode_FromString(listItem.values[j].description));
313
313
pcilib_pylist_append(values, valuesItem);
316
316
pcilib_pydict_set_item(pylistItem,
317
PyString_FromString("values"),
317
PyUnicode_FromString("values"),
331
331
set_python_exception("Failed pcilib_open(%s, %s)", fpga_device, model);
335
self = (Pcipywrap *) malloc(sizeof(Pcipywrap));
335
self = (pcipywrap *) malloc(sizeof(pcipywrap));
336
336
self->shared = 0;
341
Pcipywrap *create_Pcipywrap(PyObject* ctx)
341
pcipywrap *create_pcipywrap(PyObject* ctx)
343
if(!PyCObject_Check(ctx))
343
if(!PyCapsule_CheckExact(ctx))
345
set_python_exception("Incorrect ctx type. Only PyCObject is allowed");
345
set_python_exception("Incorrect ctx type. Only PyCapsule is allowed");
350
self = (Pcipywrap *) malloc(sizeof(Pcipywrap));
350
self = (pcipywrap *) malloc(sizeof(pcipywrap));
351
351
self->shared = 1;
352
self->ctx = PyCObject_AsVoidPtr(ctx);
352
self->ctx = PyCapsule_GetPointer(ctx, PyCapsule_GetName(ctx));
356
void delete_Pcipywrap(Pcipywrap *self) {
357
void delete_pcipywrap(pcipywrap *self) {
357
358
if(!self->shared)
358
359
pcilib_close(self->ctx);
363
PyObject* Pcipywrap_read_register(Pcipywrap *self, const char *regname, const char *bank)
364
PyObject* pcipywrap_read_register(pcipywrap *self, const char *regname, const char *bank)
365
366
pcilib_value_t val = {0};
366
367
pcilib_register_value_t reg_value;
384
385
return pcilib_get_value_as_pyobject(self->ctx, &val, NULL);
387
PyObject* Pcipywrap_write_register(Pcipywrap *self, PyObject* val, const char *regname, const char *bank)
388
PyObject* pcipywrap_write_register(pcipywrap *self, PyObject* val, const char *regname, const char *bank)
389
390
pcilib_value_t val_internal = {0};
390
391
pcilib_register_value_t reg_value;
456
return PyInt_FromLong((long)1);
457
return PyLong_FromLong((long)1);
459
PyObject* Pcipywrap_get_registers_list(Pcipywrap *self, const char *bank)
460
PyObject* pcipywrap_get_registers_list(pcipywrap *self, const char *bank)
461
pcilib_register_info_t *list = pcilib_get_register_list(self->ctx, bank, PCILIB_LIST_FLAGS_DEFAULT);
462
PyObject* pyList = PyList_New(0);
463
for(int i = 0; i < ((pcilib_t*)self->ctx)->num_reg; i++)
465
//serialize item attributes
466
PyObject* pylistItem = pcilib_convert_register_info_to_pyobject(self->ctx, list[i]);
467
pcilib_pylist_append(pyList, pylistItem);
468
//Py_DECREF(pylistItem);
470
pcilib_free_register_info(self->ctx, list);
462
pcilib_register_info_t *list = pcilib_get_register_list(self->ctx, bank, PCILIB_LIST_FLAGS_DEFAULT);
465
set_python_exception("pcilib_get_register_list return NULL");
469
PyObject* pyList = PyList_New(0);
470
for(int i = 0; list[i].name; i++)
472
//serialize item attributes
473
PyObject* pylistItem = pcilib_convert_register_info_to_pyobject(self->ctx, list[i]);
474
pcilib_pylist_append(pyList, pylistItem);
476
pcilib_free_register_info(self->ctx, list);
474
PyObject* Pcipywrap_get_register_info(Pcipywrap *self, const char* reg,const char *bank)
480
PyObject* pcipywrap_get_register_info(pcipywrap *self, const char* reg,const char *bank)
476
482
pcilib_register_info_t *info = pcilib_get_register_info(self->ctx, bank, reg, PCILIB_LIST_FLAGS_DEFAULT);
540
return PyInt_FromLong((long)1);
546
return PyLong_FromLong((long)1);
543
void Pcipywrap_unlock_global(Pcipywrap *self)
549
void pcipywrap_unlock_global(pcipywrap *self)
545
551
pcilib_unlock_global(self->ctx);
549
PyObject* Pcipywrap_lock(Pcipywrap *self, const char *lock_id)
555
PyObject* pcipywrap_lock(pcipywrap *self, const char *lock_id)
551
557
pcilib_lock_t* lock = pcilib_get_lock(self->ctx,
552
PCILIB_LOCK_FLAGS_DEFAULT,
558
PCILIB_LOCK_FLAG_PERSISTENT,
568
return PyInt_FromLong((long)1);
574
return PyLong_FromLong((long)1);
571
PyObject* Pcipywrap_try_lock(Pcipywrap *self, const char *lock_id)
577
PyObject* pcipywrap_try_lock(pcipywrap *self, const char *lock_id)
573
579
pcilib_lock_t* lock = pcilib_get_lock(self->ctx,
574
PCILIB_LOCK_FLAGS_DEFAULT,
580
PCILIB_LOCK_FLAG_PERSISTENT,
589
return PyInt_FromLong((long)1);
595
return PyLong_FromLong((long)1);
592
PyObject* Pcipywrap_unlock(Pcipywrap *self, const char *lock_id)
598
PyObject* pcipywrap_unlock(pcipywrap *self, const char *lock_id)
594
600
pcilib_lock_t* lock = pcilib_get_lock(self->ctx,
595
PCILIB_LOCK_FLAGS_DEFAULT,
601
PCILIB_LOCK_FLAG_PERSISTENT,