]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
Changed Equalizer sliders to be horizontal.
authorJohn Melton G0ORX <john.d.melton@googlemail.com>
Fri, 13 Dec 2019 12:47:24 +0000 (12:47 +0000)
committerJohn Melton G0ORX <john.d.melton@googlemail.com>
Fri, 13 Dec 2019 12:47:24 +0000 (12:47 +0000)
Changed frequency info to just have band edges.
Fixed SAT/Split frequency updates to vfo when only one receiver.
Fixed MOX control using space bar when TX Panadapter is a dialog.
Several changes to menus to use "toggled" event rather than "pressed" for radio buttons.
Fixed a protocol 2 startup timing problem.
Some more cleanup of code.

29 files changed:
agc_menu.c
ant_menu.c
audio.c
band.c
cw_menu.c
display_menu.c
dsp_menu.c
equalizer_menu.c
fft_menu.c
freqent_menu.c
frequency.c
gpio.c
main.h
meter.c
meter_menu.c
new_protocol.c
noise_menu.c
old_protocol.c
radio.c
radio_menu.c
receiver.c
receiver.h
rx_menu.c
sliders.c
soapy_protocol.c
step_menu.c
transmitter.c
tx_menu.c
vfo.c

index cb73aceebf5e288674e7cae87046ebfa1d1a068c..e6694613cabad0242ca6dc516e6acb44821f0382 100644 (file)
@@ -55,12 +55,12 @@ static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_d
   return FALSE;
 }
 
-static gboolean agc_select_cb (GtkWidget *widget, gpointer        data) {
-  active_receiver->agc=GPOINTER_TO_INT(data);
-  //wdsp_set_agc(CHANNEL_RX0, agc);
-  set_agc(active_receiver, active_receiver->agc);
-  vfo_update();
-  return FALSE;
+static void agc_select_cb (GtkToggleButton *widget, gpointer        data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    active_receiver->agc=GPOINTER_TO_INT(data);
+    set_agc(active_receiver, active_receiver->agc);
+    vfo_update();
+  }
 }
 
 void agc_menu(GtkWidget *parent) {
@@ -106,7 +106,7 @@ void agc_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_off), active_receiver->agc==AGC_OFF);
   gtk_widget_show(b_off);
   gtk_grid_attach(GTK_GRID(grid),b_off,col,row,1,1);
-  g_signal_connect(b_off,"pressed",G_CALLBACK(agc_select_cb),(gpointer)(long)AGC_OFF);
+  g_signal_connect(b_off,"toggled",G_CALLBACK(agc_select_cb),(gpointer)(long)AGC_OFF);
 
   col++;
 
@@ -115,7 +115,7 @@ void agc_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_long), active_receiver->agc==AGC_LONG);
   gtk_widget_show(b_long);
   gtk_grid_attach(GTK_GRID(grid),b_long,col,row,1,1);
-  g_signal_connect(b_long,"pressed",G_CALLBACK(agc_select_cb),(gpointer)(long)AGC_LONG);
+  g_signal_connect(b_long,"toggled",G_CALLBACK(agc_select_cb),(gpointer)(long)AGC_LONG);
 
   col++;
 
@@ -124,7 +124,7 @@ void agc_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_slow), active_receiver->agc==AGC_SLOW);
   gtk_widget_show(b_slow);
   gtk_grid_attach(GTK_GRID(grid),b_slow,col,row,1,1);
-  g_signal_connect(b_slow,"pressed",G_CALLBACK(agc_select_cb),(gpointer)(long)AGC_SLOW);
+  g_signal_connect(b_slow,"toggled",G_CALLBACK(agc_select_cb),(gpointer)(long)AGC_SLOW);
 
   col++;
 
@@ -133,7 +133,7 @@ void agc_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_medium), active_receiver->agc==AGC_MEDIUM);
   gtk_widget_show(b_medium);
   gtk_grid_attach(GTK_GRID(grid),b_medium,col,row,1,1);
-  g_signal_connect(b_medium,"pressed",G_CALLBACK(agc_select_cb),(gpointer)(long)AGC_MEDIUM);
+  g_signal_connect(b_medium,"toggled",G_CALLBACK(agc_select_cb),(gpointer)(long)AGC_MEDIUM);
 
   col++;
 
@@ -142,7 +142,7 @@ void agc_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_fast), active_receiver->agc==AGC_FAST);
   gtk_widget_show(b_fast);
   gtk_grid_attach(GTK_GRID(grid),b_fast,col,row,1,1);
-  g_signal_connect(b_fast,"pressed",G_CALLBACK(agc_select_cb),(gpointer)(long)AGC_FAST);
+  g_signal_connect(b_fast,"toggled",G_CALLBACK(agc_select_cb),(gpointer)(long)AGC_FAST);
 
   gtk_container_add(GTK_CONTAINER(content),grid);
 
index a23c6bbd6e21fecf6ac01d97b0b45a222ef930c6..b0cec5bc8f07224b46110f8ba11ed42941bbc3e3 100644 (file)
@@ -59,13 +59,15 @@ static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_d
   return FALSE;
 }
 
-static void rx_ant_cb(GtkWidget *widget, gpointer data) {
-  int b=(GPOINTER_TO_UINT(data))>>4;
-  int ant=(GPOINTER_TO_UINT(data))&0xF;
-  BAND *band=band_get_band(b);
-  band->alexRxAntenna=ant;
-  if(active_receiver->id==0) {
-    set_alex_rx_antenna(ant);
+static void rx_ant_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    int b=(GPOINTER_TO_UINT(data))>>4;
+    int ant=(GPOINTER_TO_UINT(data))&0xF;
+    BAND *band=band_get_band(b);
+    band->alexRxAntenna=ant;
+    if(active_receiver->id==0) {
+      set_alex_rx_antenna(ant);
+    }
   }
 }
 
@@ -93,22 +95,15 @@ static void dac0_antenna_cb(GtkComboBox *widget,gpointer data) {
   }
 }
 
-static void rx_lime_ant_cb(GtkWidget *widget, gpointer data) {
-  int ant=(GPOINTER_TO_UINT(data))&0xF;
-  BAND *band=band_get_current_band();
-  band->alexRxAntenna=ant;
-  if(active_receiver->id==0) {
-    set_alex_rx_antenna(ant);
-  }
-}
-
-static void tx_ant_cb(GtkWidget *widget, gpointer data) {
-  int b=(GPOINTER_TO_UINT(data))>>4;
-  int ant=(GPOINTER_TO_UINT(data))&0xF;
-  BAND *band=band_get_band(b);
-  band->alexTxAntenna=ant;
-  if(active_receiver->id==0) {
-    set_alex_tx_antenna(ant);
+static void tx_ant_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    int b=(GPOINTER_TO_UINT(data))>>4;
+    int ant=(GPOINTER_TO_UINT(data))&0xF;
+    BAND *band=band_get_band(b);
+    band->alexTxAntenna=ant;
+    if(active_receiver->id==0) {
+      set_alex_tx_antenna(ant);
+    }
   }
 }
 
@@ -126,37 +121,37 @@ static void show_hf() {
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx1_b), band->alexRxAntenna==0);
         gtk_widget_show(rx1_b);
         gtk_grid_attach(GTK_GRID(grid),rx1_b,1,i+2,1,1);
-        g_signal_connect(rx1_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)(long)((i<<4)+0));
+        g_signal_connect(rx1_b,"toggled",G_CALLBACK(rx_ant_cb),(gpointer)(long)((i<<4)+0));
 
         GtkWidget *rx2_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(rx1_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx2_b), band->alexRxAntenna==1);
         gtk_widget_show(rx2_b);
         gtk_grid_attach(GTK_GRID(grid),rx2_b,2,i+2,1,1);
-        g_signal_connect(rx2_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)(long)((i<<4)+1));
+        g_signal_connect(rx2_b,"toggled",G_CALLBACK(rx_ant_cb),(gpointer)(long)((i<<4)+1));
 
         GtkWidget *rx3_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(rx2_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx3_b), band->alexRxAntenna==2);
         gtk_widget_show(rx3_b);
         gtk_grid_attach(GTK_GRID(grid),rx3_b,3,i+2,1,1);
-        g_signal_connect(rx3_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)(long)((i<<4)+2));
+        g_signal_connect(rx3_b,"toggled",G_CALLBACK(rx_ant_cb),(gpointer)(long)((i<<4)+2));
 
         GtkWidget *ext1_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(rx3_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ext1_b), band->alexRxAntenna==3);
         gtk_widget_show(ext1_b);
         gtk_grid_attach(GTK_GRID(grid),ext1_b,4,i+2,1,1);
-        g_signal_connect(ext1_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)(long)((i<<4)+3));
+        g_signal_connect(ext1_b,"toggled",G_CALLBACK(rx_ant_cb),(gpointer)(long)((i<<4)+3));
 
         GtkWidget *ext2_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(ext1_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ext2_b), band->alexRxAntenna==4);
         gtk_widget_show(ext2_b);
         gtk_grid_attach(GTK_GRID(grid),ext2_b,5,i+2,1,1);
-        g_signal_connect(ext2_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)(long)((i<<4)+4));
+        g_signal_connect(ext2_b,"toggled",G_CALLBACK(rx_ant_cb),(gpointer)(long)((i<<4)+4));
 
         GtkWidget *xvtr_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(ext2_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (xvtr_b), band->alexRxAntenna==5);
         gtk_widget_show(xvtr_b);
         gtk_grid_attach(GTK_GRID(grid),xvtr_b,6,i+2,1,1);
-        g_signal_connect(xvtr_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)(long)((i<<4)+5));
+        g_signal_connect(xvtr_b,"toggled",G_CALLBACK(rx_ant_cb),(gpointer)(long)((i<<4)+5));
 
         GtkWidget *ant_band_label=gtk_label_new(band->title);
         //gtk_widget_override_font(ant_band_label, pango_font_description_from_string("Arial 18"));
@@ -167,19 +162,19 @@ static void show_hf() {
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tx1_b), band->alexTxAntenna==0);
         gtk_widget_show(tx1_b);
         gtk_grid_attach(GTK_GRID(grid),tx1_b,8,i+2,1,1);
-        g_signal_connect(tx1_b,"pressed",G_CALLBACK(tx_ant_cb),(gpointer)(long)((i<<4)+0));
+        g_signal_connect(tx1_b,"toggled",G_CALLBACK(tx_ant_cb),(gpointer)(long)((i<<4)+0));
   
         GtkWidget *tx2_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(tx1_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tx2_b), band->alexTxAntenna==1);
         gtk_widget_show(tx2_b);
         gtk_grid_attach(GTK_GRID(grid),tx2_b,9,i+2,1,1);
-        g_signal_connect(tx2_b,"pressed",G_CALLBACK(tx_ant_cb),(gpointer)(long)((i<<4)+1));
+        g_signal_connect(tx2_b,"toggled",G_CALLBACK(tx_ant_cb),(gpointer)(long)((i<<4)+1));
   
         GtkWidget *tx3_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(tx2_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tx3_b), band->alexTxAntenna==2);
         gtk_widget_show(tx3_b);
         gtk_grid_attach(GTK_GRID(grid),tx3_b,10,i+2,1,1);
-        g_signal_connect(tx3_b,"pressed",G_CALLBACK(tx_ant_cb),(gpointer)(long)((i<<4)+2));
+        g_signal_connect(tx3_b,"toggled",G_CALLBACK(tx_ant_cb),(gpointer)(long)((i<<4)+2));
       }
     }
 }
@@ -198,37 +193,37 @@ static void show_xvtr() {
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx1_b), band->alexRxAntenna==0);
         gtk_widget_show(rx1_b);
         gtk_grid_attach(GTK_GRID(grid),rx1_b,1,i+2,1,1);
-        g_signal_connect(rx1_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+0));
+        g_signal_connect(rx1_b,"toggled",G_CALLBACK(rx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+0));
 
         GtkWidget *rx2_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(rx1_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx2_b), band->alexRxAntenna==1);
         gtk_widget_show(rx2_b);
         gtk_grid_attach(GTK_GRID(grid),rx2_b,2,i+2,1,1);
-        g_signal_connect(rx2_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+1));
+        g_signal_connect(rx2_b,"toggled",G_CALLBACK(rx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+1));
 
         GtkWidget *rx3_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(rx2_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx3_b), band->alexRxAntenna==2);
         gtk_widget_show(rx3_b);
         gtk_grid_attach(GTK_GRID(grid),rx3_b,3,i+2,1,1);
-        g_signal_connect(rx3_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+2));
+        g_signal_connect(rx3_b,"toggled",G_CALLBACK(rx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+2));
 
         GtkWidget *ext1_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(rx3_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ext1_b), band->alexRxAntenna==3);
         gtk_widget_show(ext1_b);
         gtk_grid_attach(GTK_GRID(grid),ext1_b,4,i+2,1,1);
-        g_signal_connect(ext1_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+3));
+        g_signal_connect(ext1_b,"toggled",G_CALLBACK(rx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+3));
 
         GtkWidget *ext2_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(ext1_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ext2_b), band->alexRxAntenna==4);
         gtk_widget_show(ext2_b);
         gtk_grid_attach(GTK_GRID(grid),ext2_b,5,i+2,1,1);
-        g_signal_connect(ext2_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+4));
+        g_signal_connect(ext2_b,"toggled",G_CALLBACK(rx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+4));
 
         GtkWidget *xvtr_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(ext2_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (xvtr_b), band->alexRxAntenna==5);
         gtk_widget_show(xvtr_b);
         gtk_grid_attach(GTK_GRID(grid),xvtr_b,6,i+2,1,1);
-        g_signal_connect(xvtr_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+5));
+        g_signal_connect(xvtr_b,"toggled",G_CALLBACK(rx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+5));
 
         GtkWidget *ant_band_label=gtk_label_new(band->title);
         //gtk_widget_override_font(ant_band_label, pango_font_description_from_string("Arial 18"));
@@ -239,19 +234,19 @@ static void show_xvtr() {
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tx1_b), band->alexTxAntenna==0);
         gtk_widget_show(tx1_b);
         gtk_grid_attach(GTK_GRID(grid),tx1_b,8,i+2,1,1);
-        g_signal_connect(tx1_b,"pressed",G_CALLBACK(tx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+0));
+        g_signal_connect(tx1_b,"toggled",G_CALLBACK(tx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+0));
   
         GtkWidget *tx2_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(tx1_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tx2_b), band->alexTxAntenna==1);
         gtk_widget_show(tx2_b);
         gtk_grid_attach(GTK_GRID(grid),tx2_b,9,i+2,1,1);
-        g_signal_connect(tx2_b,"pressed",G_CALLBACK(tx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+1));
+        g_signal_connect(tx2_b,"toggled",G_CALLBACK(tx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+1));
   
         GtkWidget *tx3_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(tx2_b));
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tx3_b), band->alexTxAntenna==2);
         gtk_widget_show(tx3_b);
         gtk_grid_attach(GTK_GRID(grid),tx3_b,10,i+2,1,1);
-        g_signal_connect(tx3_b,"pressed",G_CALLBACK(tx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+2));
+        g_signal_connect(tx3_b,"toggled",G_CALLBACK(tx_ant_cb),(gpointer)(long)(((i+BANDS)<<4)+2));
       }
     }
 }
