From 1fc77833518a3441d5ac9d3c63f930f9af660739 Mon Sep 17 00:00:00 2001 From: Andrei Popa Date: Fri, 7 Jul 2023 13:40:26 +0300 Subject: [PATCH] adrv9002 plugin: added save stream to file functionality - saving stream or profile is chosen after pressing "save to file" button - minor naming changes Signed-off-by: Andrei Popa --- glade/adrv9002.glade | 154 +++++++++++++++++++++++++++---------------- plugins/adrv9002.c | 50 ++++++++++---- 2 files changed, 136 insertions(+), 68 deletions(-) diff --git a/glade/adrv9002.glade b/glade/adrv9002.glade index 3b5fd754..df97539a 100644 --- a/glade/adrv9002.glade +++ b/glade/adrv9002.glade @@ -3370,20 +3370,50 @@ 6 50 - + True False - True + 15 + 15 True False - 5 + start + 15 - + True False - Preset: + 5 + + + True + False + Preset: + + + False + True + 0 + + + + + True + False + 1 + + LTE + Live Device + + + + True + True + 1 + + False @@ -3392,76 +3422,73 @@ - + + Refresh True - False - 1 - - LTE - Live Device - + True + True + center - True + False True 1 - False + True True 0 - - Refresh + True - True - True - center + False + end + 15 + + + Save to file + True + True + True + center + 0 + + + False + False + 1 + + + + + Load to device + True + True + True + center + 0 + + + False + False + 2 + + False True + end 1 - - - Save Profile - True - True - True - center - 67 - 0 - - - False - True - 2 - - - - - Set Profile - True - True - True - center - 0 - - - False - True - 3 - - - False + True True 0 @@ -4865,7 +4892,7 @@ 10 - + False 5 ADI IIO oscilloscope - Save As @@ -4878,11 +4905,28 @@ False + vertical 2 False end + + + True + False + 1 + + Stream Image + Profile + + + + True + True + 0 + + gtk-cancel @@ -4895,11 +4939,11 @@ False True - 0 + 1 - + gtk-save True True @@ -4924,7 +4968,7 @@ save_cancel - save + save_profile diff --git a/plugins/adrv9002.c b/plugins/adrv9002.c index f3e9189c..b0fddf14 100644 --- a/plugins/adrv9002.c +++ b/plugins/adrv9002.c @@ -1293,15 +1293,28 @@ static void set_profile_debug_info(gpointer data, char *string) gtk_label_set_text(GTK_LABEL(gtk_builder_get_object(priv->builder, "label_profile_debug")), string); } -static void save_profile_dialog_show (GtkButton* self, gpointer data) +static void save_type_changed(GtkComboBoxText* self, struct plugin_private *priv) +{ + // 0 - stream image + // 1 - profile + bool save_type = atoi(gtk_combo_box_get_active_id(GTK_COMBO_BOX(self))); + + char filename[64]; + sprintf(filename, "adrv9002%s", save_type? ".json": ".stream"); + GtkFileChooser *chooser = GTK_FILE_CHOOSER(gtk_builder_get_object(priv->builder, "save_panel")); + gtk_file_chooser_set_current_name(chooser, filename); +} + +static void save_dialog_show(GtkButton* self, gpointer data) { struct plugin_private *priv = data; - GtkFileChooser *chooser = GTK_FILE_CHOOSER(gtk_builder_get_object(priv->builder, "save_profile_panel")); + GtkFileChooser *chooser = GTK_FILE_CHOOSER(gtk_builder_get_object(priv->builder, "save_panel")); gtk_file_chooser_set_action(chooser, GTK_FILE_CHOOSER_ACTION_SAVE); gtk_file_chooser_set_do_overwrite_confirmation(chooser, TRUE); gtk_file_chooser_set_current_folder(chooser, getenv("HOME")); + save_type_changed(GTK_COMBO_BOX_TEXT(gtk_builder_get_object(priv->builder, "cb_save_type")), priv); gtk_widget_show(GTK_WIDGET(chooser)); } @@ -2012,7 +2025,7 @@ static void on_ch_interface_changed(GtkComboBoxText* self, struct plugin_private update_preset(self, priv); } -static int save_profile(gchar *filename, struct adrv9002_config *cfg, gpointer data) +static int save_to_file(gchar *filename, struct adrv9002_config *cfg, gpointer data, bool file_type) { struct plugin_private *priv = data; char *profile; @@ -2040,19 +2053,23 @@ static int save_profile(gchar *filename, struct adrv9002_config *cfg, gpointer d return -1; } - fwrite(profile, profile_size, 1, fp); + if (file_type) { // stream image + fwrite(stream_image, stream_image_size, 1, fp); + } else { // profile + fwrite(profile, profile_size, 1, fp); + } fclose(fp); - sprintf(message, "Successfully saved profile!\n"); + sprintf(message, "Successfully saved to file!\n"); set_profile_debug_info(priv, message); return 0; } -static void save_profile_dialog_response(GtkDialog *dialog, gint response_id, gpointer data) +static void save_dialog_response(GtkDialog *dialog, gint response_id, gpointer data) { struct plugin_private *priv = data; - GtkFileChooser *chooser = GTK_FILE_CHOOSER(gtk_builder_get_object(priv->builder, "save_profile_panel")); + GtkFileChooser *chooser = GTK_FILE_CHOOSER(gtk_builder_get_object(priv->builder, "save_panel")); struct adrv9002_config cfg = lte_lvs_3072_MHz_10(); gchar *filename = gtk_file_chooser_get_filename (chooser); @@ -2062,7 +2079,11 @@ static void save_profile_dialog_response(GtkDialog *dialog, gint response_id, gp return; } - save_profile(filename, &cfg, data); + // 0 if stream image + // 1 if profile + bool file_type = gtk_combo_box_get_active_id(GTK_COMBO_BOX(gtk_builder_get_object(priv->builder, "cb_save_type"))); + save_to_file(filename, &cfg, data, file_type); + gtk_widget_hide(GTK_WIDGET(chooser)); } @@ -2684,12 +2705,15 @@ static GtkWidget *adrv9002_init(struct osc_plugin *plugin, GtkWidget *notebook, OSC_FILTER_FILE_PATH"/adrv9002"); #ifdef LIBADRV9001_FOUND - /* save profile*/ - g_builder_connect_signal(priv->builder, "btn_save_profile", "clicked", - G_CALLBACK(save_profile_dialog_show), priv); + /* save profile or stream image*/ + g_builder_connect_signal(priv->builder, "btn_save", "clicked", + G_CALLBACK(save_dialog_show), priv); + + g_builder_connect_signal(priv->builder, "save_panel", "response", + G_CALLBACK(save_dialog_response), priv); - g_builder_connect_signal(priv->builder, "save_profile_panel", "response", - G_CALLBACK(save_profile_dialog_response), priv); + g_builder_connect_signal(priv->builder, "cb_save_type", "changed", + G_CALLBACK(save_type_changed), priv); /* set profile*/ g_builder_connect_signal(priv->builder, "btn_set_profile", "clicked",