44
* \brief Wraps for pcilib_open function.
45
* \param[in] fpga_device path to the device file [/dev/fpga0]
46
* \param[in] model specifies the model of hardware, autodetected if NULL is passed
47
* \return Pointer to pcilib_t, created by pcilib_open, serialized to bytearray; NULL with exeption text, if failed.
49
PyObject* createPcilibInstance(const char *fpga_device, const char *model)
52
pcilib_t* ctx = pcilib_open(fpga_device, model);
55
__setPyExeptionText("Failed pcilib_open(%s, %s)", fpga_device, model);
60
return PyByteArray_FromStringAndSize((const char*)&ctx, sizeof(pcilib_t*));
64
* \brief Closes current pciliv instance, if its open.
66
void closeCurrentPcilibInstance()
76
* \brief Returns current opened pcilib_t instatnce
77
* \return Pointer to pcilib_t, serialized to bytearray
79
PyObject* getCurrentPcilibInstance()
81
return PyByteArray_FromStringAndSize((const char*)&__ctx, sizeof(pcilib_t*));
56
85
* \brief Sets pcilib context to wraper.
57
86
* \param[in] addr Pointer to pcilib_t, serialized to bytearray
58
87
* \return 1, serialized to PyObject or NULL with exeption text, if failed.
60
PyObject* __setPcilib(PyObject* addr)
89
PyObject* setPcilib(PyObject* addr)
62
91
if(!PyByteArray_Check(addr))
64
__setPyExeptionText(PyExc_Exception, "Incorrect addr type. Only bytearray is allowed");
93
__setPyExeptionText("Incorrect addr type. Only bytearray is allowed");
68
97
//deserializing adress
289
321
return PyInt_FromLong((long)1);
324
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);
330
PyString_FromString(name),
334
PyString_FromString("defvalue"),
335
PyString_FromString("invalid"));
338
PyObject * pcilib_convert_property_info_to_pyobject(pcilib_property_info_t listItem)
340
PyObject* pylistItem = PyDict_New();
343
PyDict_SetItem(pylistItem,
344
PyString_FromString("name"),
345
PyString_FromString(listItem.name));
347
if(listItem.description)
348
PyDict_SetItem(pylistItem,
349
PyString_FromString("description"),
350
PyString_FromString(listItem.description));
353
PyDict_SetItem(pylistItem,
354
PyString_FromString("path"),
355
PyString_FromString(listItem.path));
358
const char* type = "invalid";
359
switch(listItem.type)
361
case PCILIB_TYPE_INVALID:
364
case PCILIB_TYPE_STRING:
367
case PCILIB_TYPE_DOUBLE:
370
case PCILIB_TYPE_LONG :
376
PyDict_SetItem(pylistItem,
377
PyString_FromString("type"),
378
PyString_FromString(type));
382
PyObject* modes = PyList_New(0);
384
if((listItem.mode & PCILIB_ACCESS_R ) == PCILIB_REGISTER_R)
385
PyList_Append(modes, PyString_FromString("R"));
386
if((listItem.mode & PCILIB_ACCESS_W ) == PCILIB_REGISTER_W)
387
PyList_Append(modes, PyString_FromString("W"));
388
if((listItem.mode & PCILIB_ACCESS_RW ) == PCILIB_REGISTER_RW)
389
PyList_Append(modes, PyString_FromString("RW"));
390
if((listItem.mode & PCILIB_REGISTER_NO_CHK) == PCILIB_REGISTER_NO_CHK)
391
PyList_Append(modes, PyString_FromString("NO_CHK"));
393
PyDict_SetItem(pylistItem,
394
PyString_FromString("mode"),
398
PyObject* flags = PyList_New(0);
400
if((listItem.flags & PCILIB_LIST_FLAG_CHILDS ) == PCILIB_LIST_FLAG_CHILDS)
401
PyList_Append(flags, PyString_FromString("childs"));
403
PyDict_SetItem(pylistItem,
404
PyString_FromString("flags"),
408
PyDict_SetItem(pylistItem,
409
PyString_FromString("unit"),
410
PyString_FromString(listItem.unit));
415
PyObject * pcilib_convert_register_info_to_pyobject(pcilib_register_info_t listItem)
417
PyObject* pylistItem = PyDict_New();
420
PyDict_SetItem(pylistItem,
421
PyString_FromString("name"),
422
PyString_FromString(listItem.name));
424
if(listItem.description)
425
PyDict_SetItem(pylistItem,
426
PyString_FromString("description"),
427
PyString_FromString(listItem.description));
430
PyDict_SetItem(pylistItem,
431
PyString_FromString("bank"),
432
PyString_FromString(listItem.bank));
435
PyObject* modes = PyList_New(0);
437
if((listItem.mode & PCILIB_REGISTER_R) == PCILIB_REGISTER_R)
438
PyList_Append(modes, PyString_FromString("R"));
439
if((listItem.mode & PCILIB_REGISTER_W) == PCILIB_REGISTER_W)
440
PyList_Append(modes, PyString_FromString("W"));
441
if((listItem.mode & PCILIB_REGISTER_RW) == PCILIB_REGISTER_RW)
442
PyList_Append(modes, PyString_FromString("RW"));
443
if((listItem.mode & PCILIB_REGISTER_W1C) == PCILIB_REGISTER_W1C)
444
PyList_Append(modes, PyString_FromString("W1C"));
445
if((listItem.mode & PCILIB_REGISTER_RW1C) == PCILIB_REGISTER_RW1C)
446
PyList_Append(modes, PyString_FromString("RW1C"));
447
if((listItem.mode & PCILIB_REGISTER_W1I) == PCILIB_REGISTER_W1I)
448
PyList_Append(modes, PyString_FromString("W1I"));
449
if((listItem.mode & PCILIB_REGISTER_RW1I) == PCILIB_REGISTER_RW1I)
450
PyList_Append(modes, PyString_FromString("RW1I"));
451
if((listItem.mode & PCILIB_REGISTER_NO_CHK) == PCILIB_REGISTER_NO_CHK)
452
PyList_Append(modes, PyString_FromString("NO_CHK"));
454
PyDict_SetItem(pylistItem,
455
PyString_FromString("mode"),
457
add_pcilib_value_to_dict(pylistItem, &listItem.defvalue, "defvalue");
461
PyObject* range = PyDict_New();
462
add_pcilib_value_to_dict(range, &(listItem.range->min), "min");
463
add_pcilib_value_to_dict(range, &(listItem.range->max), "max");
464
PyDict_SetItem(pylistItem,
465
PyString_FromString("range"),
471
PyObject* values = PyList_New(0);
473
for (int j = 0; listItem.values[j].name; j++)
475
PyObject* valuesItem = PyDict_New();
477
add_pcilib_value_to_dict(valuesItem, &(listItem.values[j].value), "value");
478
add_pcilib_value_to_dict(valuesItem, &(listItem.values[j].min), "min");
479
add_pcilib_value_to_dict(valuesItem, &(listItem.values[j].max), "max");
481
if(listItem.values[j].name)
482
PyDict_SetItem(valuesItem,
483
PyString_FromString("name"),
484
PyString_FromString(listItem.values[j].name));
486
if(listItem.values[j].description)
487
PyDict_SetItem(valuesItem,
488
PyString_FromString("name"),
489
PyString_FromString(listItem.values[j].description));
491
PyList_Append(values, valuesItem);
494
PyDict_SetItem(pylistItem,
495
PyString_FromString("values"),
502
PyObject* get_register_list(const char *bank)
506
__setPyExeptionText("pcilib_t handler not initialized");
510
pcilib_register_info_t *list = pcilib_get_register_list(__ctx, bank, PCILIB_LIST_FLAGS_DEFAULT);
512
PyObject* pyList = PyList_New(0);
513
for(int i = 0; i < __ctx->num_reg; i++)
515
//serialize item attributes
516
PyObject* pylistItem = pcilib_convert_register_info_to_pyobject(list[i]);
517
PyList_Append(pyList, pylistItem);
520
pcilib_free_register_info(__ctx, list);
525
PyObject* get_register_info(const char* reg,const char *bank)
529
__setPyExeptionText("pcilib_t handler not initialized");
533
pcilib_register_info_t *info = pcilib_get_register_info(__ctx, bank, reg, PCILIB_LIST_FLAGS_DEFAULT);
537
__setPyExeptionText("Failed pcilib_get_register_info");
541
PyObject* py_info = pcilib_convert_register_info_to_pyobject(info[0]);
543
pcilib_free_register_info(__ctx, info);
548
PyObject* get_property_info(const char* branch)
552
__setPyExeptionText("pcilib_t handler not initialized");
556
pcilib_property_info_t *list = pcilib_get_property_list(__ctx, branch, PCILIB_LIST_FLAGS_DEFAULT);
558
PyObject* pyList = PyList_New(0);
560
for(int i = 0; i < list[i].path; i++)
562
//serialize item attributes
563
PyObject* pylistItem = pcilib_convert_property_info_to_pyobject(list[i]);
564
PyList_Append(pyList, pylistItem);
567
pcilib_free_property_info(__ctx, list);