@@ -402,7 +397,7 @@ void ant_menu(GtkWidget *parent) {
   if(radio->device==SOAPYSDR_USB_DEVICE) {
     int i;
 
-g_print("rx_antennas=%d\n",radio->info.soapy.rx_antennas);
+g_print("rx_antennas=%ld\n",radio->info.soapy.rx_antennas);
     if(radio->info.soapy.rx_antennas>0) {
       GtkWidget *antenna_label=gtk_label_new("RX Antenna:");
       gtk_grid_attach(GTK_GRID(grid),antenna_label,0,1,1,1);
@@ -418,7 +413,7 @@ g_print("rx_antennas=%d\n",radio->info.soapy.rx_antennas);
     }
 
     if(can_transmit) {
-      g_print("tx_antennas=%d\n",radio->info.soapy.tx_antennas);
+      g_print("tx_antennas=%ld\n",radio->info.soapy.tx_antennas);
       if(radio->info.soapy.tx_antennas>0) {
         GtkWidget *antenna_label=gtk_label_new("TX Antenna:");
         gtk_grid_attach(GTK_GRID(grid),antenna_label,0,2,1,1);
diff --git a/audio.c b/audio.c
index 832a8ea22753618edd3246e4c2fbb99b135f396f..f60eb6068260e90a9c5b94b549f10aece33a6d8e 100644 (file)
--- a/audio.c
+++ b/audio.c
@@ -169,6 +169,8 @@ int audio_open_input() {
 
 g_print("audio_open_input: %s\n",transmitter->microphone_name);
   
+  mic_buffer_size = 256;
+/*
   switch(protocol) {
     case ORIGINAL_PROTOCOL:
       mic_buffer_size = 720;
@@ -184,6 +186,7 @@ g_print("audio_open_input: %s\n",transmitter->microphone_name);
     default:
       break;
   }
+*/
   
   g_print("audio_open_input: mic_buffer_size=%d\n",mic_buffer_size);
   i=0;
@@ -241,7 +244,7 @@ g_print("audio_open_input: mic_buffer: size=%d channels=%d sample=%ld bytes\n",m
 
 g_print("audio_open_input: creating mic_read_thread\n");
   GError *error;
-  mic_read_thread_id = g_thread_try_new("local mic",mic_read_thread,NULL,&error);
+  mic_read_thread_id = g_thread_try_new("microphone",mic_read_thread,NULL,&error);
   if(!mic_read_thread_id ) {
     g_print("g_thread_new failed on mic_read_thread: %s\n",error->message);
   }
diff --git a/band.c b/band.c
index 2d6eb8eaad72cb3ea4805d304f0b49811d022381..baa6745a2f838ab713065b4cee82a12c63508160 100644 (file)
--- a/band.c
+++ b/band.c
@@ -647,5 +647,6 @@ int get_band_from_frequency(long long f) {
       }
     }
   }
+g_print("get_band_from_frequency: %lld id %d\n",f,found);
   return found;
 }
index 9a7a5034904ef9c64bbc26d13a566d25d6940c2c..9facf729c0558e74bbc4374331431cd776c182d8 100644 (file)
--- a/cw_menu.c
+++ b/cw_menu.c
@@ -68,8 +68,10 @@ static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_d
   return FALSE;
 }
 
-static void cw_vfo_cb(GtkWidget *widget, gpointer data) {
-  cw_is_on_vfo_freq=(uintptr_t)data;
+static void cw_vfo_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    cw_is_on_vfo_freq=(uintptr_t)data;
+  }
 }
 
 static void cw_keyer_internal_cb(GtkWidget *widget, gpointer data) {
@@ -107,9 +109,11 @@ static void cw_keys_reversed_cb(GtkWidget *widget, gpointer data) {
   cw_changed();
 }
 
-static void cw_keyer_mode_cb(GtkWidget *widget, gpointer data) {
-  cw_keyer_mode=GPOINTER_TO_UINT(data);
-  cw_changed();
+static void cw_keyer_mode_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    cw_keyer_mode=GPOINTER_TO_UINT(data);
+    cw_changed();
+  }
 }
 
 static void cw_keyer_sidetone_level_value_changed_cb(GtkWidget *widget, gpointer data) {
@@ -174,7 +178,7 @@ void cw_menu(GtkWidget *parent) {
   GtkWidget *cw_keyer_speed_b=gtk_spin_button_new_with_range(1.0,60.0,1.0);
   //gtk_widget_override_font(cw_keyer_speed_b, pango_font_description_from_string("Arial 18"));
   gtk_spin_button_set_value(GTK_SPIN_BUTTON(cw_keyer_speed_b),(double)cw_keyer_speed);
-  gtk_widget_show(cw_keyer_speed_b);
+    gtk_widget_show(cw_keyer_speed_b);
   gtk_grid_attach(GTK_GRID(grid),cw_keyer_speed_b,1,1,1,1);
   g_signal_connect(cw_keyer_speed_b,"value_changed",G_CALLBACK(cw_keyer_speed_value_changed_cb),NULL);
 
@@ -197,33 +201,33 @@ void cw_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_keyer_straight), cw_keyer_mode==KEYER_STRAIGHT);
   gtk_widget_show(cw_keyer_straight);
   gtk_grid_attach(GTK_GRID(grid),cw_keyer_straight,0,3,1,1);
-  g_signal_connect(cw_keyer_straight,"pressed",G_CALLBACK(cw_keyer_mode_cb),(gpointer *)KEYER_STRAIGHT);
+  g_signal_connect(cw_keyer_straight,"toggled",G_CALLBACK(cw_keyer_mode_cb),(gpointer *)KEYER_STRAIGHT);
 
   GtkWidget *cw_keyer_mode_a=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(cw_keyer_straight),"CW KEYER MODE A");
   //gtk_widget_override_font(cw_keyer_mode_a, pango_font_description_from_string("Arial 18"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_keyer_mode_a), cw_keyer_mode==KEYER_MODE_A);
   gtk_widget_show(cw_keyer_mode_a);
   gtk_grid_attach(GTK_GRID(grid),cw_keyer_mode_a,0,4,1,1);
-  g_signal_connect(cw_keyer_mode_a,"pressed",G_CALLBACK(cw_keyer_mode_cb),(gpointer *)KEYER_MODE_A);
+  g_signal_connect(cw_keyer_mode_a,"toggled",G_CALLBACK(cw_keyer_mode_cb),(gpointer *)KEYER_MODE_A);
 
   GtkWidget *cw_keyer_mode_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(cw_keyer_mode_a),"CW KEYER MODE B");
   //gtk_widget_override_font(cw_keyer_mode_b, pango_font_description_from_string("Arial 18"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_keyer_mode_b), cw_keyer_mode==KEYER_MODE_B);
   gtk_widget_show(cw_keyer_mode_b);
   gtk_grid_attach(GTK_GRID(grid),cw_keyer_mode_b,0,5,1,1);
-  g_signal_connect(cw_keyer_mode_b,"pressed",G_CALLBACK(cw_keyer_mode_cb),(gpointer *)KEYER_MODE_B);
+  g_signal_connect(cw_keyer_mode_b,"toggled",G_CALLBACK(cw_keyer_mode_cb),(gpointer *)KEYER_MODE_B);
 
   GtkWidget *cw_vfo=gtk_radio_button_new_with_label(NULL,"CW on VFO freq");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_vfo), cw_is_on_vfo_freq);
   gtk_widget_show(cw_vfo);
   gtk_grid_attach(GTK_GRID(grid),cw_vfo,1,3,1,1);
-  g_signal_connect(cw_vfo,"pressed",G_CALLBACK(cw_vfo_cb),(gpointer *)1);
+  g_signal_connect(cw_vfo,"toggled",G_CALLBACK(cw_vfo_cb),(gpointer *)1);
 
   GtkWidget *cw_vfo_pm=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(cw_vfo),"CW on VFO +/- sidetone");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_vfo_pm), cw_is_on_vfo_freq==0);
   gtk_widget_show(cw_vfo_pm);
   gtk_grid_attach(GTK_GRID(grid),cw_vfo_pm,1,4,1,1);
-  g_signal_connect(cw_vfo_pm,"pressed",G_CALLBACK(cw_vfo_cb),(gpointer *)0);
+  g_signal_connect(cw_vfo_pm,"toggled",G_CALLBACK(cw_vfo_cb),(gpointer *)0);
 
   GtkWidget *cw_keys_reversed_b=gtk_check_button_new_with_label("Keys reversed");
   //gtk_widget_override_font(cw_keys_reversed_b, pango_font_description_from_string("Arial 18"));
index 05b8a8977232aa0960e786ed64d203baf03bd9d8..c30f0317363d669f2c637620fc36c239f971bb0e 100644 (file)
@@ -54,14 +54,18 @@ static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_d
   return FALSE;
 }
 
-static void detector_mode_cb(GtkWidget *widget, gpointer data) {
-  display_detector_mode=GPOINTER_TO_UINT(data);
-  SetDisplayDetectorMode(active_receiver->id, 0, display_detector_mode);
+static void detector_mode_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    display_detector_mode=GPOINTER_TO_UINT(data);
+    SetDisplayDetectorMode(active_receiver->id, 0, display_detector_mode);
+  }
 }
 
-static void average_mode_cb(GtkWidget *widget, gpointer data) {
-  display_average_mode=GPOINTER_TO_UINT(data);
-  SetDisplayAverageMode(active_receiver->id, 0, display_average_mode);
+static void average_mode_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    display_average_mode=GPOINTER_TO_UINT(data);
+    SetDisplayAverageMode(active_receiver->id, 0, display_average_mode);
+  }
 }
 
 static void time_value_changed_cb(GtkWidget *widget, gpointer data) {
@@ -299,7 +303,7 @@ void display_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (detector_mode_peak), display_detector_mode==DETECTOR_MODE_PEAK);
   gtk_widget_show(detector_mode_peak);
   gtk_grid_attach(GTK_GRID(grid),detector_mode_peak,col,row,1,1);
-  g_signal_connect(detector_mode_peak,"pressed",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_PEAK);
+  g_signal_connect(detector_mode_peak,"toggled",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_PEAK);
 
   row++;
 
@@ -307,7 +311,7 @@ void display_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (detector_mode_rosenfell), display_detector_mode==DETECTOR_MODE_ROSENFELL);
   gtk_widget_show(detector_mode_rosenfell);
   gtk_grid_attach(GTK_GRID(grid),detector_mode_rosenfell,col,row,1,1);
-  g_signal_connect(detector_mode_rosenfell,"pressed",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_ROSENFELL);
+  g_signal_connect(detector_mode_rosenfell,"toggled",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_ROSENFELL);
 
   row++;
 
@@ -315,7 +319,7 @@ void display_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (detector_mode_average), display_detector_mode==DETECTOR_MODE_AVERAGE);
   gtk_widget_show(detector_mode_average);
   gtk_grid_attach(GTK_GRID(grid),detector_mode_average,col,row,1,1);
-  g_signal_connect(detector_mode_average,"pressed",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_AVERAGE);
+  g_signal_connect(detector_mode_average,"toggled",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_AVERAGE);
 
   row++;
 
@@ -323,7 +327,7 @@ void display_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (detector_mode_sample), display_detector_mode==DETECTOR_MODE_SAMPLE);
   gtk_widget_show(detector_mode_sample);
   gtk_grid_attach(GTK_GRID(grid),detector_mode_sample,col,row,1,1);
-  g_signal_connect(detector_mode_sample,"pressed",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_SAMPLE);
+  g_signal_connect(detector_mode_sample,"toggled",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_SAMPLE);
 
 
   col=3;
@@ -340,7 +344,7 @@ void display_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (average_mode_none), display_detector_mode==AVERAGE_MODE_NONE);
   gtk_widget_show(average_mode_none);
   gtk_grid_attach(GTK_GRID(grid),average_mode_none,col,row,1,1);
-  g_signal_connect(average_mode_none,"pressed",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_NONE);
+  g_signal_connect(average_mode_none,"toggled",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_NONE);
 
   row++;
 
@@ -348,7 +352,7 @@ void display_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (average_mode_recursive), display_average_mode==AVERAGE_MODE_RECURSIVE);
   gtk_widget_show(average_mode_recursive);
   gtk_grid_attach(GTK_GRID(grid),average_mode_recursive,col,row,1,1);
-  g_signal_connect(average_mode_recursive,"pressed",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_RECURSIVE);
+  g_signal_connect(average_mode_recursive,"toggled",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_RECURSIVE);
 
   row++;
 
@@ -356,7 +360,7 @@ void display_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (average_mode_time_window), display_average_mode==AVERAGE_MODE_TIME_WINDOW);
   gtk_widget_show(average_mode_time_window);
   gtk_grid_attach(GTK_GRID(grid),average_mode_time_window,col,row,1,1);
-  g_signal_connect(average_mode_time_window,"pressed",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_TIME_WINDOW);
+  g_signal_connect(average_mode_time_window,"toggled",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_TIME_WINDOW);
 
   row++;
 
@@ -364,7 +368,7 @@ void display_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (average_mode_log_recursive), display_average_mode==AVERAGE_MODE_LOG_RECURSIVE);
   gtk_widget_show(average_mode_log_recursive);
   gtk_grid_attach(GTK_GRID(grid),average_mode_log_recursive,col,row,1,1);
-  g_signal_connect(average_mode_log_recursive,"pressed",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_LOG_RECURSIVE);
+  g_signal_connect(average_mode_log_recursive,"toggled",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_LOG_RECURSIVE);
 
   row++;
 
index 385310eef7cd67853f2cd9925c8fbe696777910d..b707ab183d32621debd796abf4df8824bd45dbd5 100644 (file)
@@ -63,20 +63,25 @@ static void agc_hang_threshold_value_changed_cb(GtkWidget *widget, gpointer data
   }
 }
 
-static void pre_post_agc_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->nr_agc=GPOINTER_TO_UINT(data);
-  SetRXAEMNRPosition(active_receiver->id, active_receiver->nr_agc);
-
+static void pre_post_agc_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    active_receiver->nr_agc=GPOINTER_TO_UINT(data);
+    SetRXAEMNRPosition(active_receiver->id, active_receiver->nr_agc);
+  }
 }
 
-static void nr2_gain_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->nr2_gain_method=GPOINTER_TO_UINT(data);
-  SetRXAEMNRgainMethod(active_receiver->id, active_receiver->nr2_gain_method);
+static void nr2_gain_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    active_receiver->nr2_gain_method=GPOINTER_TO_UINT(data);
+    SetRXAEMNRgainMethod(active_receiver->id, active_receiver->nr2_gain_method);
+  }
 }
 
-static void nr2_npe_method_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->nr2_npe_method=GPOINTER_TO_UINT(data);
-  SetRXAEMNRnpeMethod(active_receiver->id, active_receiver->nr2_npe_method);
+static void nr2_npe_method_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    active_receiver->nr2_npe_method=GPOINTER_TO_UINT(data);
+    SetRXAEMNRnpeMethod(active_receiver->id, active_receiver->nr2_npe_method);
+  }
 }
 
 static void ae_cb(GtkWidget *widget, gpointer data) {
@@ -136,13 +141,13 @@ void dsp_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pre_agc_b),active_receiver->nr_agc==0);
   gtk_widget_show(pre_agc_b);
   gtk_grid_attach(GTK_GRID(grid),pre_agc_b,1,2,1,1);
-  g_signal_connect(pre_agc_b,"pressed",G_CALLBACK(pre_post_agc_cb),(gpointer *)0);
+  g_signal_connect(pre_agc_b,"toggled",G_CALLBACK(pre_post_agc_cb),(gpointer *)0);
 
   GtkWidget *post_agc_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(pre_agc_b),"Post AGC");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (post_agc_b), active_receiver->nr_agc==1);
   gtk_widget_show(post_agc_b);
   gtk_grid_attach(GTK_GRID(grid),post_agc_b,2,2,1,1);
-  g_signal_connect(post_agc_b,"pressed",G_CALLBACK(pre_post_agc_cb),(gpointer *)1);
+  g_signal_connect(post_agc_b,"toggled",G_CALLBACK(pre_post_agc_cb),(gpointer *)1);
 
   GtkWidget *nr2_gain_label=gtk_label_new("NR2 Gain Method");
   //gtk_widget_override_font(nr2_gain_label, pango_font_description_from_string("Arial 18"));
@@ -153,19 +158,19 @@ void dsp_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linear_b),active_receiver->nr2_gain_method==0);
   gtk_widget_show(linear_b);
   gtk_grid_attach(GTK_GRID(grid),linear_b,1,3,1,1);
-  g_signal_connect(linear_b,"pressed",G_CALLBACK(nr2_gain_cb),(gpointer *)0);
+  g_signal_connect(linear_b,"toggled",G_CALLBACK(nr2_gain_cb),(gpointer *)0);
 
   GtkWidget *log_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(linear_b),"Log");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (log_b), active_receiver->nr2_gain_method==1);
   gtk_widget_show(log_b);
   gtk_grid_attach(GTK_GRID(grid),log_b,2,3,1,1);
-  g_signal_connect(log_b,"pressed",G_CALLBACK(nr2_gain_cb),(gpointer *)1);
+  g_signal_connect(log_b,"toggled",G_CALLBACK(nr2_gain_cb),(gpointer *)1);
 
   GtkWidget *gamma_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(log_b),"Gamma");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gamma_b), active_receiver->nr2_gain_method==2);
   gtk_widget_show(gamma_b);
   gtk_grid_attach(GTK_GRID(grid),gamma_b,3,3,1,1);
