From: John Melton - G0ORX/N6LYT Date: Mon, 28 Nov 2016 20:46:04 +0000 (+0000) Subject: Added rx and tx 3 band equalizers. Fixed discovery retry X-Git-Url: https://git.rkrishnan.org/uri//%22%22?a=commitdiff_plain;h=652ccc894a494e8012f300c985a7b0a2b40538fe;p=pihpsdr.git Added rx and tx 3 band equalizers. Fixed discovery retry --- diff --git a/equalizer_menu.c b/equalizer_menu.c index 42bda6a..c474baa 100644 --- a/equalizer_menu.c +++ b/equalizer_menu.c @@ -22,13 +22,23 @@ #include #include +#include + #include "new_menu.h" #include "equalizer_menu.h" #include "radio.h" +#include "channel.h" static GtkWidget *parent_window=NULL; static GtkWidget *dialog=NULL; +static GtkWidget *enable_b; +static GtkWidget *preamp_scale; +static GtkWidget *low_scale; +static GtkWidget *mid_scale; +static GtkWidget *high_scale; + +static gboolean tx_menu=TRUE; static gboolean close_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) { if(dialog!=NULL) { @@ -39,15 +49,49 @@ static gboolean close_cb (GtkWidget *widget, GdkEventButton *event, gpointer dat return TRUE; } +static gboolean tx_rb_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) { + if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) { + tx_menu=TRUE; + gtk_button_set_label(GTK_BUTTON(enable_b),"Enable TX Equalizer"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enable_b), enable_tx_equalizer); + gtk_range_set_value(GTK_RANGE(preamp_scale),(double)tx_equalizer[0]); + gtk_range_set_value(GTK_RANGE(low_scale),(double)tx_equalizer[1]); + gtk_range_set_value(GTK_RANGE(mid_scale),(double)tx_equalizer[2]); + gtk_range_set_value(GTK_RANGE(high_scale),(double)tx_equalizer[3]); + } +} + +static gboolean rx_rb_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) { + if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) { + tx_menu=FALSE; + gtk_button_set_label(GTK_BUTTON(enable_b),"Enable RX Equalizer"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enable_b), enable_rx_equalizer); + gtk_range_set_value(GTK_RANGE(preamp_scale),(double)rx_equalizer[0]); + gtk_range_set_value(GTK_RANGE(low_scale),(double)rx_equalizer[1]); + gtk_range_set_value(GTK_RANGE(mid_scale),(double)rx_equalizer[2]); + gtk_range_set_value(GTK_RANGE(high_scale),(double)rx_equalizer[3]); + } +} + static gboolean enable_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) { - enable_rx_equalizer=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); - // update WDSP + if(tx_menu) { + enable_tx_equalizer=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + SetTXAEQRun(CHANNEL_TX, enable_tx_equalizer); + } else { + enable_rx_equalizer=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + SetRXAEQRun(CHANNEL_RX0, enable_rx_equalizer); + } } static gboolean rx_value_changed_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) { int i=(int)data; - rx_equalizer[i]=gtk_range_get_value(GTK_RANGE(widget)); - // update WDSP + if(tx_menu) { + tx_equalizer[i]=(int)gtk_range_get_value(GTK_RANGE(widget)); + SetTXAGrphEQ(CHANNEL_TX, tx_equalizer); + } else { + rx_equalizer[i]=(int)gtk_range_get_value(GTK_RANGE(widget)); + SetRXAGrphEQ(CHANNEL_RX0, rx_equalizer); + } } void equalizer_menu(GtkWidget *parent) { @@ -74,14 +118,24 @@ void equalizer_menu(GtkWidget *parent) { gtk_grid_set_row_homogeneous(GTK_GRID(grid),FALSE); gtk_grid_set_column_homogeneous(GTK_GRID(grid),FALSE); - GtkWidget *close_b=gtk_button_new_with_label("Close TX Equalizer"); + GtkWidget *close_b=gtk_button_new_with_label("Close Equalizer"); g_signal_connect (close_b, "pressed", G_CALLBACK(close_cb), NULL); gtk_grid_attach(GTK_GRID(grid),close_b,0,0,1,1); + GtkWidget *tx_rb=gtk_radio_button_new_with_label(NULL,"TX Equalizer"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tx_rb),TRUE); + g_signal_connect(tx_rb,"toggled",G_CALLBACK(tx_rb_cb),NULL); + gtk_grid_attach(GTK_GRID(grid),tx_rb,1,0,1,1); + + + GtkWidget *rx_rb=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(tx_rb),"RX Equalizer"); + g_signal_connect(rx_rb,"toggled",G_CALLBACK(rx_rb_cb),NULL); + gtk_grid_attach(GTK_GRID(grid),rx_rb,2,0,1,1); + - GtkWidget *enable_b=gtk_check_button_new_with_label("Enable TX Equalizer"); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enable_b), enable_rx_equalizer); - g_signal_connect(enable_b,"toggled-changed",G_CALLBACK(enable_cb),NULL); + enable_b=gtk_check_button_new_with_label("Enable TX Equalizer"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enable_b), enable_tx_equalizer); + g_signal_connect(enable_b,"toggled",G_CALLBACK(enable_cb),NULL); gtk_grid_attach(GTK_GRID(grid),enable_b,0,1,1,1); @@ -97,8 +151,8 @@ void equalizer_menu(GtkWidget *parent) { label=gtk_label_new("High"); gtk_grid_attach(GTK_GRID(grid),label,3,2,1,1); - GtkWidget *preamp_scale=gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL,-12.0,15.0,1.0); - gtk_range_set_value(GTK_RANGE(preamp_scale),rx_equalizer[0]); + preamp_scale=gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL,-12.0,15.0,1.0); + gtk_range_set_value(GTK_RANGE(preamp_scale),(double)tx_equalizer[0]); g_signal_connect(preamp_scale,"value-changed",G_CALLBACK(rx_value_changed_cb),(gpointer)0); gtk_grid_attach(GTK_GRID(grid),preamp_scale,0,3,1,10); gtk_widget_set_size_request(preamp_scale,10,270); @@ -113,8 +167,8 @@ void equalizer_menu(GtkWidget *parent) { gtk_scale_add_mark(GTK_SCALE(preamp_scale),12.0,GTK_POS_LEFT,NULL); gtk_scale_add_mark(GTK_SCALE(preamp_scale),15.0,GTK_POS_LEFT,"15dB"); - GtkWidget *low_scale=gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL,-12.0,15.0,1.0); - gtk_range_set_value(GTK_RANGE(low_scale),rx_equalizer[1]); + low_scale=gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL,-12.0,15.0,1.0); + gtk_range_set_value(GTK_RANGE(low_scale),(double)tx_equalizer[1]); g_signal_connect(low_scale,"value-changed",G_CALLBACK(rx_value_changed_cb),(gpointer)1); gtk_grid_attach(GTK_GRID(grid),low_scale,1,3,1,10); gtk_scale_add_mark(GTK_SCALE(low_scale),-12.0,GTK_POS_LEFT,"-12dB"); @@ -128,8 +182,8 @@ void equalizer_menu(GtkWidget *parent) { gtk_scale_add_mark(GTK_SCALE(low_scale),12.0,GTK_POS_LEFT,NULL); gtk_scale_add_mark(GTK_SCALE(low_scale),15.0,GTK_POS_LEFT,"15dB"); - GtkWidget *mid_scale=gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL,-12.0,15.0,1.0); - gtk_range_set_value(GTK_RANGE(mid_scale),rx_equalizer[2]); + mid_scale=gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL,-12.0,15.0,1.0); + gtk_range_set_value(GTK_RANGE(mid_scale),(double)tx_equalizer[2]); g_signal_connect(mid_scale,"value-changed",G_CALLBACK(rx_value_changed_cb),(gpointer)2); gtk_grid_attach(GTK_GRID(grid),mid_scale,2,3,1,10); gtk_scale_add_mark(GTK_SCALE(mid_scale),-12.0,GTK_POS_LEFT,"-12dB"); @@ -143,8 +197,8 @@ void equalizer_menu(GtkWidget *parent) { gtk_scale_add_mark(GTK_SCALE(mid_scale),12.0,GTK_POS_LEFT,NULL); gtk_scale_add_mark(GTK_SCALE(mid_scale),15.0,GTK_POS_LEFT,"15dB"); - GtkWidget *high_scale=gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL,-12.0,15.0,1.0); - gtk_range_set_value(GTK_RANGE(high_scale),rx_equalizer[3]); + high_scale=gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL,-12.0,15.0,1.0); + gtk_range_set_value(GTK_RANGE(high_scale),(double)tx_equalizer[3]); g_signal_connect(high_scale,"value-changed",G_CALLBACK(rx_value_changed_cb),(gpointer)3); gtk_grid_attach(GTK_GRID(grid),high_scale,3,3,1,10); gtk_scale_add_mark(GTK_SCALE(high_scale),-12.0,GTK_POS_LEFT,"-12dB"); diff --git a/main.c b/main.c index 204055d..443ad5f 100644 --- a/main.c +++ b/main.c @@ -364,17 +364,48 @@ static void discover_devices() { gdk_window_set_cursor(splash_window,cursor_arrow); fprintf(stderr,"No devices found!\n"); GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT; +/* discovery_dialog = gtk_message_dialog_new (GTK_WINDOW(splash_screen), flags, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL, "No devices found! Retry Discovery?"); - gtk_widget_override_font(discovery_dialog, pango_font_description_from_string("FreeMono 18")); - gint result=gtk_dialog_run (GTK_DIALOG (discovery_dialog)); - gtk_widget_destroy(discovery_dialog); - if(result==GTK_RESPONSE_CANCEL) { - _exit(0); - } +*/ + discovery_dialog = gtk_dialog_new(); + gtk_window_set_transient_for(GTK_WINDOW(discovery_dialog),GTK_WINDOW(splash_screen)); + gtk_window_set_decorated(GTK_WINDOW(discovery_dialog),FALSE); + + gtk_widget_override_font(discovery_dialog, pango_font_description_from_string("FreeMono 16")); + + GdkRGBA color; + color.red = 1.0; + color.green = 1.0; + color.blue = 1.0; + color.alpha = 1.0; + gtk_widget_override_background_color(discovery_dialog,GTK_STATE_FLAG_NORMAL,&color); + + GtkWidget *content; + + content=gtk_dialog_get_content_area(GTK_DIALOG(discovery_dialog)); + + GtkWidget *grid=gtk_grid_new(); + gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE); + gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE); + gtk_grid_set_row_spacing (GTK_GRID(grid),10); + + GtkWidget *label=gtk_label_new("No devices found!"); + gtk_grid_attach(GTK_GRID(grid),label,0,0,2,1); + + GtkWidget *exit_b=gtk_button_new_with_label("Exit"); + g_signal_connect (exit_b, "button-press-event", G_CALLBACK(exit_cb), NULL); + gtk_grid_attach(GTK_GRID(grid),exit_b,0,1,1,1); + + GtkWidget *discover_b=gtk_button_new_with_label("Retry Discovery"); + g_signal_connect (discover_b, "button-press-event", G_CALLBACK(discover_cb), NULL); + gtk_grid_attach(GTK_GRID(grid),discover_b,1,1,1,1); + + gtk_container_add (GTK_CONTAINER (content), grid); + gtk_widget_show_all(discovery_dialog); } else { //fprintf(stderr,"%s: found %d devices.\n", (char *)arg, devices); gdk_window_set_cursor(splash_window,cursor_arrow); diff --git a/radio.c b/radio.c index 252af23..d3396ba 100644 --- a/radio.c +++ b/radio.c @@ -210,8 +210,11 @@ static int pre_tune_mode; int ctun=0; +int enable_tx_equalizer=0; +int tx_equalizer[4]={0,0,0,0}; + int enable_rx_equalizer=0; -double rx_equalizer[4]={0.0,0.0,0.0,0.0}; +int rx_equalizer[4]={0,0,0,0}; void init_radio() { int rc; @@ -291,36 +294,31 @@ void setTune(int state) { } if(protocol==NEW_PROTOCOL) { schedule_high_priority(4); - schedule_general(); + //schedule_general(); } if(tune) { + SetChannelState(CHANNEL_RX0,0,1); pre_tune_mode = mode; if(mode==modeCWL) { setMode(modeLSB); } else if(mode==modeCWU) { setMode(modeUSB); } - SetTXAPostGenMode(CHANNEL_TX,0); if(mode==modeLSB || mode==modeCWL || mode==modeDIGL) { SetTXAPostGenToneFreq(CHANNEL_TX,-(double)cw_keyer_sidetone_frequency); } else { SetTXAPostGenToneFreq(CHANNEL_TX,(double)cw_keyer_sidetone_frequency); } - //if(protocol==ORIGINAL_PROTOCOL) { - SetTXAPostGenToneMag(CHANNEL_TX,0.3); - //} else { - // SetTXAPostGenToneMag(CHANNEL_TX,0.99999); - //} + SetTXAPostGenToneMag(CHANNEL_TX,0.3); SetTXAPostGenRun(CHANNEL_TX,1); - SetChannelState(CHANNEL_RX0,0,1); SetChannelState(CHANNEL_TX,1,0); } else { + SetChannelState(CHANNEL_TX,0,1); SetTXAPostGenRun(CHANNEL_TX,0); if(pre_tune_mode==modeCWL || pre_tune_mode==modeCWU) { setMode(pre_tune_mode); } - SetChannelState(CHANNEL_TX,0,1); SetChannelState(CHANNEL_RX0,1,0); } } @@ -649,6 +647,27 @@ fprintf(stderr,"radioRestoreState: %s\n",property_path); if(value) local_microphone=atoi(value); value=getProperty("n_selected_input_device"); if(value) n_selected_input_device=atoi(value); + value=getProperty("enable_tx_equalizer"); + if(value) enable_tx_equalizer=atoi(value); + value=getProperty("tx_equalizer.0"); + if(value) tx_equalizer[0]=atoi(value); + value=getProperty("tx_equalizer.1"); + if(value) tx_equalizer[1]=atoi(value); + value=getProperty("tx_equalizer.2"); + if(value) tx_equalizer[2]=atoi(value); + value=getProperty("tx_equalizer.3"); + if(value) tx_equalizer[3]=atoi(value); + value=getProperty("enable_rx_equalizer"); + if(value) enable_rx_equalizer=atoi(value); + value=getProperty("rx_equalizer.0"); + if(value) rx_equalizer[0]=atoi(value); + value=getProperty("rx_equalizer.1"); + if(value) rx_equalizer[1]=atoi(value); + value=getProperty("rx_equalizer.2"); + if(value) rx_equalizer[2]=atoi(value); + value=getProperty("rx_equalizer.3"); + if(value) rx_equalizer[3]=atoi(value); + bandRestoreState(); sem_post(&property_sem); @@ -805,6 +824,28 @@ void radioSaveState() { setProperty("local_microphone",value); sprintf(value,"%d",n_selected_input_device); setProperty("n_selected_input_device",value); + + sprintf(value,"%d",enable_tx_equalizer); + setProperty("enable_tx_equalizer",value); + sprintf(value,"%d",tx_equalizer[0]); + setProperty("tx_equalizer.0",value); + sprintf(value,"%d",tx_equalizer[1]); + setProperty("tx_equalizer.1",value); + sprintf(value,"%d",tx_equalizer[2]); + setProperty("tx_equalizer.2",value); + sprintf(value,"%d",tx_equalizer[3]); + setProperty("tx_equalizer.3",value); + sprintf(value,"%d",enable_rx_equalizer); + setProperty("enable_rx_equalizer",value); + sprintf(value,"%d",rx_equalizer[0]); + setProperty("rx_equalizer.0",value); + sprintf(value,"%d",rx_equalizer[1]); + setProperty("rx_equalizer.1",value); + sprintf(value,"%d",rx_equalizer[2]); + setProperty("rx_equalizer.2",value); + sprintf(value,"%d",rx_equalizer[3]); + setProperty("rx_equalizer.3",value); + bandSaveState(); saveProperties(property_path); diff --git a/radio.h b/radio.h index 73c79ba..fc560f9 100644 --- a/radio.h +++ b/radio.h @@ -220,8 +220,11 @@ extern int tx_filter_high; extern int ctun; +extern int enable_tx_equalizer; +extern int tx_equalizer[4]; + extern int enable_rx_equalizer; -extern double rx_equalizer[4]; +extern int rx_equalizer[4]; extern void init_radio(); extern void setSampleRate(int rate); diff --git a/wdsp_init.c b/wdsp_init.c index be78823..fa87d0f 100644 --- a/wdsp_init.c +++ b/wdsp_init.c @@ -271,6 +271,14 @@ static void setupRX(int rx) { SetRXASNBARun(rx, snb); SetRXAPanelGain1(rx, volume); + + if(enable_rx_equalizer) { + SetRXAGrphEQ(rx, rx_equalizer); + SetRXAEQRun(rx, 1); + } else { + SetRXAEQRun(rx, 0); + } + } static void setupTX(int tx) { @@ -280,7 +288,12 @@ static void setupTX(int tx) { SetTXABandpassRun(tx, 1); SetTXACFIRRun(tx, protocol==NEW_PROTOCOL?1:0); // turned in if new protocol - SetTXAEQRun(tx, 0); + if(enable_tx_equalizer) { + SetTXAGrphEQ(tx, tx_equalizer); + SetTXAEQRun(tx, 1); + } else { + SetTXAEQRun(tx, 0); + } SetTXACTCSSRun(tx, 0); SetTXAAMSQRun(tx, 0); SetTXACompressorRun(tx, 0);