diff options
Diffstat (limited to 'views/script.c')
-rw-r--r-- | views/script.c | 206 |
1 files changed, 0 insertions, 206 deletions
diff --git a/views/script.c b/views/script.c deleted file mode 100644 index 3d018e9..0000000 --- a/views/script.c +++ /dev/null @@ -1,206 +0,0 @@ -#define _PCILIB_VIEW_TRANSFORM_C - -#include <stdio.h> -#include <stdlib.h> - -#include "pci.h" -#include "pcipywrap.h" -#include "error.h" - -#include "model.h" -#include "script.h" - -static int pcilib_script_view_module_init(pcilib_t *ctx, pcilib_script_view_description_t *v) -{ - int err; - - //Initialize python script, if it has not initialized already. - if(!v->py_script_module) - { - if(!v->script_name) - { - pcilib_error("Invalid script name specified in XML property (NULL)"); - return PCILIB_ERROR_INVALID_DATA; - } - - //create path string to scripts - char* model_dir = getenv("PCILIB_MODEL_DIR"); - char* model_path = malloc(strlen(model_dir) + strlen(ctx->model) + 2); - if (!model_path) return PCILIB_ERROR_MEMORY; - sprintf(model_path, "%s/%s", model_dir, ctx->model); - - //set model path to python - PySys_SetPath(model_path); - free(model_path); - model_path = NULL; - - //create path string to pcipywrap library - char* app_dir = getenv("APP_PATH"); - char* pcipywrap_path; - if(app_dir) - { - pcipywrap_path = malloc(strlen(app_dir) + strlen("/pcilib")); - if (!pcipywrap_path) return PCILIB_ERROR_MEMORY; - sprintf(pcipywrap_path, "%s/%s", "/pcilib", ctx->model); - } - else - { - pcipywrap_path = malloc(strlen("./pcilib")); - if (!pcipywrap_path) return PCILIB_ERROR_MEMORY; - sprintf(pcipywrap_path, "%s", "./pcilib"); - - } - - //set pcipywrap library path to python - PyObject* path = PySys_GetObject("path"); - if(PyList_Append(path, PyString_FromString(pcipywrap_path)) == -1) - { - pcilib_error("Cant set pcipywrap library path to python."); - return PCILIB_ERROR_FAILED; - } - free(pcipywrap_path); - pcipywrap_path = NULL; - - - //extract module name from script name - char* py_module_name = strtok(v->script_name, "."); - - if(!py_module_name) - { - pcilib_error("Invalid script name specified in XML property (%s)." - " Seems like name doesnt contains extension", v->script_name); - return PCILIB_ERROR_INVALID_DATA; - } - - //import python script - v->py_script_module = PyImport_ImportModule(py_module_name); - - if(!v->py_script_module) - { - printf("Error in import python module: "); - PyErr_Print(); - return PCILIB_ERROR_INVALID_DATA; - } - } - - //Initializing pcipywrap module if script use it - PyObject* dict = PyModule_GetDict(v->py_script_module); - if(PyDict_Contains(dict, PyString_FromString("pcipywrap"))) - { - PyObject* pcipywrap_module = PyDict_GetItemString(dict, "pcipywrap"); - if(!pcipywrap_module) - { - pcilib_error("Cant extract pcipywrap module from script dictionary"); - return PCILIB_ERROR_FAILED; - } - - //setting pcilib_t instance - PyObject_CallMethodObjArgs(pcipywrap_module, - PyUnicode_FromString("__setPcilib"), - PyByteArray_FromStringAndSize((const char*)&ctx, sizeof(pcilib_t*)), - NULL); - } - - return 0; -} - -static int pcilib_script_view_read(pcilib_t *ctx, pcilib_view_context_t *view_ctx, pcilib_register_value_t regval, pcilib_value_t *val) { - - int err; - - const pcilib_model_description_t *model_info = pcilib_get_model_description(ctx); - pcilib_script_view_description_t *v = (pcilib_script_view_description_t*)(model_info->views[view_ctx->view]); - - err = pcilib_script_view_module_init(ctx, v); - if(err) - return err; - - PyObject *ret = PyObject_CallMethod(v->py_script_module, "read_from_register", "()"); - if (!ret) - { - printf("Python script error: "); - PyErr_Print(); - return PCILIB_ERROR_FAILED; - } - - err = pcilib_convert_pyobject_to_val(ctx, ret, val); - - if(err) - { - pcilib_error("Failed to convert python script return value to internal type: %i", err); - return err; - } - return 0; -} - -static int pcilib_script_view_write(pcilib_t *ctx, pcilib_view_context_t *view_ctx, pcilib_register_value_t *regval, pcilib_value_t *val) { - - int err; - - const pcilib_model_description_t *model_info = pcilib_get_model_description(ctx); - pcilib_script_view_description_t *v = (pcilib_script_view_description_t*)(model_info->views[view_ctx->view]); - - err = pcilib_script_view_module_init(ctx, v); - if(err) - return err; - - PyObject *input = pcilib_convert_val_to_pyobject(ctx, val, printf); - if(!input) - { - printf("Failed to convert input value to Python object"); - PyErr_Print(); - return PCILIB_ERROR_FAILED; - } - - PyObject *ret = PyObject_CallMethodObjArgs(v->py_script_module, - PyUnicode_FromString("write_to_register"), - input, - NULL); - if (!ret) - { - printf("Python script error: "); - PyErr_Print(); - return PCILIB_ERROR_FAILED; - } - - //convert output value back to pcilib_value_t - //no need because it wont be used later, and the script return could be none - /* - err = pcilib_convert_pyobject_to_val(ctx, ret, val); - if(err) - { - pcilib_error("failed to convert script write_to_register function return value to internal type: %i", err); - return err; - } - - uint64_t output = pcilib_get_value_as_register_value(ctx, val, &err); - if(err) - { - pcilib_error("failed to convert value to register value (%i)", err); - return err; - } - regval[0] = output; - */ - - return 0; -} - -void pcilib_script_view_free_description (pcilib_t *ctx, pcilib_view_description_t *view) -{ - pcilib_script_view_description_t *v = (pcilib_script_view_description_t*)(view); - - if(v->script_name) - { - free(v->script_name); - v->script_name = NULL; - } - - if(v->py_script_module) - { - PyObject_Free(v->py_script_module); - v->py_script_module = NULL; - } -} - -const pcilib_view_api_description_t pcilib_script_view_api = - { PCILIB_VERSION, sizeof(pcilib_script_view_description_t), NULL, NULL, pcilib_script_view_free_description, pcilib_script_view_read, pcilib_script_view_write}; |