static void generateWavePeriod(void) { int waveType = 0; double waveFreq; int i; struct iio_device *trigger = iio_context_find_device(ctx, "hrtimer-1"); unsigned long triggerFreq; long long triggerFreqLL = 0; iio_device_attr_read_longlong(trigger, "frequency", &triggerFreqLL); triggerFreq = triggerFreqLL; /* Set the maximum frequency that user can select to 10% of the input generator frequency. */ if (triggerFreq >= 10) gtk_range_set_range(GTK_RANGE(scale_freq), 0.1, triggerFreq / 10); wave_ampl = gtk_range_get_value(GTK_RANGE(scale_ampl)); wave_offset = gtk_range_get_value(GTK_RANGE(scale_offset)); waveFreq = gtk_range_get_value(GTK_RANGE(scale_freq)); buffer_size = (unsigned int)round(triggerFreq / waveFreq); if (buffer_size < 2) buffer_size = 2; else if (buffer_size > 10000) buffer_size = 10000; current_sample = 0; soft_buffer_ch0 = g_renew(uint8_t, soft_buffer_ch0, buffer_size); gtk_range_set_value(GTK_RANGE(scale_freq), (double)triggerFreq / buffer_size); gtk_widget_queue_draw(scale_freq); if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(btn_sine))) waveType = SINEWAVE; else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(btn_square))) waveType = SQUAREWAVE; else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(btn_triangle))) waveType = TRIANGLE; else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(btn_sawtooth))) waveType = SAWTOOTH; FillSoftBuffer(waveType, soft_buffer_ch0); /* Also generate a preview of the output signal. */ float_soft_buff = g_renew(gfloat, float_soft_buff, 2 * buffer_size); X = g_renew(gfloat, X, 2 * buffer_size); for (i = 0; i < 2 * buffer_size; i++) X[i] = i; for (i = 0; i < 2 * buffer_size; i++) float_soft_buff[i] = soft_buffer_ch0[i % buffer_size] * 3.3 / 256; gtk_databox_graph_remove_all(GTK_DATABOX(databox)); databox_graph = gtk_databox_lines_new((2 * buffer_size), X, float_soft_buff, &color_prev_graph, 2); databox_graph_dots = gtk_databox_points_new((2 * buffer_size), X, float_soft_buff, &color_prev_graph_dots, 5); gtk_databox_graph_add(GTK_DATABOX(databox), databox_graph_dots); gtk_databox_graph_add(GTK_DATABOX(databox), databox_graph); gtk_databox_set_total_limits(GTK_DATABOX(databox), -0.2, (i - 1), 3.5, -0.2); }
static void facq_baf_view_plot_finalize(GObject *self) { FacqBAFViewPlot *plot = FACQ_BAF_VIEW_PLOT(self); facq_baf_view_plot_free_samples(plot->priv->samples,plot->priv->n_channels); facq_baf_view_plot_free_samples(plot->priv->copy_samples,plot->priv->n_channels); if(plot->priv->time) g_free(plot->priv->time); if(plot->priv->copy_time) g_free(plot->priv->copy_time); if(GTK_IS_WIDGET(plot->priv->databox)){ gtk_databox_graph_remove_all(GTK_DATABOX(plot->priv->databox)); gtk_widget_destroy(plot->priv->databox); } if(GTK_IS_WIDGET(plot->priv->table)) gtk_widget_destroy(plot->priv->table); G_OBJECT_CLASS(facq_baf_view_plot_parent_class)->finalize (self); }