/alps/pcitool

To get this branch, use:
bzr branch http://darksoft.org/webbzr/alps/pcitool

« back to all changes in this revision

Viewing changes to pcilib/view.c

  • Committer: Suren A. Chilingaryan
  • Date: 2015-10-12 23:59:17 UTC
  • Revision ID: csa@suren.me-20151012235917-s5oi62kmu8khjl0t
Support writting register views

Show diffs side-by-side

added added

removed removed

Lines of Context:
135
135
}
136
136
 
137
137
    // We expect symmetric units. Therefore, we don't distringuish if we read or write
138
 
static int pcilib_detect_register_view_and_unit(pcilib_t *ctx, pcilib_register_t reg, const char *name, pcilib_view_context_t **ret_view, pcilib_unit_transform_t **ret_trans) {
 
138
static int pcilib_detect_register_view_and_unit(pcilib_t *ctx, pcilib_register_t reg, const char *name, int write_direction, pcilib_view_context_t **ret_view, pcilib_unit_transform_t **ret_trans) {
139
139
    pcilib_view_t i;
140
140
    pcilib_view_context_t *view_ctx;
141
141
    pcilib_view_description_t *view_desc;
160
160
 
161
161
        view_desc = ctx->views[view_ctx->view];
162
162
        if (view_desc->unit) {
163
 
            trans = pcilib_find_transform_by_unit_names(ctx, view_desc->unit, name);
 
163
            if (write_direction)
 
164
                trans = pcilib_find_transform_by_unit_names(ctx, name, view_desc->unit);
 
165
            else
 
166
                trans = pcilib_find_transform_by_unit_names(ctx, view_desc->unit, name);
164
167
            if (trans) {
165
168
                if (ret_trans) *ret_trans = trans;
166
169
                if (ret_view) *ret_view = pcilib_find_view_context_by_name(ctx, view_desc->name);
176
179
    int err;
177
180
    pcilib_view_context_t *view;
178
181
 
179
 
    err = pcilib_detect_register_view_and_unit(ctx, reg, name, &view, NULL);
 
182
    err = pcilib_detect_register_view_and_unit(ctx, reg, name, 0, &view, NULL);
180
183
    if (err) return NULL;
181
184
 
182
185
    return view;
214
217
            return PCILIB_ERROR_NOTFOUND;
215
218
        }
216
219
        
217
 
        // get value
218
 
        
219
220
        if (unit_name) view_ctx = pcilib_find_register_view_context_by_name(ctx, reg, view_name);
220
 
        else err = pcilib_detect_register_view_and_unit(ctx, reg, view_name, &view_ctx, &trans);
 
221
        else err = pcilib_detect_register_view_and_unit(ctx, reg, view_name, write_direction, &view_ctx, &trans);
221
222
 
222
223
        if ((err)||(!view_ctx)) {
223
224
            pcilib_error("Can't find the specified view %s for register %s", view_name, regname);
330
331
        if (err) return err;
331
332
    }
332
333
 
333
 
 
334
334
    err = v->api->write_to_reg(ctx, cfg.view, &regvalue, &val);
335
335
    if (err) {
336
336
        if (regname) 
340
340
        return err;
341
341
    }
342
342
 
343
 
 
344
343
    if (regname) {
345
344
        err = pcilib_write_register_by_id(ctx, cfg.reg, regvalue);
346
345
        if (err) {