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
-
-
+
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",