-  g_signal_connect(gamma_b,"pressed",G_CALLBACK(nr2_gain_cb),(gpointer *)2);
+  g_signal_connect(gamma_b,"toggled",G_CALLBACK(nr2_gain_cb),(gpointer *)2);
 
   GtkWidget *nr2_npe_method_label=gtk_label_new("NR2 NPE Method");
   //gtk_widget_override_font(nr2_npe_method_label, pango_font_description_from_string("Arial 18"));
@@ -176,13 +181,13 @@ void dsp_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (osms_b),active_receiver->nr2_npe_method==0);
   gtk_widget_show(osms_b);
   gtk_grid_attach(GTK_GRID(grid),osms_b,1,4,1,1);
-  g_signal_connect(osms_b,"pressed",G_CALLBACK(nr2_npe_method_cb),(gpointer *)0);
+  g_signal_connect(osms_b,"toggled",G_CALLBACK(nr2_npe_method_cb),(gpointer *)0);
 
   GtkWidget *mmse_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(osms_b),"MMSE");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mmse_b), active_receiver->nr2_npe_method==1);
   gtk_widget_show(mmse_b);
   gtk_grid_attach(GTK_GRID(grid),mmse_b,2,4,1,1);
-  g_signal_connect(mmse_b,"pressed",G_CALLBACK(nr2_npe_method_cb),(gpointer *)1);
+  g_signal_connect(mmse_b,"toggled",G_CALLBACK(nr2_npe_method_cb),(gpointer *)1);
 
   GtkWidget *ae_b=gtk_check_button_new_with_label("NR2 AE Filter");
   //gtk_widget_override_font(ae_b, pango_font_description_from_string("Arial 18"));
index 5fc2bac9784158e18c9de2d9b33776f0e5057d5d..6ef266e23ea27d0148ab1b2dc427f5f5ef4c70e3 100644 (file)
@@ -169,26 +169,25 @@ void equalizer_menu(GtkWidget *parent) {
 
 
   GtkWidget *label=gtk_label_new("Preamp");
-  gtk_grid_attach(GTK_GRID(grid),label,0,2,1,1);
+  gtk_grid_attach(GTK_GRID(grid),label,0,2,1,2);
 
   label=gtk_label_new("Low");
-  gtk_grid_attach(GTK_GRID(grid),label,1,2,1,1);
+  gtk_grid_attach(GTK_GRID(grid),label,0,4,1,2);
 
   label=gtk_label_new("Mid");
-  gtk_grid_attach(GTK_GRID(grid),label,2,2,1,1);
+  gtk_grid_attach(GTK_GRID(grid),label,0,6,1,2);
 
   label=gtk_label_new("High");
-  gtk_grid_attach(GTK_GRID(grid),label,3,2,1,1);
+  gtk_grid_attach(GTK_GRID(grid),label,0,8,1,2);
 
-  preamp_scale=gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL,-12.0,15.0,1.0);
+  preamp_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,-12.0,15.0,1.0);
   if(can_transmit) {
     gtk_range_set_value(GTK_RANGE(preamp_scale),(double)tx_equalizer[0]);
   } else {
     gtk_range_set_value(GTK_RANGE(preamp_scale),(double)rx_equalizer[0]);
   }
   g_signal_connect(preamp_scale,"value-changed",G_CALLBACK(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);
+  gtk_grid_attach(GTK_GRID(grid),preamp_scale,1,2,4,2);
   gtk_scale_add_mark(GTK_SCALE(preamp_scale),-12.0,GTK_POS_LEFT,"-12dB");
   gtk_scale_add_mark(GTK_SCALE(preamp_scale),-9.0,GTK_POS_LEFT,NULL);
   gtk_scale_add_mark(GTK_SCALE(preamp_scale),-6.0,GTK_POS_LEFT,NULL);
@@ -200,14 +199,14 @@ 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");
 
-  low_scale=gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL,-12.0,15.0,1.0);
+  low_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,-12.0,15.0,1.0);
   if(can_transmit) {
     gtk_range_set_value(GTK_RANGE(low_scale),(double)tx_equalizer[1]);
   } else {
     gtk_range_set_value(GTK_RANGE(low_scale),(double)rx_equalizer[1]);
   }
   g_signal_connect(low_scale,"value-changed",G_CALLBACK(value_changed_cb),(gpointer)1);
-  gtk_grid_attach(GTK_GRID(grid),low_scale,1,3,1,10);
+  gtk_grid_attach(GTK_GRID(grid),low_scale,1,4,4,2);
   gtk_scale_add_mark(GTK_SCALE(low_scale),-12.0,GTK_POS_LEFT,"-12dB");
   gtk_scale_add_mark(GTK_SCALE(low_scale),-9.0,GTK_POS_LEFT,NULL);
   gtk_scale_add_mark(GTK_SCALE(low_scale),-6.0,GTK_POS_LEFT,NULL);
@@ -219,14 +218,14 @@ 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");
 
-  mid_scale=gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL,-12.0,15.0,1.0);
+  mid_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,-12.0,15.0,1.0);
   if(can_transmit) {
     gtk_range_set_value(GTK_RANGE(mid_scale),(double)tx_equalizer[2]);
   } else {
     gtk_range_set_value(GTK_RANGE(mid_scale),(double)rx_equalizer[2]);
   }
   g_signal_connect(mid_scale,"value-changed",G_CALLBACK(value_changed_cb),(gpointer)2);
-  gtk_grid_attach(GTK_GRID(grid),mid_scale,2,3,1,10);
+  gtk_grid_attach(GTK_GRID(grid),mid_scale,1,6,4,2);
   gtk_scale_add_mark(GTK_SCALE(mid_scale),-12.0,GTK_POS_LEFT,"-12dB");
   gtk_scale_add_mark(GTK_SCALE(mid_scale),-9.0,GTK_POS_LEFT,NULL);
   gtk_scale_add_mark(GTK_SCALE(mid_scale),-6.0,GTK_POS_LEFT,NULL);
@@ -238,14 +237,14 @@ 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");
 
-  high_scale=gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL,-12.0,15.0,1.0);
+  high_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,-12.0,15.0,1.0);
   if(can_transmit) {
     gtk_range_set_value(GTK_RANGE(high_scale),(double)tx_equalizer[3]);
   } else {
     gtk_range_set_value(GTK_RANGE(high_scale),(double)rx_equalizer[3]);
   }
   g_signal_connect(high_scale,"value-changed",G_CALLBACK(value_changed_cb),(gpointer)3);
-  gtk_grid_attach(GTK_GRID(grid),high_scale,3,3,1,10);
+  gtk_grid_attach(GTK_GRID(grid),high_scale,1,8,4,2);
   gtk_scale_add_mark(GTK_SCALE(high_scale),-12.0,GTK_POS_LEFT,"-12dB");
   gtk_scale_add_mark(GTK_SCALE(high_scale),-9.0,GTK_POS_LEFT,NULL);
   gtk_scale_add_mark(GTK_SCALE(high_scale),-6.0,GTK_POS_LEFT,NULL);
index 84f892fad3142318173bde3f77d69cdb0be66a97..76c2d3c8bf6cb70d3b4379a5da6a4ce777c87a5b 100644 (file)
@@ -52,13 +52,17 @@ static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_d
   return FALSE;
 }
 
-static void filter_type_cb(GtkWidget *widget, gpointer data) {
-  set_filter_type(GPOINTER_TO_UINT(data));
+static void filter_type_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    set_filter_type(GPOINTER_TO_UINT(data));
+  }
 }
 
 #ifdef SET_FILTER_SIZE
-static void filter_size_cb(GtkWidget *widget, gpointer data) {
-  set_filter_size((int)data);
+static void filter_size_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    set_filter_size((int)data);
+  }
 }
 #endif
 
@@ -102,14 +106,14 @@ void fft_menu(GtkWidget *parent) {
   GtkWidget *linear_phase=gtk_radio_button_new_with_label(NULL,"Linear Phase");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linear_phase), receiver[0]->low_latency==0);
   gtk_grid_attach(GTK_GRID(grid),linear_phase,col,row,1,1);
-  g_signal_connect(linear_phase,"pressed",G_CALLBACK(filter_type_cb),(gpointer *)0);
+  g_signal_connect(linear_phase,"toggled",G_CALLBACK(filter_type_cb),(gpointer *)0);
 
   col++;
 
   GtkWidget *low_latency=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(linear_phase),"Low Latency");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (low_latency), receiver[0]->low_latency==1);
   gtk_grid_attach(GTK_GRID(grid),low_latency,col,row,1,1);
-  g_signal_connect(low_latency,"pressed",G_CALLBACK(filter_type_cb),(gpointer *)1);
+  g_signal_connect(low_latency,"toggled",G_CALLBACK(filter_type_cb),(gpointer *)1);
 
 #ifdef SET_FILTER_SIZE
 
@@ -125,35 +129,35 @@ void fft_menu(GtkWidget *parent) {
   GtkWidget *filter_1024=gtk_radio_button_new_with_label(NULL,"1024");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (filter_1024), receiver[0]->fft_size==1024);
   gtk_grid_attach(GTK_GRID(grid),filter_1024,col,row,1,1);
-  g_signal_connect(filter_1024,"pressed",G_CALLBACK(filter_size_cb),(gpointer *)1024);
+  g_signal_connect(filter_1024,"toggled",G_CALLBACK(filter_size_cb),(gpointer *)1024);
 
   col++;
 
   GtkWidget *filter_2048=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(filter_1024),"2048");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (filter_2048), receiver[0]->fft_size==2048);
   gtk_grid_attach(GTK_GRID(grid),filter_2048,col,row,1,1);
-  g_signal_connect(filter_2048,"pressed",G_CALLBACK(filter_size_cb),(gpointer *)2048);
+  g_signal_connect(filter_2048,"toggled",G_CALLBACK(filter_size_cb),(gpointer *)2048);
 
   col++;
 
-  GtkWidget *filter_4096=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(filter_2048),"4096");
+  GtkWidget *filter_4096=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(filter_1024),"4096");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (filter_4096), receiver[0]->fft_size==4096);
   gtk_grid_attach(GTK_GRID(grid),filter_4096,col,row,1,1);
-  g_signal_connect(filter_4096,"pressed",G_CALLBACK(filter_size_cb),(gpointer *)4096);
+  g_signal_connect(filter_4096,"toggled",G_CALLBACK(filter_size_cb),(gpointer *)4096);
 
   col++;
 
-  GtkWidget *filter_8192=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(filter_4096),"8192");
+  GtkWidget *filter_8192=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(filter_1024),"8192");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (filter_8192), receiver[0]->fft_size==8192);
   gtk_grid_attach(GTK_GRID(grid),filter_8192,col,row,1,1);
-  g_signal_connect(filter_8192,"pressed",G_CALLBACK(filter_size_cb),(gpointer *)8192);
+  g_signal_connect(filter_8192,"toggled",G_CALLBACK(filter_size_cb),(gpointer *)8192);
 
   col++;
 
-  GtkWidget *filter_16384=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(filter_8192),"16384");
+  GtkWidget *filter_16384=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(filter_1024),"16384");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (filter_16384), receiver[0]->fft_size==16384);
   gtk_grid_attach(GTK_GRID(grid),filter_16384,col,row,1,1);
-  g_signal_connect(filter_16384,"pressed",G_CALLBACK(filter_size_cb),(gpointer *)16394);
+  g_signal_connect(filter_16384,"toggled",G_CALLBACK(filter_size_cb),(gpointer *)16394);
 
 #endif
   gtk_container_add(GTK_CONTAINER(content),grid);
