int init_interfaces(void *ctx) { int i; int has_ctrl=0; if (oesr_itf_nofinputs(ctx) > nof_input_itf) { /* try to create control interface */ ctrl_in = oesr_itf_create(ctx, 0, ITF_READ, CTRL_IN_BUFFER); if (ctrl_in == NULL) { if (oesr_error_code(ctx) == OESR_ERROR_NOTREADY) { return 0; } } else { modinfo("Created control port\n"); has_ctrl=1; } } moddebug("configuring %d inputs and %d outputs %d %d %d\n",nof_input_itf,nof_output_itf,inputs[0],input_max_samples,input_sample_sz); for (i=0;i<nof_input_itf;i++) { if (inputs[i] == NULL) { inputs[i] = oesr_itf_create(ctx, has_ctrl+i, ITF_READ, input_max_samples*input_sample_sz); if (inputs[i] == NULL) { if (oesr_error_code(ctx) == OESR_ERROR_NOTREADY) { return 0; } else { oesr_perror("creating input interface\n"); return -1; } } else { moddebug("input_%d=0x%x\n",i,inputs[i]); } } } for (i=0;i<nof_output_itf;i++) { if (outputs[i] == NULL) { outputs[i] = oesr_itf_create(ctx, i, ITF_WRITE, output_max_samples*output_sample_sz); if (outputs[i] == NULL) { if (oesr_error_code(ctx) == OESR_ERROR_NOTFOUND) { modinfo_msg("Caution output port %d not connected,\n",i); } else { moderror_msg("Error creating output port %d\n",i); oesr_perror("oesr_itf_create\n"); return -1; } } else { moddebug("output_%d=0x%x\n",i,outputs[i]); } } } return 1; }
int param_get(pmid_t id, void *ptr, int max_size, param_type_t *type) { if (type) { *type = (param_type_t) oesr_var_param_type(ctx,(var_t) id); } int n = oesr_var_param_get_value(ctx, (var_t) id, ptr, max_size); if (n == -1) { /* keep quiet in this case */ if (oesr_error_code(ctx) != OESR_ERROR_INVAL) { oesr_perror("oesr_var_param_value\n"); } } return n; }
int init_ctrl_input(void *ctx) { ctrl_in = oesr_itf_create(ctx, 0, ITF_READ, sizeof(struct ctrl_in_pkt)); if (ctrl_in == NULL) { if (oesr_error_code(ctx) == OESR_ERROR_NOTREADY) { return 0; } else { return -1; } } else { moddebug("Created control port\n",0); } return 1; }
int init_remote_itf(void *ctx, int nof_itf) { int i,j; int port,delay; char tmp[64]; for (i=0;i<nof_itf;i++) { port = outputs[i].module_idx-oesr_module_id(ctx)+nof_output_data_itf; if (port < 0) { moderror_msg("Can't sent to a module back in the chain (module_idx=%d)\n",outputs[i].module_idx); return -1; } /* check if a parameter sets a different delay */ for (j=0;j<nof_remote_variables;j++) { if (remote_variables[j].module_idx == outputs[i].module_idx) { break; } } if (j < nof_remote_variables) { snprintf(tmp,64,"delay_%s",remote_params_db[j].module_name); if (!param_get_int_name(tmp,&delay)) { moddebug("Setting a delay of %d slots to port %d, module %s\n",delay,port, remote_params_db[j].module_name); if (oesr_itf_delay_set(ctx,port,ITF_WRITE,delay)) { moderror_msg("Setting delay to port %d\n",port); return -1; } } } /* now create the variable */ outputs[i].itf = oesr_itf_create(ctx, port, ITF_WRITE, sizeof(struct ctrl_in_pkt)); if (outputs[i].itf == NULL) { if (oesr_error_code(ctx) == OESR_ERROR_NOTFOUND) { modinfo_msg("Caution output port %d not connected,\n",i); } else { moderror_msg("Error creating output port %d\n",i); oesr_perror("oesr_itf_create\n"); return -1; } } } return 0; }