/*----------------------------------------------------------------------------------*/ int rp_osc_worker_init(rp_app_params_t *params, int params_len, rp_calib_params_t *calib_params) { int ret_val; rp_osc_ctrl = rp_osc_idle_state; rp_osc_params_dirty = 0; rp_osc_params_fpga_update = 0; rp_copy_params(params, (rp_app_params_t **)&rp_osc_params); rp_cleanup_signals(&rp_osc_signals); if(rp_create_signals(&rp_osc_signals) < 0) return -1; rp_cleanup_signals(&rp_tmp_signals); if(rp_create_signals(&rp_tmp_signals) < 0) { rp_cleanup_signals(&rp_osc_signals); return -1; } if(osc_fpga_init() < 0) { rp_cleanup_signals(&rp_osc_signals); rp_cleanup_signals(&rp_tmp_signals); return -1; } rp_calib_params = calib_params; osc_fpga_get_sig_ptr(&rp_fpga_cha_signal, &rp_fpga_chb_signal); rp_osc_thread_handler = (pthread_t *)malloc(sizeof(pthread_t)); if(rp_osc_thread_handler == NULL) { rp_cleanup_signals(&rp_osc_signals); rp_cleanup_signals(&rp_tmp_signals); return -1; } ret_val = pthread_create(rp_osc_thread_handler, NULL, rp_osc_worker_thread, NULL); if(ret_val != 0) { osc_fpga_exit(); rp_cleanup_signals(&rp_osc_signals); rp_cleanup_signals(&rp_tmp_signals); fprintf(stderr, "pthread_create() failed: %s\n", strerror(errno)); return -1; } return 0; }
/** @brief Initializes worker module * * This function starts new worker thread, initializes internal structures * (signals, state, ...) and initializes FPGA module. * * @retval -1 Failure * @retval 0 Success */ int rp_osc_worker_init(rp_calib_params_t *calib_params)//ERG { int ret_val; rp_osc_ctrl = rp_osc_idle_state; rp_osc_params_dirty = 0; rp_osc_params_fpga_update = 0; wrkr_rp_calib_params = calib_params;//ERG /* Create output signal structure */ rp_cleanup_signals(&rp_osc_signals); if(rp_create_signals(&rp_osc_signals) < 0) return -1; /* Create working signal structure */ rp_cleanup_signals(&rp_tmp_signals); if(rp_create_signals(&rp_tmp_signals) < 0) { rp_cleanup_signals(&rp_osc_signals); return -1; } /* FPGA module initialization */ if(osc_fpga_init() < 0) { rp_cleanup_signals(&rp_osc_signals); rp_cleanup_signals(&rp_tmp_signals); return -1; } /* Initializing the pointers for the FPGA input signal buffers */ osc_fpga_get_sig_ptr(&rp_fpga_cha_signal, &rp_fpga_chb_signal); /* Creating worker thread */ ret_val = pthread_create(&rp_osc_thread_handler, NULL, rp_osc_worker_thread, NULL); if(ret_val != 0) { osc_fpga_exit(); rp_cleanup_signals(&rp_osc_signals); rp_cleanup_signals(&rp_tmp_signals); fprintf(stderr, "pthread_create() failed: %s\n", strerror(errno)); return -1; } return 0; }
/*----------------------------------------------------------------------------------*/ int rp_osc_worker_init(rp_app_params_t *params, int params_len, rp_calib_params_t *calib_params) { int ret_val; rp_osc_ctrl = rp_osc_idle_state; rp_osc_params_dirty = 0; rp_osc_params_fpga_update = 0; /* First copy of main params from main.c */ rp_copy_params(params, (rp_app_params_t **)&rp_osc_params); /* First cleans up the params, case mem is already allocated */ rp_cleanup_signals(&rp_osc_signals); /* Creates a double dimension vector with 3 values - s[i], where i is from 0 - 2 */ if(rp_create_signals(&rp_osc_signals) < 0) return -1; /* Same for tmp_signals */ rp_cleanup_signals(&rp_tmp_signals); if(rp_create_signals(&rp_tmp_signals) < 0) { rp_cleanup_signals(&rp_osc_signals); return -1; } /* cleans up FPGA memory buffer, if -1, we stop. */ if(osc_fpga_init() < 0) { rp_cleanup_signals(&rp_osc_signals); rp_cleanup_signals(&rp_tmp_signals); return -1; } /* Calibration parameters */ rp_calib_params = calib_params; /* Signal pointer directly to memory for channel A and B */ osc_fpga_get_sig_ptr(&rp_fpga_cha_signal, &rp_fpga_chb_signal); /* Thread creation */ rp_osc_thread_handler = (pthread_t *)malloc(sizeof(pthread_t)); if(rp_osc_thread_handler == NULL) { rp_cleanup_signals(&rp_osc_signals); rp_cleanup_signals(&rp_tmp_signals); return -1; } ret_val = pthread_create(rp_osc_thread_handler, NULL, rp_osc_worker_thread, NULL); /* If thread creation failed */ if(ret_val != 0) { osc_fpga_exit(); rp_cleanup_signals(&rp_osc_signals); rp_cleanup_signals(&rp_tmp_signals); fprintf(stderr, "pthread_create() failed: %s\n", strerror(errno)); return -1; } return 0; }