index b118b1eecefb35611027652cfcf34ae6374cc483..7a1fdc5fb7f4135c49bf42fab11d852a67cccd5c 100644 (file)
@@ -127,12 +127,9 @@ static gboolean freqent_select_cb (GtkWidget *widget, gpointer data) {
             }
             if(b!=band_get_current()) {
               BAND *band=band_set_current(b);
-              BANDSTACK_ENTRY *entry=bandstack_entry_get_current();
-              //setMode(entry->mode);
               set_mode(active_receiver,entry->mode);
               FILTER* band_filters=filters[entry->mode];
               FILTER* band_filter=&band_filters[entry->filter];
-              //setFilter(band_filter->low,band_filter->high);
               set_filter(active_receiver,band_filter->low,band_filter->high);
               if(active_receiver->id==0) {
                 set_alex_rx_antenna(band->alexRxAntenna);
index 53d6dff2d42a29b40de0df4f3d5ebccb1a9c924b..d4ce53074aab29a101d7e6bc314e4cac3232c8ce 100644 (file)
@@ -41,6 +41,7 @@ struct frequency_info* info;
 // through the bottom
 //
 #define NOBAND -1
+#ifdef FREQUENCY_INFO
 struct frequency_info frequencyInfo[]=
     {
 
@@ -355,6 +356,57 @@ struct frequency_info frequencyInfo[]=
         
 
     };
+#else
+struct frequency_info frequencyInfo[]=
+    {
+
+        {     135700LL,      137800LL, "136kHz",                             band136, TRUE },
+        {     153000LL,      279000LL, "AM - Long Wave",                     bandGen, FALSE},
+        {     472000LL,      479000LL, "472kHz",                             band472, TRUE },
+        {     530000LL,     1710000LL, "Broadcast AM Med Wave",              bandGen, FALSE},
+        {    1800000LL,     1999999LL, "160M",                               band160, TRUE },
+        {    2300000LL,     2495000LL, "120M Short Wave",                    bandGen, FALSE},
+        {    2500000LL,     2500000LL, "WWV",                                bandWWV, FALSE},
+        {    3200000LL,     3400000LL, "90M Short Wave",                     bandGen, FALSE},
+        {    3500000LL,     3999999LL, "80M",                                band80,  TRUE },
+        {    4750000LL,     4999999LL, "60M Short Wave",                     bandGen, FALSE},
+        {    5000000LL,     5000000LL, "WWV",                                bandWWV, FALSE},
+        {    5261250LL,     5408000LL, "60M",                                band60,  TRUE },
+        {    5900000LL,     6200000LL, "49M Short Wave",                     bandGen, FALSE},
+        {    7000000LL,     7299999LL, "40M",                                band40,  TRUE },
+        {    7300000LL,     7350000LL, "41M Short Wave",                     bandGen, FALSE},
+        {    9400000LL,     9900000LL, "31M Short Wave",                     bandGen, FALSE},
+        {   10000000LL,    10000000LL, "WWV",                                bandWWV, FALSE},
+        {   10100000LL,    10149999LL, "30M",                                band30,  TRUE },
+        {   11600000LL,    12100000LL, "25M Short Wave",                     bandGen, FALSE},
+        {   13570000LL,    13870000LL, "22M Short Wave",                     bandGen, FALSE},
+        {   14000000LL,    14349999LL, "20M",                                band20,  TRUE },
+        {   15000000LL,    15000000LL, "WWV",                                bandWWV, FALSE},
+        {   15100000LL,    15800000LL, "19M Short Wave",                     bandGen, FALSE},
+        {   17480000LL,    17900000LL, "16M Short Wave",                     bandGen, FALSE},
+        {   18068000LL,    18167999LL, "17M",                                band17,  TRUE },
+        {   18900000LL,    19020000LL, "15M Short Wave",                     bandGen, FALSE},
+        {   20000000LL,    20000000LL, "WWV",                                bandWWV, FALSE},
+        {   21000000LL,    21449999LL, "15M",                                band15,  TRUE },
+        {   21450000LL,    21850000LL, "13M Short Wave",                     bandGen, FALSE},
+        {   24890000LL,    24989999LL, "12M",                                band12,  TRUE },
+        {   25600000LL,    26100000LL, "11M Short Wave",                     bandGen, FALSE},
+        {   28000000LL,    29699999LL, "10M",                                band10,  TRUE },
+        {   50000000LL,    53999999LL, "6M",                                 band6,   TRUE },
+        {  144000000LL,   147999999LL, "2M",                                 NOBAND,  TRUE },
+        {  222000000LL,   224979999LL, "125CM",                              NOBAND,  TRUE },
+        {  420000000LL,   449999999LL, "70CM",                               NOBAND,  TRUE },
+        {  902000000LL,   927999999LL, "33CM",                               NOBAND,  TRUE },
+        { 1240000000LL,  1299999999LL, "23CM",                               NOBAND,  TRUE },
+        { 2300000000LL,  2449999999LL, "13cm",                               NOBAND,  TRUE },
+        { 3456000000LL,  3456399999LL, "3.4GHz",                             NOBAND,  TRUE },
+        { 5760000000LL,  5760399999LL, "5.7GHz",                             NOBAND,  TRUE },
+        {10000000000LL, 10499999999LL, "10GHz",                              NOBAND,  TRUE },
+        {24192000000LL, 24192399999LL, "24GHz",                              NOBAND,  TRUE },
+        {47088000000LL, 47088399999LL, "47GHz",                              NOBAND,  TRUE },
+        {0LL,           0LL,           "",                                   0,       FALSE}
+    };
+#endif
 
 /* --------------------------------------------------------------------------*/
 /** 
@@ -420,7 +472,9 @@ char* getFrequencyInfo(long long frequency,int filter_low,int filter_high) {
         info++;
     }
 
-//fprintf(stderr,"info: %s tx=%d\n", info->info, info->transmit);
+if(info) {
+  g_print("getFrequencyInfo: %s tx=%d\n", info->info, info->transmit);
+}
 
     return result;
 }
@@ -450,6 +504,8 @@ int getBand(long long frequency) {
         info++;
     }
 
+
+g_print("getBand for %lld is %s (%d)\n",frequency,info->info,info->band);
     return result;
 }
 
diff --git a/gpio.c b/gpio.c
index 5ae0d6f45a31ba4bc6e8a36f2eae5726f8acb038..88b49bf368a55010d0c8fec5090cd49576a274b2 100644 (file)
--- a/gpio.c
+++ b/gpio.c
@@ -446,7 +446,7 @@ static int vfo_function_released(void *data) {
 
 static int e_function_pressed(void *data) {
   int action=(int)data;
-fprintf(stderr,"e_function_pressed: %d\n",action);
+//g_print("e_function_pressed: %d\n",action);
   switch(action) {
     case TUNE:
       if(can_transmit) g_idle_add(ext_tune_update,NULL);
@@ -765,7 +765,6 @@ static void moxAlert() {
 static unsigned long vfo_debounce=0;
 
 static void vfoFunctionAlert() {
-    int t=millis();
     if(t-vfo_debounce > settle_time) {
       int level=digitalRead(VFO_FUNCTION);
       if(level==0) {
@@ -778,49 +777,20 @@ static void vfoFunctionAlert() {
 }
 #endif
 
-static void vfoEncoderInt(int A_or_B) {
-    static int vfoA=1, vfoB=1;
-    int levelA=digitalRead(VFO_ENCODER_A);
-    int levelB=digitalRead(VFO_ENCODER_B);
+static void vfoEncoderInt() {
+  static int vfoA=1;
+  int levelA=digitalRead(VFO_ENCODER_A);
+  int levelB=digitalRead(VFO_ENCODER_B);
 
   if(levelA!=vfoA) {
     if(levelA==levelB) ++vfoEncoderPos;
     if(levelA!=levelB) --vfoEncoderPos;
     vfoA=levelA;
   }
-/*
-  if(levelA!=e2CurrentA) {
-    if(levelA==levelB) ++e2EncoderPos;
-    if(levelA!=levelB) --e2EncoderPos;
-    e2CurrentA=levelA;
-  }
-
-    if(vfo_A==switch_A && vfo_B==switch_B) {
-      return; // same as last
-    }
-    vfo_A=switch_A;
-    vfo_B=switch_B;
-    if(switch_A && switch_B) {
-      if(A_or_B==VFO_ENCODER_B) {
-        vfoEncoderPos--;
-      } else {
-        vfoEncoderPos++;
-      }
-    }
-*/
-}
-
-static void vfoEncoderA() {
-    vfoEncoderInt(VFO_ENCODER_A);
 }
 
-static void vfoEncoderB() {
-    vfoEncoderInt(VFO_ENCODER_B);
-}
-
-static void e2EncoderInterrupt(int gpio) {
-  static int e2CurrentA=1, e2CurrentB=1;
-
+static void e2EncoderInt() {
+  static int e2CurrentA=1;
   int levelA=digitalRead(E2_ENCODER_A);
   int levelB=digitalRead(E2_ENCODER_B);
 
@@ -831,18 +801,9 @@ static void e2EncoderInterrupt(int gpio) {
   }
 }
 
-static void e2EncoderA() {
-  e2EncoderInterrupt(E2_ENCODER_A);
-}
-
-static void e2EncoderB() {
-  e2EncoderInterrupt(E2_ENCODER_B);
-}
-
 #if defined (CONTROLLER2_V2)
-static void e2TopEncoderInterrupt(int gpio) {
-  static int e2TopCurrentA=1, e2TopCurrentB=1;
-
+static void e2TopEncoderInt() {
+  static int e2TopCurrentA=1;
   int levelA=digitalRead(E2_TOP_ENCODER_A);
   int levelB=digitalRead(E2_TOP_ENCODER_B);
 
@@ -852,19 +813,10 @@ static void e2TopEncoderInterrupt(int gpio) {
     e2TopCurrentA=levelA;
   }
 }
-
-static void e2TopEncoderA() {
-  e2TopEncoderInterrupt(E2_TOP_ENCODER_A);
-}
-
-static void e2TopEncoderB() {
-  e2TopEncoderInterrupt(E2_TOP_ENCODER_B);
-}
 #endif
 
-static void e3EncoderInterrupt(int gpio) {
-  static int e3CurrentA=1, e3CurrentB=1;
-
+static void e3EncoderInt() {
+  static int e3CurrentA=1;
   int levelA=digitalRead(E3_ENCODER_A);
   int levelB=digitalRead(E3_ENCODER_B);
 
@@ -875,18 +827,9 @@ static void e3EncoderInterrupt(int gpio) {
   }
 }
 
-static void e3EncoderA() {
-  e3EncoderInterrupt(E3_ENCODER_A);
-}
-
-static void e3EncoderB() {
-  e3EncoderInterrupt(E3_ENCODER_B);
-}
-
 #if defined (CONTROLLER2_V2)
-static void e3TopEncoderInterrupt(int gpio) {
-  static int e3TopCurrentA=1, e3TopCurrentB=1;
-
+static void e3TopEncoderInt() {
+  static int e3TopCurrentA=1;
   int levelA=digitalRead(E3_TOP_ENCODER_A);
   int levelB=digitalRead(E3_TOP_ENCODER_B);
 
@@ -897,19 +840,10 @@ static void e3TopEncoderInterrupt(int gpio) {
     e3TopCurrentA=levelA;
   }
 }
-
-static void e3TopEncoderA() {
-  e3TopEncoderInterrupt(E3_TOP_ENCODER_A);
-}
-
-static void e3TopEncoderB() {
-  e3TopEncoderInterrupt(E3_TOP_ENCODER_B);
-}
 #endif
 
-static void e4EncoderInterrupt(int gpio) {
-  static int e4CurrentA=1, e4CurrentB=1;
-
+static void e4EncoderInt() {
+  static int e4CurrentA=1;
   int levelA=digitalRead(E4_ENCODER_A);
   int levelB=digitalRead(E4_ENCODER_B);
 
@@ -920,18 +854,9 @@ static void e4EncoderInterrupt(int gpio) {
   }
 }
 
-static void e4EncoderA() {
-  e4EncoderInterrupt(E4_ENCODER_A);
-}
-
-static void e4EncoderB() {
-  e4EncoderInterrupt(E4_ENCODER_B);
-}
-
 #if defined (CONTROLLER2_V2)
-static void e4TopEncoderInterrupt(int gpio) {
-  static int e4TopCurrentA=1, e4TopCurrentB=1;
-
+static void e4TopEncoderInt() {
+  static int e4TopCurrentA=1;
   int levelA=digitalRead(E4_TOP_ENCODER_A);
   int levelB=digitalRead(E4_TOP_ENCODER_B);
 
@@ -941,21 +866,12 @@ static void e4TopEncoderInterrupt(int gpio) {
     e4TopCurrentA=levelA;
   }
 }
-
-static void e4TopEncoderA() {
-  e4TopEncoderInterrupt(E4_TOP_ENCODER_A);
-}
-
-static void e4TopEncoderB() {
-  e4TopEncoderInterrupt(E4_TOP_ENCODER_B);
-}
 #endif
 
 
 #if defined (CONTROLLER2_V2)  || defined (CONTROLLER2_V1)
-static void e5EncoderInterrupt(int gpio) {
-  static int e5CurrentA=1, e5CurrentB=1;
-
+static void e5EncoderInt() {
+  static int e5CurrentA=1;
   int levelA=digitalRead(E5_ENCODER_A);
   int levelB=digitalRead(E5_ENCODER_B);
 
@@ -966,20 +882,11 @@ static void e5EncoderInterrupt(int gpio) {
     e5CurrentA=levelA;
   }
 }
-
-static void e5EncoderA() {
-  e5EncoderInterrupt(E5_ENCODER_A);
-}
-
-static void e5EncoderB() {
-  e5EncoderInterrupt(E5_ENCODER_B);
-}
 #endif
 
 #if defined (CONTROLLER2_V2)
-static void e5TopEncoderInterrupt(int gpio) {
-  static int e5TopCurrentA=1, e5TopCurrentB=1;
-
+static void e5TopEncoderInt() {
+  static int e5TopCurrentA=1;
   int levelA=digitalRead(E5_TOP_ENCODER_A);
   int levelB=digitalRead(E5_TOP_ENCODER_B);
 
@@ -989,14 +896,6 @@ static void e5TopEncoderInterrupt(int gpio) {
     e5TopCurrentA=levelA;
   }
 }
-
-static void e5TopEncoderA() {
-  e5TopEncoderInterrupt(E5_TOP_ENCODER_A);
-}
-
-static void e5TopEncoderB() {
-  e5TopEncoderInterrupt(E5_TOP_ENCODER_B);
-}
 #endif
 
 
@@ -1422,13 +1321,11 @@ int gpio_init() {
     setup_pin(VFO_FUNCTION, PUD_UP, &vfoFunctionAlert);
     vfoFunction=0;
 #endif
-    setup_encoder_pin(VFO_ENCODER_A,ENABLE_VFO_PULLUP?PUD_UP:PUD_DOWN,&vfoEncoderA);
+    setup_encoder_pin(VFO_ENCODER_A,ENABLE_VFO_PULLUP?PUD_UP:PUD_DOWN,&vfoEncoderInt);
     setup_encoder_pin(VFO_ENCODER_B,ENABLE_VFO_PULLUP?PUD_UP:PUD_DOWN,NULL);
-    //setup_encoder_pin(VFO_ENCODER_B,ENABLE_VFO_PULLUP?PUD_UP:PUD_DOWN,&vfoEncoderB);
 #else
-    setup_encoder_pin(VFO_ENCODER_A,ENABLE_VFO_PULLUP?PUD_UP:PUD_DOWN,&vfoEncoderA);
+    setup_encoder_pin(VFO_ENCODER_A,ENABLE_VFO_PULLUP?PUD_UP:PUD_DOWN,&vfoEncoderInt);
     setup_encoder_pin(VFO_ENCODER_B,ENABLE_VFO_PULLUP?PUD_UP:PUD_DOWN,NULL);
-    //setup_encoder_pin(VFO_ENCODER_B,ENABLE_VFO_PULLUP?PUD_UP:PUD_DOWN,&vfoEncoderB);
 #endif
     vfoEncoderPos=0;
   }
@@ -1436,13 +1333,13 @@ int gpio_init() {
   if(ENABLE_E2_ENCODER) {
     setup_pin(E2_FUNCTION, PUD_UP, &e2FunctionAlert);
          
-    setup_encoder_pin(E2_ENCODER_A,ENABLE_E2_PULLUP?PUD_UP:PUD_OFF,&e2EncoderA);
+    setup_encoder_pin(E2_ENCODER_A,ENABLE_E2_PULLUP?PUD_UP:PUD_OFF,&e2EncoderInt);
     setup_encoder_pin(E2_ENCODER_B,ENABLE_E2_PULLUP?PUD_UP:PUD_OFF,NULL);
     e2EncoderPos=0;
 
 
 #ifdef CONTROLLER2_V2
-    setup_encoder_pin(E2_TOP_ENCODER_A,ENABLE_E2_PULLUP?PUD_UP:PUD_OFF,&e2TopEncoderA);
+    setup_encoder_pin(E2_TOP_ENCODER_A,ENABLE_E2_PULLUP?PUD_UP:PUD_OFF,&e2TopEncoderInt);
     setup_encoder_pin(E2_TOP_ENCODER_B,ENABLE_E2_PULLUP?PUD_UP:PUD_OFF,NULL);
     e2TopEncoderPos=0;
 #endif
@@ -1451,12 +1348,12 @@ int gpio_init() {
   if(ENABLE_E3_ENCODER) {
     setup_pin(E3_FUNCTION, PUD_UP, &e3FunctionAlert);
        
-    setup_encoder_pin(E3_ENCODER_A,ENABLE_E3_PULLUP?PUD_UP:PUD_OFF,&e3EncoderA);
+    setup_encoder_pin(E3_ENCODER_A,ENABLE_E3_PULLUP?PUD_UP:PUD_OFF,&e3EncoderInt);
     setup_encoder_pin(E3_ENCODER_B,ENABLE_E3_PULLUP?PUD_UP:PUD_OFF,NULL);
     e3EncoderPos=0;
 
 #ifdef CONTROLLER2_V2
-    setup_encoder_pin(E3_TOP_ENCODER_A,ENABLE_E3_PULLUP?PUD_UP:PUD_OFF,&e3TopEncoderA);
+    setup_encoder_pin(E3_TOP_ENCODER_A,ENABLE_E3_PULLUP?PUD_UP:PUD_OFF,&e3TopEncoderInt);
     setup_encoder_pin(E3_TOP_ENCODER_B,ENABLE_E3_PULLUP?PUD_UP:PUD_OFF,NULL);
     e3TopEncoderPos=0;
 #endif
@@ -1465,12 +1362,12 @@ int gpio_init() {
   if(ENABLE_E4_ENCODER) {
     setup_pin(E4_FUNCTION, PUD_UP, &e4FunctionAlert);
          
-    setup_encoder_pin(E4_ENCODER_A,ENABLE_E4_PULLUP?PUD_UP:PUD_OFF,&e4EncoderA);
+    setup_encoder_pin(E4_ENCODER_A,ENABLE_E4_PULLUP?PUD_UP:PUD_OFF,&e4EncoderInt);
     setup_encoder_pin(E4_ENCODER_B,ENABLE_E4_PULLUP?PUD_UP:PUD_OFF,NULL);
     e4EncoderPos=0;
          
 #ifdef CONTROLLER2_V2
-    setup_encoder_pin(E4_TOP_ENCODER_A,ENABLE_E4_PULLUP?PUD_UP:PUD_OFF,&e4TopEncoderA);
+    setup_encoder_pin(E4_TOP_ENCODER_A,ENABLE_E4_PULLUP?PUD_UP:PUD_OFF,&e4TopEncoderInt);
     setup_encoder_pin(E4_TOP_ENCODER_B,ENABLE_E4_PULLUP?PUD_UP:PUD_OFF,NULL);
     e4TopEncoderPos=0;
 #endif
@@ -1480,12 +1377,12 @@ int gpio_init() {
   if(ENABLE_E5_ENCODER) {
     setup_pin(E5_FUNCTION, PUD_UP, &e5FunctionAlert);
 
-    setup_encoder_pin(E5_ENCODER_A,ENABLE_E5_PULLUP?PUD_UP:PUD_OFF,&e5EncoderA);
+    setup_encoder_pin(E5_ENCODER_A,ENABLE_E5_PULLUP?PUD_UP:PUD_OFF,&e5EncoderInt);
     setup_encoder_pin(E5_ENCODER_B,ENABLE_E5_PULLUP?PUD_UP:PUD_OFF,NULL);
     e5EncoderPos=0;
 
 #if defined (CONTROLLER2_V2)
-    setup_encoder_pin(E5_TOP_ENCODER_A,ENABLE_E5_PULLUP?PUD_UP:PUD_OFF,&e5TopEncoderA);
+    setup_encoder_pin(E5_TOP_ENCODER_A,ENABLE_E5_PULLUP?PUD_UP:PUD_OFF,&e5TopEncoderInt);
     setup_encoder_pin(E5_TOP_ENCODER_B,ENABLE_E5_PULLUP?PUD_UP:PUD_OFF,NULL);
     e5TopEncoderPos=0;
 #endif
@@ -1526,7 +1423,7 @@ int gpio_init() {
   }
 #endif
 
-  rotary_encoder_thread_id = g_thread_new( "rotary encoder", rotary_encoder_thread, NULL);
+  rotary_encoder_thread_id = g_thread_new( "encoders", rotary_encoder_thread, NULL);
   if( ! rotary_encoder_thread_id )
   {
     fprintf(stderr,"g_thread_new failed on rotary_encoder_thread\n");
diff --git a/main.h b/main.h
index 5a8d6057a4df26521d3c594faa69fcd9fe652a46..44b7eff3cf53718feb4177ddde2253f1dc86fa7c 100644 (file)
--- a/main.h
+++ b/main.h
@@ -30,4 +30,5 @@ extern GtkWidget *top_window;
 extern GtkWidget *grid;
 extern void status_text(char *text);
 
+extern gboolean keypress_cb(GtkWidget *widget, GdkEventKey *event, gpointer data);
 #endif
diff --git a/meter.c b/meter.c
index af7f0f5239a145aada4ca451998c3f0fc6eb7178..3dd0858fcb75618f3b28335cac086ca8fd3f9992 100644 (file)
--- a/meter.c
+++ b/meter.c
@@ -99,16 +99,12 @@ meter_draw_cb (GtkWidget *widget, cairo_t   *cr, gpointer   data) {
 }
 
 /*
-static void
-smeter_select_cb (GtkWidget *widget,
-               gpointer        data)
+static void smeter_select_cb (GtkWidget *widget, gpointer        data)
 {
   smeter=(int)data;
 }
 
-static void
-alc_meter_select_cb (GtkWidget *widget,
-               gpointer        data)
+static void alc_meter_select_cb (GtkWidget *widget, gpointer        data)
 {
   alc=(int)data;
 }
@@ -142,31 +138,31 @@ meter_press_event_cb (GtkWidget *widget,
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (smeter_peak), smeter==RXA_S_PK);
   gtk_widget_show(smeter_peak);
   gtk_grid_attach(GTK_GRID(grid),smeter_peak,0,1,1,1);
-  g_signal_connect(smeter_peak,"pressed",G_CALLBACK(smeter_select_cb),(gpointer *)RXA_S_PK);
+  g_signal_connect(smeter_peak,"toggled",G_CALLBACK(smeter_select_cb),(gpointer *)RXA_S_PK);
 
   GtkWidget *smeter_average=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(smeter_peak),"S Meter Average");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (smeter_average), smeter==RXA_S_AV);
   gtk_widget_show(smeter_average);
   gtk_grid_attach(GTK_GRID(grid),smeter_average,0,2,1,1);
-  g_signal_connect(smeter_average,"pressed",G_CALLBACK(smeter_select_cb),(gpointer *)RXA_S_AV);
+  g_signal_connect(smeter_average,"toggled",G_CALLBACK(smeter_select_cb),(gpointer *)RXA_S_AV);
 
   GtkWidget *alc_peak=gtk_radio_button_new_with_label(NULL,"ALC Peak");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alc_peak), alc==TXA_ALC_PK);
   gtk_widget_show(alc_peak);
   gtk_grid_attach(GTK_GRID(grid),alc_peak,1,1,1,1);
-  g_signal_connect(alc_peak,"pressed",G_CALLBACK(alc_meter_select_cb),(gpointer *)TXA_ALC_PK);
+  g_signal_connect(alc_peak,"toggled",G_CALLBACK(alc_meter_select_cb),(gpointer *)TXA_ALC_PK);
 
   GtkWidget *alc_average=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(alc_peak),"ALC Average");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alc_average), alc==TXA_ALC_AV);
   gtk_widget_show(alc_average);
   gtk_grid_attach(GTK_GRID(grid),alc_average,1,2,1,1);
-  g_signal_connect(alc_average,"pressed",G_CALLBACK(alc_meter_select_cb),(gpointer *)TXA_ALC_AV);
+  g_signal_connect(alc_average,"toggled",G_CALLBACK(alc_meter_select_cb),(gpointer *)TXA_ALC_AV);
 
-  GtkWidget *alc_gain=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(alc_average),"ALC Gain");
+  GtkWidget *alc_gain=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(alc_peak),"ALC Gain");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alc_gain), alc==TXA_ALC_GAIN);
   gtk_widget_show(alc_gain);
   gtk_grid_attach(GTK_GRID(grid),alc_gain,1,3,1,1);
-  g_signal_connect(alc_gain,"pressed",G_CALLBACK(alc_meter_select_cb),(gpointer *)TXA_ALC_GAIN);
+  g_signal_connect(alc_gain,"toggled",G_CALLBACK(alc_meter_select_cb),(gpointer *)TXA_ALC_GAIN);
 
 
   gtk_container_add(GTK_CONTAINER(content),grid);
index a0e7869fed48c50c3b34a8c511c44752633e1eb2..9b11768a46aba9aaf57f819f9211b53556c07579 100644 (file)
@@ -52,16 +52,20 @@ static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_d
   return FALSE;
 }
 
-static void smeter_select_cb (GtkWidget *widget, gpointer        data) {
-  smeter=GPOINTER_TO_UINT(data);
+static void smeter_select_cb (GtkToggleButton *widget, gpointer        data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    smeter=GPOINTER_TO_UINT(data);
+  }
 }
 
-static void alc_meter_select_cb (GtkWidget *widget, gpointer        data) {
+static void alc_meter_select_cb (GtkToggleButton *widget, gpointer        data) {
   alc=GPOINTER_TO_UINT(data);
 }
 
-static void analog_cb(GtkWidget *widget, gpointer data) {
-  analog_meter=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+static void analog_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    analog_meter=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+  }
 }
 
 
@@ -100,31 +104,31 @@ void meter_menu (GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (smeter_peak), smeter==RXA_S_PK);
   gtk_widget_show(smeter_peak);
   gtk_grid_attach(GTK_GRID(grid),smeter_peak,0,1,1,1);
-  g_signal_connect(smeter_peak,"pressed",G_CALLBACK(smeter_select_cb),(gpointer)(long)RXA_S_PK);
+  g_signal_connect(smeter_peak,"toggled",G_CALLBACK(smeter_select_cb),(gpointer)(long)RXA_S_PK);
 
   GtkWidget *smeter_average=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(smeter_peak),"S Meter Average");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (smeter_average), smeter==RXA_S_AV);
   gtk_widget_show(smeter_average);
   gtk_grid_attach(GTK_GRID(grid),smeter_average,0,2,1,1);
-  g_signal_connect(smeter_average,"pressed",G_CALLBACK(smeter_select_cb),(gpointer)(long)RXA_S_AV);
+  g_signal_connect(smeter_average,"toggled",G_CALLBACK(smeter_select_cb),(gpointer)(long)RXA_S_AV);
 
   GtkWidget *alc_peak=gtk_radio_button_new_with_label(NULL,"ALC Peak");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alc_peak), alc==TXA_ALC_PK);
   gtk_widget_show(alc_peak);
   gtk_grid_attach(GTK_GRID(grid),alc_peak,1,1,1,1);
-  g_signal_connect(alc_peak,"pressed",G_CALLBACK(alc_meter_select_cb),(gpointer)(long)TXA_ALC_PK);
+  g_signal_connect(alc_peak,"toggled",G_CALLBACK(alc_meter_select_cb),(gpointer)(long)TXA_ALC_PK);
 
   GtkWidget *alc_average=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(alc_peak),"ALC Average");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alc_average), alc==TXA_ALC_AV);
   gtk_widget_show(alc_average);
   gtk_grid_attach(GTK_GRID(grid),alc_average,1,2,1,1);
-  g_signal_connect(alc_average,"pressed",G_CALLBACK(alc_meter_select_cb),(gpointer)(long)TXA_ALC_AV);
+  g_signal_connect(alc_average,"toggled",G_CALLBACK(alc_meter_select_cb),(gpointer)(long)TXA_ALC_AV);
 
-  GtkWidget *alc_gain=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(alc_average),"ALC Gain");
+  GtkWidget *alc_gain=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(alc_peak),"ALC Gain");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alc_gain), alc==TXA_ALC_GAIN);
   gtk_widget_show(alc_gain);
   gtk_grid_attach(GTK_GRID(grid),alc_gain,1,3,1,1);
-  g_signal_connect(alc_gain,"pressed",G_CALLBACK(alc_meter_select_cb),(gpointer)(long)TXA_ALC_GAIN);
+  g_signal_connect(alc_gain,"toggled",G_CALLBACK(alc_meter_select_cb),(gpointer)(long)TXA_ALC_GAIN);
 
   gtk_container_add(GTK_CONTAINER(content),grid);
 
index 4fe00bbf6a5876e595c3bdc76a41f453137af9e4..e76080b9572507c9c8b54ca87187a228adb02b49 100644 (file)
@@ -235,6 +235,7 @@ static pthread_mutex_t general_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static int local_ptt=0;
 
+static void new_protocol_start();
 static void new_protocol_high_priority();
 static void new_protocol_general();
 static void new_protocol_receive_specific();
@@ -493,10 +494,10 @@ void new_protocol_init(int pixels) {
       rc=sem_init(&iq_sem_ready[i], 0, 0);
       rc=sem_init(&iq_sem_buffer[i], 0, 0);
 #endif
-      iq_thread_id[i] = g_thread_new( "iq thread", iq_thread, (gpointer)(long)i);
+      iq_thread_id[i] = g_thread_new( "iq thread", iq_thread, GINT_TO_POINTER(i));
     }
 
-data_socket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
+    data_socket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
     if(data_socket<0) {
         fprintf(stderr,"NewProtocol: create socket failed for data_socket\n");
         exit(-1);
@@ -512,33 +513,40 @@ data_socket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
         exit(-1);
     }
 
-fprintf(stderr,"new_protocol_thread: date_socket %d bound to interface\n",data_socket);
+fprintf(stderr,"new_protocol_init: data_socket %d bound to interface %s:%d\n",data_socket,inet_ntoa(radio->info.network.interface_address.sin_addr),ntohs(radio->info.network.interface_address.sin_port));
 
     memcpy(&base_addr,&radio->info.network.address,radio->info.network.address_length);
     base_addr_length=radio->info.network.address_length;
     base_addr.sin_port=htons(GENERAL_REGISTERS_FROM_HOST_PORT);
 
+g_print("base_addr=%s\n",inet_ntoa(radio->info.network.address.sin_addr));
+
     memcpy(&receiver_addr,&radio->info.network.address,radio->info.network.address_length);
     receiver_addr_length=radio->info.network.address_length;
     receiver_addr.sin_port=htons(RECEIVER_SPECIFIC_REGISTERS_FROM_HOST_PORT);
+g_print("receive_addr=%s\n",inet_ntoa(radio->info.network.address.sin_addr));
 
     memcpy(&transmitter_addr,&radio->info.network.address,radio->info.network.address_length);
     transmitter_addr_length=radio->info.network.address_length;
     transmitter_addr.sin_port=htons(TRANSMITTER_SPECIFIC_REGISTERS_FROM_HOST_PORT);
+g_print("transmit_addr=%s\n",inet_ntoa(radio->info.network.address.sin_addr));
 
     memcpy(&high_priority_addr,&radio->info.network.address,radio->info.network.address_length);
     high_priority_addr_length=radio->info.network.address_length;
     high_priority_addr.sin_port=htons(HIGH_PRIORITY_FROM_HOST_PORT);
+g_print("high_priority_addr=%s\n",inet_ntoa(radio->info.network.address.sin_addr));
 
 fprintf(stderr,"new_protocol_thread: high_priority_addr setup for port %d\n",HIGH_PRIORITY_FROM_HOST_PORT);
 
     memcpy(&audio_addr,&radio->info.network.address,radio->info.network.address_length);
     audio_addr_length=radio->info.network.address_length;
     audio_addr.sin_port=htons(AUDIO_FROM_HOST_PORT);
+g_print("audio_addr=%s\n",inet_ntoa(radio->info.network.address.sin_addr));
 
     memcpy(&iq_addr,&radio->info.network.address,radio->info.network.address_length);
     iq_addr_length=radio->info.network.address_length;
     iq_addr.sin_port=htons(TX_IQ_FROM_HOST_PORT);
+g_print("iq_addr=%s\n",inet_ntoa(radio->info.network.address.sin_addr));
 
 
     for(i=0;i<MAX_DDC;i++) {
@@ -555,10 +563,15 @@ fprintf(stderr,"new_protocol_thread: high_priority_addr setup for port %d\n",HIG
     }
     fprintf(stderr, "new_protocol_thread: id=%p\n",new_protocol_thread_id);
 
+    new_protocol_general();
+    new_protocol_start();
+    new_protocol_high_priority();
+
 }
 
 static void new_protocol_general() {
     BAND *band;
+    int rc;
 
     pthread_mutex_lock(&general_mutex);
     if(split) {
@@ -598,12 +611,17 @@ static void new_protocol_general() {
     }
 
 //fprintf(stderr,"Alex Enable=%02X\n",general_buffer[59]);
+//g_print("new_protocol_general: %s:%d\n",inet_ntoa(base_addr.sin_addr),ntohs(base_addr.sin_port));
 
-    if(sendto(data_socket,general_buffer,sizeof(general_buffer),0,(struct sockaddr*)&base_addr,base_addr_length)<0) {
+    if((rc=sendto(data_socket,general_buffer,sizeof(general_buffer),0,(struct sockaddr*)&base_addr,base_addr_length))<0) {
         fprintf(stderr,"sendto socket failed for general\n");
         exit(1);
     }
 
+    if(rc!=sizeof(general_buffer)) {
+      fprintf(stderr,"sendto socket for general: %d rather than %ld",rc,sizeof(general_buffer));
+    }
+
     general_sequence++;
     pthread_mutex_unlock(&general_mutex);
 }
@@ -947,7 +965,7 @@ static void new_protocol_high_priority() {
        i=receiver[PS_RX_FEEDBACK]->alex_antenna;       // 0, 6, or 7
     }
 #endif
-    if (device == DEVICE_ORION2) {
+    if (device == NEW_DEVICE_ORION2) {
       i +=100;
     } else if (new_pa_board) {
       // New-PA setting invalid on ANAN-7000,8000
@@ -1102,12 +1120,17 @@ static void new_protocol_high_priority() {
 //
 //  Voila mes amis. Envoyons les 1444 octets "high priority" au radio
 //
+//g_print("new_protocol_high_priority: %s:%d\n",inet_ntoa(high_priority_addr.sin_addr),ntohs(high_priority_addr.sin_port));
     int rc;
     if((rc=sendto(data_socket,high_priority_buffer_to_radio,sizeof(high_priority_buffer_to_radio),0,(struct sockaddr*)&high_priority_addr,high_priority_addr_length))<0) {
         fprintf(stderr,"sendto socket failed for high priority: rc=%d errno=%d\n",rc,errno);
         abort();
         //exit(1);
     }
+    if(rc!=sizeof(high_priority_buffer_to_radio)) {
+      fprintf(stderr,"sendto socket for high_priority: %d rather than %ld",rc,sizeof(high_priority_buffer_to_radio));
+    }
 
     high_priority_sequence++;
     update_action_table();
@@ -1118,6 +1141,7 @@ static unsigned char last_50=0;
 
 static void new_protocol_transmit_specific() {
     int mode;
+    int rc;
 
     pthread_mutex_lock(&tx_spec_mutex);
     memset(transmit_specific_buffer, 0, sizeof(transmit_specific_buffer));
@@ -1197,11 +1221,17 @@ static void new_protocol_transmit_specific() {
     // Attenuator for ADC0 upon TX
     transmit_specific_buffer[59]=transmitter->attenuation;
 
-    if(sendto(data_socket,transmit_specific_buffer,sizeof(transmit_specific_buffer),0,(struct sockaddr*)&transmitter_addr,transmitter_addr_length)<0) {
-        fprintf(stderr,"sendto socket failed for tx specific\n");
+//g_print("new_protocol_transmit_specific: %s:%d\n",inet_ntoa(transmitter_addr.sin_addr),ntohs(transmitter_addr.sin_port));
+
+    if((rc=sendto(data_socket,transmit_specific_buffer,sizeof(transmit_specific_buffer),0,(struct sockaddr*)&transmitter_addr,transmitter_addr_length))<0) {
+        fprintf(stderr,"sendto socket failed for tx specific: %d\n",rc);
         exit(1);
     }
 
+    if(rc!=sizeof(transmit_specific_buffer)) {
+      fprintf(stderr,"sendto socket for transmit_specific: %d rather than %ld",rc,sizeof(transmit_specific_buffer));
+    }
+
     tx_specific_sequence++;
     pthread_mutex_unlock(&tx_spec_mutex);
 
@@ -1210,6 +1240,7 @@ static void new_protocol_transmit_specific() {
 static void new_protocol_receive_specific() {
     int i;
     int ddc;
+    int rc;
 
     pthread_mutex_lock(&rx_spec_mutex);
     memset(receive_specific_buffer, 0, sizeof(receive_specific_buffer));
@@ -1286,10 +1317,15 @@ static void new_protocol_receive_specific() {
       receive_specific_buffer[7]=1;                                            // enable  DDC0 but disable all others
     }
 
-//fprintf(stderr,"new_protocol_receive_specific: enable=%02X\n",receive_specific_buffer[7]);
-    if(sendto(data_socket,receive_specific_buffer,sizeof(receive_specific_buffer),0,(struct sockaddr*)&receiver_addr,receiver_addr_length)<0) {
-        fprintf(stderr,"sendto socket failed for start\n");
-        exit(1);
+//g_print("new_protocol_receive_specific: %s:%d enable=%02X\n",inet_ntoa(receiver_addr.sin_addr),ntohs(receiver_addr.sin_port),receive_specific_buffer[7]);
+
+    if((rc=sendto(data_socket,receive_specific_buffer,sizeof(receive_specific_buffer),0,(struct sockaddr*)&receiver_addr,receiver_addr_length))<0) {
+      fprintf(stderr,"sendto socket failed for receive_specific: %d\n",rc);
+      exit(1);
+    }
+    if(rc!=sizeof(receive_specific_buffer)) {
+      fprintf(stderr,"sendto socket for receive_specific: %d rather than %ld",rc,sizeof(receive_specific_buffer));
     }
 
     rx_specific_sequence++;
@@ -1342,66 +1378,10 @@ fprintf(stderr,"new_protocol_thread\n");
     micsamples=0;
     iqindex=4;
 
-
-/*
-    data_socket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
-    if(data_socket<0) {
-        fprintf(stderr,"metis: create socket failed for data_socket\n");
-        exit(-1);
-    }
-
-    int optval = 1;
-    setsockopt(data_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
-    setsockopt(data_socket, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval));
-
-    // bind to the interface
-    if(bind(data_socket,(struct sockaddr*)&radio->info.network.interface_address,radio->info.network.interface_length)<0) {
-        fprintf(stderr,"metis: bind socket failed for data_socket\n");
-        exit(-1);
-    }
-
-fprintf(stderr,"new_protocol_thread: date_socket %d bound to interface\n");
-
-    memcpy(&base_addr,&radio->info.network.address,radio->info.network.address_length);
-    base_addr_length=radio->info.network.address_length;
-    base_addr.sin_port=htons(GENERAL_REGISTERS_FROM_HOST_PORT);
-
-    memcpy(&receiver_addr,&radio->info.network.address,radio->info.network.address_length);
-    receiver_addr_length=radio->info.network.address_length;
-    receiver_addr.sin_port=htons(RECEIVER_SPECIFIC_REGISTERS_FROM_HOST_PORT);
-
-    memcpy(&transmitter_addr,&radio->info.network.address,radio->info.network.address_length);
-    transmitter_addr_length=radio->info.network.address_length;
-    transmitter_addr.sin_port=htons(TRANSMITTER_SPECIFIC_REGISTERS_FROM_HOST_PORT);
-
-    memcpy(&high_priority_addr,&radio->info.network.address,radio->info.network.address_length);
-    high_priority_addr_length=radio->info.network.address_length;
-    high_priority_addr.sin_port=htons(HIGH_PRIORITY_FROM_HOST_PORT);
-
-fprintf(stderr,"new_protocol_thread: high_priority_addr setup for port %d\n",HIGH_PRIORITY_FROM_HOST_PORT);
-
-    memcpy(&audio_addr,&radio->info.network.address,radio->info.network.address_length);
-    audio_addr_length=radio->info.network.address_length;
-    audio_addr.sin_port=htons(AUDIO_FROM_HOST_PORT);
-
-    memcpy(&iq_addr,&radio->info.network.address,radio->info.network.address_length);
-    iq_addr_length=radio->info.network.address_length;
-    iq_addr.sin_port=htons(TX_IQ_FROM_HOST_PORT);
-
-   
-    for(i=0;i<MAX_DDC;i++) {
-        memcpy(&data_addr[i],&radio->info.network.address,radio->info.network.address_length);
-        data_addr_length[i]=radio->info.network.address_length;
-        data_addr[i].sin_port=htons(RX_IQ_TO_HOST_PORT_0+i);
-    }
-*/
     audioindex=4; // leave space for sequence
     audiosequence=0L;
 
     running=1;
-    new_protocol_general();
-    new_protocol_start();
-    new_protocol_high_priority();
 
     while(running) {
 
@@ -1412,7 +1392,9 @@ fprintf(stderr,"new_protocol_thread: high_priority_addr setup for port %d\n",HIG
             exit(-1);
         }
 
-        short sourceport=ntohs(addr.sin_port);
+        sourceport=ntohs(addr.sin_port);
+
+//g_print("new_protocol_thread: recvd %d bytes on port %d\n",bytesread,sourceport);
 
         switch(sourceport) {
             case RX_IQ_TO_HOST_PORT_0:
@@ -1424,7 +1406,7 @@ fprintf(stderr,"new_protocol_thread: high_priority_addr setup for port %d\n",HIG
             case RX_IQ_TO_HOST_PORT_6:
             case RX_IQ_TO_HOST_PORT_7:
               ddc=sourceport-RX_IQ_TO_HOST_PORT_0;
-//fprintf(stderr,"iq packet from port=%d ddc=%d\n",sourceport,ddc);
+//g_print("iq packet from port=%d ddc=%d\n",sourceport,ddc);
               if(ddc>=MAX_DDC)  {
                 fprintf(stderr,"unexpected iq data from ddc %d\n",ddc);
               } else {
@@ -1541,7 +1523,7 @@ fprintf(stderr,"mic_line_thread\n");
 }
 
 static gpointer iq_thread(gpointer data) {
-  int ddc=GPOINTER_TO_UINT(data);
+  int ddc=GPOINTER_TO_INT(data);
   long sequence;
   unsigned char *buffer;
   fprintf(stderr,"iq_thread: ddc=%d\n",ddc);
@@ -1607,7 +1589,7 @@ static void process_iq_data(unsigned char *buffer, RECEIVER *rx) {
   bitspersample=((buffer[12]&0xFF)<<8)+(buffer[13]&0xFF);
   samplesperframe=((buffer[14]&0xFF)<<8)+(buffer[15]&0xFF);
 
-//fprintf(stderr,"process_iq_data: rx=%d bitspersample=%d samplesperframe=%d\n",rx->id, bitspersample,samplesperframe);
+//g_print("process_iq_data: rx=%d bitspersample=%d samplesperframe=%d\n",rx->id, bitspersample,samplesperframe);
   b=16;
   int i;
   for(i=0;i<samplesperframe;i++) {
index 19a3100631f18dfd47d1c9f5c34e21ae1057e057..080cf8751a8df149a700155dd40b70c76820f062 100644 (file)
@@ -70,52 +70,64 @@ void update_noise() {
   g_idle_add(ext_vfo_update,NULL);
 }
 
-static void nb_none_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->nb=0;
-  active_receiver->nb2=0;
-  mode_settings[vfo[active_receiver->id].mode].nb=0;
-  mode_settings[vfo[active_receiver->id].mode].nb2=0;
-  update_noise();
+static void nb_none_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    active_receiver->nb=0;
+    active_receiver->nb2=0;
+    mode_settings[vfo[active_receiver->id].mode].nb=0;
+    mode_settings[vfo[active_receiver->id].mode].nb2=0;
+    update_noise();
+  }
 }
 
-static void nb_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->nb=1;
-  active_receiver->nb2=0;
-  mode_settings[vfo[active_receiver->id].mode].nb=1;
-  mode_settings[vfo[active_receiver->id].mode].nb2=0;
-  update_noise();
+static void nb_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    active_receiver->nb=1;
+    active_receiver->nb2=0;
+    mode_settings[vfo[active_receiver->id].mode].nb=1;
+    mode_settings[vfo[active_receiver->id].mode].nb2=0;
+    update_noise();
+  }
 }
 
-static void nr_none_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->nr=0;
-  active_receiver->nr2=0;
-  mode_settings[vfo[active_receiver->id].mode].nr=0;
-  mode_settings[vfo[active_receiver->id].mode].nr2=0;
-  update_noise();
+static void nr_none_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    active_receiver->nr=0;
+    active_receiver->nr2=0;
+    mode_settings[vfo[active_receiver->id].mode].nr=0;
+    mode_settings[vfo[active_receiver->id].mode].nr2=0;
+    update_noise();
+  }
 }
 
-static void nr_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->nr=1;
-  active_receiver->nr2=0;
-  mode_settings[vfo[active_receiver->id].mode].nr=1;
-  mode_settings[vfo[active_receiver->id].mode].nr2=0;
-  update_noise();
+static void nr_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    active_receiver->nr=1;
+    active_receiver->nr2=0;
+    mode_settings[vfo[active_receiver->id].mode].nr=1;
+    mode_settings[vfo[active_receiver->id].mode].nr2=0;
+    update_noise();
+  }
 }
 
-static void nb2_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->nb=0;
-  active_receiver->nb2=1;
-  mode_settings[vfo[active_receiver->id].mode].nb=0;
-  mode_settings[vfo[active_receiver->id].mode].nb2=1;
-  update_noise();
+static void nb2_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    active_receiver->nb=0;
+    active_receiver->nb2=1;
+    mode_settings[vfo[active_receiver->id].mode].nb=0;
+    mode_settings[vfo[active_receiver->id].mode].nb2=1;
+    update_noise();
+  }
 }
 
-static void nr2_cb(GtkWidget *widget, gpointer data) {
-  active_receiver->nr=0;
-  active_receiver->nr2=1;
-  mode_settings[vfo[active_receiver->id].mode].nr=0;
-  mode_settings[vfo[active_receiver->id].mode].nr2=1;
-  update_noise();
+static void nr2_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    active_receiver->nr=0;
+    active_receiver->nr2=1;
+    mode_settings[vfo[active_receiver->id].mode].nr=0;
+    mode_settings[vfo[active_receiver->id].mode].nr2=1;
+    update_noise();
+  }
 }
 
 static void anf_cb(GtkWidget *widget, gpointer data) {
@@ -184,7 +196,7 @@ void noise_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nb_none), active_receiver->nb==0 && active_receiver->nb2==0);
   gtk_widget_show(b_nb_none);
   gtk_grid_attach(GTK_GRID(grid),b_nb_none,col,row,1,1);
-  g_signal_connect(b_nb_none,"pressed",G_CALLBACK(nb_none_cb),NULL);
+  g_signal_connect(b_nb_none,"toggled",G_CALLBACK(nb_none_cb),NULL);
 
   col++;
 
@@ -192,7 +204,7 @@ void noise_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nr_none), active_receiver->nr==0 && active_receiver->nr2==0);
   gtk_widget_show(b_nr_none);
   gtk_grid_attach(GTK_GRID(grid),b_nr_none,col,row,1,1);
-  g_signal_connect(b_nr_none,"pressed",G_CALLBACK(nr_none_cb),NULL);
+  g_signal_connect(b_nr_none,"toggled",G_CALLBACK(nr_none_cb),NULL);
 
   col++;
 
@@ -210,7 +222,7 @@ void noise_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nb), active_receiver->nb);
   gtk_widget_show(b_nb);
   gtk_grid_attach(GTK_GRID(grid),b_nb,col,row,1,1);
-  g_signal_connect(b_nb,"pressed",G_CALLBACK(nb_cb),NULL);
+  g_signal_connect(b_nb,"toggled",G_CALLBACK(nb_cb),NULL);
 
   col++;
 
@@ -218,7 +230,7 @@ void noise_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nr), active_receiver->nr);
   gtk_widget_show(b_nr);
   gtk_grid_attach(GTK_GRID(grid),b_nr,col,row,1,1);
-  g_signal_connect(b_nr,"pressed",G_CALLBACK(nr_cb),NULL);
+  g_signal_connect(b_nr,"toggled",G_CALLBACK(nr_cb),NULL);
 
   col++;
 
@@ -235,7 +247,7 @@ void noise_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nb2), active_receiver->nb2);
   gtk_widget_show(b_nb2);
   gtk_grid_attach(GTK_GRID(grid),b_nb2,col,row,1,1);
-  g_signal_connect(b_nb2,"pressed",G_CALLBACK(nb2_cb),NULL);
+  g_signal_connect(b_nb2,"toggled",G_CALLBACK(nb2_cb),NULL);
 
   col++;
 
@@ -243,7 +255,7 @@ void noise_menu(GtkWidget *parent) {
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nr2), active_receiver->nr2);
   gtk_widget_show(b_nr2);
   gtk_grid_attach(GTK_GRID(grid),b_nr2,col,row,1,1);
-  g_signal_connect(b_nr2,"pressed",G_CALLBACK(nr2_cb),NULL);
+  g_signal_connect(b_nr2,"toggled",G_CALLBACK(nr2_cb),NULL);
 
   gtk_container_add(GTK_CONTAINER(content),grid);
 
index 035b30bc713922f8b301aaa4cd4ba90e88fcc495..03218513870533eb53f9254cd2dcfabc6873f649 100644 (file)
@@ -964,7 +964,7 @@ static void process_ozy_input_buffer(unsigned char  *buffer) {
           }
        }
 
-        if (!isTransmitting() && !diversity_enabled) {
+        if ((!isTransmitting() || duplex) && !diversity_enabled) {
          //
          // RX without DIVERSITY. Feed samples to RX1 and RX2
          //
diff --git a/radio.c b/radio.c
index 0c2bb0fb769f0ecfa9b87651e8eefec0652a2f79..7383397888c76500cf58d88877819dc1d4eebe56 100644 (file)
--- a/radio.c
+++ b/radio.c
@@ -666,8 +666,8 @@ void start_radio() {
 #ifdef SOAPYSDR
   if(radio->device==SOAPYSDR_USB_DEVICE) {
     iqswap=1;
+    receivers=1;
   }
-  receivers=1;
 #endif
 
   adc_attenuation[0]=0;
@@ -840,7 +840,10 @@ void start_radio() {
     if(duplex) {
       transmitter=create_transmitter(CHANNEL_TX, buffer_size, fft_size, updates_per_second, display_width/4, display_height/2);
     } else {
-      transmitter=create_transmitter(CHANNEL_TX, buffer_size, fft_size, updates_per_second, display_width, PANADAPTER_HEIGHT);
+      int tx_height=display_height-VFO_HEIGHT;
+      if(display_sliders) tx_height-=SLIDERS_HEIGHT;
+      if(display_toolbar) tx_height-=TOOLBAR_HEIGHT;
+      transmitter=create_transmitter(CHANNEL_TX, buffer_size, fft_size, updates_per_second, display_width, tx_height);
     }
     transmitter->x=0;
     transmitter->y=VFO_HEIGHT;
@@ -1354,9 +1357,8 @@ int isTransmitting() {
 }
 
 void setFrequency(long long f) {
-  BAND *band=band_get_current_band();
-  BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
   int v=active_receiver->id;
+  vfo[v].band=get_band_from_frequency(f);
 
   switch(protocol) {
     case NEW_PROTOCOL:
@@ -1369,11 +1371,11 @@ void setFrequency(long long f) {
         long long maxf=vfo[v].frequency+(long long)(active_receiver->sample_rate/2);
         if(f<minf) f=minf;
         if(f>maxf) f=maxf;
+        vfo[v].ctun_frequency=f;
         vfo[v].offset=f-vfo[v].frequency;
         set_offset(active_receiver,vfo[v].offset);
         return;
       } else {
-        //entry->frequency=f;
         vfo[v].frequency=f;
       }
       break;
index 9ee2fe37b808ce24210c985f1162d68bf481e55c..b63e913343a11e13beeba0da13b789e4ead3766f 100644 (file)
@@ -305,19 +305,20 @@ static void n2adr_cb(GtkWidget *widget, gpointer data) {
 }
 
 
-static void sample_rate_cb(GtkWidget *widget, gpointer data) {
-  radio_change_sample_rate(GPOINTER_TO_INT(data));
+static void sample_rate_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    radio_change_sample_rate(GPOINTER_TO_INT(data));
+  }
 }
 
-static void receivers_cb(GtkWidget *widget, gpointer data) {
-  radio_change_receivers(GPOINTER_TO_INT(data));
+static void receivers_cb(GtkToggleButton *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    radio_change_receivers(GPOINTER_TO_INT(data));
+  }
 }
 
 static void region_cb(GtkWidget *widget, gpointer data) {
   radio_change_region(gtk_combo_box_get_active (GTK_COMBO_BOX(widget)));
-/*
-  radio_change_region(GPOINTER_TO_INT(data));
-*/
 }
 
 static void rit_cb(GtkWidget *widget,gpointer data) {
@@ -398,14 +399,14 @@ void radio_menu(GtkWidget *parent) {
   GtkWidget *receivers_1=gtk_radio_button_new_with_label(NULL,"1");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (receivers_1), receivers==1);
   gtk_grid_attach(GTK_GRID(grid),receivers_1,col,row,1,1);
-  g_signal_connect(receivers_1,"pressed",G_CALLBACK(receivers_cb),(gpointer *)1);
+  g_signal_connect(receivers_1,"toggled",G_CALLBACK(receivers_cb),(gpointer *)1);
 
   row++;
 
   GtkWidget *receivers_2=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(receivers_1),"2");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (receivers_2), receivers==2);
   gtk_grid_attach(GTK_GRID(grid),receivers_2,col,row,1,1);
-  g_signal_connect(receivers_2,"pressed",G_CALLBACK(receivers_cb),(gpointer *)2);
+  g_signal_connect(receivers_2,"toggled",G_CALLBACK(receivers_cb),(gpointer *)2);
   row++;
   col++;
   if(row>temp_row) temp_row=row;
@@ -422,38 +423,38 @@ void radio_menu(GtkWidget *parent) {
       GtkWidget *sample_rate_48=gtk_radio_button_new_with_label(NULL,"48000");
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_48), active_receiver->sample_rate==48000);
       gtk_grid_attach(GTK_GRID(grid),sample_rate_48,col,row,1,1);
-      g_signal_connect(sample_rate_48,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)48000);
+      g_signal_connect(sample_rate_48,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)48000);
       row++;
 
       GtkWidget *sample_rate_96=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_48),"96000");
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_96), active_receiver->sample_rate==96000);
       gtk_grid_attach(GTK_GRID(grid),sample_rate_96,col,row,1,1);
