int main(int argc, char *argv[]) { GError *error = NULL; GOptionContext *context; printf("lysdr starting\n"); // gtk3 remove threads, see how badly things go wrong //gdk_threads_init(); //gdk_threads_enter(); gtk_init(&argc, &argv); context = g_option_context_new ("-"); g_option_context_add_main_entries (context, opts, NULL); g_option_context_add_group (context, gtk_get_option_group (TRUE)); if (!g_option_context_parse (context, &argc, &argv, &error)) { g_print ("option parsing failed: %s\n", error->message); exit (1); } // create a new SDR, and set up the jack client sdr = sdr_new(fft_size); audio_start(sdr); // define a filter and configure a default shape sdr->filter = filter_fir_new(128, sdr->size); // hook up the jack ports and start the client fft_setup(sdr); audio_connect(sdr, connect_input, connect_output); sdr->centre_freq = centre_freq; gui_display(sdr); gtk_adjustment_set_value(GTK_ADJUSTMENT(sdr->tuning), 0); gtk_main(); audio_stop(sdr); filter_fir_destroy(sdr->filter); fft_teardown(sdr); sdr_destroy(sdr); //gdk_threads_leave(); }
/** * Fuehrt die Verarbeitung in der Hauptschleife nach dem * Verhaltenscode durch. Dazu gehoert beispielsweise, die * Bildschirmanzeige zu steuern und den Simulator ueber den aktuellen * Zustand zu informieren. */ void post_behaviour(void) { static uint16_t comm_ticks = 0; static uint8_t uart_gui = 0; #if defined MCU && defined DEBUG_TIMES static uint32_t log_ticks = 0; #endif #ifdef BOT_2_RPI_AVAILABLE bot_2_linux_listen(); #endif // BOT_2_RPI_AVAILABLE #ifdef CREATE_TRACEFILE_AVAILABLE trace_add_sensors(); #endif // CREATE_TRACEFILE_AVAILABLE /* jeweils alle 100 ms kommunizieren Bot, User und Sim */ if (timer_ms_passed_16(&comm_ticks, 50) #ifdef RC5_AVAILABLE || RC5_Code != 0 #endif ) { if (uart_gui == 0 #ifdef RC5_AVAILABLE || RC5_Code != 0 #endif ) { #ifdef DISPLAY_AVAILABLE /* GUI-Behandlung starten */ gui_display(display_screen); #endif // DISPLAY_AVAILABLE uart_gui = 1; // bot-2-sim ist erst beim naechsten Mal dran } else { #ifdef BOT_2_SIM_AVAILABLE /* Den Sim ueber Sensoren und Aktuatoren informieren */ bot_2_sim_inform(); // NOP auf PC #endif // BOT_2_SIM_AVAILABLE uart_gui = 0; // naechstes Mal wieder mit GUI anfangen } } #if defined MCU && defined DEBUG_TIMES if (timer_ms_passed_32(&log_ticks, 1000UL)) { uint8_t cpu, uart_in, uart_out; os_get_utilizations(&cpu, &uart_in, &uart_out); LOG_INFO("CPU=%3u%% UART_IN=%3u%% UART_OUT=%3u%%", cpu, uart_in, uart_out); } #endif // MCU && DEBUG_TIMES #ifdef PC #ifdef CREATE_TRACEFILE_AVAILABLE trace_add_actuators(); #endif // CREATE_TRACEFILE_AVAILABLE /* Sim oder ATmega ueber naechsten Schleifendurchlauf / Bot-Zyklus informieren */ #ifdef ARM_LINUX_BOARD set_bot_2_atmega(); #endif // ARM_LINUX_BOARD command_write(CMD_DONE, SUB_CMD_NORM, simultime, 0, 0); // flusht auch den Sendepuffer #ifdef DEBUG_TIMES /* Zum Debuggen der Zeiten */ GETTIMEOFDAY(&init_stop, NULL); int t2 = (init_stop.tv_sec - init_start.tv_sec) * 1000000 + init_stop.tv_usec - init_start.tv_usec; LOG_DEBUG("Done-Token (%d) out after %d usec", simultime, t2); #endif // DEBUG_TIMES #endif // PC #if defined OS_AVAILABLE /* Rest der Zeitscheibe (OS_TIME_SLICE ms) schlafen legen */ os_thread_yield(); #endif // OS_AVAILABLE }
void start_program (void) { //TODO: remove gui_display (-1); do_start_program (); }
static void *gui_process(void *d) { gtk_widgets_t *data = d; char *source = _filename_utf8(gtk_file_chooser_get_filename((GtkFileChooser *)data->open_dialog)); char *output = _filename_utf8(gtk_file_chooser_get_filename((GtkFileChooser *)data->save_dialog)); if (!source || !output) *_status = STATUS_FAILED_IO; uint8_t *key = NULL; size_t length = 0; switch (_key_source) { case KEY_SOURCE_FILE: { char *k = _filename_utf8(gtk_file_chooser_get_filename((GtkFileChooser *)data->key_dialog)); length = 0; key = (uint8_t *)strdup(k); g_free(k); } break; case KEY_SOURCE_PASSWORD: { const char *k = gtk_entry_get_text((GtkEntry *)data->password_entry); length = strlen(k); key = (uint8_t *)strndup(k, length); } break; } int c = gtk_combo_box_get_active((GtkComboBox *)data->crypto_combo); int h = gtk_combo_box_get_active((GtkComboBox *)data->hash_combo); int m = gtk_combo_box_get_active((GtkComboBox *)data->mode_combo); const char **ciphers = list_of_ciphers(); const char **hashes = list_of_hashes(); const char **modes = list_of_modes(); crypto_t *x; if (_encrypted) x = decrypt_init(source, output, ciphers[c - 1], hashes[h - 1], modes[m - 1], key, length, _raw); else x = encrypt_init(source, output, ciphers[c - 1], hashes[h - 1], modes[m - 1], key, length, _raw, _compress, _follow, _version); _status = &x->status; g_free(source); g_free(output); free(key); if (x->status == STATUS_INIT) execute(x); gui_display(x, data); if (x->status == STATUS_SUCCESS) { set_progress_bar((GtkProgressBar *)data->progress_bar_total, PERCENT); set_progress_bar((GtkProgressBar *)data->progress_bar_current, PERCENT); } set_status_bar((GtkStatusbar *)data->status_bar, status(x)); set_progress_button((GtkButton *)data->progress_cancel_button, false); set_progress_button((GtkButton *)data->progress_close_button, true); deinit(&x); return NULL; }