From: John Melton g0orx/n6lyt Date: Sat, 16 Apr 2016 09:47:21 +0000 (+0000) Subject: split sliders from toolbar. updated noise dialog to use radio buttons. added toolbar... X-Git-Url: https://git.rkrishnan.org/%5B/specifications?a=commitdiff_plain;h=1fc82baeaf25a79936b56152667d5b5228750ab7;p=pihpsdr.git split sliders from toolbar. updated noise dialog to use radio buttons. added toolbar button simulation --- diff --git a/Makefile b/Makefile index 253fb97..0ece627 100644 --- a/Makefile +++ b/Makefile @@ -37,6 +37,7 @@ radio.c \ gpio.c \ splash.c \ toolbar.c \ +sliders.c \ version.c \ vfo.c \ waterfall.c \ @@ -64,6 +65,7 @@ radio.h \ gpio.h \ splash.h \ toolbar.h \ +sliders.h \ version.h \ vfo.h \ waterfall.h \ @@ -91,6 +93,7 @@ radio.o \ gpio.o \ splash.o \ toolbar.o \ +sliders.o \ vfo.o \ waterfall.o \ wdsp_init.o diff --git a/main.c b/main.c index e276d55..e9405cc 100644 --- a/main.c +++ b/main.c @@ -42,6 +42,7 @@ #include "splash.h" #include "waterfall.h" #include "toolbar.h" +#include "sliders.h" #include "radio.h" #include "wdsp_init.h" #include "version.h" @@ -233,6 +234,10 @@ static void display_toolbar_cb(GtkWidget *widget, gpointer data) { display_toolbar=display_toolbar==1?0:1; } +static void toolbar_simulate_buttons_cb(GtkWidget *widget, gpointer data) { + toolbar_simulate_buttons=toolbar_simulate_buttons==1?0:1; +} + static void configure_gpio() { gpio_restore_state(); @@ -600,6 +605,12 @@ static void configure_cb(GtkWidget *widget, gpointer data) { gtk_grid_attach(GTK_GRID(grid),b_display_toolbar,0,9,1,1); g_signal_connect(b_display_toolbar,"toggled",G_CALLBACK(display_toolbar_cb),(gpointer *)NULL); + GtkWidget *b_toolbar_simulate_buttons=gtk_check_button_new_with_label("Toolbar Simulate Buttons"); + //gtk_widget_override_font(b_toolbar_simulate_buttons, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_toolbar_simulate_buttons), toolbar_simulate_buttons); + gtk_widget_show(b_toolbar_simulate_buttons); + gtk_grid_attach(GTK_GRID(grid),b_toolbar_simulate_buttons,0,10,1,1); + g_signal_connect(b_toolbar_simulate_buttons,"toggled",G_CALLBACK(toolbar_simulate_buttons_cb),(gpointer *)NULL); gtk_container_add(GTK_CONTAINER(content),grid); GtkWidget *close_button=gtk_dialog_add_button(GTK_DIALOG(dialog),"Close",GTK_RESPONSE_OK); diff --git a/menu.c b/menu.c index 6cdfec6..ac7ed82 100644 --- a/menu.c +++ b/menu.c @@ -260,6 +260,9 @@ static void frames_per_second_value_changed_cb(GtkWidget *widget, gpointer data) calculate_display_average(); } +static void oc_tune_time_cb(GtkWidget *widget, gpointer data) { + OCtune_time=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget)); +} static gboolean menu_pressed_event_cb (GtkWidget *widget, GdkEventButton *event, @@ -643,8 +646,8 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, GtkWidget *oc_label=gtk_label_new("OC"); GtkWidget *oc_grid=gtk_grid_new(); - gtk_grid_set_row_homogeneous(GTK_GRID(oc_grid),TRUE); - gtk_grid_set_column_spacing (GTK_GRID(oc_grid),15); + //gtk_grid_set_row_homogeneous(GTK_GRID(oc_grid),TRUE); + gtk_grid_set_column_spacing (GTK_GRID(oc_grid),10); GtkWidget *band_title=gtk_label_new("Band"); //gtk_widget_override_font(band_title, pango_font_description_from_string("Arial 18")); @@ -740,6 +743,17 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, g_signal_connect(oc_tune_b,"toggled",G_CALLBACK(oc_tune_cb),(gpointer)j); } + GtkWidget *oc_tune_time_title=gtk_label_new("Tune Duration(ms):"); + //gtk_widget_override_font(oc_tune_time_title, pango_font_description_from_string("Arial 18")); + gtk_widget_show(oc_tune_time_title); + gtk_grid_attach(GTK_GRID(oc_grid),oc_tune_time_title,18,j+2,2,1); + + GtkWidget *oc_tune_time_b=gtk_spin_button_new_with_range(0.0,9999.0,1.0); + //gtk_widget_override_font(oc_tune_time_b, pango_font_description_from_string("Arial 18")); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(oc_tune_time_b),(double)OCtune_time); + gtk_widget_show(oc_tune_time_b); + gtk_grid_attach(GTK_GRID(oc_grid),oc_tune_time_b,18,j+3,2,1); + g_signal_connect(oc_tune_time_b,"value_changed",G_CALLBACK(oc_tune_time_cb),NULL); id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),oc_grid,oc_label); diff --git a/old_protocol.c b/old_protocol.c index 7994a1e..a1b9b15 100644 --- a/old_protocol.c +++ b/old_protocol.c @@ -575,7 +575,16 @@ void ozy_send_buffer() { if(isTransmitting()) { output_buffer[C2]|=band->OCtx; if(tune) { - output_buffer[C2]|=OCtune; + if(OCtune_time!=0) { + struct timeval te; + gettimeofday(&te,NULL); + long long now=te.tv_sec*1000LL+te.tv_usec/1000; + if(tune_timeout>now) { + output_buffer[C2]|=OCtune; + } + } else { + output_buffer[C2]|=OCtune; + } } } else { output_buffer[C2]|=band->OCrx; diff --git a/pihpsdr b/pihpsdr index 8e73b85..ec122cb 100755 Binary files a/pihpsdr and b/pihpsdr differ diff --git a/radio.c b/radio.c index 34cf7c0..23a493c 100644 --- a/radio.c +++ b/radio.c @@ -73,6 +73,7 @@ int waterfall_automatic=1; int display_sliders=1; int display_toolbar=1; +int toolbar_simulate_buttons=1; double volume=0.2; double mic_gain=1.5; @@ -90,6 +91,7 @@ int mic_ptt_tip_bias_ring=0; int agc=AGC_MEDIUM; double agc_gain=60.0; +int nr_none=1; int nr=0; int nr2=0; int nb=0; @@ -158,6 +160,8 @@ int tune; long long ddsFrequency=14250000; unsigned char OCtune=0; +int OCtune_time=2800; // ms +long long tune_timeout; void init_radio() { int rc; @@ -195,6 +199,13 @@ void setTune(int state) { fprintf(stderr,"setTune: protocol=%d\n", protocol); if(tune!=state) { tune=state; + if(tune) { + if(OCtune_time!=0) { + struct timeval te; + gettimeofday(&te,NULL); + tune_timeout=(te.tv_sec*1000LL+te.tv_usec/1000)+(long long)OCtune_time; + } + } if(protocol==NEW_PROTOCOL) { schedule_high_priority(4); schedule_general(); @@ -315,6 +326,8 @@ void radioRestoreState() { if(value) display_sliders=atoi(value); value=getProperty("display_toolbar"); if(value) display_toolbar=atoi(value); + value=getProperty("toolbar_simulate_buttons"); + if(value) toolbar_simulate_buttons=atoi(value); value=getProperty("waterfall_high"); if(value) waterfall_high=atoi(value); value=getProperty("waterfall_low"); @@ -339,10 +352,16 @@ void radioRestoreState() { if(value) mic_bias_enabled=atof(value); value=getProperty("mic_ptt_tip_bias_ring"); if(value) mic_ptt_tip_bias_ring=atof(value); + value=getProperty("nr_none"); + if(value) nr_none=atoi(value); value=getProperty("nr"); if(value) nr=atoi(value); + value=getProperty("nr2"); + if(value) nr2=atoi(value); value=getProperty("nb"); if(value) nb=atoi(value); + value=getProperty("nb2"); + if(value) nb2=atoi(value); value=getProperty("anf"); if(value) anf=atoi(value); value=getProperty("snb"); @@ -381,6 +400,8 @@ void radioRestoreState() { if(value) vfo_encoder_divisor=atoi(value); value=getProperty("OCtune"); if(value) OCtune=atoi(value); + value=getProperty("OCtune_time"); + if(value) OCtune_time=atoi(value); bandRestoreState(); sem_post(&property_sem); @@ -420,6 +441,8 @@ void radioSaveState() { setProperty("display_sliders",value); sprintf(value,"%d",display_toolbar); setProperty("display_toolbar",value); + sprintf(value,"%d",toolbar_simulate_buttons); + setProperty("toolbar_simulate_buttons",value); sprintf(value,"%d",waterfall_high); setProperty("waterfall_high",value); sprintf(value,"%d",waterfall_low); @@ -444,10 +467,16 @@ void radioSaveState() { setProperty("mic_bias_enabled",value); sprintf(value,"%d",mic_ptt_tip_bias_ring); setProperty("mic_ptt_tip_bias_ring",value); + sprintf(value,"%d",nr_none); + setProperty("nr_none",value); sprintf(value,"%d",nr); setProperty("nr",value); + sprintf(value,"%d",nr2); + setProperty("nr2",value); sprintf(value,"%d",nb); setProperty("nb",value); + sprintf(value,"%d",nb2); + setProperty("nb2",value); sprintf(value,"%d",anf); setProperty("anf",value); sprintf(value,"%d",snb); @@ -486,6 +515,8 @@ void radioSaveState() { setProperty("vfo_encoder_divisor",value); sprintf(value,"%d",OCtune); setProperty("OCtune",value); + sprintf(value,"%d",OCtune_time); + setProperty("OCtune_time",value); bandSaveState(); diff --git a/radio.h b/radio.h index 92f4c5f..1379abc 100644 --- a/radio.h +++ b/radio.h @@ -92,12 +92,14 @@ extern int waterfall_automatic; extern int display_sliders; extern int display_toolbar; +extern int toolbar_simulate_buttons; extern double volume; extern double mic_gain; extern int agc; extern double agc_gain; +extern int nr_none; extern int nr; extern int nr2; extern int nb; @@ -172,6 +174,8 @@ extern int supply_volts; extern long long ddsFrequency; extern unsigned char OCtune; +extern int OCtune_time; +extern long long tune_timeout; extern void init_radio(); extern void setSampleRate(int rate); diff --git a/release/pihpsdr.tar b/release/pihpsdr.tar index 3cb469c..82c7280 100644 Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ diff --git a/release/pihpsdr/pihpsdr b/release/pihpsdr/pihpsdr index 8e73b85..ec122cb 100755 Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ diff --git a/sliders.c b/sliders.c new file mode 100644 index 0000000..5b0476d --- /dev/null +++ b/sliders.c @@ -0,0 +1,396 @@ +/* Copyright (C) +* 2015 - John Melton, G0ORX/N6LYT +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +*/ + +#include +#include +#include + +#include "sliders.h" +#include "mode.h" +#include "filter.h" +#include "frequency.h" +#include "bandstack.h" +#include "band.h" +#include "discovered.h" +#include "new_protocol.h" +#include "vfo.h" +#include "alex.h" +#include "agc.h" +#include "channel.h" +#include "wdsp.h" +#include "radio.h" +#include "property.h" + +static int width; +static int height; + +static GtkWidget *parent_window; +static GtkWidget *sliders; + +#define NONE 0 +#define AF_GAIN 1 +#define MIC_GAIN 2 +#define AGC_GAIN 3 +#define DRIVE 4 +#define TUNE_DRIVE 5 +#define ATTENUATION 5 + +#define MIC_GAIN_FUDGE 25.0 + +static gint scale_timer; +static int scale_status=NONE; +static GtkWidget *scale_dialog; +static GtkWidget *af_gain_label; +static GtkWidget *af_gain_scale; +static GtkWidget *agc_gain_label; +static GtkWidget *agc_scale; +static GtkWidget *attenuation_label; +static GtkWidget *attenuation_scale; +static GtkWidget *mic_gain_label; +static GtkWidget *mic_gain_scale; +static GtkWidget *drive_label; +static GtkWidget *drive_scale; +static GtkWidget *tune_label; +static GtkWidget *tune_scale; +static GtkWidget *dummy_label; + +static GdkRGBA white; +static GdkRGBA gray; + +int scale_timeout_cb(gpointer data) { +fprintf(stderr,"scale_timeout_cb\n"); + gtk_widget_destroy(scale_dialog); + scale_status=NONE; + return FALSE; +} + +static void attenuation_value_changed_cb(GtkWidget *widget, gpointer data) { + attenuation=gtk_range_get_value(GTK_RANGE(attenuation_scale)); + if(protocol==NEW_PROTOCOL) { + // need to schedule something + } +} + +void set_attenuation_value(double value) { + attenuation=(int)value; + if(display_sliders) { + gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation); + } else { + if(scale_status!=ATTENUATION) { + if(scale_status!=NONE) { + g_source_remove(scale_timer); + gtk_widget_destroy(scale_dialog); + scale_status=NONE; + } + } + if(scale_status==NONE) { + scale_status=ATTENUATION; + scale_dialog=gtk_dialog_new_with_buttons("Attenuation (dB)",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); + GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); + attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.00); + gtk_widget_set_size_request (attenuation_scale, 400, 30); + gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation); + gtk_widget_show(attenuation_scale); + gtk_container_add(GTK_CONTAINER(content),attenuation_scale); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + //gtk_widget_show_all(scale_dialog); + int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); + } else { + g_source_remove(scale_timer); + gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + } + } + if(protocol==NEW_PROTOCOL) { + // need to schedule something + } +} + +static void agcgain_value_changed_cb(GtkWidget *widget, gpointer data) { + agc_gain=gtk_range_get_value(GTK_RANGE(agc_scale)); + SetRXAAGCTop(CHANNEL_RX0, agc_gain); +} + +void set_agc_gain(double value) { + agc_gain=value; + SetRXAAGCTop(CHANNEL_RX0, agc_gain); + if(display_sliders) { + gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain); + } else { + if(scale_status!=AGC_GAIN) { + if(scale_status!=NONE) { + g_source_remove(scale_timer); + gtk_widget_destroy(scale_dialog); + scale_status=NONE; + } + } + if(scale_status==NONE) { + scale_status=AGC_GAIN; + scale_dialog=gtk_dialog_new_with_buttons("AGC Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); + GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); + agc_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 120.0, 1.00); + gtk_widget_set_size_request (agc_scale, 400, 30); + gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain); + gtk_widget_show(agc_scale); + gtk_container_add(GTK_CONTAINER(content),agc_scale); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + //gtk_widget_show_all(scale_dialog); + int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); + } else { + g_source_remove(scale_timer); + gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + } + } +} + +static void afgain_value_changed_cb(GtkWidget *widget, gpointer data) { + volume=gtk_range_get_value(GTK_RANGE(af_gain_scale))/100.0; +} + +void set_af_gain(double value) { + volume=value; + if(display_sliders) { + gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0); + } else { + if(scale_status!=AF_GAIN) { + if(scale_status!=NONE) { + g_source_remove(scale_timer); + gtk_widget_destroy(scale_dialog); + scale_status=NONE; + } + } + if(scale_status==NONE) { + scale_status=AF_GAIN; + scale_dialog=gtk_dialog_new_with_buttons("AF Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); + GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); + af_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); + gtk_widget_set_size_request (af_gain_scale, 400, 30); + gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0); + gtk_widget_show(af_gain_scale); + gtk_container_add(GTK_CONTAINER(content),af_gain_scale); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + //gtk_widget_show_all(scale_dialog); + int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); + } else { + g_source_remove(scale_timer); + gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + } + } +} + +static void micgain_value_changed_cb(GtkWidget *widget, gpointer data) { + mic_gain=gtk_range_get_value(GTK_RANGE(widget))/MIC_GAIN_FUDGE; +fprintf(stderr,"micgain_value_changed: %f\n",mic_gain); +} + +void set_mic_gain(double value) { + mic_gain=value; +fprintf(stderr,"set_mic_gain: %f\n",mic_gain); + if(display_sliders) { + gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE); + } else { + if(scale_status!=MIC_GAIN) { + if(scale_status!=NONE) { + g_source_remove(scale_timer); + gtk_widget_destroy(scale_dialog); + scale_status=NONE; + } + } + if(scale_status==NONE) { + scale_status=MIC_GAIN; + scale_dialog=gtk_dialog_new_with_buttons("Mic Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); + GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); + mic_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); + gtk_widget_set_size_request (mic_gain_scale, 400, 30); + gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE); + gtk_widget_show(mic_gain_scale); + gtk_container_add(GTK_CONTAINER(content),mic_gain_scale); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + //gtk_widget_show_all(scale_dialog); + int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); + } else { + g_source_remove(scale_timer); + gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + } + + } +} + +void set_drive(double value) { + setDrive(value); + if(display_sliders) { + gtk_range_set_value (GTK_RANGE(drive_scale),value*100.0); + } else { + if(scale_status!=DRIVE) { + if(scale_status!=NONE) { + g_source_remove(scale_timer); + gtk_widget_destroy(scale_dialog); + scale_status=NONE; + } + } + if(scale_status==NONE) { + scale_status=DRIVE; + scale_dialog=gtk_dialog_new_with_buttons("Drive",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); + GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); + drive_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); + gtk_widget_set_size_request (drive_scale, 400, 30); + gtk_range_set_value (GTK_RANGE(drive_scale),value*100.0); + gtk_widget_show(drive_scale); + gtk_container_add(GTK_CONTAINER(content),drive_scale); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + //gtk_widget_show_all(scale_dialog); + int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); + } else { + g_source_remove(scale_timer); + gtk_range_set_value (GTK_RANGE(drive_scale),value*100.0); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + } + } +} + +static void drive_value_changed_cb(GtkWidget *widget, gpointer data) { + setDrive(gtk_range_get_value(GTK_RANGE(drive_scale))/100.0); +} + +void set_tune(double value) { + setTuneDrive(value); + if(display_sliders) { + gtk_range_set_value (GTK_RANGE(tune_scale),value*100.0); + } else { + if(scale_status!=TUNE_DRIVE) { + if(scale_status!=NONE) { + g_source_remove(scale_timer); + gtk_widget_destroy(scale_dialog); + scale_status=NONE; + } + } + if(scale_status==NONE) { + scale_status=TUNE_DRIVE; + scale_dialog=gtk_dialog_new_with_buttons("Tune Drive",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); + GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); + tune_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); + gtk_widget_set_size_request (tune_scale, 400, 30); + gtk_range_set_value (GTK_RANGE(tune_scale),value*100.0); + gtk_widget_show(tune_scale); + gtk_container_add(GTK_CONTAINER(content),tune_scale); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + //gtk_widget_show_all(scale_dialog); + int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); + } else { + g_source_remove(scale_timer); + gtk_range_set_value (GTK_RANGE(tune_scale),value*100.0); + scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); + } + } +} + +static void tune_value_changed_cb(GtkWidget *widget, gpointer data) { + setTuneDrive(gtk_range_get_value(GTK_RANGE(tune_scale))/100.0); +} + +GtkWidget *sliders_init(int my_width, int my_height, GtkWidget* parent) { + width=my_width; + height=my_height; + parent_window=parent; + + fprintf(stderr,"sliders_init: width=%d height=%d\n", width,height); + + sliders=gtk_grid_new(); + gtk_widget_set_size_request (sliders, width, height); + gtk_grid_set_row_homogeneous(GTK_GRID(sliders), FALSE); + gtk_grid_set_column_homogeneous(GTK_GRID(sliders),TRUE); + + af_gain_label=gtk_label_new("AF:"); + //gtk_widget_override_font(af_gain_label, pango_font_description_from_string("Arial 16")); + gtk_widget_show(af_gain_label); + gtk_grid_attach(GTK_GRID(sliders),af_gain_label,0,0,1,1); + + af_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); + gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0); + gtk_widget_show(af_gain_scale); + gtk_grid_attach(GTK_GRID(sliders),af_gain_scale,1,0,2,1); + g_signal_connect(G_OBJECT(af_gain_scale),"value_changed",G_CALLBACK(afgain_value_changed_cb),NULL); + + agc_gain_label=gtk_label_new("AGC:"); + //gtk_widget_override_font(agc_gain_label, pango_font_description_from_string("Arial 16")); + gtk_widget_show(agc_gain_label); + gtk_grid_attach(GTK_GRID(sliders),agc_gain_label,3,0,1,1); + + agc_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 120.0, 1.0); + gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain); + gtk_widget_show(agc_scale); + gtk_grid_attach(GTK_GRID(sliders),agc_scale,4,0,2,1); + g_signal_connect(G_OBJECT(agc_scale),"value_changed",G_CALLBACK(agcgain_value_changed_cb),NULL); + + attenuation_label=gtk_label_new("ATT (dB):"); + //gtk_widget_override_font(attenuation_label, pango_font_description_from_string("Arial 16")); + gtk_widget_show(attenuation_label); + gtk_grid_attach(GTK_GRID(sliders),attenuation_label,6,0,1,1); + + attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.0); + gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation); + gtk_widget_show(attenuation_scale); + gtk_grid_attach(GTK_GRID(sliders),attenuation_scale,7,0,2,1); + g_signal_connect(G_OBJECT(attenuation_scale),"value_changed",G_CALLBACK(attenuation_value_changed_cb),NULL); + + + + mic_gain_label=gtk_label_new("Mic:"); + //gtk_widget_override_font(mic_gain_label, pango_font_description_from_string("Arial 16")); + gtk_widget_show(mic_gain_label); + gtk_grid_attach(GTK_GRID(sliders),mic_gain_label,0,1,1,1); + + mic_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0); + gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE); + gtk_widget_show(mic_gain_scale); + gtk_grid_attach(GTK_GRID(sliders),mic_gain_scale,1,1,2,1); + g_signal_connect(G_OBJECT(mic_gain_scale),"value_changed",G_CALLBACK(micgain_value_changed_cb),NULL); + + drive_label=gtk_label_new("Drive:"); + //gtk_widget_override_font(drive_label, pango_font_description_from_string("Arial 16")); + gtk_widget_show(drive_label); + gtk_grid_attach(GTK_GRID(sliders),drive_label,3,1,1,1); + + drive_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0); + gtk_range_set_value (GTK_RANGE(drive_scale),getDrive()*100.0); + gtk_widget_show(drive_scale); + gtk_grid_attach(GTK_GRID(sliders),drive_scale,4,1,2,1); + g_signal_connect(G_OBJECT(drive_scale),"value_changed",G_CALLBACK(drive_value_changed_cb),NULL); + + tune_label=gtk_label_new("Tune:"); + //gtk_widget_override_font(tune_label, pango_font_description_from_string("Arial 16")); + gtk_widget_show(tune_label); + gtk_grid_attach(GTK_GRID(sliders),tune_label,6,1,1,1); + + tune_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0); + gtk_range_set_value (GTK_RANGE(tune_scale),getTuneDrive()*100.0); + gtk_widget_show(tune_scale); + gtk_grid_attach(GTK_GRID(sliders),tune_scale,7,1,2,1); + g_signal_connect(G_OBJECT(tune_scale),"value_changed",G_CALLBACK(tune_value_changed_cb),NULL); + + dummy_label=gtk_label_new(" "); + //gtk_widget_override_font(dummy_label, pango_font_description_from_string("Arial 16")); + gtk_widget_show(dummy_label); + gtk_grid_attach(GTK_GRID(sliders),dummy_label,9,1,1,1); + + return sliders; +} diff --git a/sliders.h b/sliders.h new file mode 100644 index 0000000..be25b58 --- /dev/null +++ b/sliders.h @@ -0,0 +1,26 @@ +/* Copyright (C) +* 2015 - John Melton, G0ORX/N6LYT +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +*/ + +void set_agc_gain(double value); +void set_af_gain(double value); +void set_mic_gain(double value); +void set_drive(double drive); +void set_tune(double tune); +void set_attenuation_value(double attenuation); +GtkWidget *sliders_init(int my_width, int my_height, GtkWidget* parent); diff --git a/toolbar.c b/toolbar.c index 88ddf49..c24462b 100644 --- a/toolbar.c +++ b/toolbar.c @@ -21,6 +21,7 @@ #include #include +#include "gpio.h" #include "toolbar.h" #include "mode.h" #include "filter.h" @@ -41,40 +42,12 @@ static int width; static int height; static GtkWidget *parent_window; -static GtkWidget *sliders; static GtkWidget *toolbar; static GtkWidget *last_band; static GtkWidget *last_mode; static GtkWidget *last_filter; -#define NONE 0 -#define AF_GAIN 1 -#define MIC_GAIN 2 -#define AGC_GAIN 3 -#define DRIVE 4 -#define TUNE_DRIVE 5 -#define ATTENUATION 5 - -#define MIC_GAIN_FUDGE 25.0 - -static gint scale_timer; -static int scale_status=NONE; -static GtkWidget *scale_dialog; -static GtkWidget *af_gain_label; -static GtkWidget *af_gain_scale; -static GtkWidget *agc_gain_label; -static GtkWidget *agc_scale; -static GtkWidget *attenuation_label; -static GtkWidget *attenuation_scale; -static GtkWidget *mic_gain_label; -static GtkWidget *mic_gain_scale; -static GtkWidget *drive_label; -static GtkWidget *drive_scale; -static GtkWidget *tune_label; -static GtkWidget *tune_scale; -static GtkWidget *dummy_label; - static GdkRGBA white; static GdkRGBA gray; @@ -249,201 +222,87 @@ static void filter_cb(GtkWidget *widget, gpointer data) { } -int scale_timeout_cb(gpointer data) { -fprintf(stderr,"scale_timeout_cb\n"); - gtk_widget_destroy(scale_dialog); - scale_status=NONE; - return FALSE; -} - -static void attenuation_value_changed_cb(GtkWidget *widget, gpointer data) { - attenuation=gtk_range_get_value(GTK_RANGE(attenuation_scale)); - if(protocol==NEW_PROTOCOL) { - // need to schedule something - } -} - -void set_attenuation_value(double value) { - attenuation=(int)value; - if(display_sliders) { - gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation); - } else { - if(scale_status!=ATTENUATION) { - if(scale_status!=NONE) { - g_source_remove(scale_timer); - gtk_widget_destroy(scale_dialog); - scale_status=NONE; - } - } - if(scale_status==NONE) { - scale_status=ATTENUATION; - scale_dialog=gtk_dialog_new_with_buttons("Attenuation (dB)",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); - GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); - attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.00); - gtk_widget_set_size_request (attenuation_scale, 400, 30); - gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation); - gtk_widget_show(attenuation_scale); - gtk_container_add(GTK_CONTAINER(content),attenuation_scale); - scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); - //gtk_widget_show_all(scale_dialog); - int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); - } else { - g_source_remove(scale_timer); - gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation); - scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); - } - } - if(protocol==NEW_PROTOCOL) { - // need to schedule something - } -} - static void agc_select_cb(GtkWidget *widget, gpointer data) { agc=(int)data; SetRXAAGCMode(CHANNEL_RX0, agc); } -static void agcgain_value_changed_cb(GtkWidget *widget, gpointer data) { - agc_gain=gtk_range_get_value(GTK_RANGE(agc_scale)); - SetRXAAGCTop(CHANNEL_RX0, agc_gain); -} - -void set_agc_gain(double value) { - agc_gain=value; - SetRXAAGCTop(CHANNEL_RX0, agc_gain); - if(display_sliders) { - gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain); - } else { - if(scale_status!=AGC_GAIN) { - if(scale_status!=NONE) { - g_source_remove(scale_timer); - gtk_widget_destroy(scale_dialog); - scale_status=NONE; - } - } - if(scale_status==NONE) { - scale_status=AGC_GAIN; - scale_dialog=gtk_dialog_new_with_buttons("AGC Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); - GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); - agc_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 120.0, 1.00); - gtk_widget_set_size_request (agc_scale, 400, 30); - gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain); - gtk_widget_show(agc_scale); - gtk_container_add(GTK_CONTAINER(content),agc_scale); - scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); - //gtk_widget_show_all(scale_dialog); - int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); - } else { - g_source_remove(scale_timer); - gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain); - scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); - } - } -} - -static void afgain_value_changed_cb(GtkWidget *widget, gpointer data) { - volume=gtk_range_get_value(GTK_RANGE(af_gain_scale))/100.0; -} - -void set_af_gain(double value) { - volume=value; - if(display_sliders) { - gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0); - } else { - if(scale_status!=AF_GAIN) { - if(scale_status!=NONE) { - g_source_remove(scale_timer); - gtk_widget_destroy(scale_dialog); - scale_status=NONE; - } - } - if(scale_status==NONE) { - scale_status=AF_GAIN; - scale_dialog=gtk_dialog_new_with_buttons("AF Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); - GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); - af_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); - gtk_widget_set_size_request (af_gain_scale, 400, 30); - gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0); - gtk_widget_show(af_gain_scale); - gtk_container_add(GTK_CONTAINER(content),af_gain_scale); - scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); - //gtk_widget_show_all(scale_dialog); - int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); - } else { - g_source_remove(scale_timer); - gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0); - scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); - } - } +static void update_noise() { + SetRXAANRRun(CHANNEL_RX0, nr); + SetRXAEMNRRun(CHANNEL_RX0, nr2); + SetRXAANFRun(CHANNEL_RX0, anf); + SetRXASNBARun(CHANNEL_RX0, snb); + vfo_update(NULL); } -static void micgain_value_changed_cb(GtkWidget *widget, gpointer data) { - mic_gain=gtk_range_get_value(GTK_RANGE(widget))/MIC_GAIN_FUDGE; -fprintf(stderr,"micgain_value_changed: %f\n",mic_gain); -} - -void set_mic_gain(double value) { - mic_gain=value; -fprintf(stderr,"set_mic_gain: %f\n",mic_gain); - if(display_sliders) { - gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE); - } else { - if(scale_status!=MIC_GAIN) { - if(scale_status!=NONE) { - g_source_remove(scale_timer); - gtk_widget_destroy(scale_dialog); - scale_status=NONE; - } - } - if(scale_status==NONE) { - scale_status=MIC_GAIN; - scale_dialog=gtk_dialog_new_with_buttons("Mic Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); - GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); - mic_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); - gtk_widget_set_size_request (mic_gain_scale, 400, 30); - gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE); - gtk_widget_show(mic_gain_scale); - gtk_container_add(GTK_CONTAINER(content),mic_gain_scale); - scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); - //gtk_widget_show_all(scale_dialog); - int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); - } else { - g_source_remove(scale_timer); - gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE); - scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); - } - - } +static void nr_none_cb(GtkWidget *widget, gpointer data) { + nr=0; + nr2=0; + nb=0; + nb2=0; + anf=0; + snb=0; + update_noise(); } static void nr_cb(GtkWidget *widget, gpointer data) { - nr=nr==0?1:0; - SetRXAANRRun(CHANNEL_RX0, nr); + nr=1; + nr2=0; + nb=0; + nb2=0; + anf=0; + snb=0; + update_noise(); } static void nr2_cb(GtkWidget *widget, gpointer data) { - nr2=nr2==0?1:0; - SetRXAEMNRRun(CHANNEL_RX0, nr); + nr=0; + nr2=1; + nb=0; + nb2=0; + anf=0; + snb=0; + update_noise(); } static void nb_cb(GtkWidget *widget, gpointer data) { - nb=nb==0?1:0; - SetRXAEMNRRun(CHANNEL_RX0, nb); + nr=0; + nr2=0; + nb=1; + nb2=0; + anf=0; + snb=0; + update_noise(); } static void nb2_cb(GtkWidget *widget, gpointer data) { - nb2=nb2==0?1:0; - SetRXAEMNRaeRun(CHANNEL_RX0, nb2); + nr=0; + nr2=0; + nb=0; + nb2=1; + anf=0; + snb=0; + update_noise(); } static void anf_cb(GtkWidget *widget, gpointer data) { - anf=anf==0?1:0; - SetRXAANFRun(CHANNEL_RX0, anf); + nr=0; + nr2=0; + nb=0; + nb2=0; + anf=1; + snb=0; + update_noise(); } static void snb_cb(GtkWidget *widget, gpointer data) { - snb=snb==0?1:0; - SetRXASNBARun(CHANNEL_RX0, snb); + nr=0; + nr2=0; + nb=0; + nb2=0; + anf=0; + snb=1; + update_noise(); } static void audio_cb(GtkWidget *widget, gpointer data) { @@ -490,52 +349,59 @@ static void audio_cb(GtkWidget *widget, gpointer data) { gtk_grid_attach(GTK_GRID(grid),b_fast,0,4,2,1); g_signal_connect(b_fast,"pressed",G_CALLBACK(agc_select_cb),(gpointer *)AGC_FAST); + GtkWidget *b_nr_none=gtk_radio_button_new_with_label(NULL,"None"); + //gtk_widget_override_font(b_none, pango_font_description_from_string("Arial 16")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nr_none), nr_none==1); + gtk_widget_show(b_nr_none); + gtk_grid_attach(GTK_GRID(grid),b_nr_none,2,0,2,1); + g_signal_connect(b_nr_none,"pressed",G_CALLBACK(nr_none_cb),NULL); - GtkWidget *b_nr=gtk_check_button_new_with_label("NR"); + GtkWidget *b_nr=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_nr_none),"NR"); //gtk_widget_override_font(b_nr, pango_font_description_from_string("Arial 16")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nr), nr==1); gtk_widget_show(b_nr); - gtk_grid_attach(GTK_GRID(grid),b_nr,2,0,2,1); - g_signal_connect(b_nr,"toggled",G_CALLBACK(nr_cb),NULL); + gtk_grid_attach(GTK_GRID(grid),b_nr,2,1,2,1); + g_signal_connect(b_nr,"pressed",G_CALLBACK(nr_cb),NULL); - GtkWidget *b_nr2=gtk_check_button_new_with_label("NR2"); + GtkWidget *b_nr2=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_nr),"NR2"); //gtk_widget_override_font(b_nr2, pango_font_description_from_string("Arial 16")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nr2), nr2==1); gtk_widget_show(b_nr2); - gtk_grid_attach(GTK_GRID(grid),b_nr2,2,1,2,1); - g_signal_connect(b_nr2,"toggled",G_CALLBACK(nr2_cb),NULL); + gtk_grid_attach(GTK_GRID(grid),b_nr2,2,2,2,1); + g_signal_connect(b_nr2,"pressed",G_CALLBACK(nr2_cb),NULL); /* - GtkWidget *b_nb=gtk_check_button_new_with_label("NB"); + GtkWidget *b_nb=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_nr2),"NB"); //gtk_widget_override_font(b_nb, pango_font_description_from_string("Arial 16")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nb), nb==1); gtk_widget_show(b_nb); - gtk_grid_attach(GTK_GRID(grid),b_nb,2,2,2,1); - g_signal_connect(b_nb,"toggled",G_CALLBACK(nb_cb),NULL); + gtk_grid_attach(GTK_GRID(grid),b_nb,2,3,2,1); + g_signal_connect(b_nb,"pressed",G_CALLBACK(nb_cb),NULL); - GtkWidget *b_nb2=gtk_check_button_new_with_label("NB2"); + GtkWidget *b_nb2=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_nb),"NB2"); //gtk_widget_override_font(b_nb2, pango_font_description_from_string("Arial 16")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nb2), nb2==1); gtk_widget_show(b_nb2); - gtk_grid_attach(GTK_GRID(grid),b_nb2,2,3,2,1); - g_signal_connect(b_nb2,"toggled",G_CALLBACK(nb2_cb),NULL); + gtk_grid_attach(GTK_GRID(grid),b_nb2,2,4,2,1); + g_signal_connect(b_nb2,"pressed",G_CALLBACK(nb2_cb),NULL); */ - GtkWidget *b_anf=gtk_check_button_new_with_label("ANF"); + GtkWidget *b_anf=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_nr2),"ANF"); //gtk_widget_override_font(b_anf, pango_font_description_from_string("Arial 16")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_anf), anf==1); gtk_widget_show(b_anf); - gtk_grid_attach(GTK_GRID(grid),b_anf,2,2,2,1); - g_signal_connect(b_anf,"toggled",G_CALLBACK(anf_cb),NULL); + gtk_grid_attach(GTK_GRID(grid),b_anf,2,3,2,1); + g_signal_connect(b_anf,"pressed",G_CALLBACK(anf_cb),NULL); - GtkWidget *b_snb=gtk_check_button_new_with_label("SNB"); + GtkWidget *b_snb=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_anf),"SNB"); //gtk_widget_override_font(b_snb, pango_font_description_from_string("Arial 16")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_snb), snb==1); gtk_widget_show(b_snb); - gtk_grid_attach(GTK_GRID(grid),b_snb,2,3,2,1); - g_signal_connect(b_snb,"toggled",G_CALLBACK(snb_cb),NULL); + gtk_grid_attach(GTK_GRID(grid),b_snb,2,4,2,1); + g_signal_connect(b_snb,"pressed",G_CALLBACK(snb_cb),NULL); gtk_container_add(GTK_CONTAINER(content),grid); + GtkWidget *close_button=gtk_dialog_add_button(GTK_DIALOG(dialog),"Close",GTK_RESPONSE_OK); //gtk_widget_override_font(close_button, pango_font_description_from_string("Arial 16")); gtk_widget_show_all(dialog); @@ -549,78 +415,6 @@ static void audio_cb(GtkWidget *widget, gpointer data) { } -void set_drive(double value) { - setDrive(value); - if(display_sliders) { - gtk_range_set_value (GTK_RANGE(drive_scale),value*100.0); - } else { - if(scale_status!=DRIVE) { - if(scale_status!=NONE) { - g_source_remove(scale_timer); - gtk_widget_destroy(scale_dialog); - scale_status=NONE; - } - } - if(scale_status==NONE) { - scale_status=DRIVE; - scale_dialog=gtk_dialog_new_with_buttons("Drive",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); - GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); - drive_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); - gtk_widget_set_size_request (drive_scale, 400, 30); - gtk_range_set_value (GTK_RANGE(drive_scale),value*100.0); - gtk_widget_show(drive_scale); - gtk_container_add(GTK_CONTAINER(content),drive_scale); - scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); - //gtk_widget_show_all(scale_dialog); - int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); - } else { - g_source_remove(scale_timer); - gtk_range_set_value (GTK_RANGE(drive_scale),value*100.0); - scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); - } - } -} - -static void drive_value_changed_cb(GtkWidget *widget, gpointer data) { - setDrive(gtk_range_get_value(GTK_RANGE(drive_scale))/100.0); -} - -void set_tune(double value) { - setTuneDrive(value); - if(display_sliders) { - gtk_range_set_value (GTK_RANGE(tune_scale),value*100.0); - } else { - if(scale_status!=TUNE_DRIVE) { - if(scale_status!=NONE) { - g_source_remove(scale_timer); - gtk_widget_destroy(scale_dialog); - scale_status=NONE; - } - } - if(scale_status==NONE) { - scale_status=TUNE_DRIVE; - scale_dialog=gtk_dialog_new_with_buttons("Tune Drive",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); - GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog)); - tune_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); - gtk_widget_set_size_request (tune_scale, 400, 30); - gtk_range_set_value (GTK_RANGE(tune_scale),value*100.0); - gtk_widget_show(tune_scale); - gtk_container_add(GTK_CONTAINER(content),tune_scale); - scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); - //gtk_widget_show_all(scale_dialog); - int result=gtk_dialog_run(GTK_DIALOG(scale_dialog)); - } else { - g_source_remove(scale_timer); - gtk_range_set_value (GTK_RANGE(tune_scale),value*100.0); - scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); - } - } -} - -static void tune_value_changed_cb(GtkWidget *widget, gpointer data) { - setTuneDrive(gtk_range_get_value(GTK_RANGE(tune_scale))/100.0); -} - static void stop() { if(protocol==ORIGINAL_PROTOCOL) { old_protocol_stop(); @@ -973,92 +767,180 @@ void tune_cb(GtkWidget *widget, gpointer data) { } } -GtkWidget *sliders_init(int my_width, int my_height, GtkWidget* parent) { - width=my_width; - height=my_height; - parent_window=parent; +void sim_band_cb(GtkWidget *widget, gpointer data) { + BAND* band; + BANDSTACK_ENTRY *entry; +fprintf(stderr,"sim_band_cb\n"); + int b=band_get_current(); + if(function) { + b--; + if(b<0) { + b=BANDS-1; + } + } else { + b++; + if(b>=BANDS) { + b=0; + } + } + band=band_set_current(b); + entry=bandstack_entry_get_current(); + + setFrequency(entry->frequencyA); + setMode(entry->mode); + FILTER* band_filters=filters[entry->mode]; + FILTER* band_filter=&band_filters[entry->filter]; + setFilter(band_filter->low,band_filter->high); - fprintf(stderr,"sliders_init: width=%d height=%d\n", width,height); - - sliders=gtk_grid_new(); - gtk_widget_set_size_request (sliders, width, height); - gtk_grid_set_row_homogeneous(GTK_GRID(sliders), FALSE); - gtk_grid_set_column_homogeneous(GTK_GRID(sliders),TRUE); - - af_gain_label=gtk_label_new("AF:"); - //gtk_widget_override_font(af_gain_label, pango_font_description_from_string("Arial 16")); - gtk_widget_show(af_gain_label); - gtk_grid_attach(GTK_GRID(sliders),af_gain_label,0,0,1,1); - - af_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00); - gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0); - gtk_widget_show(af_gain_scale); - gtk_grid_attach(GTK_GRID(sliders),af_gain_scale,1,0,2,1); - g_signal_connect(G_OBJECT(af_gain_scale),"value_changed",G_CALLBACK(afgain_value_changed_cb),NULL); - - agc_gain_label=gtk_label_new("AGC:"); - //gtk_widget_override_font(agc_gain_label, pango_font_description_from_string("Arial 16")); - gtk_widget_show(agc_gain_label); - gtk_grid_attach(GTK_GRID(sliders),agc_gain_label,3,0,1,1); - - agc_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 120.0, 1.0); - gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain); - gtk_widget_show(agc_scale); - gtk_grid_attach(GTK_GRID(sliders),agc_scale,4,0,2,1); - g_signal_connect(G_OBJECT(agc_scale),"value_changed",G_CALLBACK(agcgain_value_changed_cb),NULL); - - attenuation_label=gtk_label_new("ATT (dB):"); - //gtk_widget_override_font(attenuation_label, pango_font_description_from_string("Arial 16")); - gtk_widget_show(attenuation_label); - gtk_grid_attach(GTK_GRID(sliders),attenuation_label,6,0,1,1); - - attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.0); - gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation); - gtk_widget_show(attenuation_scale); - gtk_grid_attach(GTK_GRID(sliders),attenuation_scale,7,0,2,1); - g_signal_connect(G_OBJECT(attenuation_scale),"value_changed",G_CALLBACK(attenuation_value_changed_cb),NULL); - - - - mic_gain_label=gtk_label_new("Mic:"); - //gtk_widget_override_font(mic_gain_label, pango_font_description_from_string("Arial 16")); - gtk_widget_show(mic_gain_label); - gtk_grid_attach(GTK_GRID(sliders),mic_gain_label,0,1,1,1); - - mic_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0); - gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE); - gtk_widget_show(mic_gain_scale); - gtk_grid_attach(GTK_GRID(sliders),mic_gain_scale,1,1,2,1); - g_signal_connect(G_OBJECT(mic_gain_scale),"value_changed",G_CALLBACK(micgain_value_changed_cb),NULL); - - drive_label=gtk_label_new("Drive:"); - //gtk_widget_override_font(drive_label, pango_font_description_from_string("Arial 16")); - gtk_widget_show(drive_label); - gtk_grid_attach(GTK_GRID(sliders),drive_label,3,1,1,1); - - drive_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0); - gtk_range_set_value (GTK_RANGE(drive_scale),getDrive()*100.0); - gtk_widget_show(drive_scale); - gtk_grid_attach(GTK_GRID(sliders),drive_scale,4,1,2,1); - g_signal_connect(G_OBJECT(drive_scale),"value_changed",G_CALLBACK(drive_value_changed_cb),NULL); - - tune_label=gtk_label_new("Tune:"); - //gtk_widget_override_font(tune_label, pango_font_description_from_string("Arial 16")); - gtk_widget_show(tune_label); - gtk_grid_attach(GTK_GRID(sliders),tune_label,6,1,1,1); - - tune_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0); - gtk_range_set_value (GTK_RANGE(tune_scale),getTuneDrive()*100.0); - gtk_widget_show(tune_scale); - gtk_grid_attach(GTK_GRID(sliders),tune_scale,7,1,2,1); - g_signal_connect(G_OBJECT(tune_scale),"value_changed",G_CALLBACK(tune_value_changed_cb),NULL); - - dummy_label=gtk_label_new(" "); - //gtk_widget_override_font(dummy_label, pango_font_description_from_string("Arial 16")); - gtk_widget_show(dummy_label); - gtk_grid_attach(GTK_GRID(sliders),dummy_label,9,1,1,1); - - return sliders; + band=band_get_current_band(); + set_alex_rx_antenna(band->alexRxAntenna); + set_alex_tx_antenna(band->alexTxAntenna); + set_alex_attenuation(band->alexAttenuation); + vfo_update(NULL); +} + +void sim_bandstack_cb(GtkWidget *widget, gpointer data) { + BANDSTACK_ENTRY *entry; + fprintf(stderr,"sim_bandstack_cb\n"); + if(function) { + entry=bandstack_entry_previous(); + } else { + entry=bandstack_entry_next(); + } + setFrequency(entry->frequencyA); + setMode(entry->mode); + FILTER* band_filters=filters[entry->mode]; + FILTER* band_filter=&band_filters[entry->filter]; + setFilter(band_filter->low,band_filter->high); + vfo_update(NULL); +} + +void sim_mode_cb(GtkWidget *widget, gpointer data) { + BAND* band; + BANDSTACK_ENTRY *entry; + +fprintf(stderr,"sim_mode_cb\n"); + band=band_get_current_band(); + entry=bandstack_entry_get_current(); + if(function) { + entry->mode--; + if(entry->mode<0) { + entry->mode=MODES-1; + } + } else { + entry->mode++; + if(entry->mode>=MODES) { + entry->mode=0; + } + } + setMode(entry->mode); + + FILTER* band_filters=filters[entry->mode]; + FILTER* band_filter=&band_filters[entry->filter]; + setFilter(band_filter->low,band_filter->high); + + vfo_update(NULL); +} + +void sim_filter_cb(GtkWidget *widget, gpointer data) { + BAND* band; + BANDSTACK_ENTRY *entry; + +fprintf(stderr,"sim_filter_cb\n"); + band=band_get_current_band(); + entry=bandstack_entry_get_current(); + // note order of filter reversed (largest first) + if(function) { + entry->filter++; + if(entry->filter>=FILTERS) { + entry->filter=0; + } + } else { + entry->filter--; + if(entry->filter<0) { + entry->filter=FILTERS-1; + } + } + + FILTER* band_filters=filters[entry->mode]; + FILTER* band_filter=&band_filters[entry->filter]; + setFilter(band_filter->low,band_filter->high); + + vfo_update(NULL); + +} + +void sim_agc_cb(GtkWidget *widget, gpointer data) { + fprintf(stderr,"sim_agc_cb\n"); + if(function) { + agc--; + if(agc<0) { + agc=3; + } + } else { + agc++; + if(agc>=4) { + agc=0; + } + } + SetRXAAGCMode(CHANNEL_RX0, agc); + vfo_update(NULL); +} + +void sim_noise_cb(GtkWidget *widget, gpointer data) { + fprintf(stderr,"sim_noise_cb\n"); + if(function) { + if(nr) { + nr=0; + } else if(nr2) { + nr2=0; + nr=1; + } else if(anf) { + anf=0; + nr2=1; + } else if(snb) { + snb=0; + anf=1; + } else { + snb=1; + } + } else { + if(nr) { + nr=0; + nr2=1; + } else if(nr2) { + nr2=0; + anf=1; + } else if(anf) { + anf=0; + snb=1; + } else if(snb) { + snb=0; + } else { + nr=1; + } + } + SetRXAANRRun(CHANNEL_RX0, nr); + SetRXAEMNRRun(CHANNEL_RX0, nr2); + SetRXAANFRun(CHANNEL_RX0, anf); + SetRXASNBARun(CHANNEL_RX0, snb); + vfo_update(NULL); + +} + +void sim_function_cb(GtkWidget *widget, gpointer data) { + fprintf(stderr,"sim_function_cb\n"); + function=function==1?0:1; + vfo_update(NULL); +} + +void sim_mox_cb(GtkWidget *widget, gpointer data) { + fprintf(stderr,"sim_pressed\n"); + if(function) { + tune_cb((GtkWidget *)NULL, (gpointer)NULL); + } else { + mox_cb((GtkWidget *)NULL, (gpointer)NULL); + } } GtkWidget *toolbar_init(int my_width, int my_height, GtkWidget* parent) { @@ -1084,41 +966,86 @@ GtkWidget *toolbar_init(int my_width, int my_height, GtkWidget* parent) { gtk_widget_set_size_request (toolbar, width, height); gtk_grid_set_column_homogeneous(GTK_GRID(toolbar),TRUE); - GtkWidget *band=gtk_button_new_with_label("Band"); - gtk_widget_set_size_request (band, button_width, 0); - //gtk_widget_override_font(band, pango_font_description_from_string("Arial 16")); - g_signal_connect(G_OBJECT(band),"clicked",G_CALLBACK(band_cb),NULL); - gtk_grid_attach(GTK_GRID(toolbar),band,0,0,4,1); - - GtkWidget *mode=gtk_button_new_with_label("Mode"); - //gtk_widget_override_font(mode, pango_font_description_from_string("Arial 16")); - g_signal_connect(G_OBJECT(mode),"clicked",G_CALLBACK(mode_cb),NULL); - gtk_grid_attach(GTK_GRID(toolbar),mode,4,0,4,1); - - GtkWidget *filter=gtk_button_new_with_label("Filter"); - //gtk_widget_override_font(filter, pango_font_description_from_string("Arial 16")); - g_signal_connect(G_OBJECT(filter),"clicked",G_CALLBACK(filter_cb),NULL); - gtk_grid_attach(GTK_GRID(toolbar),filter,8,0,4,1); - - GtkWidget *audio=gtk_button_new_with_label("Audio"); - //gtk_widget_override_font(audio, pango_font_description_from_string("Arial 16")); - g_signal_connect(G_OBJECT(audio),"clicked",G_CALLBACK(audio_cb),NULL); - gtk_grid_attach(GTK_GRID(toolbar),audio,12,0,4,1); - - GtkWidget *lock=gtk_button_new_with_label("Lock"); - //gtk_widget_override_font(lock, pango_font_description_from_string("Arial 16")); - g_signal_connect(G_OBJECT(lock),"clicked",G_CALLBACK(lock_cb),NULL); - gtk_grid_attach(GTK_GRID(toolbar),lock,16,0,4,1); - - GtkWidget *tune=gtk_button_new_with_label("Tune"); - //gtk_widget_override_font(tune, pango_font_description_from_string("Arial 16")); - g_signal_connect(G_OBJECT(tune),"clicked",G_CALLBACK(tune_cb),NULL); - gtk_grid_attach(GTK_GRID(toolbar),tune,24,0,4,1); - - GtkWidget *tx=gtk_button_new_with_label("Mox"); - //gtk_widget_override_font(tx, pango_font_description_from_string("Arial 16")); - g_signal_connect(G_OBJECT(tx),"clicked",G_CALLBACK(mox_cb),NULL); - gtk_grid_attach(GTK_GRID(toolbar),tx,28,0,4,1); + if(toolbar_simulate_buttons) { + GtkWidget *band=gtk_button_new_with_label("Band"); + gtk_widget_set_size_request (band, button_width, 0); + //gtk_widget_override_font(band, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(band),"clicked",G_CALLBACK(sim_band_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),band,0,0,4,1); + + GtkWidget *bandstack=gtk_button_new_with_label("BStack"); + gtk_widget_set_size_request (bandstack, button_width, 0); + //gtk_widget_override_font(bandstack, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(bandstack),"clicked",G_CALLBACK(sim_bandstack_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),bandstack,4,0,4,1); + + GtkWidget *mode=gtk_button_new_with_label("Mode"); + //gtk_widget_override_font(mode, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(mode),"clicked",G_CALLBACK(sim_mode_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),mode,8,0,4,1); + + GtkWidget *filter=gtk_button_new_with_label("Filter"); + //gtk_widget_override_font(filter, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(filter),"clicked",G_CALLBACK(sim_filter_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),filter,12,0,4,1); + + GtkWidget *agc=gtk_button_new_with_label("AGC"); + //gtk_widget_override_font(agc, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(agc),"clicked",G_CALLBACK(sim_agc_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),agc,16,0,4,1); + + GtkWidget *noise=gtk_button_new_with_label("Noise"); + //gtk_widget_override_font(noise, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(noise),"clicked",G_CALLBACK(sim_noise_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),noise,20,0,4,1); + + GtkWidget *function=gtk_button_new_with_label("Function"); + //gtk_widget_override_font(function, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(function),"clicked",G_CALLBACK(sim_function_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),function,24,0,4,1); + + GtkWidget *mox=gtk_button_new_with_label("Mox"); + //gtk_widget_override_font(mox, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(mox),"clicked",G_CALLBACK(sim_mox_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),mox,28,0,4,1); + + } else { + GtkWidget *band=gtk_button_new_with_label("Band"); + gtk_widget_set_size_request (band, button_width, 0); + //gtk_widget_override_font(band, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(band),"clicked",G_CALLBACK(band_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),band,0,0,4,1); + + GtkWidget *mode=gtk_button_new_with_label("Mode"); + //gtk_widget_override_font(mode, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(mode),"clicked",G_CALLBACK(mode_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),mode,4,0,4,1); + + GtkWidget *filter=gtk_button_new_with_label("Filter"); + //gtk_widget_override_font(filter, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(filter),"clicked",G_CALLBACK(filter_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),filter,8,0,4,1); + + GtkWidget *audio=gtk_button_new_with_label("Audio"); + //gtk_widget_override_font(audio, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(audio),"clicked",G_CALLBACK(audio_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),audio,12,0,4,1); + + GtkWidget *lock=gtk_button_new_with_label("Lock"); + //gtk_widget_override_font(lock, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(lock),"clicked",G_CALLBACK(lock_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),lock,16,0,4,1); + + GtkWidget *tune=gtk_button_new_with_label("Tune"); + //gtk_widget_override_font(tune, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(tune),"clicked",G_CALLBACK(tune_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),tune,24,0,4,1); + + GtkWidget *tx=gtk_button_new_with_label("Mox"); + //gtk_widget_override_font(tx, pango_font_description_from_string("Arial 16")); + g_signal_connect(G_OBJECT(tx),"clicked",G_CALLBACK(mox_cb),NULL); + gtk_grid_attach(GTK_GRID(toolbar),tx,28,0,4,1); + } gtk_widget_show_all(toolbar); diff --git a/toolbar.h b/toolbar.h index fbf2fdf..6b39381 100644 --- a/toolbar.h +++ b/toolbar.h @@ -17,15 +17,8 @@ * */ -void set_agc_gain(double value); -void set_af_gain(double value); -void set_mic_gain(double value); -void set_drive(double drive); -void set_tune(double tune); -void set_attenuation_value(double attenuation); int ptt_update(void *data); void lock_cb(GtkWidget *widget, gpointer data); void mox_cb(GtkWidget *widget, gpointer data); void tune_cb(GtkWidget *widget, gpointer data); GtkWidget *toolbar_init(int my_width, int my_height, GtkWidget* parent); -GtkWidget *sliders_init(int my_width, int my_height, GtkWidget* parent);