-      g_signal_connect(sample_rate_96,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)96000);
+      g_signal_connect(sample_rate_96,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)96000);
       row++;
 
       GtkWidget *sample_rate_192=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_96),"192000");
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_192), active_receiver->sample_rate==192000);
       gtk_grid_attach(GTK_GRID(grid),sample_rate_192,col,row,1,1);
-      g_signal_connect(sample_rate_192,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)192000);
+      g_signal_connect(sample_rate_192,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)192000);
       row++;
 
       GtkWidget *sample_rate_384=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_192),"384000");
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_384), active_receiver->sample_rate==384000);
       gtk_grid_attach(GTK_GRID(grid),sample_rate_384,col,row,1,1);
-      g_signal_connect(sample_rate_384,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)384000);
+      g_signal_connect(sample_rate_384,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)384000);
       row++;
 
       if(protocol==NEW_PROTOCOL) {
         GtkWidget *sample_rate_768=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_384),"768000");
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_768), active_receiver->sample_rate==768000);
         gtk_grid_attach(GTK_GRID(grid),sample_rate_768,col,row,1,1);
-        g_signal_connect(sample_rate_768,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)768000);
+        g_signal_connect(sample_rate_768,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)768000);
         row++;
   
         GtkWidget *sample_rate_1536=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_768),"1536000");
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_1536), active_receiver->sample_rate==1536000);
         gtk_grid_attach(GTK_GRID(grid),sample_rate_1536,col,row,1,1);
