void initialize_car(struct car* c) { read_car_state(c); (c->motor).left = 0; (c->motor).right = 0; c->speed = 0; c->direction = 0; c->state = STATE_STANDBY; c->laps = 0; c->lap_timer = LAP_DELAY; c->track_direction = DIRECTION_UNKNOWN; c->temperature = 0; c->magnet = 0; recorder_init(&c->recorder); write_car_state(c); }
int main(int argc, char ** argv) { int ret = EXIT_FAILURE; bg_mediaconnector_t conn; gavl_time_t delay_time = GAVL_TIME_SCALE / 100; gavl_metadata_t m; gavftools_block_sigpipe(); bg_mediaconnector_init(&conn); gavftools_init(); /* Create plugin regsitry */ /* Initialize streams */ recorder_init(&rec); bg_cmdline_arg_set_parameters(global_options, "-aud", rec.as.parameters); bg_cmdline_arg_set_parameters(global_options, "-vid", rec.vs.parameters); gavftools_set_cmdline_parameters(global_options); /* Handle commandline options */ bg_cmdline_init(&app_data); bg_cmdline_parse(global_options, &argc, &argv, NULL); out_plug = gavftools_create_out_plug(); /* Open plugins */ if(!recorder_open(&rec, &conn)) { bg_log(BG_LOG_ERROR, LOG_DOMAIN, "Opening recorder plugins failed"); goto the_end; } gavl_metadata_init(&m); gavftools_set_output_metadata(&m); /* Open output plug */ if(!bg_plug_open_location(out_plug, gavftools_out_file, (const gavl_metadata_t *)0, (const gavl_chapter_list_t*)0)) goto the_end; gavl_metadata_free(&m); /* Initialize output plug */ if(!bg_plug_setup_writer(out_plug, &conn)) { bg_log(BG_LOG_ERROR, LOG_DOMAIN, "Setting up plug writer failed"); goto the_end; } /* Initialize threads */ bg_mediaconnector_start(&conn); bg_mediaconnector_create_threads(&conn, 0); bg_mediaconnector_threads_init_separate(&conn); bg_mediaconnector_threads_start(&conn); /* Main loop */ while(1) { if(gavftools_stop() || bg_mediaconnector_done(&conn) || bg_plug_got_error(out_plug)) break; gavl_time_delay(&delay_time); } bg_mediaconnector_threads_stop(&conn); /* Cleanup */ ret = EXIT_SUCCESS; the_end: bg_log(BG_LOG_INFO, LOG_DOMAIN, "Cleaning up"); bg_mediaconnector_free(&conn); if(out_plug) bg_plug_destroy(out_plug); recorder_cleanup(&rec); gavftools_cleanup(); if(audio_section) bg_cfg_section_destroy(audio_section); if(video_section) bg_cfg_section_destroy(video_section); return ret; }
void sim_start(int argc, char** argv) { int c; int index; uint8_t time_scale = DEFAULT_TIME_SCALE; while ((c = getopt_long (argc, argv, shortopts, opts, &index)) != -1) switch (c) { case 'q': verbose = 0; break; case 'g': trace_gcode = 1; break; case 'p': trace_pos = 1; break; case 'v': verbose += 1; break; case 't': time_scale = (uint8_t) atoi(optarg); break; case 'o': recorder_init(optarg ? optarg : "datalog.out"); break; default: sim_error("Unexpected result in getopt_long handler"); } // Record the command line arguments to the datalog, if active record_raw("# commandline: "); for (index = 0; index < argc; index++) { record_raw(argv[index]); record_raw(" ") ; } record_raw("\n"); // Store remaining arguments list for serial sim g_argc = argc - optind + 1; g_argv = argv + optind - 1; if (argc < 2) usage(argv[0]); // Initialize timer sim_timer_init(time_scale); // Record pin names in datalog #define NAME_PIN_AXES(x) \ add_trace_var(#x "_X" , TRACE_##x + 0); \ add_trace_var(#x "_Y" , TRACE_##x + 1); \ add_trace_var(#x "_Z" , TRACE_##x + 2); \ add_trace_var(#x "_E" , TRACE_##x + 3); NAME_PIN_AXES(POS); #define NAME_PIN(x) add_trace_var(#x , TRACE_PINS + x); NAME_PIN(X_STEP_PIN); NAME_PIN(X_DIR_PIN); NAME_PIN(X_MIN_PIN); NAME_PIN(X_ENABLE_PIN); NAME_PIN(Y_STEP_PIN); NAME_PIN(Y_DIR_PIN); NAME_PIN(Y_MIN_PIN); NAME_PIN(Y_ENABLE_PIN); NAME_PIN(Z_STEP_PIN); NAME_PIN(Z_DIR_PIN); NAME_PIN(Z_MIN_PIN); NAME_PIN(Z_ENABLE_PIN); NAME_PIN(E_STEP_PIN); NAME_PIN(E_DIR_PIN); NAME_PIN(E_ENABLE_PIN); NAME_PIN(STEPPER_ENABLE_PIN); }