]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
Added rx and tx 3 band equalizers. Fixed discovery retry
authorJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Mon, 28 Nov 2016 20:46:04 +0000 (20:46 +0000)
committerJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Mon, 28 Nov 2016 20:46:04 +0000 (20:46 +0000)
equalizer_menu.c
main.c
radio.c
radio.h
wdsp_init.c

index 42bda6a9d38a98e396176b775d776add19a3caaa..c474baa4797dd86494e72fcbc8bad2d0bbba4c60 100644 (file)
 #include <stdio.h>
 #include <string.h>
 
+#include <wdsp.h>
+
 #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 204055d91e0a1c397e6df8ed1379f701faefc1a5..443ad5f7121cb04918feafcd21376801a59cf8a0 100644 (file)
--- 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 252af23a873026e9e8402f478ccac41a9dd80640..d3396baf9b1996bd832010302e3bd33b8f4905b3 100644 (file)
--- 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 73c79ba50f2768a7e100358b286043c7d80dc749..fc560f9f1880b26af93953c11b562e44259fa5e9 100644 (file)
--- 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);
index be78823d7ce7ef030b2e5cfeb96e5fffc4698b3e..fa87d0f0314a1cc439a272bd369bad70c4352da1 100644 (file)
@@ -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);