コード例 #1
0
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;
}
コード例 #2
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);
	}
}
コード例 #3
0
ファイル: AD7303.c プロジェクト: ismailhkose/iio-oscilloscope
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;
}
コード例 #4
0
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;
}