-        g_signal_connect(sample_rate_1536,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)1536000);
+        g_signal_connect(sample_rate_1536,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)1536000);
         row++;
   
 #ifdef GPIO
@@ -478,7 +479,7 @@ void radio_menu(GtkWidget *parent) {
       GtkWidget *sample_rate=gtk_radio_button_new_with_label(NULL,rate);
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate), radio->info.soapy.sample_rate);
       gtk_grid_attach(GTK_GRID(grid),sample_rate,col,row,1,1);
-      g_signal_connect(sample_rate,"pressed",G_CALLBACK(sample_rate_cb),GINT_TO_POINTER(radio->info.soapy.sample_rate));
+      g_signal_connect(sample_rate,"toggled",G_CALLBACK(sample_rate_cb),GINT_TO_POINTER(radio->info.soapy.sample_rate));
 
       col++;
       }
index 3df8302398234067aa9b6b2bdbe1a8dfb52d96fe..46bb5b05c38036c81e2cf9a84ba4366fe37d8ddd 100644 (file)
@@ -826,7 +826,7 @@ fprintf(stderr,"create_pure_signal_receiver: id=%d buffer_size=%d\n",id,buffer_s
   }
   // allocate buffers
   rx->iq_input_buffer=g_new(double,2*rx->buffer_size);
