]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
Cleaned up gpio and toolbar code. Moved Button configuration to Menu and made physica...
authorJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Tue, 12 Jul 2016 13:41:40 +0000 (13:41 +0000)
committerJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Tue, 12 Jul 2016 13:41:40 +0000 (13:41 +0000)
17 files changed:
Makefile
audio.c
audio.h
configure.c
gpio.c
gpio_mraa.c
lime_protocol.c
menu.c
old_protocol.c
pihpsdr
radio.c
radio.h
release/pihpsdr.tar
release/pihpsdr/pihpsdr
toolbar.c
toolbar.h
vfo.c

index feb2e7a5ede45533bcaaa9e7c418e966ac9068da..2ccc0f667461701c725ea523ec99bbb766a6936b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -7,17 +7,14 @@ LINK=gcc
 
 ifeq ($(LIMESDR_INCLUDE),LIMESDR)
 LIMESDR_OPTIONS=-D LIMESDR
-SOAPYSDRLIBS=-lSoapySDR -lpulse-simple -lpulse
+SOAPYSDRLIBS=-lSoapySDR
 LIMESDR_SOURCES= \
-audio.c \
 lime_discovery.c \
 lime_protocol.c
 LIMESDR_HEADERS= \
-audio.h \
 lime_discovery.h \
 lime_protocol.h
 LIMESDR_OBJS= \
-audio.o \
 lime_discovery.o \
 lime_protocol.o
 endif
@@ -67,7 +64,7 @@ OPTIONS=-g -D $(UNAME_N) $(LIMESDR_OPTIONS) $(FREEDV_OPTIONS) -O3
 GTKINCLUDES=`pkg-config --cflags gtk+-3.0`
 GTKLIBS=`pkg-config --libs gtk+-3.0`
 
-LIBS=-lrt -lm -lwdsp -lpthread $(GTKLIBS) $(GPIO_LIBS) $(SOAPYSDRLIBS) $(FREEDVLIBS)
+LIBS=-lrt -lm -lwdsp -lpthread -lpulse-simple -lpulse $(GTKLIBS) $(GPIO_LIBS) $(SOAPYSDRLIBS) $(FREEDVLIBS)
 INCLUDES=$(GTKINCLUDES)
 
 COMPILE=$(CC) $(OPTIONS) $(INCLUDES)
@@ -75,6 +72,7 @@ COMPILE=$(CC) $(OPTIONS) $(INCLUDES)
 PROGRAM=pihpsdr
 
 SOURCES= \
+audio.c \
 band.c \
 configure.c \
 frequency.c \
@@ -102,6 +100,7 @@ wdsp_init.c
 
 
 HEADERS= \
+audio.h \
 agc.h \
 alex.h \
 band.h \
@@ -132,6 +131,7 @@ xvtr.h
 
 
 OBJS= \
+audio.o \
 band.o \
 configure.o \
 frequency.o \
diff --git a/audio.c b/audio.c
index 17e99eb2e9b6f3c9a5cbb3d8f541504b4d5ae921..3804d3a28cb72a85d653ea7fc2f26f044f2920b7 100644 (file)
--- a/audio.c
+++ b/audio.c
@@ -51,10 +51,11 @@ static pthread_t audioThreadId;
 
 static unsigned char *audio_buffer;
 static int audio_offset=0;
+static int running;
 
 void* audioThread(void* arg);
 
