summaryrefslogtreecommitdiffstats
path: root/views/transform.c
diff options
context:
space:
mode:
Diffstat (limited to 'views/transform.c')
-rw-r--r--views/transform.c123
1 files changed, 56 insertions, 67 deletions
diff --git a/views/transform.c b/views/transform.c
index eb3572a..f2d4b4a 100644
--- a/views/transform.c
+++ b/views/transform.c
@@ -11,90 +11,79 @@
#include "py.h"
#include "error.h"
+static pcilib_view_context_t * pcilib_transform_view_init(pcilib_t *ctx, pcilib_view_t view) {
+ int err;
-static int pcilib_transform_view_read(pcilib_t *ctx, pcilib_view_context_t *view_ctx, pcilib_register_value_t regval, pcilib_value_t *val) {
+ pcilib_view_context_t *view_ctx;
const pcilib_model_description_t *model_info = pcilib_get_model_description(ctx);
- pcilib_transform_view_description_t *v = (pcilib_transform_view_description_t*)(model_info->views[view_ctx->view]);
+ pcilib_transform_view_description_t *v = (pcilib_transform_view_description_t*)(model_info->views[view]);
- int err;
+ if(v->script) {
+ pcilib_access_mode_t mode = 0;
+
+ err = pcilib_py_load_script(ctx, v->script);
+ if(err) {
+ pcilib_error("Error (%i), loading script %s", err, v->script);
+ return NULL;
+ }
+
+ err = pcilib_py_get_transform_script_properties(ctx, v->script, &mode);
+ if(err) {
+ pcilib_error("Error (%i) obtaining properties of transform script %s", err, v->script);
+ return NULL;
+ }
- err = pcilib_set_value_from_register_value(ctx, val, regval);
- if (err) return err;
+ if ((v->base.mode&PCILIB_REGISTER_RW) == 0)
+ v->base.mode |= PCILIB_REGISTER_RW;
+ v->base.mode &= (~PCILIB_REGISTER_RW)|mode;
- if(v->module)
- return err = pcilib_script_run_func(ctx, v->module,
- "read_from_register", val);
- else
- return pcilib_py_eval_string(ctx, v->read_from_reg, val);
+ if (!v->read_from_reg) v->read_from_reg = "read_from_register";
+ if (!v->write_to_reg) v->write_to_reg = "write_to_register";
+ }
+
+ view_ctx = (pcilib_view_context_t*)malloc(sizeof(pcilib_view_context_t));
+ if (view_ctx) memset(view_ctx, 0, sizeof(pcilib_view_context_t));
+
+ return view_ctx;
}
-static int pcilib_transform_view_write(pcilib_t *ctx, pcilib_view_context_t *view_ctx, pcilib_register_value_t *regval, const pcilib_value_t *val) {
-
+static int pcilib_transform_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_transform_view_description_t *v = (pcilib_transform_view_description_t*)(model_info->views[view_ctx->view]);
- int err = 0;
-
- pcilib_value_t val_copy = {0};
- err = pcilib_copy_value(ctx, &val_copy, val);
- if (err) return err;
+ err = pcilib_set_value_from_register_value(ctx, val, regval);
+ if (err) return err;
+ if (v->script)
+ err = pcilib_py_eval_func(ctx, v->script, v->read_from_reg, val);
+ else
+ err = pcilib_py_eval_string(ctx, v->read_from_reg, val);
- if(v->module)
- err = pcilib_script_run_func(ctx, v->module,
- "write_to_register", &val_copy);
- else
- err = pcilib_py_eval_string(ctx, v->write_to_reg, &val_copy);
-
- if (err) return err;
-
- *regval = pcilib_get_value_as_register_value(ctx, &val_copy, &err);
- return err;
+ return err;
}
-void pcilib_transform_view_free_description (pcilib_t *ctx, pcilib_view_description_t *view)
-{
- pcilib_transform_view_description_t *v = (pcilib_transform_view_description_t*)(view);
-
- if(v->module)
- pcilib_py_free_script(ctx, v->module);
-}
+static int pcilib_transform_view_write(pcilib_t *ctx, pcilib_view_context_t *view_ctx, pcilib_register_value_t *regval, const pcilib_value_t *val) {
+ int err = 0;
+ pcilib_value_t val_copy = {0};
-pcilib_view_context_t * pcilib_transform_view_init(pcilib_t *ctx, const pcilib_view_description_t *desc)
-{
- pcilib_transform_view_description_t *v_desc = (pcilib_transform_view_description_t*)desc;
-
- if(v_desc->module)
- {
- pcilib_access_mode_t mode = 0;
-
- int err = pcilib_py_init_script(ctx, v_desc->module);
- if(err)
- {
- pcilib_error("Failed init script module (%s) - error %i",
- v_desc->module, err);
- return NULL;
- }
- err = pcilib_py_get_transform_script_properties(ctx, v_desc->module,
- &mode);
- if(err)
- {
- pcilib_error("Failed get transform script properties (%s) - error %i",
- v_desc->module, err);
- return NULL;
- }
+ const pcilib_model_description_t *model_info = pcilib_get_model_description(ctx);
+ pcilib_transform_view_description_t *v = (pcilib_transform_view_description_t*)(model_info->views[view_ctx->view]);
+
+ err = pcilib_copy_value(ctx, &val_copy, val);
+ if (err) return err;
+
+ if (v->script)
+ err = pcilib_py_eval_func(ctx, v->script, v->write_to_reg, &val_copy);
+ else
+ err = pcilib_py_eval_string(ctx, v->write_to_reg, &val_copy);
- v_desc->base.mode |= PCILIB_REGISTER_RW;
- mode |= PCILIB_REGISTER_INCONSISTENT;
- v_desc->base.mode &= mode;
- }
+ if (err) return err;
- pcilib_view_context_t *view_ctx;
- view_ctx = (pcilib_view_context_t*)malloc(sizeof(pcilib_view_context_t));
- if (view_ctx) memset(view_ctx, 0, sizeof(pcilib_view_context_t));
-
- return view_ctx;
+ *regval = pcilib_get_value_as_register_value(ctx, &val_copy, &err);
+ return err;
}
const pcilib_view_api_description_t pcilib_transform_view_api =
- { PCILIB_VERSION, sizeof(pcilib_transform_view_description_t), pcilib_transform_view_init, NULL, pcilib_transform_view_free_description, pcilib_transform_view_read, pcilib_transform_view_write };
+ { PCILIB_VERSION, sizeof(pcilib_transform_view_description_t), pcilib_transform_view_init, NULL, NULL, pcilib_transform_view_read, pcilib_transform_view_write };