Skip to content

Commit

Permalink
adrv9002 plugin: added save stream to file functionality
Browse files Browse the repository at this point in the history
- saving stream or profile is chosen after pressing "save to file" button
- minor naming changes

Signed-off-by: Andrei Popa <[email protected]>
  • Loading branch information
andrei47w committed Jul 7, 2023
1 parent 1f5779b commit 1fc7783
Show file tree
Hide file tree
Showing 2 changed files with 136 additions and 68 deletions.
154 changes: 99 additions & 55 deletions glade/adrv9002.glade
Original file line number Diff line number Diff line change
Expand Up @@ -3370,20 +3370,50 @@
<property name="margin_bottom">6</property>
<property name="spacing">50</property>
<child>
<object class="GtkBox" id="vertBox">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="homogeneous">True</property>
<property name="margin_left">15</property>
<property name="margin_right">15</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">5</property>
<property name="halign">start</property>
<property name="spacing">15</property>
<child>
<object class="GtkLabel">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Preset:</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Preset:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="cb_preset">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="active_id">1</property>
<items>
<item id="1" translatable="yes">LTE</item>
<item id="0" translatable="yes">Live Device</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
Expand All @@ -3392,76 +3422,73 @@
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="cb_preset">
<object class="GtkButton" id="btn_refresh_profile">
<property name="label" translatable="yes">Refresh</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="active_id">1</property>
<items>
<item id="1" translatable="yes">LTE</item>
<item id="0" translatable="yes">Live Device</item>
</items>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">center</property>
</object>
<packing>
<property name="expand">True</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_refresh_profile">
<property name="label" translatable="yes">Refresh</property>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">center</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="spacing">15</property>
<child>
<object class="GtkButton" id="btn_save">
<property name="label" translatable="yes">Save to file</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">center</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_set_profile">
<property name="label" translatable="yes">Load to device</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">center</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_save_profile">
<property name="label" translatable="yes">Save Profile</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">center</property>
<property name="margin_right">67</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_set_profile">
<property name="label" translatable="yes">Set Profile</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">center</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
Expand Down Expand Up @@ -4865,7 +4892,7 @@
<property name="page_increment">10</property>
</object>
<object class="GtkListStore" id="liststore1"/>
<object class="GtkFileChooserDialog" id="save_profile_panel">
<object class="GtkFileChooserDialog" id="save_panel">
<property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">ADI IIO oscilloscope - Save As</property>
Expand All @@ -4878,11 +4905,28 @@
<child internal-child="vbox">
<object class="GtkBox" id="filechooserdialog-vbox3">
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child internal-child="action_area">
<object class="GtkButtonBox" id="filechooserdialog-action_area3">
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkComboBoxText" id="cb_save_type">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="active_id">1</property>
<items>
<item id="0" translatable="yes">Stream Image</item>
<item id="1" translatable="yes">Profile</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="save_cancel">
<property name="label">gtk-cancel</property>
Expand All @@ -4895,11 +4939,11 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="save">
<object class="GtkButton" id="save_profile">
<property name="label">gtk-save</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
Expand All @@ -4924,7 +4968,7 @@
</child>
<action-widgets>
<action-widget response="-6">save_cancel</action-widget>
<action-widget response="-3">save</action-widget>
<action-widget response="-3">save_profile</action-widget>
</action-widgets>
</object>
</interface>
50 changes: 37 additions & 13 deletions plugins/adrv9002.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand All @@ -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));
}

Expand Down Expand Up @@ -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",
Expand Down

0 comments on commit 1fc7783

Please sign in to comment.