-  rx->audio_buffer=NULL;
+  //rx->audio_buffer=NULL;
   rx->audio_sequence=0L;
   rx->pixel_samples=malloc(sizeof(float)*(rx->pixels));
 
@@ -904,6 +904,7 @@ RECEIVER *create_receiver(int id, int buffer_size, int fft_size, int pixels, int
 fprintf(stderr,"create_receiver: id=%d buffer_size=%d fft_size=%d pixels=%d fps=%d\n",id,buffer_size, fft_size, pixels, fps);
   RECEIVER *rx=malloc(sizeof(RECEIVER));
   rx->id=id;
+  g_mutex_init(&rx->mutex);
   switch(id) {
     case 0:
       rx->adc=0;
@@ -988,6 +989,7 @@ fprintf(stderr,"create_receiver: id=%d default adc=%d\n",rx->id, rx->adc);
   rx->waterfall_automatic=1;
 
   rx->volume=0.1;
+  rx->rf_gain=50.0;
 
   rx->dither=0;
   rx->random=0;
@@ -1052,7 +1054,7 @@ fprintf(stderr,"create_receiver: id=%d default adc=%d\n",rx->id, rx->adc);
 #endif
 
 fprintf(stderr,"create_receiver (after restore): rx=%p id=%d audio_buffer_size=%d local_audio=%d\n",rx,rx->id,rx->audio_buffer_size,rx->local_audio);
-  rx->audio_buffer=g_new(guchar,rx->audio_buffer_size);
+  //rx->audio_buffer=g_new(guchar,rx->audio_buffer_size);
   int scale=rx->sample_rate/48000;
   rx->output_samples=rx->buffer_size/scale;
   rx->audio_output_buffer=g_new(gdouble,2*rx->output_samples);
@@ -1128,8 +1130,7 @@ fprintf(stderr,"RXASetMP %d\n",rx->low_latency);
   }
 
   receiver_mode_changed(rx);
-  //set_mode(rx,vfo[rx->id].mode);
-  //set_filter(rx,rx->filter_low,rx->filter_high);
+  //receiver_frequency_changed(rx);
 
   int result;
   XCreateAnalyzer(rx->id, &result, 262144, 1, 1, "");
@@ -1173,6 +1174,7 @@ void receiver_change_sample_rate(RECEIVER *rx,int sample_rate) {
 // that the central part can be displayed in the TX panadapter
 //
 
+  g_mutex_lock(&rx->mutex);
 
   rx->sample_rate=sample_rate;
   int scale=rx->sample_rate/48000;
@@ -1200,20 +1202,16 @@ g_print("receiver_change_sample_rate: id=%d rate=%d scale=%d buffer_size=%d outp
     init_analyzer(rx);
     fprintf(stderr,"PS FEEDBACK change sample rate:id=%d rate=%d buffer_size=%d output_samples=%d\n",
                    rx->id, rx->sample_rate, rx->buffer_size, rx->output_samples);
+    g_mutex_unlock(&rx->mutex);
     return;
   }
 #endif
 
-  init_analyzer(rx);
-
   SetChannelState(rx->id,0,1);
-  free(rx->audio_output_buffer);
-  rx->audio_output_buffer=g_new(double,2*rx->output_samples);
-  rx->audio_buffer=g_new(guchar,rx->audio_buffer_size);
+  init_analyzer(rx);
   SetInputSamplerate(rx->id, sample_rate);
   SetEXTANBSamplerate (rx->id, sample_rate);
   SetEXTNOBSamplerate (rx->id, sample_rate);
-
 #ifdef SOAPYSDR
   if(protocol==SOAPYSDR_PROTOCOL) {
     rx->resample_step=radio_sample_rate/rx->sample_rate;
@@ -1223,6 +1221,8 @@ g_print("receiver_change_sample_rate: resample_step=%d\n",rx->resample_step);
 
   SetChannelState(rx->id,1,0);
 
+  g_mutex_unlock(&rx->mutex);
+
 fprintf(stderr,"receiver_change_sample_rate: id=%d rate=%d buffer_size=%d output_samples=%d\n",rx->id, rx->sample_rate, rx->buffer_size, rx->output_samples);
 }
 
@@ -1458,6 +1458,8 @@ void full_rx_buffer(RECEIVER *rx) {
   int j;
   int error;
 
+  g_mutex_lock(&rx->mutex);
+
   // noise blanker works on origianl IQ samples
   if(rx->nb) {
      xanbEXT (rx->id, rx->iq_input_buffer, rx->iq_input_buffer);
@@ -1487,6 +1489,7 @@ void full_rx_buffer(RECEIVER *rx) {
   }
   g_mutex_unlock(&rx->freedv_mutex);
 #endif
+  g_mutex_unlock(&rx->mutex);
 }
 
 static int rx_buffer_seen=0;
index b15277464c7ffa563ef4b5d00237c84d7e43fa5d..2a5bd4fbbcc9e4b3e2b6564f10ae8ea2d6e7b547 100644 (file)
@@ -36,6 +36,7 @@ typedef enum _audio_t audio_t;
 
 typedef struct _receiver {
   gint id;
+  GMutex mutex;
 
   gint ddc;
   gint adc;
@@ -59,7 +60,7 @@ typedef struct _receiver {
   gdouble *iq_input_buffer;
   gdouble *audio_output_buffer;
   gint audio_buffer_size;
-  guchar *audio_buffer;
+  //guchar *audio_buffer;
   gint audio_index;
   guint32 audio_sequence;
   gfloat *pixel_samples;
index c9fd9380016f4faf7d987da0011b6c7b61af51a1..6c19965aa9c6d757f96cc41d549ac52b176f0364 100644 (file)
--- a/rx_menu.c
+++ b/rx_menu.c
@@ -86,12 +86,16 @@ static void alex_att_cb(GtkWidget *widget, gpointer data) {
   }
 }
 
-static void sample_rate_cb(GtkWidget *widget, gpointer data) {
-  receiver_change_sample_rate(active_receiver,GPOINTER_TO_INT(data));
+static void sample_rate_cb(GtkToggleButton *widget,gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    receiver_change_sample_rate(active_receiver,GPOINTER_TO_INT(data));
+  }
 }
 
-static void adc_cb(GtkWidget *widget, gpointer data) {
-  receiver_change_adc(active_receiver,GPOINTER_TO_INT(data));
+static void adc_cb(GtkToggleButton *widget,GdkEvent *event,gpointer data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    receiver_change_adc(active_receiver,GPOINTER_TO_INT(data));
+  }
 }
 
 static void local_audio_cb(GtkWidget *widget, gpointer data) {
@@ -212,33 +216,33 @@ void rx_menu(GtkWidget *parent) {
       GtkWidget *sample_rate_48=gtk_radio_button_new_with_label(NULL,"48000");
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_48), active_receiver->sample_rate==48000);
       gtk_grid_attach(GTK_GRID(grid),sample_rate_48,x,2,1,1);
-      g_signal_connect(sample_rate_48,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)48000);
+      g_signal_connect(sample_rate_48,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)48000);
 
       GtkWidget *sample_rate_96=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_48),"96000");
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_96), active_receiver->sample_rate==96000);
       gtk_grid_attach(GTK_GRID(grid),sample_rate_96,x,3,1,1);
-      g_signal_connect(sample_rate_96,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)96000);
+      g_signal_connect(sample_rate_96,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)96000);
   
-      GtkWidget *sample_rate_192=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_96),"192000");
+      GtkWidget *sample_rate_192=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_48),"192000");
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_192), active_receiver->sample_rate==192000);
       gtk_grid_attach(GTK_GRID(grid),sample_rate_192,x,4,1,1);
-      g_signal_connect(sample_rate_192,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)192000);
+      g_signal_connect(sample_rate_192,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)192000);
 
-      GtkWidget *sample_rate_384=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_192),"384000");
+      GtkWidget *sample_rate_384=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_48),"384000");
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_384), active_receiver->sample_rate==384000);
       gtk_grid_attach(GTK_GRID(grid),sample_rate_384,x,5,1,1);
-      g_signal_connect(sample_rate_384,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)384000);
+      g_signal_connect(sample_rate_384,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)384000);
 
 #ifndef raspberrypi
-      GtkWidget *sample_rate_768=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_384),"768000");
+      GtkWidget *sample_rate_768=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_48),"768000");
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_768), active_receiver->sample_rate==768000);
       gtk_grid_attach(GTK_GRID(grid),sample_rate_768,x,6,1,1);
-      g_signal_connect(sample_rate_768,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)768000);
+      g_signal_connect(sample_rate_768,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)768000);
 
-      GtkWidget *sample_rate_1536=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_768),"1536000");
+      GtkWidget *sample_rate_1536=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_48),"1536000");
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_1536), active_receiver->sample_rate==1536000);
       gtk_grid_attach(GTK_GRID(grid),sample_rate_1536,x,7,1,1);
-      g_signal_connect(sample_rate_1536,"pressed",G_CALLBACK(sample_rate_cb),(gpointer *)1536000);
+      g_signal_connect(sample_rate_1536,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)1536000);
 #endif
       }
       x++;
@@ -258,7 +262,7 @@ void rx_menu(GtkWidget *parent) {
       GtkWidget *sample_rate=gtk_radio_button_new_with_label(NULL,rate_string);
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate), radio->info.soapy.sample_rate);
       gtk_grid_attach(GTK_GRID(grid),sample_rate,x,row,1,1);
-      g_signal_connect(sample_rate,"pressed",G_CALLBACK(sample_rate_cb),GINT_TO_POINTER(radio->info.soapy.sample_rate));
+      g_signal_connect(sample_rate,"toggled",G_CALLBACK(sample_rate_cb),GINT_TO_POINTER(radio->info.soapy.sample_rate));
       row++;
 
       int rate=radio->info.soapy.sample_rate/2;
@@ -267,7 +271,7 @@ void rx_menu(GtkWidget *parent) {
           GtkWidget *next_sample_rate=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate),rate_string);
           gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (next_sample_rate), active_receiver->sample_rate==rate);
           gtk_grid_attach(GTK_GRID(grid),next_sample_rate,x,row,1,1);
-          g_signal_connect(next_sample_rate,"pressed",G_CALLBACK(sample_rate_cb),GINT_TO_POINTER(rate));
+          g_signal_connect(next_sample_rate,"toggled",G_CALLBACK(sample_rate_cb),GINT_TO_POINTER(rate));
           rate=rate/2;
           row++;
       }
