From b4c738f2829ba7ce1fcd96f15c77fb930e864281 Mon Sep 17 00:00:00 2001 From: John Melton G0ORX Date: Fri, 13 Dec 2019 12:47:24 +0000 Subject: [PATCH] Changed Equalizer sliders to be horizontal. 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. --- agc_menu.c | 22 +++--- ant_menu.c | 81 ++++++++++---------- audio.c | 5 +- band.c | 1 + cw_menu.c | 26 ++++--- display_menu.c | 32 ++++---- dsp_menu.c | 39 +++++----- equalizer_menu.c | 25 +++--- fft_menu.c | 32 ++++---- freqent_menu.c | 3 - frequency.c | 58 +++++++++++++- gpio.c | 167 ++++++++-------------------------------- main.h | 1 + meter.c | 20 ++--- meter_menu.c | 26 ++++--- new_protocol.c | 124 +++++++++++++----------------- noise_menu.c | 96 ++++++++++++----------- old_protocol.c | 2 +- radio.c | 12 +-- radio_menu.c | 33 ++++---- receiver.c | 23 +++--- receiver.h | 3 +- rx_menu.c | 44 ++++++----- sliders.c | 2 +- soapy_protocol.c | 2 +- step_menu.c | 11 +-- transmitter.c | 193 +++++++++++++++++++++++++---------------------- tx_menu.c | 5 +- vfo.c | 32 ++++++-- 29 files changed, 557 insertions(+), 563 deletions(-) diff --git a/agc_menu.c b/agc_menu.c index cb73ace..e669461 100644 --- a/agc_menu.c +++ b/agc_menu.c @@ -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); diff --git a/ant_menu.c b/ant_menu.c index a23c6bb..b0cec5b 100644 --- a/ant_menu.c +++ b/ant_menu.c @@ -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 832a8ea..f60eb60 100644 --- 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 2d6eb8e..baa6745 100644 --- 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; } diff --git a/cw_menu.c b/cw_menu.c index 9a7a503..9facf72 100644 --- 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")); diff --git a/display_menu.c b/display_menu.c index 05b8a89..c30f031 100644 --- a/display_menu.c +++ b/display_menu.c @@ -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++; diff --git a/dsp_menu.c b/dsp_menu.c index 385310e..b707ab1 100644 --- a/dsp_menu.c +++ b/dsp_menu.c @@ -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")); diff --git a/equalizer_menu.c b/equalizer_menu.c index 5fc2bac..6ef266e 100644 --- a/equalizer_menu.c +++ b/equalizer_menu.c @@ -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); diff --git a/fft_menu.c b/fft_menu.c index 84f892f..76c2d3c 100644 --- a/fft_menu.c +++ b/fft_menu.c @@ -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); diff --git a/freqent_menu.c b/freqent_menu.c index b118b1e..7a1fdc5 100644 --- a/freqent_menu.c +++ b/freqent_menu.c @@ -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); diff --git a/frequency.c b/frequency.c index 53d6dff..d4ce530 100644 --- a/frequency.c +++ b/frequency.c @@ -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 5ae0d6f..88b49bf 100644 --- 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 5a8d605..44b7eff 100644 --- 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 af7f0f5..3dd0858 100644 --- 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); diff --git a/meter_menu.c b/meter_menu.c index a0e7869..9b11768 100644 --- a/meter_menu.c +++ b/meter_menu.c @@ -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); diff --git a/new_protocol.c b/new_protocol.c index 4fe00bb..e76080b 100644 --- a/new_protocol.c +++ b/new_protocol.c @@ -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;ialex_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;iinfo.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;inb=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); diff --git a/old_protocol.c b/old_protocol.c index 035b30b..0321851 100644 --- a/old_protocol.c +++ b/old_protocol.c @@ -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 0c2bb0f..7383397 100644 --- 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(fmaxf) 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; diff --git a/radio_menu.c b/radio_menu.c index 9ee2fe3..b63e913 100644 --- a/radio_menu.c +++ b/radio_menu.c @@ -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++; } diff --git a/receiver.c b/receiver.c index 3df8302..46bb5b0 100644 --- a/receiver.c +++ b/receiver.c @@ -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; diff --git a/receiver.h b/receiver.h index b152774..2a5bd4f 100644 --- a/receiver.h +++ b/receiver.h @@ -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; diff --git a/rx_menu.c b/rx_menu.c index c9fd938..6c19965 100644 --- 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); diff --git a/sliders.c b/sliders.c index 7c76438..af20035 100644 --- 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); diff --git a/soapy_protocol.c b/soapy_protocol.c index 9036c4a..3737505 100644 --- a/soapy_protocol.c +++ b/soapy_protocol.c @@ -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"); diff --git a/step_menu.c b/step_menu.c index 2ab37c7..64d4650 100644 --- a/step_menu.c +++ b/step_menu.c @@ -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++; } diff --git a/transmitter.c b/transmitter.c index 4f5f9a3..6425ee7 100644 --- a/transmitter.c +++ b/transmitter.c @@ -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) { diff --git a/tx_menu.c b/tx_menu.c index 8248c30..20b04ec 100644 --- 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 dbe0377..bcd2f69 100644 --- 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; } -- 2.45.2