-void audio_init() {
+int audio_init() {
 
     static const pa_sample_spec spec= {
         .format = PA_SAMPLE_S16RE,
@@ -70,30 +71,34 @@ fprintf(stderr,"audio_init audio_buffer_size=%d\n",audio_buffer_size);
 
     if (!(stream = pa_simple_new(NULL, "pihpsdr", PA_STREAM_PLAYBACK, NULL, "playback", &spec, NULL, NULL, &error))) {
         fprintf(stderr, __FILE__": pa_simple_new() failed: %s\n", pa_strerror(error));
-        _exit(1);
+        return -1;
     }
 
     int res=sem_init(&audioBufferFull, 0, 0);
     if(res!=0) {
         fprintf(stderr,"audio_init: sem_init failed for audioBufferFull%d\n", res);
-        _exit(1);
+        return -1;
     }
 
     res=sem_init(&audioBufferEmpty, 0, 0);
     if(res!=0) {
         fprintf(stderr,"audio_init: sem_init failed for audioBufferEmpty%d\n", res);
-        _exit(1);
+        return -1;
     }
 
     res=pthread_create(&audioThreadId, NULL, audioThread, NULL);
     if(res<0) {
         fprintf(stderr, "Error creating DFC thread: %d\n", res);
-        _exit(1);
+        return -1;
     }
 
 fprintf(stderr,"... audio_init\n");
+    return 0;
 }
 
+void audio_close() {
+  running=0;
+}
 
 void audio_write(double* buffer,int samples) {
     int i;
@@ -122,8 +127,9 @@ void audio_write(double* buffer,int samples) {
 void* audioThread(void* arg) {
     int error;
     fprintf(stderr,"audioThread running on cpu%d\n", sched_getcpu());
+    running=1;
 
-    while(1) {
+    while(running) {
 
 /*
         error=sem_post(&audioBufferEmpty);
@@ -143,4 +149,8 @@ void* audioThread(void* arg) {
             _exit(1);
         }
     }
+
+    fprintf(stderr,"audioThread: ending\n");
+    pa_simple_free(stream);
+
 }
diff --git a/audio.h b/audio.h
index e6d2da58fa5df996d25534c7568fe119fa08d2bf..f8aff4a397787253e398c203363a957466b85c11 100644 (file)
--- a/audio.h
+++ b/audio.h
@@ -20,5 +20,6 @@
 extern int audio;
 extern int audio_buffer_size;
 
-void audio_init();
+int audio_init();
+void audio_close();
 void audio_write(double *buffer,int samples);
index 021a6bbedf8f86c961da0cbf7979257d7eff1675..aecdb4e5de717a79269f723470573302ff71208c 100644 (file)
@@ -63,9 +63,11 @@ 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 toolbar_dialog_buttons_cb(GtkWidget *widget, gpointer data) {
+  toolbar_dialog_buttons=toolbar_dialog_buttons==1?0:1;
 }
+*/
 
 #ifdef INCLUDE_GPIO
 void configure_gpio(GtkWidget *parent) {
@@ -471,12 +473,6 @@ void configure(DISCOVERED* d,GtkWidget *parent) {
   gtk_grid_attach(GTK_GRID(grid),b_display_toolbar,0,13,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,14,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/gpio.c b/gpio.c
index 4367870605cc71fa69aa6790eae451809e100d1e..b00e740862be00b047799aca66f7548e39a0c198 100644 (file)
--- a/gpio.c
+++ b/gpio.c
@@ -810,87 +810,22 @@ static int agc_encoder_changed(void *data) {
 }
 
 static int band_pressed(void *data) {
-  BAND* band;
-  BANDSTACK_ENTRY *entry;
-fprintf(stderr,"band_pressed\n");
-  int b=band_get_current();
-  if(function) {
-    b--;
-    if(b<0) {
-      b=BANDS-1;
-    }
-#ifdef LIMESDR
-    if(protocol!=LIMESDR_PROTOCOL) {
-      if(b==band3400) {
-        b=band6;
-      }
-    }
-#endif
-  } else {
-    b++;
-    if(b>=BANDS) {
-      b=0;
-    }
-#ifdef LIMESDR
-    if(protocol!=LIMESDR_PROTOCOL) {
-      if(b==band70) {
-        b=bandGen;
-      }
-    }
-#endif
-  }
-  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);
-
-  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);
-
+  sim_band_cb(NULL,NULL);
   return 0;
 }
 
 static int bandstack_pressed(void *data) {
-  BANDSTACK_ENTRY *entry;
-  fprintf(stderr,"bandstack_pressed\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);
+  sim_bandstack_cb(NULL,NULL);
   return 0;
 }
 
 static int function_pressed(void *data) {
-fprintf(stderr,"function_pressed\n");
-  function=function==1?0:1;
-  if(display_toolbar && toolbar_simulate_buttons) {
-    update_toolbar();
-  }
-  vfo_update(NULL);
+  sim_function_cb(NULL,NULL);
   return 0;
 }
 
 static int mox_pressed(void *data) {
-fprintf(stderr,"mox_pressed\n");
-  if(function) {
-    tune_cb((GtkWidget *)NULL, (gpointer)NULL);
-  } else {
-    mox_cb((GtkWidget *)NULL, (gpointer)NULL);
-  }
+  sim_mox_cb(NULL,NULL);
   return 0;
 }
 
@@ -901,119 +836,22 @@ fprintf(stderr,"lock_pressed\n");
 }
 
 static int mode_pressed(void *data) {
-  BAND* band;
-  BANDSTACK_ENTRY *entry;
-
-fprintf(stderr,"mode_pressed\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);
-
+  sim_mode_cb(NULL,NULL);
   return 0;
 }
 
 static int filter_pressed(void *data) {
-  BAND* band;
-  BANDSTACK_ENTRY *entry;
-
-fprintf(stderr,"filter_pressed\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);
-
+  sim_filter_cb(NULL,NULL);
   return 0;
 }
 
 static int noise_pressed(void *data) {
-fprintf(stderr,"noise_pressed\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);
+  sim_noise_cb(NULL,NULL);
   return 0;
 }
 
 static int agc_pressed(void *data) {
-fprintf(stderr,"agc_pressed\n");
-  if(function) {
-    agc--;
-    if(agc<0) {
-      agc=3;
-    }
-  } else {
-    agc++;
-    if(agc>=4) {
-      agc=0;
-    }
-  }
-  SetRXAAGCMode(CHANNEL_RX0, agc);
-  vfo_update(NULL);
+  sim_agc_cb(NULL,NULL);
   return 0;
 }
 
index e671e43a7a652816639c8a1ab6b211844596ac21..32b9b96addc8c078873934e319bcd1f124a217a5 100644 (file)
@@ -838,87 +838,22 @@ static int agc_encoder_changed(void *data) {
 }
 
 static int band_pressed(void *data) {
-  BAND* band;
-  BANDSTACK_ENTRY *entry;
-fprintf(stderr,"band_pressed\n");
-  int b=band_get_current();
-  if(function) {
-    b--;
-    if(b<0) {
-      b=BANDS-1;
-    }
-#ifdef LIMESDR
-    if(protocol!=LIMESDR_PROTOCOL) {
-      if(b==band3400) {
-        b=band6;
-      }
-    }
-#endif
-  } else {
-    b++;
-    if(b>=BANDS) {
-      b=0;
-    }
-#ifdef LIMESDR
-    if(protocol!=LIMESDR_PROTOCOL) {
-      if(b==band70) {
-        b=bandGen;
-      }
-    }
-#endif
-  }
-  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);
-
-  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);
-
+  sim_band_cb(NULL,NULL);
   return 0;
 }
 
 static int bandstack_pressed(void *data) {
-  BANDSTACK_ENTRY *entry;
-  fprintf(stderr,"bandstack_pressed\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);
+  sim_bandstack_cb(NULL,NULL);
   return 0;
 }
 
 static int function_pressed(void *data) {
-fprintf(stderr,"function_pressed\n");
-  function=function==1?0:1;
-  if(display_toolbar && toolbar_simulate_buttons) {
-    update_toolbar();
-  }
-  vfo_update(NULL);
+  sim_function_cb(NULL,NULL);
   return 0;
 }
 
 static int mox_pressed(void *data) {
-fprintf(stderr,"mox_pressed\n");
-  if(function) {
-    tune_cb((GtkWidget *)NULL, (gpointer)NULL);
-  } else {
-    mox_cb((GtkWidget *)NULL, (gpointer)NULL);
-  }
+  sim_mox_cb(NULL,NULL);
   return 0;
 }
 
@@ -929,119 +864,22 @@ fprintf(stderr,"lock_pressed\n");
 }
 
 static int mode_pressed(void *data) {
-  BAND* band;
-  BANDSTACK_ENTRY *entry;
-
-fprintf(stderr,"mode_pressed\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);
-
+  sim_mode_cb(NULL,NULL);
   return 0;
 }
 
 static int filter_pressed(void *data) {
-  BAND* band;
-  BANDSTACK_ENTRY *entry;
-
-fprintf(stderr,"filter_pressed\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);
-
+  sim_filter_cb(NULL,NULL);
   return 0;
 }
 
 static int noise_pressed(void *data) {
-fprintf(stderr,"noise_pressed\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);
+  sim_noise_cb(NULL,NULL);
   return 0;
 }
 
 static int agc_pressed(void *data) {
-fprintf(stderr,"agc_pressed\n");
-  if(function) {
-    agc--;
-    if(agc<0) {
-      agc=3;
-    }
-  } else {
-    agc++;
-    if(agc>=4) {
-      agc=0;
-    }
-  }
-  SetRXAAGCMode(CHANNEL_RX0, agc);
-  vfo_update(NULL);
+  sim_agc_cb(NULL,NULL);
   return 0;
 }
 
index c7332eba4a05b0fae40bf9071155185995b805bf..47bfbcc7c577380ffbf1ca02c0a424ca21663a81 100644 (file)
@@ -190,7 +190,10 @@ fprintf(stderr,"lime_protocol: setting save_frequency: %lld\n",saved_frequency);
   }
 
 fprintf(stderr,"lime_protocol_init: audio_init\n");
-  audio_init();
+  if(audio_init()!=0) {
+    local_audio=false;
+    fprintf(stderr,"audio_init failed\n");
+  }
 
 fprintf(stderr,"lime_protocol_init: create receive_thread\n");
   rc=pthread_create(&receive_thread_id,NULL,receive_thread,NULL);
@@ -251,7 +254,9 @@ fprintf(stderr,"lime_protocol: receive_thread\n");
             fprintf(stderr,"fexchange0 (CHANNEL_RX0) returned error: %d\n", error);
           }
 
-          audio_write(audiooutputbuffer,outputsamples);
+          if(local_audio) {
+            audio_write(audiooutputbuffer,outputsamples);
+          }
           Spectrum0(1, CHANNEL_RX0, 0, 0, iqinputbuffer);
           samples=0;
         }
diff --git a/menu.c b/menu.c
index 09dc54ddde2a165337069e9ab3f4b6e25f97c62f..04768882ea2e355dda598bcb751ffce9c5312646 100644 (file)
--- a/menu.c
+++ b/menu.c
 #include <stdio.h>
 #include <string.h>
 
+#include "audio.h"
 #include "band.h"
 #include "channel.h"
 #include "discovered.h"
 #include "new_protocol.h"
 #include "radio.h"
+#include "toolbar.h"
 #include "version.h"
 #include "wdsp.h"
 #ifdef FREEDV
@@ -120,6 +122,23 @@ static void micboost_cb(GtkWidget *widget, gpointer data) {
   mic_boost=mic_boost==1?0:1;
 }
 
+static void local_audio_cb(GtkWidget *widget, gpointer data) {
+  local_audio=local_audio==1?0:1;
+  if(local_audio) {
+    if(audio_init()!=0) {
+      fprintf(stderr,"audio_init failed\n");
+      local_audio=0;
+    }
+  } else {
+    audio_close();
+  }
+}
+
+static void toolbar_dialog_buttons_cb(GtkWidget *widget, gpointer data) {
+  toolbar_dialog_buttons=toolbar_dialog_buttons==1?0:1;
+  update_toolbar_labels();
+}
+
 static void ptt_cb(GtkWidget *widget, gpointer data) {
   mic_ptt_enabled=mic_ptt_enabled==1?0:1;
 }
@@ -517,6 +536,19 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
     gtk_grid_attach(GTK_GRID(general_grid),micboost_b,1,2,1,1);
     g_signal_connect(micboost_b,"toggled",G_CALLBACK(micboost_cb),NULL);
 
+    GtkWidget *local_audio_b=gtk_check_button_new_with_label("Local Audio");
+    //gtk_widget_override_font(local_audio_b, pango_font_description_from_string("Arial 18"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (local_audio_b), local_audio);
+    gtk_widget_show(local_audio_b);
+    gtk_grid_attach(GTK_GRID(general_grid),local_audio_b,1,3,1,1);
+    g_signal_connect(local_audio_b,"toggled",G_CALLBACK(local_audio_cb),NULL);
+
+    GtkWidget *b_toolbar_dialog_buttons=gtk_check_button_new_with_label("Buttons Display Dialog");
+    //gtk_widget_override_font(b_toolbar_dialog_buttons, pango_font_description_from_string("Arial 18"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_toolbar_dialog_buttons), toolbar_dialog_buttons);
+    gtk_widget_show(b_toolbar_dialog_buttons);
+    gtk_grid_attach(GTK_GRID(general_grid),b_toolbar_dialog_buttons,1,4,1,1);
+    g_signal_connect(b_toolbar_dialog_buttons,"toggled",G_CALLBACK(toolbar_dialog_buttons_cb),(gpointer *)NULL);
 
     if((protocol==NEW_PROTOCOL && device==NEW_DEVICE_ORION) ||
        (protocol==NEW_PROTOCOL && device==NEW_DEVICE_ORION2) ||
@@ -526,28 +558,28 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
       //gtk_widget_override_font(ptt_ring_b, pango_font_description_from_string("Arial 18"));
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_ring_b), mic_ptt_tip_bias_ring==0);
       gtk_widget_show(ptt_ring_b);
-      gtk_grid_attach(GTK_GRID(general_grid),ptt_ring_b,1,3,1,1);
+      gtk_grid_attach(GTK_GRID(general_grid),ptt_ring_b,1,5,1,1);
       g_signal_connect(ptt_ring_b,"pressed",G_CALLBACK(ptt_ring_cb),NULL);
 
       GtkWidget *ptt_tip_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(ptt_ring_b),"PTT On Tip, Mic and Bias on Ring");
       //gtk_widget_override_font(ptt_tip_b, pango_font_description_from_string("Arial 18"));
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_tip_b), mic_ptt_tip_bias_ring==1);
       gtk_widget_show(ptt_tip_b);
-      gtk_grid_attach(GTK_GRID(general_grid),ptt_tip_b,1,4,1,1);
+      gtk_grid_attach(GTK_GRID(general_grid),ptt_tip_b,1,6,1,1);
       g_signal_connect(ptt_tip_b,"pressed",G_CALLBACK(ptt_tip_cb),NULL);
 
       GtkWidget *ptt_b=gtk_check_button_new_with_label("PTT Enabled");
       //gtk_widget_override_font(ptt_b, pango_font_description_from_string("Arial 18"));
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_b), mic_ptt_enabled);
       gtk_widget_show(ptt_b);
-      gtk_grid_attach(GTK_GRID(general_grid),ptt_b,1,5,1,1);
+      gtk_grid_attach(GTK_GRID(general_grid),ptt_b,1,7,1,1);
       g_signal_connect(ptt_b,"toggled",G_CALLBACK(ptt_cb),NULL);
 
       GtkWidget *bias_b=gtk_check_button_new_with_label("BIAS Enabled");
       //gtk_widget_override_font(bias_b, pango_font_description_from_string("Arial 18"));
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bias_b), mic_bias_enabled);
       gtk_widget_show(bias_b);
-      gtk_grid_attach(GTK_GRID(general_grid),bias_b,1,6,1,1);
+      gtk_grid_attach(GTK_GRID(general_grid),bias_b,1,8,1,1);
       g_signal_connect(bias_b,"toggled",G_CALLBACK(bias_cb),NULL);
     }
 
