diff options
| author | Vasilii Chernov <vchernov@inr.ru> | 2016-03-02 10:26:13 +0100 | 
|---|---|---|
| committer | Vasilii Chernov <vchernov@inr.ru> | 2016-03-02 10:26:13 +0100 | 
| commit | 8719b84a95805d109e21c20f05a0164315e1b38a (patch) | |
| tree | 2cfbb6ce8af7e9a4acd9e2e085bef8a212bc1701 /pywrap | |
| parent | 8eca0564a1dd6aac125086a244687b4813a1fd86 (diff) | |
| download | pcitool-8719b84a95805d109e21c20f05a0164315e1b38a.tar.gz pcitool-8719b84a95805d109e21c20f05a0164315e1b38a.tar.bz2 pcitool-8719b84a95805d109e21c20f05a0164315e1b38a.tar.xz pcitool-8719b84a95805d109e21c20f05a0164315e1b38a.zip | |
Move scripts handing code from py.c to Python wrap
Diffstat (limited to 'pywrap')
| -rw-r--r-- | pywrap/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | pywrap/pcilib.py | 38 | ||||
| -rw-r--r-- | pywrap/pcipywrap.c | 327 | ||||
| -rw-r--r-- | pywrap/pcipywrap.h | 79 | ||||
| -rw-r--r-- | pywrap/pcipywrap.i | 3 | ||||
| -rw-r--r-- | pywrap/test_pcilib.py (renamed from pywrap/test_pcipywrap.py) | 10 | 
6 files changed, 169 insertions, 292 deletions
| diff --git a/pywrap/CMakeLists.txt b/pywrap/CMakeLists.txt index 8f14e4f..4cc51da 100644 --- a/pywrap/CMakeLists.txt +++ b/pywrap/CMakeLists.txt @@ -19,7 +19,9 @@ swig_link_libraries(pcipywrap ${PYTHON_LIBRARIES} pcilib)  install(TARGETS ${SWIG_MODULE_pcipywrap_REAL_NAME} DESTINATION ${PYTHON_INSTALL_DIR})  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pcipywrap.py DESTINATION ${PYTHON_INSTALL_DIR}) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pcilib.py DESTINATION ${PYTHON_INSTALL_DIR})  if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) -    file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test_pcipywrap.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +   file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/pcilib.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +   file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test_pcilib.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR})  endif(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) diff --git a/pywrap/pcilib.py b/pywrap/pcilib.py new file mode 100644 index 0000000..7696524 --- /dev/null +++ b/pywrap/pcilib.py @@ -0,0 +1,38 @@ +from pcipywrap import * +import os +import sys + +class Pcilib(Pcipywrap): +   def __init__(s, *args): +      Pcipywrap.__init__(s, *args) +       +      #load scripts +      scripts_dir = os.environ.get('PCILIB_SCRIPTS_DIR') +      if scripts_dir: +         scripts_dir_abs = os.path.abspath(scripts_dir) +         if not scripts_dir_abs in sys.path: +            sys.path.append(scripts_dir_abs) +          +         s.__scipts = dict() +         for script in os.listdir(scripts_dir_abs): +            if script.endswith('.py'): +               script_module = os.path.splitext(script)[0] +               __import__(script_module) +               s.__scipts[script_module] = sys.modules[script_module] +                +                +   def get_scripts_list(s): +      scripts = [] +      for script in s.__scipts: +         curr_script = dict() +         curr_script['name'] = script +         if 'description' in dir(s.__scipts[script]): +            curr_script['description'] = s.__scipts[script].description +         scripts.append(curr_script) +      return scripts +       +       +   def run_script(s, name, input_value): +      if not name in s.__scipts: +         raise Exception('Script ' + name +' has not loaded') +      return s.__scipts[name].run(s, input_value) diff --git a/pywrap/pcipywrap.c b/pywrap/pcipywrap.c index 9113d40..0f6729e 100644 --- a/pywrap/pcipywrap.c +++ b/pywrap/pcipywrap.c @@ -1,9 +1,6 @@  #include "pcipywrap.h"  #include "locking.h" -#include <dirent.h> -#include <strings.h> -  char* full_log = NULL;  /*! @@ -104,6 +101,27 @@ void redirect_logs_to_exeption()                        pcilib_get_logger_context());  } +/*! + * \brief Wrap for PyDict_SetItem, with decrease reference counting after set. + */ +void pcilib_pydict_set_item(PyObject* dict, PyObject* name, PyObject* value) +{ +    PyDict_SetItem(dict, +                   name, +                   value); +    Py_XDECREF(name); +    Py_XDECREF(value); +} + +/*! + * \brief Wrap for PyList_Append, with decrease reference counting after append. + */ +void pcilib_pylist_append(PyObject* list, PyObject* value) +{ +    PyList_Append(list, value); +    Py_XDECREF(value); +} +  void add_pcilib_value_to_dict(pcilib_t* ctx, PyObject* dict, pcilib_value_t* val, const char *name)  {      PyObject *py_val = (PyObject*)pcilib_get_value_as_pyobject(ctx, val, NULL); @@ -197,198 +215,126 @@ PyObject * pcilib_convert_property_info_to_pyobject(pcilib_t* ctx, pcilib_proper  PyObject * pcilib_convert_register_info_to_pyobject(pcilib_t* ctx, pcilib_register_info_t listItem)  { -   PyObject* pylistItem = PyDict_New(); - -   if(listItem.name) -     pcilib_pydict_set_item(pylistItem, -                            PyString_FromString("name"), -                            PyString_FromString(listItem.name)); - -   if(listItem.description) -     pcilib_pydict_set_item(pylistItem, -                            PyString_FromString("description"), -                            PyString_FromString(listItem.description)); - -   if(listItem.bank) -     pcilib_pydict_set_item(pylistItem, -                            PyString_FromString("bank"), -                            PyString_FromString(listItem.bank)); - - -   //serialize modes -   PyObject* modes = PyList_New(0); - -   if((listItem.mode & PCILIB_REGISTER_R) == PCILIB_REGISTER_R) -     pcilib_pylist_append(modes, PyString_FromString("R")); -   if((listItem.mode & PCILIB_REGISTER_W) == PCILIB_REGISTER_W) -     pcilib_pylist_append(modes, PyString_FromString("W")); -   if((listItem.mode & PCILIB_REGISTER_RW) == PCILIB_REGISTER_RW) -     pcilib_pylist_append(modes, PyString_FromString("RW")); -   if((listItem.mode & PCILIB_REGISTER_W1C) == PCILIB_REGISTER_W1C) -     pcilib_pylist_append(modes, PyString_FromString("W1C")); -   if((listItem.mode & PCILIB_REGISTER_RW1C) == PCILIB_REGISTER_RW1C) -     pcilib_pylist_append(modes, PyString_FromString("RW1C")); -   if((listItem.mode & PCILIB_REGISTER_W1I) == PCILIB_REGISTER_W1I) -     pcilib_pylist_append(modes, PyString_FromString("W1I")); -   if((listItem.mode & PCILIB_REGISTER_RW1I) == PCILIB_REGISTER_RW1I) -     pcilib_pylist_append(modes, PyString_FromString("RW1I")); -   if((listItem.mode & PCILIB_REGISTER_INCONSISTENT) == PCILIB_REGISTER_INCONSISTENT) -     pcilib_pylist_append(modes, PyString_FromString("NO_CHK")); - -   pcilib_pydict_set_item(pylistItem, -                        PyString_FromString("mode"), -                        modes); - -   pcilib_value_t defval = {0}; -   pcilib_set_value_from_register_value(ctx, &defval, listItem.defvalue); -   add_pcilib_value_to_dict(ctx, pylistItem, &defval, "defvalue"); - -   if(listItem.range) -   { -     pcilib_value_t minval = {0}; -     pcilib_set_value_from_register_value(ctx, &minval, listItem.range->min); - -     pcilib_value_t maxval = {0}; -     pcilib_set_value_from_register_value(ctx, &maxval, listItem.range->max); - -     PyObject* range = PyDict_New(); -     add_pcilib_value_to_dict(ctx, range, &minval, "min"); -     add_pcilib_value_to_dict(ctx, range, &maxval, "max"); -     pcilib_pydict_set_item(pylistItem, -                            PyString_FromString("range"), -                            range); -   } +    PyObject* pylistItem = PyDict_New(); -   if(listItem.values) -   { +    if(listItem.name) +        pcilib_pydict_set_item(pylistItem, +                               PyString_FromString("name"), +                               PyString_FromString(listItem.name)); -     PyObject* values = PyList_New(0); +    if(listItem.description) +        pcilib_pydict_set_item(pylistItem, +                               PyString_FromString("description"), +                               PyString_FromString(listItem.description)); -     for (int j = 0; listItem.values[j].name; j++) -     { -         PyObject* valuesItem = PyDict_New(); +    if(listItem.bank) +        pcilib_pydict_set_item(pylistItem, +                               PyString_FromString("bank"), +                               PyString_FromString(listItem.bank)); -         pcilib_value_t val = {0}; -         pcilib_set_value_from_register_value(ctx, &val, listItem.values[j].value); -         pcilib_value_t min = {0}; -         pcilib_set_value_from_register_value(ctx, &min, listItem.values[j].min); +    //serialize modes +    PyObject* modes = PyList_New(0); -         pcilib_value_t max = {0}; -         pcilib_set_value_from_register_value(ctx, &max, listItem.values[j].max); +    if((listItem.mode & PCILIB_REGISTER_R) == PCILIB_REGISTER_R) +        pcilib_pylist_append(modes, PyString_FromString("R")); +    if((listItem.mode & PCILIB_REGISTER_W) == PCILIB_REGISTER_W) +        pcilib_pylist_append(modes, PyString_FromString("W")); +    if((listItem.mode & PCILIB_REGISTER_RW) == PCILIB_REGISTER_RW) +        pcilib_pylist_append(modes, PyString_FromString("RW")); +    if((listItem.mode & PCILIB_REGISTER_W1C) == PCILIB_REGISTER_W1C) +        pcilib_pylist_append(modes, PyString_FromString("W1C")); +    if((listItem.mode & PCILIB_REGISTER_RW1C) == PCILIB_REGISTER_RW1C) +        pcilib_pylist_append(modes, PyString_FromString("RW1C")); +    if((listItem.mode & PCILIB_REGISTER_W1I) == PCILIB_REGISTER_W1I) +        pcilib_pylist_append(modes, PyString_FromString("W1I")); +    if((listItem.mode & PCILIB_REGISTER_RW1I) == PCILIB_REGISTER_RW1I) +        pcilib_pylist_append(modes, PyString_FromString("RW1I")); +    if((listItem.mode & PCILIB_REGISTER_INCONSISTENT) == PCILIB_REGISTER_INCONSISTENT) +        pcilib_pylist_append(modes, PyString_FromString("NO_CHK")); -         add_pcilib_value_to_dict(ctx, valuesItem, &val, "value"); -         add_pcilib_value_to_dict(ctx, valuesItem, &min, "min"); -         add_pcilib_value_to_dict(ctx, valuesItem, &max, "max"); +    pcilib_pydict_set_item(pylistItem, +                           PyString_FromString("mode"), +                           modes); -         if(listItem.values[j].name) -             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("description"), -                                    PyString_FromString(listItem.values[j].description)); +    pcilib_value_t defval = {0}; +    pcilib_set_value_from_register_value(ctx, &defval, listItem.defvalue); +    add_pcilib_value_to_dict(ctx, pylistItem, &defval, "defvalue"); -         } -         pcilib_pylist_append(values, valuesItem); -     } +    if(listItem.range) +    { +        pcilib_value_t minval = {0}; +        pcilib_set_value_from_register_value(ctx, &minval, listItem.range->min); -     pcilib_pydict_set_item(pylistItem, -                            PyString_FromString("values"), -                            values); -   } +        pcilib_value_t maxval = {0}; +        pcilib_set_value_from_register_value(ctx, &maxval, listItem.range->max); -   return pylistItem; -} +        PyObject* range = PyDict_New(); +        add_pcilib_value_to_dict(ctx, range, &minval, "min"); +        add_pcilib_value_to_dict(ctx, range, &maxval, "max"); +        pcilib_pydict_set_item(pylistItem, +                               PyString_FromString("range"), +                               range); +    } + +    if(listItem.values) +    { + +        PyObject* values = PyList_New(0); + +        for (int j = 0; listItem.values[j].name; j++) +        { +            PyObject* valuesItem = PyDict_New(); + +            pcilib_value_t val = {0}; +            pcilib_set_value_from_register_value(ctx, &val, listItem.values[j].value); + +            pcilib_value_t min = {0}; +            pcilib_set_value_from_register_value(ctx, &min, listItem.values[j].min); + +            pcilib_value_t max = {0}; +            pcilib_set_value_from_register_value(ctx, &max, listItem.values[j].max); + +            add_pcilib_value_to_dict(ctx, valuesItem, &val, "value"); +            add_pcilib_value_to_dict(ctx, valuesItem, &min, "min"); +            add_pcilib_value_to_dict(ctx, valuesItem, &max, "max"); + +            if(listItem.values[j].name) +                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("description"), +                                       PyString_FromString(listItem.values[j].description)); + +            } +            pcilib_pylist_append(values, valuesItem); +        } + +        pcilib_pydict_set_item(pylistItem, +                               PyString_FromString("values"), +                               values); +    } + +    return pylistItem; +}  Pcipywrap *new_Pcipywrap(const char* fpga_device, const char* model)  {      //opening device      pcilib_t* ctx = pcilib_open(fpga_device, model); -    if(!ctx) { +    if(!ctx) +    {          set_python_exception("Failed pcilib_open(%s, %s)", fpga_device, model);          return NULL;      } -          Pcipywrap *self;      self = (Pcipywrap *) malloc(sizeof(Pcipywrap)); -    if(!self) { -        pcilib_close(ctx); -        return (Pcipywrap *)PyExc_MemoryError; -    }        self->shared = 0;      self->ctx = ctx; -    self->py = NULL; -    self->names = NULL; -    self->names_size = 0; - -     -    //processing pcilib scrips -    const char *scripts_dir = getenv("PCILIB_SCRIPTS_DIR"); -    if(scripts_dir) { -      int err = 0; - -      self->py = pcilib_init_py_ctx(ctx->py, &err); -      if(err) { -         delete_Pcipywrap(self); -         set_python_exception("Failed pcilib_py_s_clone (%i)", err); -         return NULL; -      } -       -      //add scripts directory to Python path -      err = pcilib_py_ctx_add_script_dir(self->py, scripts_dir); -      if(err) { -         delete_Pcipywrap(self); -         set_python_exception("Failed pcilib_py_add_dir (%i)", err); -         return NULL; -      } -       -      //load scripts in PCILIB_SCRIPTS_DIR -      self->names = malloc(++(self->names_size) * sizeof(char*)); -      self->names[self->names_size - 1] = NULL; -       -      DIR *dir; -      struct dirent *script_path; -      dir = opendir(scripts_dir); -      if (dir) { -         while ((script_path = readdir(dir)) != NULL) { - -            char *py = strrchr(script_path->d_name, '.'); -            if ((!py)||(strcasecmp(py, ".py"))) { -               continue; -            } - -            char *name = malloc(strlen(script_path->d_name)); -            if(!name) { -               delete_Pcipywrap(self); -               return (Pcipywrap *)PyExc_MemoryError; -            } -             -            strcpy(name, script_path->d_name); - -            err = pcilib_py_ctx_load_script(self->py, name); - -            if(err) { -               delete_Pcipywrap(self); -               set_python_exception("pcilib_py_ctx_load_script (%i)", err); -               return NULL; -            } -             -            self->names = realloc(self->names, ++(self->names_size)); -            if(!self->names) { -               delete_Pcipywrap(self); -               return (Pcipywrap *)PyExc_MemoryError; -            } -            self->names[self->names_size - 1] = NULL; -            self->names[self->names_size - 2] = name; -         } -         closedir(dir); -      } -    } -          return self;  } @@ -404,27 +350,14 @@ Pcipywrap *create_Pcipywrap(PyObject* ctx)      self = (Pcipywrap *) malloc(sizeof(Pcipywrap));      self->shared = 1;      self->ctx = PyCObject_AsVoidPtr(ctx); -    self->py = NULL; -    self->names = NULL; -    self->names_size = 0;      return self;  }  void delete_Pcipywrap(Pcipywrap *self) { -   if(!self->shared) -     pcilib_close(self->ctx); -      -   pcilib_free_py_ctx(self->py); - -   if(self->names) { -      for(int i = 0; self->names[i]; i++) -         free(self->names[i]); -      free(self->names); -      self->names = NULL; -      self->names_size = 0; -   } -     -   free(self); +    if(!self->shared) +        pcilib_close(self->ctx); + +    free(self);  }  PyObject* Pcipywrap_read_register(Pcipywrap *self, const char *regname, const char *bank) @@ -531,7 +464,7 @@ PyObject* Pcipywrap_get_registers_list(Pcipywrap *self, const char *bank)        set_python_exception("pcilib_get_register_list return NULL");        return NULL;     } -       +     PyObject* pyList = PyList_New(0);     for(int i = 0; list[i].name; i++)     { @@ -676,20 +609,4 @@ PyObject* Pcipywrap_unlock(Pcipywrap *self, const char *lock_id)      return PyInt_FromLong((long)1);  } -PyObject* Pcipywrap_get_scripts_list(Pcipywrap *self) -{ -   return pcilib_py_ctx_get_scripts_info(self->py); -} -PyObject* Pcipywrap_run_script(Pcipywrap *self, const char* script_name, PyObject* value) -{ -   int err = 0; -   PyObject* value_out = pcilib_py_ctx_eval_func(self->py, script_name, "run", value, &err); -    -   if(err) { -    set_python_exception("Failed pcilib_py_ctx_eval_func (%i)", err); -     return NULL; -   } -    -   return value_out; -} diff --git a/pywrap/pcipywrap.h b/pywrap/pcipywrap.h index fa7e4f4..0258f04 100644 --- a/pywrap/pcipywrap.h +++ b/pywrap/pcipywrap.h @@ -5,23 +5,11 @@  #include "error.h"  #include <Python.h> -#include "config.h" -#include "py.h" - -#include "pci.h" -#include "pcilib.h" - -  typedef struct { -    char** names; -    int names_size; -         void* ctx; -    struct pcilib_py_s *py;      int shared;  } Pcipywrap; -  /*!   * \brief Redirect pcilib standart log stream to exeption text.   * Logger will accumulate errors untill get message, starts with "#E". @@ -73,55 +61,18 @@ PyObject* Pcipywrap_get_property(Pcipywrap *self, const char *prop);   * \return 1, serialized to PyObject or NULL with exeption text, if failed.   */  PyObject* Pcipywrap_set_property(Pcipywrap *self, PyObject* val, const char *prop); - - -/*! - * \brief Wrap for pcilib_get_register_list function. - * \param bank [in]	bank - if set, only register within the specified bank will be returned - * \return list of registers, serialized to Python object - */  PyObject* Pcipywrap_get_registers_list(Pcipywrap *self, const char *bank); - -/*! - * \brief Returns the information about the specified register. Wrap for pcilib_get_register_info - * \param[in] reg the name of the register - * \param[in] bank indicates the bank where to look for register, autodetected if NULL is passed - * \return information about the specified register, serialized to Python object - */  PyObject* Pcipywrap_get_register_info(Pcipywrap *self, const char* reg,const char *bank); - -/*! - * \brief Returns the list of properties available under the specified path. Wrap for pcilib_get_property_list - * \param[in] branch path or NULL to return the top-level properties - * \return the list of the properties, serialized to Python object - */  PyObject* Pcipywrap_get_property_list(Pcipywrap *self, const char* branch); -/*! - * \brief Reads data from DMA until timeout is hit, a full DMA packet is read, or the specified number of bytes are read. - * Wrap for pcilib_read_dma. - * \param dma ID of DMA engine - * \param size specifies how many bytes should be read - * \return DMA data, serialierd to Python bytearray - * \warning This function has not been tested. - * \todo Test this fucntion - */  PyObject* Pcipywrap_read_dma(Pcipywrap *self, unsigned char dma, size_t size); -/*! - * \brief Wrap for pcilib_lock_global - * \return 1, serialized to PyObject or NULL with exeption text, if failed. - */  PyObject* Pcipywrap_lock_global(Pcipywrap *self); - -/*! - * \brief Wrap for pcilib_unlock_global - */  void Pcipywrap_unlock_global(Pcipywrap *self);  /*!   * \brief Wrap for pcilib_lock - * \param[in] lock_id lock identificator + * \param lock_id lock identificator   * \warning This function should be called only under Python standart threading lock.   * Otherwise it will stuck with more than 1 threads. See /xml/test/test_prop_mt.py   * for example. @@ -129,35 +80,7 @@ void Pcipywrap_unlock_global(Pcipywrap *self);   */  PyObject* Pcipywrap_lock(Pcipywrap *self, const char *lock_id); -/*! - * \brief This function will try to take a lock for the mutex pointed by - * lockfunction to acquire a lock, but that returns immediatly if the lock can't be - * acquired on first try. Wrap for pcilib_try_lock. - * \param[in] lock_id lock id - * \return 1, serialized to PyObject or NULL with exeption text, if failed. - */  PyObject* Pcipywrap_try_lock(Pcipywrap *self, const char *lock_id); - -/*! - * \brief This function unlocks the lock with specified id. Wrap for pcilib_unlock. - * \param[in] lock_id lock id - * \return 1, serialized to PyObject or NULL with exeption text, if failed. - */  PyObject* Pcipywrap_unlock(Pcipywrap *self, const char *lock_id); -/*! - * \brief Returns list with information about aviable scripts - * \return list with information about scripts, aviable in model - */ -PyObject* Pcipywrap_get_scripts_list(Pcipywrap *self); - -/*! - * \brief Runs script with specified name - * \param script_name script name (with extension); name could be found by - * Pcipywrap_get_scripts_list fucntion - * \param[in] value input value - * \return value returned by script - */ -PyObject* Pcipywrap_run_script(Pcipywrap *self, const char* script_name, PyObject* value); -  #endif /* PCIPYWRAP_H */ diff --git a/pywrap/pcipywrap.i b/pywrap/pcipywrap.i index 697820d..7749a67 100644 --- a/pywrap/pcipywrap.i +++ b/pywrap/pcipywrap.i @@ -29,8 +29,5 @@ typedef struct {  		PyObject* lock(const char *lock_id);  		PyObject* try_lock(const char *lock_id);  		PyObject* unlock(const char *lock_id); -       -      PyObject* get_scripts_list(); -      PyObject* run_script(const char* script_name, PyObject* value);  	}  } Pcipywrap; diff --git a/pywrap/test_pcipywrap.py b/pywrap/test_pcilib.py index 809a81a..69540ec 100644 --- a/pywrap/test_pcipywrap.py +++ b/pywrap/test_pcilib.py @@ -1,5 +1,5 @@  import threading -import pcipywrap +import pcilib  import random  import os  import json @@ -7,7 +7,7 @@ import requests  import time  from optparse import OptionParser, OptionGroup -class test_pcipywrap(): +class test_pcilib():     def __init__(self,                   device,                   model,  @@ -35,7 +35,7 @@ class test_pcipywrap():        #create pcilib_instance        self.device = device        self.model = model -      self.pcilib = pcipywrap.Pcipywrap(device, model) +      self.pcilib = pcilib.Pcilib(device, model)        self.num_threads = num_threads        self.write_percentage = write_percentage        self.register = register @@ -83,7 +83,7 @@ class test_pcipywrap():        try:           while(1):              val = random.randint(0, 8096) -            self.pcilib = pcipywrap.Pcipywrap(self.device, self.model) +            self.pcilib = pcilib.Pcilib(self.device, self.model)              print self.pcilib.get_property_list(self.branch)              print self.pcilib.get_register_info(self.register)              print self.pcilib.get_registers_list(); @@ -232,7 +232,7 @@ if __name__ == '__main__':     opts = parser.parse_args()[0]     #create pcilib test instance -   lib = test_pcipywrap(opts.device, +   lib = test_pcilib(opts.device,                          opts.model,                          num_threads = opts.threads,                          write_percentage = opts.write_percentage, | 