@@ -299,11 +303,6 @@ void rx_menu(GtkWidget *parent) {
       gtk_grid_attach(GTK_GRID(grid),random_b,x,3,1,1);
       g_signal_connect(random_b,"toggled",G_CALLBACK(random_cb),NULL);
 
-      //GtkWidget *preamp_b=gtk_check_button_new_with_label("Preamp");
-      //gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preamp_b), active_receiver->preamp);
-      //gtk_grid_attach(GTK_GRID(grid),preamp_b,x,4,1,1);
-      //g_signal_connect(preamp_b,"toggled",G_CALLBACK(preamp_cb),NULL);
-
       if (filter_board == ALEX && active_receiver->adc == 0
           && ((protocol==ORIGINAL_PROTOCOL && device != DEVICE_ORION2) || (protocol==NEW_PROTOCOL && device != NEW_DEVICE_ORION2))) {
   
@@ -335,7 +334,7 @@ void rx_menu(GtkWidget *parent) {
       }
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (adc_b), active_receiver->adc==i);
       gtk_grid_attach(GTK_GRID(grid),adc_b,x,2+i,1,1);
-      g_signal_connect(adc_b,"pressed",G_CALLBACK(adc_cb),GINT_TO_POINTER(i));
+      g_signal_connect(adc_b,"toggled",G_CALLBACK(adc_cb),GINT_TO_POINTER(i));
     }
     x++;
   }
@@ -361,7 +360,6 @@ void rx_menu(GtkWidget *parent) {
       }
     }
 
-    // If the combo box shows no device, take the first one
     i=gtk_combo_box_get_active(GTK_COMBO_BOX(output));
     if (i < 0) {
       gtk_combo_box_set_active(GTK_COMBO_BOX(output),0);
index 7c76438238a7cb7bc2e5f9ddf9c4578b0e059d25..af2003560e654f061cd28af0445f98160998c6cf 100644 (file)
--- a/sliders.c
+++ b/sliders.c
@@ -827,7 +827,7 @@ fprintf(stderr,"sliders_init: width=%d height=%d\n", width,height);
     gtk_widget_override_font(mic_gain_label, pango_font_description_from_string("Sans 10"));
     gtk_grid_attach(GTK_GRID(sliders),mic_gain_label,0,1,1,1);
 
-    mic_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,mic_linein?0.0:1.0,mic_linein?31.0:100.0, 1.0);
+    mic_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,mic_linein?0.0:-12.0,mic_linein?31.0:50.0, 1.0);
     gtk_widget_override_font(mic_gain_scale, pango_font_description_from_string("Sans 10"));
     gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_linein?linein_gain:mic_gain);
     gtk_grid_attach(GTK_GRID(sliders),mic_gain_scale,1,1,2,1);
index 9036c4a0941ccf67ad15c596e50768c084ff0978..3737505b8d6e80a54fe131ad5df61e375ac49891 100644 (file)
@@ -153,7 +153,7 @@ fprintf(stderr,"soapy_protocol_start_receiver: activate_stream rate=%f\n",rate);
   }
 
 fprintf(stderr,"soapy_protocol_start_receiver: create receive_thread\n");
-  receive_thread_id = g_thread_new( "rx_thread", receive_thread, rx);
+  receive_thread_id = g_thread_new( "soapy_rx", receive_thread, rx);
   if( ! receive_thread_id )
   {
     fprintf(stderr,"g_thread_new failed for receive_thread\n");
index 2ab37c71a9fd8cfd0adb3ebb3f3dcbbe324d7987..64d46506a92076dc0213fa386c69fc388e7404a6 100644 (file)
@@ -50,10 +50,11 @@ static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_d
   return FALSE;
 }
 
-static gboolean step_select_cb (GtkWidget *widget, gpointer        data) {
-  step=steps[GPOINTER_TO_INT(data)];
-  g_idle_add(ext_vfo_update,NULL);
-  return FALSE;
+static void step_select_cb (GtkToggleButton *widget, gpointer        data) {
+  if(gtk_toggle_button_get_active(widget)) {
+    step=steps[GPOINTER_TO_INT(data)];
+    g_idle_add(ext_vfo_update,NULL);
+  }
 }
 
 void step_menu(GtkWidget *parent) {
@@ -96,7 +97,7 @@ void step_menu(GtkWidget *parent) {
     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,1+(i/5),1,1);
-    g_signal_connect(step_rb,"pressed",G_CALLBACK(step_select_cb),(gpointer)(long)i);
+    g_signal_connect(step_rb,"toggled",G_CALLBACK(step_select_cb),(gpointer)(long)i);
     i++;
   }
 
index 4f5f9a38d392fde0dd9deac872dbe0d30b1bf626..6425ee7d263317827d4d182961d389a78b767de5 100644 (file)
@@ -148,12 +148,10 @@ g_print("reconfigure_transmitter: width=%d height=%d\n",width,height);
     tx->width=width;
     tx->height=height; 
     int ratio=tx->iq_output_rate/tx->mic_sample_rate;
-/*
-    tx->pixels=width*ratio*4;
+    tx->pixels=display_width*ratio*2;
     g_free(tx->pixel_samples);
     tx->pixel_samples=g_new(float,tx->pixels);
     init_analyzer(tx);
-*/
   }
   gtk_widget_set_size_request(tx->panadapter, width, height);
 }
@@ -410,102 +408,114 @@ static gboolean update_display(gpointer data) {
     double constant1=3.3;
     double constant2=0.095;
 
-    if(protocol==ORIGINAL_PROTOCOL) {
-      switch(device) {
-        case DEVICE_METIS:
-          constant1=3.3;
-          constant2=0.09;
-          break;
-        case DEVICE_HERMES:
-        case DEVICE_STEMLAB:
-          constant1=3.3;
-          constant2=0.095;
-          break;
-        case DEVICE_ANGELIA:
-          constant1=3.3;
-          constant2=0.095;
-          break;
-        case DEVICE_ORION:
-          constant1=5.0;
-          constant2=0.108;
-          break;
-        case DEVICE_ORION2:
-          constant1=5.0;
-          constant2=0.108;
-          break;
-        case DEVICE_HERMES_LITE:
-          break;
-      }
+    int power;
+    double v1;
+
+    switch(protocol) {
+      case ORIGINAL_PROTOCOL:
+        switch(device) {
+          case DEVICE_METIS:
+            constant1=3.3;
+            constant2=0.09;
+            break;
+          case DEVICE_HERMES:
+          case DEVICE_STEMLAB:
+            constant1=3.3;
+            constant2=0.095;
+            break;
+          case DEVICE_ANGELIA:
+            constant1=3.3;
+            constant2=0.095;
+            break;
+          case DEVICE_ORION:
+            constant1=5.0;
+            constant2=0.108;
+            break;
+          case DEVICE_ORION2:
+            constant1=5.0;
+            constant2=0.108;
+            break;
+          case DEVICE_HERMES_LITE:
+            break;
+        }
+
+        power=alex_forward_power;
+        if(power==0) {
+          power=exciter_power;
+        }
+        v1=((double)power/4095.0)*constant1;
+        transmitter->fwd=(v1*v1)/constant2;
 
-      int power=alex_forward_power;
-      if(power==0) {
         power=exciter_power;
-      }
-      double v1;
-      v1=((double)power/4095.0)*constant1;
-      transmitter->fwd=(v1*v1)/constant2;
+        v1=((double)power/4095.0)*constant1;
+        transmitter->exciter=(v1*v1)/constant2;
 
-      power=exciter_power;
-      v1=((double)power/4095.0)*constant1;
-      transmitter->exciter=(v1*v1)/constant2;
+        transmitter->rev=0.0;
+        if(alex_forward_power!=0) {
+          power=alex_reverse_power;
+          v1=((double)power/4095.0)*constant1;
+          transmitter->rev=(v1*v1)/constant2;
+        }
+        break;
+      case NEW_PROTOCOL:
+        switch(device) {
+          case NEW_DEVICE_ATLAS:
+            constant1=3.3;
+            constant2=0.09;
+            break;
+          case NEW_DEVICE_HERMES:
+            constant1=3.3;
+            constant2=0.09;
+            break;
+          case NEW_DEVICE_HERMES2:
+            constant1=3.3;
+            constant2=0.095;
+            break;
+          case NEW_DEVICE_ANGELIA:
+            constant1=3.3;
+            constant2=0.095;
+            break;
+          case NEW_DEVICE_ORION:
+            constant1=5.0;
+            constant2=0.108;
+            break;
+          case NEW_DEVICE_ORION2:
+            constant1=5.0;
+            constant2=0.108;
+            break;
+          case NEW_DEVICE_HERMES_LITE:
+            constant1=3.3;
+            constant2=0.09;
+            break;
+        }
 
-      transmitter->rev=0.0;
-      if(alex_forward_power!=0) {
-        power=alex_reverse_power;
+        power=alex_forward_power;
+        if(power==0) {
+          power=exciter_power;
+        }
         v1=((double)power/4095.0)*constant1;
-        transmitter->rev=(v1*v1)/constant2;
-      }
-    } else {
-      switch(device) {
-        case NEW_DEVICE_ATLAS:
-          constant1=3.3;
-          constant2=0.09;
-          break;
-        case NEW_DEVICE_HERMES:
-          constant1=3.3;
-          constant2=0.09;
-          break;
-        case NEW_DEVICE_HERMES2:
-          constant1=3.3;
-          constant2=0.095;
-          break;
-        case NEW_DEVICE_ANGELIA:
-          constant1=3.3;
-          constant2=0.095;
-          break;
-        case NEW_DEVICE_ORION:
-          constant1=5.0;
-          constant2=0.108;
-          break;
-        case NEW_DEVICE_ORION2:
-          constant1=5.0;
-          constant2=0.108;
-          break;
-        case NEW_DEVICE_HERMES_LITE:
-          constant1=3.3;
-          constant2=0.09;
-          break;
-      }
+        transmitter->fwd=(v1*v1)/constant2;
 
-      int power=alex_forward_power;
-      if(power==0) {
         power=exciter_power;
-      }
-      double v1;
-      v1=((double)power/4095.0)*constant1;
-      transmitter->fwd=(v1*v1)/constant2;
+        v1=((double)power/4095.0)*constant1;
+        transmitter->exciter=(v1*v1)/constant2;
 
-      power=exciter_power;
-      v1=((double)power/4095.0)*constant1;
-      transmitter->exciter=(v1*v1)/constant2;
+        transmitter->rev=0.0;
+        if(alex_forward_power!=0) {
+          power=alex_reverse_power;
+          v1=((double)power/4095.0)*constant1;
+          transmitter->rev=(v1*v1)/constant2;
+        }
+        break;
 
-      transmitter->rev=0.0;
-      if(alex_forward_power!=0) {
-        power=alex_reverse_power;
-        v1=((double)power/4095.0)*constant1;
-        transmitter->rev=(v1*v1)/constant2;
-      }
-    } 
+#ifdef SOAPY_SDR
+      case SOAPY_PROTOCOL:
+        transmitter->fwd=0.0;
+        transmitter->exciter=0.0;
+        transmitter->rev=0.0;
+        break;
+#endif
+    }
 
     if(!duplex) {
       meter_update(active_receiver,POWER,transmitter->fwd,transmitter->rev,transmitter->exciter,transmitter->alc);
@@ -578,6 +588,9 @@ g_print("create_dialog\n");
 g_print("create_dialog: add tx->panel\n");
   gtk_widget_set_size_request (tx->panel, display_width/4, display_height/2);
   gtk_container_add(GTK_CONTAINER(content),tx->panel);
+
+  gtk_widget_add_events(tx->dialog, GDK_KEY_PRESS_MASK);
+  g_signal_connect(tx->dialog, "key_press_event", G_CALLBACK(keypress_cb), NULL);
 }
 
 static void create_visual(TRANSMITTER *tx) {
index 8248c30657b0c49d0d0d197ffae86e510ca53737..20b04ec52ef6810a0c8e7e434ec0859c9f932384 100644 (file)
--- a/tx_menu.c
+++ b/tx_menu.c
@@ -265,7 +265,7 @@ void tx_menu(GtkWidget *parent) {
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (micin_b), mic_linein==0);
     gtk_widget_show(micin_b);
     gtk_grid_attach(GTK_GRID(grid),micin_b,col,row,1,1);
-    g_signal_connect(micin_b,"pressed",G_CALLBACK(micin_changed),NULL);
+    g_signal_connect(micin_b,"toggled",G_CALLBACK(micin_changed),NULL);
 
     col++;
 
@@ -273,7 +273,7 @@ void tx_menu(GtkWidget *parent) {
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linein_b), mic_linein==1);
     gtk_widget_show(linein_b);
     gtk_grid_attach(GTK_GRID(grid),linein_b,col,row,1,1);
-    g_signal_connect(linein_b,"pressed",G_CALLBACK(linein_changed),NULL);
+    g_signal_connect(linein_b,"toggled",G_CALLBACK(linein_changed),NULL);
 
     row++;
     col=0;
@@ -367,7 +367,6 @@ void tx_menu(GtkWidget *parent) {
       gtk_combo_box_set_active(GTK_COMBO_BOX(input),0);
     }
 
-
     gtk_grid_attach(GTK_GRID(grid),input,col,row++,1,1);
     g_signal_connect(input,"changed",G_CALLBACK(local_input_changed_cb),NULL);
 
diff --git a/vfo.c b/vfo.c
index dbe03778b3bf1a18bb4dfa265b147465cc7d3aeb..bcd2f692d202f1a0280a8c73e01b92a85ea87bd3 100644 (file)
--- a/vfo.c
+++ b/vfo.c
@@ -579,7 +579,9 @@ void vfo_step(int steps) {
         } else {
           vfo[sid].frequency      += delta;
         }
-        receiver_frequency_changed(other_receiver);
+        if(receivers==2) {
+          receiver_frequency_changed(other_receiver);
+        }
         break;
       case RSAT_MODE:
         // A increments and B decrements or A decrments and B increments
@@ -588,7 +590,9 @@ void vfo_step(int steps) {
         } else {
           vfo[sid].frequency      -= delta;
         }
-        receiver_frequency_changed(other_receiver);
+        if(receivers==2) {
+          receiver_frequency_changed(other_receiver);
+        }
         break;
     }
     receiver_frequency_changed(active_receiver);
@@ -629,7 +633,9 @@ void vfo_id_step(int id, int steps) {
         } else {
           vfo[sid].frequency      += delta;
         }
-        receiver_frequency_changed(other_receiver);
+        if(receivers==2) {
+          receiver_frequency_changed(other_receiver);
+        }
         break;
       case RSAT_MODE:
         // A increments and B decrements or A decrments and B increments
@@ -638,7 +644,9 @@ void vfo_id_step(int id, int steps) {
         } else {
           vfo[sid].frequency      -= delta;
         }
-        receiver_frequency_changed(other_receiver);
+        if(receivers==2) {
+          receiver_frequency_changed(other_receiver);
+        }
         break;
     }
 
@@ -683,7 +691,9 @@ void vfo_move(long long hz,int round) {
         } else {
           vfo[sid].frequency      += delta;
         }
-        receiver_frequency_changed(other_receiver);
+        if(receivers==2) {
+          receiver_frequency_changed(other_receiver);
+        }
         break;
       case RSAT_MODE:
         // A increments and B decrements or A decrments and B increments
@@ -692,7 +702,9 @@ void vfo_move(long long hz,int round) {
         } else {
           vfo[sid].frequency      -= delta;
         }
-        receiver_frequency_changed(other_receiver);
+        if(receivers==2) {
+          receiver_frequency_changed(other_receiver);
+        }
         break;
     }
     receiver_frequency_changed(active_receiver);
@@ -749,7 +761,9 @@ void vfo_move_to(long long hz) {
         } else {
           vfo[sid].frequency      += delta;
         }
-        receiver_frequency_changed(other_receiver);
+        if(receivers==2) {
+          receiver_frequency_changed(other_receiver);
+        }
         break;
       case RSAT_MODE:
         // A increments and B decrements or A decrements and B increments
@@ -758,7 +772,9 @@ void vfo_move_to(long long hz) {
         } else {
           vfo[sid].frequency      -= delta;
         }
-        receiver_frequency_changed(other_receiver);
+        if(receivers==2) {
+          receiver_frequency_changed(other_receiver);
+        }
         break;
     }