@@ -583,6 +615,7 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
   
   }
 
+
   id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),general_grid,general_label);
 
   GtkWidget *ant_label=gtk_label_new("Ant");
index a199e39696cb7e92de69e95e2b085f030e3ea26e..9da941f3c83da8767f12ecf5ba54be1c9b30acaf 100644 (file)
@@ -208,6 +208,13 @@ void old_protocol_init(int rx,int pixels) {
 
   //int result=sem_init(&frequency_changed_sem, 0, 1);
 
+  if(local_audio) {
+    if(audio_init()!=0) {
+      fprintf(stderr,"audio_init failed\n");
+      local_audio=0;
+    }
+  }
+
   receiver=rx;
   display_width=pixels;
  
@@ -518,6 +525,10 @@ static void full_rx_buffer() {
     if(error!=0) {
       fprintf(stderr,"fexchange2 (CHANNEL_RX0) returned error: %d\n", error);
     }
+    if(local_audio) {
+      audio_write(audiooutputbuffer,output_buffer_size);
+    }
+
     Spectrum0(1, CHANNEL_RX0, 0, 0, iqinputbuffer);
 
     int demod_samples;
diff --git a/pihpsdr b/pihpsdr
index 74f215aa69a5b506bc28ba2835a839d55a355bc9..a166ed419f0c13231eefae6fe742253fb694381a 100755 (executable)
Binary files a/pihpsdr and b/pihpsdr differ
diff --git a/radio.c b/radio.c
index 0cf7aecf300c9ab8fc61590b1007382c0df1427e..3fd8c7a933be12eb0a4f1aba17889f3f143624dc 100644 (file)
--- a/radio.c
+++ b/radio.c
@@ -80,7 +80,7 @@ int waterfall_automatic=1;
 
 int display_sliders=1;
 int display_toolbar=1;
-int toolbar_simulate_buttons=1;
+int toolbar_dialog_buttons=1;
 
 double volume=0.2;
 double mic_gain=1.5;
@@ -178,6 +178,8 @@ long long tune_timeout;
 int smeter=RXA_S_AV;
 int alc=TXA_ALC_PK;
 
+int local_audio=0;
+
 #ifdef FREEDV
 char freedv_tx_text_data[64];
 #endif
@@ -418,8 +420,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("toolbar_dialog_buttons");
+    if(value) toolbar_dialog_buttons=atoi(value);
     value=getProperty("waterfall_high");
     if(value) waterfall_high=atoi(value);
     value=getProperty("waterfall_low");
@@ -518,6 +520,8 @@ void radioRestoreState() {
     if(value) smeter=atoi(value);
     value=getProperty("alc");
     if(value) alc=atoi(value);
+    value=getProperty("local_audio");
+    if(value) local_audio=atoi(value);
     bandRestoreState();
     sem_post(&property_sem);
 }
@@ -556,8 +560,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",toolbar_dialog_buttons);
+    setProperty("toolbar_dialog_buttons",value);
     sprintf(value,"%d",waterfall_high);
     setProperty("waterfall_high",value);
     sprintf(value,"%d",waterfall_low);
@@ -657,6 +661,8 @@ void radioSaveState() {
     setProperty("smeter",value);
     sprintf(value,"%d",alc);
     setProperty("alc",value);
+    sprintf(value,"%d",local_audio);
+    setProperty("local_audio",value);
     bandSaveState();
 
     saveProperties(property_path);
diff --git a/radio.h b/radio.h
index 934b964c37dd72a066888a73899b7db40bad1119..1b6eadf8749385c5a097c2cc61cbc2bc62140e38 100644 (file)
--- a/radio.h
+++ b/radio.h
@@ -92,7 +92,7 @@ extern int waterfall_automatic;
 
 extern int display_sliders;
 extern int display_toolbar;
-extern int toolbar_simulate_buttons;
+extern int toolbar_dialog_buttons;
 
 extern double volume;
 extern double mic_gain;
@@ -189,6 +189,8 @@ extern char freedv_tx_text_data[64];
 extern int smeter;
 extern int alc;
 
+extern int local_audio;
+
 extern void init_radio();
 extern void setSampleRate(int rate);
 extern int getSampleRate();
index a080be85893cd1e3fef26ca20df270ce118f7e34..e212c0f0da613ce5e1df489e201f1ea9b3cd3edc 100644 (file)
Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ
index 74f215aa69a5b506bc28ba2835a839d55a355bc9..a166ed419f0c13231eefae6fe742253fb694381a 100755 (executable)
Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ
index 6f4209e7e24d28af4f0f7243f8b879171ed2cab4..12ab67188c848050e1a1ec93e50af7375c5240af 100644 (file)
--- a/toolbar.c
+++ b/toolbar.c
@@ -47,6 +47,7 @@ static int height;
 static GtkWidget *parent_window;
 static GtkWidget *toolbar;
 
+static GtkWidget *sim_mox;
 static GtkWidget *sim_band;
 static GtkWidget *sim_bandstack;
 static GtkWidget *sim_mode;
@@ -54,16 +55,50 @@ static GtkWidget *sim_filter;
 static GtkWidget *sim_agc;
 static GtkWidget *sim_noise;
 static GtkWidget *sim_function;
-static GtkWidget *sim_mox;
 
 
 static GtkWidget *last_band;
+static GtkWidget *last_bandstack;
 static GtkWidget *last_mode;
 static GtkWidget *last_filter;
 
 static GdkRGBA white;
 static GdkRGBA gray;
 
+void update_toolbar_labels() {
+  if(toolbar_dialog_buttons) {
+      gtk_button_set_label(GTK_BUTTON(sim_band),"Band");
+      gtk_button_set_label(GTK_BUTTON(sim_bandstack),"BStack");
+      gtk_button_set_label(GTK_BUTTON(sim_mode),"Mode");
+      gtk_button_set_label(GTK_BUTTON(sim_filter),"Filter");
+      gtk_button_set_label(GTK_BUTTON(sim_noise),"Noise");
+      gtk_button_set_label(GTK_BUTTON(sim_agc),"AGC");
+      if(function) {
+        gtk_button_set_label(GTK_BUTTON(sim_mox),"Tune");
+      } else {
+        gtk_button_set_label(GTK_BUTTON(sim_mox),"Mox");
+      }
+  } else {
+    if(function) {
+      gtk_button_set_label(GTK_BUTTON(sim_band),"Band v");
+      gtk_button_set_label(GTK_BUTTON(sim_bandstack),"BStack v");
+      gtk_button_set_label(GTK_BUTTON(sim_mode),"Mode v");
+      gtk_button_set_label(GTK_BUTTON(sim_filter),"Filter v");
+      gtk_button_set_label(GTK_BUTTON(sim_noise),"Noise v");
+      gtk_button_set_label(GTK_BUTTON(sim_agc),"AGC v");
+      gtk_button_set_label(GTK_BUTTON(sim_mox),"Tune");
+    } else {
+      gtk_button_set_label(GTK_BUTTON(sim_band),"Band ^");
+      gtk_button_set_label(GTK_BUTTON(sim_bandstack),"BStack ^");
+      gtk_button_set_label(GTK_BUTTON(sim_mode),"Mode ^");
+      gtk_button_set_label(GTK_BUTTON(sim_filter),"Filter ^");
+      gtk_button_set_label(GTK_BUTTON(sim_noise),"Noise ^");
+      gtk_button_set_label(GTK_BUTTON(sim_agc),"AGC ^");
+      gtk_button_set_label(GTK_BUTTON(sim_mox),"Mox");
+    }
+  }
+}
+
 static void band_select_cb(GtkWidget *widget, gpointer data) {
   GtkWidget *label;
   int b=(int)data;
@@ -93,7 +128,7 @@ static void band_select_cb(GtkWidget *widget, gpointer data) {
   setFrequency(entry->frequencyA);
 }
 
-static void band_cb(GtkWidget *widget, gpointer data) {
+ void band_cb(GtkWidget *widget, gpointer data) {
   GtkWidget *dialog=gtk_dialog_new_with_buttons("Band",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
   GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
   GtkWidget *grid=gtk_grid_new();
@@ -137,6 +172,85 @@ static void band_cb(GtkWidget *widget, gpointer data) {
   
 }
 
+static void bandstack_select_cb(GtkWidget *widget, gpointer data) {
+  int b=(int)data;
+  BAND *band=band_get_current_band();
+  BANDSTACK *bandstack=band->bandstack;
+
+  bandstack->current_entry=b;
+
+  gtk_widget_override_background_color(last_bandstack, GTK_STATE_NORMAL, &white);
+  last_bandstack=widget;
+  gtk_widget_override_background_color(last_bandstack, GTK_STATE_NORMAL, &gray);
+
+  BANDSTACK_ENTRY *entry;
+  entry=&(bandstack->entry[b]);
+
+  setMode(entry->mode);
+  FILTER* band_filters=filters[entry->mode];
+  FILTER* band_filter=&band_filters[entry->filter];
+  setFilter(band_filter->low,band_filter->high);
+  setFrequency(entry->frequencyA);
+
+  set_alex_rx_antenna(band->alexRxAntenna);
+  set_alex_tx_antenna(band->alexTxAntenna);
+  set_alex_attenuation(band->alexAttenuation);
+
+  vfo_update(NULL);
+
+  setFrequency(entry->frequencyA);
+}
+
+void bandstack_cb(GtkWidget *widget, gpointer data) {
+  GtkWidget *dialog=gtk_dialog_new_with_buttons("Band",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
+  GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
+  GtkWidget *grid=gtk_grid_new();
+  gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
+  gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
+  GtkWidget *b;
+  int i;
+
+  char label[16];
+
+  BAND *band=band_get_current_band();
+  BANDSTACK *bandstack=band->bandstack;
+
+  for(i=0;i<bandstack->entries;i++) {
+    BANDSTACK_ENTRY *entry=&bandstack->entry[i];
+    sprintf(label,"%lld",entry->frequencyA);
+    GtkWidget *b=gtk_button_new_with_label(label);
+    gtk_widget_override_background_color(b, GTK_STATE_NORMAL, &white);
+    //gtk_widget_override_font(b, pango_font_description_from_string("Arial 20"));
+    if(i==bandstack->current_entry) {
+      gtk_widget_override_background_color(b, GTK_STATE_NORMAL, &gray);
+      last_bandstack=b;
+    }
+    gtk_widget_show(b);
+    gtk_grid_attach(GTK_GRID(grid),b,i%5,i/5,1,1);
+    g_signal_connect(b,"clicked",G_CALLBACK(bandstack_select_cb),(gpointer *)i);
+  }
+
+  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 20"));
+  gtk_widget_show_all(dialog);
+
+  g_signal_connect_swapped (dialog,
+                           "response",
+                           G_CALLBACK (gtk_widget_destroy),
+                           dialog);
+
+  int result=gtk_dialog_run(GTK_DIALOG(dialog));
+}
+
+void function_cb(GtkWidget *widget, gpointer data) {
+  fprintf(stderr,"function_cb\n");
+  function=function==1?0:1;
+  update_toolbar_labels();
+  vfo_update(NULL);
+}
+
 static void mode_select_cb(GtkWidget *widget, gpointer data) {
   int m=(int)data;
   BANDSTACK_ENTRY *entry;
@@ -152,7 +266,7 @@ static void mode_select_cb(GtkWidget *widget, gpointer data) {
   vfo_update(NULL);
 }
 
-static void mode_cb(GtkWidget *widget, gpointer data) {
+void mode_cb(GtkWidget *widget, gpointer data) {
   BANDSTACK_ENTRY *entry=bandstack_entry_get_current();
   GtkWidget *dialog=gtk_dialog_new_with_buttons("Mode",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
   GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
@@ -203,7 +317,7 @@ static void filter_select_cb(GtkWidget *widget, gpointer data) {
   vfo_update(NULL);
 }
 
-static void filter_cb(GtkWidget *widget, gpointer data) {
+void filter_cb(GtkWidget *widget, gpointer data) {
   BANDSTACK_ENTRY *entry=bandstack_entry_get_current();
   FILTER* band_filters=filters[entry->mode];
   GtkWidget *dialog=gtk_dialog_new_with_buttons("Mode",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
@@ -325,8 +439,9 @@ static void snb_cb(GtkWidget *widget, gpointer data) {
   update_noise();
 }
 
-static void audio_cb(GtkWidget *widget, gpointer data) {
-  GtkWidget *dialog=gtk_dialog_new_with_buttons("Audio",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
+
+void agc_cb(GtkWidget *widget, gpointer data) {
+  GtkWidget *dialog=gtk_dialog_new_with_buttons("AGC",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
 
   GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
   GtkWidget *grid=gtk_grid_new();
@@ -369,25 +484,49 @@ 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);
 
+  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);
+
+  g_signal_connect_swapped (dialog,
+                           "response",
+                           G_CALLBACK (gtk_widget_destroy),
+                           dialog);
+
+  int result=gtk_dialog_run(GTK_DIALOG(dialog));
+
+}
+
+void noise_cb(GtkWidget *widget, gpointer data) {
+  GtkWidget *dialog=gtk_dialog_new_with_buttons("Noise",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
+
+  GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
+  GtkWidget *grid=gtk_grid_new();
+
+  gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
+  gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
+
   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);
+  gtk_grid_attach(GTK_GRID(grid),b_nr_none,0,0,2,1);
   g_signal_connect(b_nr_none,"pressed",G_CALLBACK(nr_none_cb),NULL);
 
   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,1,2,1);
+  gtk_grid_attach(GTK_GRID(grid),b_nr,0,1,2,1);
   g_signal_connect(b_nr,"pressed",G_CALLBACK(nr_cb),NULL);
 
   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,2,2,1);
+  gtk_grid_attach(GTK_GRID(grid),b_nr2,0,2,2,1);
   g_signal_connect(b_nr2,"pressed",G_CALLBACK(nr2_cb),NULL);
 
 /*
@@ -395,14 +534,14 @@ static void audio_cb(GtkWidget *widget, gpointer data) {
   //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,3,2,1);
+  gtk_grid_attach(GTK_GRID(grid),b_nb,0,3,2,1);
   g_signal_connect(b_nb,"pressed",G_CALLBACK(nb_cb),NULL);
 
   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,4,2,1);
+  gtk_grid_attach(GTK_GRID(grid),b_nb2,0,4,2,1);
   g_signal_connect(b_nb2,"pressed",G_CALLBACK(nb2_cb),NULL);
 */
 
@@ -410,14 +549,14 @@ static void audio_cb(GtkWidget *widget, gpointer data) {
   //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,3,2,1);
+  gtk_grid_attach(GTK_GRID(grid),b_anf,0,3,2,1);
   g_signal_connect(b_anf,"pressed",G_CALLBACK(anf_cb),NULL);
 
   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,4,2,1);
+  gtk_grid_attach(GTK_GRID(grid),b_snb,0,4,2,1);
   g_signal_connect(b_snb,"pressed",G_CALLBACK(snb_cb),NULL);
 
   gtk_container_add(GTK_CONTAINER(content),grid);
@@ -796,62 +935,70 @@ 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;
-    }
+  if(toolbar_dialog_buttons) {
+    band_cb(widget,data);
+  } else {
+    int b=band_get_current();
+    if(function) {
+      b--;
+      if(b<0) {
+        b=BANDS-1;
+      }
 #ifdef LIMESDR
-    if(protocol!=LIMESDR_PROTOCOL) {
-      if(b==band3400) {
-        b=band6;
+      if(protocol!=LIMESDR_PROTOCOL) {
+        if(b==band3400) {
+          b=band6;
+        }
       }
-    }
 #endif
-  } else {
-    b++;
-    if(b>=BANDS) {
-      b=0;
-    }
+    } else {
+      b++;
+      if(b>=BANDS) {
+        b=0;
+      }
 #ifdef LIMESDR
-    if(protocol!=LIMESDR_PROTOCOL) {
-      if(b==band70) { 
-        b=bandGen;
+      if(protocol!=LIMESDR_PROTOCOL) {
+        if(b==band70) { 
+          b=bandGen;
+        }
       }
-    }
 #endif
-  }
-  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);
+    }
+    band=band_set_current(b);
+    entry=bandstack_entry_get_current();
 
-  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);
+    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);
+
+    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();
+  if(toolbar_dialog_buttons) {
+    bandstack_cb(widget,data);
   } else {
-    entry=bandstack_entry_next();
+    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);
   }
-  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) {
@@ -859,27 +1006,31 @@ void sim_mode_cb(GtkWidget *widget, gpointer data) {
   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;
-    }
+  if(toolbar_dialog_buttons) {
+    mode_cb(widget,data);
   } else {
-    entry->mode++;
-    if(entry->mode>=MODES) {
-      entry->mode=0;
+    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);
+    setMode(entry->mode);
 
-fprintf(stderr,"sim_mode_cb: entry->mode=%d entry->filter=%d\n",entry->mode,entry->filter);
-  FILTER* band_filters=filters[entry->mode];
-  FILTER* band_filter=&band_filters[entry->filter];
-  setFilter(band_filter->low,band_filter->high);
+    fprintf(stderr,"sim_mode_cb: entry->mode=%d entry->filter=%d\n",entry->mode,entry->filter);
+    FILTER* band_filters=filters[entry->mode];
+    FILTER* band_filter=&band_filters[entry->filter];
+    setFilter(band_filter->low,band_filter->high);
 
-  vfo_update(NULL);
+    vfo_update(NULL);
+  }
 }
 
 void sim_filter_cb(GtkWidget *widget, gpointer data) {
@@ -887,124 +1038,115 @@ void sim_filter_cb(GtkWidget *widget, gpointer data) {
   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;
-    }
+  if(toolbar_dialog_buttons) {
+    filter_cb(widget,data);
   } else {
-    entry->filter--;
-    if(entry->filter<0) {
-      entry->filter=FILTERS-1;
+    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;
+      }
     }
-  }
-
-fprintf(stderr,"sim_filter_cb: entry->mode=%d entry->filter=%d\n",entry->mode,entry->filter);
-  FILTER* band_filters=filters[entry->mode];
-  FILTER* band_filter=&band_filters[entry->filter];
-  setFilter(band_filter->low,band_filter->high);
 
-  vfo_update(NULL);
+  fprintf(stderr,"sim_filter_cb: entry->mode=%d entry->filter=%d\n",entry->mode,entry->filter);
+    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;
-    }
+  if(toolbar_dialog_buttons) {
+    agc_cb(widget,data);
   } else {
-    agc++;
-    if(agc>=4) {
-      agc=0;
+    if(function) {
+      agc--;
+      if(agc<0) {
+        agc=3;
+      }
+    } else {
+      agc++;
+      if(agc>=4) {
+        agc=0;
+      }
     }
+    SetRXAAGCMode(CHANNEL_RX0, agc);
+    vfo_update(NULL);
   }
-  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;
-    }
+  if(toolbar_dialog_buttons) {
+    noise_cb(widget,data);
   } 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;
+    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 {
-      nr=1;
+      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);
   }
-  SetRXAANRRun(CHANNEL_RX0, nr);
-  SetRXAEMNRRun(CHANNEL_RX0, nr2);
-  SetRXAANFRun(CHANNEL_RX0, anf);
-  SetRXASNBARun(CHANNEL_RX0, snb);
-  vfo_update(NULL);
-
 }
 
-void update_toolbar() {
+void sim_mox_cb(GtkWidget *widget, gpointer data) {
+  fprintf(stderr,"sim_pressed\n");
   if(function) {
-    gtk_button_set_label(GTK_BUTTON(sim_band),"Band v");
-    gtk_button_set_label(GTK_BUTTON(sim_bandstack),"BStack v");
-    gtk_button_set_label(GTK_BUTTON(sim_mode),"Mode v");
-    gtk_button_set_label(GTK_BUTTON(sim_filter),"Filter v");
-    gtk_button_set_label(GTK_BUTTON(sim_noise),"Noise v");
-    gtk_button_set_label(GTK_BUTTON(sim_agc),"AGC v");
-    gtk_button_set_label(GTK_BUTTON(sim_mox),"Tune");
+    tune_cb((GtkWidget *)NULL, (gpointer)NULL);
   } else {
-    gtk_button_set_label(GTK_BUTTON(sim_band),"Band ^");
-    gtk_button_set_label(GTK_BUTTON(sim_bandstack),"BStack ^");
-    gtk_button_set_label(GTK_BUTTON(sim_mode),"Mode ^");
-    gtk_button_set_label(GTK_BUTTON(sim_filter),"Filter ^");
-    gtk_button_set_label(GTK_BUTTON(sim_noise),"Noise ^");
-    gtk_button_set_label(GTK_BUTTON(sim_agc),"AGC ^");
-    gtk_button_set_label(GTK_BUTTON(sim_mox),"Mox");
+    mox_cb((GtkWidget *)NULL, (gpointer)NULL);
   }
 }
 
 void sim_function_cb(GtkWidget *widget, gpointer data) {
   fprintf(stderr,"sim_function_cb\n");
   function=function==1?0:1;
-  update_toolbar();
+  update_toolbar_labels();
   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) {
     width=my_width;
     height=my_height;
@@ -1028,86 +1170,49 @@ 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);
 
-    if(toolbar_simulate_buttons) {
-      sim_mox=gtk_button_new_with_label("Mox");
-      //gtk_widget_override_font(sim_mox, pango_font_description_from_string("Arial 16"));
-      g_signal_connect(G_OBJECT(sim_mox),"clicked",G_CALLBACK(sim_mox_cb),NULL);
-      gtk_grid_attach(GTK_GRID(toolbar),sim_mox,0,0,4,1);
-
-      sim_band=gtk_button_new_with_label("Band ^");
-      gtk_widget_set_size_request (sim_band, button_width, 0);
-      //gtk_widget_override_font(sim_band, pango_font_description_from_string("Arial 16"));
-      g_signal_connect(G_OBJECT(sim_band),"clicked",G_CALLBACK(sim_band_cb),NULL);
-      gtk_grid_attach(GTK_GRID(toolbar),sim_band,4,0,4,1);
-
-      sim_bandstack=gtk_button_new_with_label("BStack ^");
-      gtk_widget_set_size_request (sim_bandstack, button_width, 0);
-      //gtk_widget_override_font(sim_bandstack, pango_font_description_from_string("Arial 16"));
-      g_signal_connect(G_OBJECT(sim_bandstack),"clicked",G_CALLBACK(sim_bandstack_cb),NULL);
-      gtk_grid_attach(GTK_GRID(toolbar),sim_bandstack,8,0,4,1);
-
-      sim_mode=gtk_button_new_with_label("Mode ^");
-      //gtk_widget_override_font(sim_mode, pango_font_description_from_string("Arial 16"));
-      g_signal_connect(G_OBJECT(sim_mode),"clicked",G_CALLBACK(sim_mode_cb),NULL);
-      gtk_grid_attach(GTK_GRID(toolbar),sim_mode,12,0,4,1);
-
-      sim_filter=gtk_button_new_with_label("Filter ^");
-      //gtk_widget_override_font(sim_filter, pango_font_description_from_string("Arial 16"));
-      g_signal_connect(G_OBJECT(sim_filter),"clicked",G_CALLBACK(sim_filter_cb),NULL);
-      gtk_grid_attach(GTK_GRID(toolbar),sim_filter,16,0,4,1);
-
-      sim_noise=gtk_button_new_with_label("Noise ^");
-      //gtk_widget_override_font(sim_noise, pango_font_description_from_string("Arial 16"));
-      g_signal_connect(G_OBJECT(sim_noise),"clicked",G_CALLBACK(sim_noise_cb),NULL);
-      gtk_grid_attach(GTK_GRID(toolbar),sim_noise,20,0,4,1);
-
-      sim_agc=gtk_button_new_with_label("AGC ^");
-      //gtk_widget_override_font(sim_agc, pango_font_description_from_string("Arial 16"));
-      g_signal_connect(G_OBJECT(sim_agc),"clicked",G_CALLBACK(sim_agc_cb),NULL);
-      gtk_grid_attach(GTK_GRID(toolbar),sim_agc,24,0,4,1);
-
-      sim_function=gtk_button_new_with_label("Function");
-      //gtk_widget_override_font(sim_function, pango_font_description_from_string("Arial 16"));
-      g_signal_connect(G_OBJECT(sim_function),"clicked",G_CALLBACK(sim_function_cb),NULL);
-      gtk_grid_attach(GTK_GRID(toolbar),sim_function,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);
-    }
+    sim_mox=gtk_button_new_with_label("Mox");
+    //gtk_widget_override_font(sim_mox, pango_font_description_from_string("Arial 16"));
+    g_signal_connect(G_OBJECT(sim_mox),"clicked",G_CALLBACK(sim_mox_cb),NULL);
+    gtk_grid_attach(GTK_GRID(toolbar),sim_mox,0,0,4,1);
+
+    sim_band=gtk_button_new_with_label("Band ^");
+    gtk_widget_set_size_request (sim_band, button_width, 0);
+    //gtk_widget_override_font(sim_band, pango_font_description_from_string("Arial 16"));
+    g_signal_connect(G_OBJECT(sim_band),"clicked",G_CALLBACK(sim_band_cb),NULL);
+    gtk_grid_attach(GTK_GRID(toolbar),sim_band,4,0,4,1);
+
+    sim_bandstack=gtk_button_new_with_label("BStack ^");
+    gtk_widget_set_size_request (sim_bandstack, button_width, 0);
+    //gtk_widget_override_font(sim_bandstack, pango_font_description_from_string("Arial 16"));
+    g_signal_connect(G_OBJECT(sim_bandstack),"clicked",G_CALLBACK(sim_bandstack_cb),NULL);
+    gtk_grid_attach(GTK_GRID(toolbar),sim_bandstack,8,0,4,1);
+
+    sim_mode=gtk_button_new_with_label("Mode ^");
+    //gtk_widget_override_font(sim_mode, pango_font_description_from_string("Arial 16"));
+    g_signal_connect(G_OBJECT(sim_mode),"clicked",G_CALLBACK(sim_mode_cb),NULL);
+    gtk_grid_attach(GTK_GRID(toolbar),sim_mode,12,0,4,1);
+
+    sim_filter=gtk_button_new_with_label("Filter ^");
+    //gtk_widget_override_font(sim_filter, pango_font_description_from_string("Arial 16"));
+    g_signal_connect(G_OBJECT(sim_filter),"clicked",G_CALLBACK(sim_filter_cb),NULL);
+    gtk_grid_attach(GTK_GRID(toolbar),sim_filter,16,0,4,1);
+
+    sim_noise=gtk_button_new_with_label("Noise ^");
+    //gtk_widget_override_font(sim_noise, pango_font_description_from_string("Arial 16"));
+    g_signal_connect(G_OBJECT(sim_noise),"clicked",G_CALLBACK(sim_noise_cb),NULL);
+    gtk_grid_attach(GTK_GRID(toolbar),sim_noise,20,0,4,1);
+
+    sim_agc=gtk_button_new_with_label("AGC ^");
+    //gtk_widget_override_font(sim_agc, pango_font_description_from_string("Arial 16"));
+    g_signal_connect(G_OBJECT(sim_agc),"clicked",G_CALLBACK(sim_agc_cb),NULL);
+    gtk_grid_attach(GTK_GRID(toolbar),sim_agc,24,0,4,1);
+
+    sim_function=gtk_button_new_with_label("Function");
+    //gtk_widget_override_font(sim_function, pango_font_description_from_string("Arial 16"));
+    g_signal_connect(G_OBJECT(sim_function),"clicked",G_CALLBACK(function_cb),NULL);
+    gtk_grid_attach(GTK_GRID(toolbar),sim_function,28,0,4,1);
+
+    update_toolbar_labels();
 
     gtk_widget_show_all(toolbar);
 
index acaa7cae7ea9992904fc6748dc57e2757a2d924c..e717e806657356b4cfd9a26c0c866ded1abf2590 100644 (file)
--- a/toolbar.h
+++ b/toolbar.h
 
 extern int function;
 
-void update_toolbar();
+void update_toolbar_labels();
 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);
+
+
+void sim_mox_cb(GtkWidget *widget, gpointer data);
+void sim_band_cb(GtkWidget *widget, gpointer data);
+void sim_bandstack_cb(GtkWidget *widget, gpointer data);
+void sim_mode_cb(GtkWidget *widget, gpointer data);
+void sim_filter_cb(GtkWidget *widget, gpointer data);
+void sim_noise_cb(GtkWidget *widget, gpointer data);
+void sim_agc_cb(GtkWidget *widget, gpointer data);
+void sim_function_cb(GtkWidget *widget, gpointer data);
+
 GtkWidget *toolbar_init(int my_width, int my_height, GtkWidget* parent);
diff --git a/vfo.c b/vfo.c
index 99c19c64aa5d128cba2eaf67fae7ec3ec5ca0df7..f328c938322f5c1e3c64630137d54d47c3c9afd8 100644 (file)
--- a/vfo.c
+++ b/vfo.c
@@ -254,43 +254,47 @@ vfo_press_event_cb (GtkWidget *widget,
                GdkEventButton *event,
                gpointer        data)
 {
-  GtkWidget *dialog=gtk_dialog_new_with_buttons("Step",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
 
-  GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
-  GtkWidget *grid=gtk_grid_new();
-
-  gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
-  gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
-
-  GtkWidget *step_rb=NULL;
-  int i=0;
-  while(steps[i]!=0) {
-    if(i==0) {
-        step_rb=gtk_radio_button_new_with_label(NULL,step_labels[i]);
-    } else {
-        step_rb=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(step_rb),step_labels[i]);
+  if((int)event->x < (my_width/2)) {
+    lock_cb(NULL,NULL);
+  } else {
+    GtkWidget *dialog=gtk_dialog_new_with_buttons("Step",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
+
+    GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
+    GtkWidget *grid=gtk_grid_new();
+
+    gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
+    gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
+
+    GtkWidget *step_rb=NULL;
+    int i=0;
+    while(steps[i]!=0) {
+      if(i==0) {
+          step_rb=gtk_radio_button_new_with_label(NULL,step_labels[i]);
+      } else {
+          step_rb=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(step_rb),step_labels[i]);
+      }
+      gtk_widget_override_font(step_rb, pango_font_description_from_string("Arial 18"));
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (step_rb), steps[i]==step);
+      gtk_widget_show(step_rb);
+      gtk_grid_attach(GTK_GRID(grid),step_rb,i%5,i/5,1,1);
+      g_signal_connect(step_rb,"pressed",G_CALLBACK(vfo_step_select_cb),(gpointer *)i);
+      i++;
     }
-    gtk_widget_override_font(step_rb, pango_font_description_from_string("Arial 18"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (step_rb), steps[i]==step);
-    gtk_widget_show(step_rb);
-    gtk_grid_attach(GTK_GRID(grid),step_rb,i%5,i/5,1,1);
-    g_signal_connect(step_rb,"pressed",G_CALLBACK(vfo_step_select_cb),(gpointer *)i);
-    i++;
-  }
-
-  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 18"));
-  gtk_widget_show_all(dialog);
-
-  g_signal_connect_swapped (dialog,
-                           "response",
-                           G_CALLBACK (gtk_widget_destroy),
-                           dialog);
-
-  int result=gtk_dialog_run(GTK_DIALOG(dialog));
   
+    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 18"));
+    gtk_widget_show_all(dialog);
+
+    g_signal_connect_swapped (dialog,
+                             "response",
+                             G_CALLBACK (gtk_widget_destroy),
+                             dialog);
+  
+    int result=gtk_dialog_run(GTK_DIALOG(dialog));
+  }
   return TRUE;
 }