static int daq2_handle_driver(const char *attrib, const char *value) { if (MATCH_ATTRIB("dds_mode")) { dac_data_manager_set_dds_mode(dac_tx_manager, DAC_DEVICE, 1, atoi(value)); } else if (!strncmp(attrib, "tx_channel_", sizeof("tx_channel_") - 1)) { int tx = atoi(attrib + sizeof("tx_channel_") - 1); dac_data_manager_set_tx_channel_state( dac_tx_manager, tx, !!atoi(value)); } else if (MATCH_ATTRIB("dac_buf_filename")) { if (dac_data_manager_get_dds_mode(dac_tx_manager, DAC_DEVICE, 1) == DDS_BUFFER) dac_data_manager_set_buffer_chooser_filename( dac_tx_manager, value); } else if (MATCH_ATTRIB("SYNC_RELOAD")) { if (can_update_widgets) { rx_update_values(); tx_update_values(); dac_data_manager_update_iio_widgets(dac_tx_manager); } } else { return -EINVAL; } return 0; }
static void load_profile(const char *ini_fn) { unsigned i; for (i = 0; i < ARRAY_SIZE(daq2_driver_attribs); i++) { char *value = read_token_from_ini(ini_fn, THIS_DRIVER, daq2_driver_attribs[i]); if (value) { daq2_handle_driver(daq2_driver_attribs[i], value); free(value); } } update_from_ini(ini_fn, THIS_DRIVER, dac, daq_sr_attribs, sr_attribs_array_size); update_from_ini(ini_fn, THIS_DRIVER, adc, daq_sr_attribs, sr_attribs_array_size); if (can_update_widgets) { rx_update_values(); tx_update_values(); dac_data_manager_update_iio_widgets(dac_tx_manager); } }
static GtkWidget * AD7303_init(GtkWidget *notebook, const char *ini_fn) { struct iio_channel *ch0, *ch1; GtkBuilder *builder; GtkWidget *AD7303_panel; GtkWidget *table; ctx = osc_create_context(); if (!ctx) return NULL; thread_ctx = osc_create_context(); dev = iio_context_find_device(thread_ctx, "ad7303"); builder = gtk_builder_new(); if (!gtk_builder_add_from_file(builder, "AD7303.glade", NULL)) gtk_builder_add_from_file(builder, OSC_GLADE_FILE_PATH "AD7303.glade", NULL); AD7303_panel = GTK_WIDGET(gtk_builder_get_object(builder, "tablePanelAD7303")); btn_sine = GTK_WIDGET(gtk_builder_get_object(builder, "togBtnSine")); btn_square = GTK_WIDGET(gtk_builder_get_object(builder, "togBtnSquare")); btn_triangle = GTK_WIDGET(gtk_builder_get_object(builder, "togBtnTriangle")); btn_sawtooth = GTK_WIDGET(gtk_builder_get_object(builder, "togBtnSawth")); scale_ampl = GTK_WIDGET(gtk_builder_get_object(builder, "vscaleAmpl")); scale_offset = GTK_WIDGET(gtk_builder_get_object(builder, "vscaleOff")); scale_freq = GTK_WIDGET(gtk_builder_get_object(builder, "vscaleFreq")); radio_single_val = GTK_WIDGET(gtk_builder_get_object(builder, "radioSingleVal")); radio_waveform = GTK_WIDGET(gtk_builder_get_object(builder, "radioWaveform")); preview_graph = GTK_WIDGET(gtk_builder_get_object(builder, "vboxDatabox")); ch0 = iio_device_find_channel(dev, "voltage0", true); ch1 = iio_device_find_channel(dev, "voltage1", true); /* Bind the IIO device files to the GUI widgets */ iio_spin_button_init_from_builder(&tx_widgets[num_tx++], dev, ch0, "raw", builder, "spinbuttonValueCh0", NULL); iio_spin_button_init_from_builder(&tx_widgets[num_tx++], dev, ch1, "raw", builder, "spinbuttonValueCh1", NULL); iio_toggle_button_init_from_builder(&tx_widgets[num_tx++], dev, ch0, "powerdown", builder, "checkbuttonPwrDwn0", 0); iio_toggle_button_init_from_builder(&tx_widgets[num_tx++], dev, ch1, "powerdown", builder, "checkbuttonPwrDwn1", 0); g_signal_connect(btn_sine, "toggled", G_CALLBACK(wave_param_changed), NULL); g_signal_connect(btn_square, "toggled", G_CALLBACK(wave_param_changed), NULL); g_signal_connect(btn_triangle, "toggled", G_CALLBACK(wave_param_changed), NULL); g_signal_connect(btn_sawtooth, "toggled", G_CALLBACK(wave_param_changed), NULL); g_signal_connect(scale_ampl, "value-changed", G_CALLBACK(wave_param_changed), NULL); g_signal_connect(scale_offset, "value-changed", G_CALLBACK(wave_param_changed), NULL); g_signal_connect(scale_freq, "value-changed", G_CALLBACK(wave_param_changed), NULL); g_builder_connect_signal(builder, "buttonSave", "clicked", G_CALLBACK(save_button_clicked), NULL); /* Create a GtkDatabox widget */ gtk_databox_create_box_with_scrollbars_and_rulers(&databox, &table, TRUE, TRUE, TRUE, TRUE); gtk_container_add(GTK_CONTAINER(preview_graph), table); gtk_widget_modify_bg(databox, GTK_STATE_NORMAL, &color_background); gtk_widget_set_size_request(table, 450, 300); gtk_widget_show_all(AD7303_panel); tx_update_values(); rx_update_values(); return AD7303_panel; }
static GtkWidget * daq2_init(GtkWidget *notebook, const char *ini_fn) { GtkBuilder *builder; GtkWidget *daq2_panel; GtkWidget *dds_container; GtkTextBuffer *adc_buff, *dac_buff; struct iio_channel *ch0, *ch1; ctx = osc_create_context(); if (!ctx) return NULL; dac = iio_context_find_device(ctx, DAC_DEVICE); adc = iio_context_find_device(ctx, ADC_DEVICE); dac_tx_manager = dac_data_manager_new(dac, NULL, ctx); if (!dac_tx_manager) { osc_destroy_context(ctx); return NULL; } builder = gtk_builder_new(); if (!gtk_builder_add_from_file(builder, "daq2.glade", NULL)) gtk_builder_add_from_file(builder, OSC_GLADE_FILE_PATH "daq2.glade", NULL); daq2_panel = GTK_WIDGET(gtk_builder_get_object(builder, "daq2_panel")); dds_container = GTK_WIDGET(gtk_builder_get_object(builder, "dds_transmit_block")); gtk_container_add(GTK_CONTAINER(dds_container), dac_data_manager_get_gui_container(dac_tx_manager)); gtk_widget_show_all(dds_container); if (ini_fn) load_profile(ini_fn); /* Bind the IIO device files to the GUI widgets */ char attr_val[256]; long long val; double tx_sampling_freq; /* Rx Widgets */ ch0 = iio_device_find_channel(adc, "voltage0", false); ch1 = iio_device_find_channel(adc, "voltage1", false); if (iio_channel_attr_read_longlong(ch0, "sampling_frequency", &val) == 0) snprintf(attr_val, sizeof(attr_val), "%.2f", (double)(val / 1000000ul)); else snprintf(attr_val, sizeof(attr_val), "%s", "error"); adc_buff = gtk_text_buffer_new(NULL); gtk_text_buffer_set_text(adc_buff, attr_val, -1); gtk_text_view_set_buffer(GTK_TEXT_VIEW(gtk_builder_get_object(builder, "text_view_adc_freq")), adc_buff); iio_combo_box_init_from_builder(&rx_widgets[num_rx++], adc, ch0, "test_mode", "test_mode_available", builder, "ch0_test_mode", NULL); iio_combo_box_init_from_builder(&rx_widgets[num_rx++], adc, ch1, "test_mode", "test_mode_available", builder, "ch1_test_mode", NULL); /* Tx Widgets */ ch0 = iio_device_find_channel(dac, "altvoltage0", true); if (iio_channel_attr_read_longlong(ch0, "sampling_frequency", &val) == 0) { tx_sampling_freq = (double)(val / 1000000ul); snprintf(attr_val, sizeof(attr_val), "%.2f", tx_sampling_freq); } else { snprintf(attr_val, sizeof(attr_val), "%s", "error"); tx_sampling_freq = 0; } dac_buff = gtk_text_buffer_new(NULL); gtk_text_buffer_set_text(dac_buff, attr_val, -1); gtk_text_view_set_buffer(GTK_TEXT_VIEW(gtk_builder_get_object(builder, "text_view_dac_freq")), dac_buff); make_widget_update_signal_based(rx_widgets, num_rx); make_widget_update_signal_based(tx_widgets, num_tx); dac_data_manager_freq_widgets_range_update(dac_tx_manager, tx_sampling_freq / 2); tx_update_values(); rx_update_values(); dac_data_manager_update_iio_widgets(dac_tx_manager); dac_data_manager_set_buffer_chooser_current_folder(dac_tx_manager, OSC_WAVEFORM_FILE_PATH); block_diagram_init(builder, 4, "AD9680_11752-001.svg", "AD9144_11675-002.svg", "AD9523_09278-020.svg", "AD-FMCDAQ2-EBZ.jpg"); can_update_widgets = true; return daq2_panel; }