From: John Melton - G0ORX/N6LYT Date: Sun, 14 Aug 2016 16:53:37 +0000 (+0000) Subject: Reworked AGC X-Git-Url: https://git.rkrishnan.org/pf/components//%22%22.?a=commitdiff_plain;h=55230227d16db92c0ed68cbfb131814f7dc26bdd;p=pihpsdr.git Reworked AGC --- diff --git a/Makefile b/Makefile index 92c9f44..83f900b 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,9 @@ UNAME_N=raspberrypi CC=gcc LINK=gcc +# uncomment the line below for various denug facilities +#DEBUG_OPTION=-D DEBUG + # uncomment the line below for LimeSDR (uncomment line below) #LIMESDR_INCLUDE=LIMESDR @@ -90,7 +93,7 @@ else gpio.o endif -OPTIONS=-g -D $(UNAME_N) $(GPIO_OPTIONS) $(LIMESDR_OPTIONS) $(FREEDV_OPTIONS) $(PSK_OPTIONS) -D GIT_DATE='"$(GIT_DATE)"' -D GIT_VERSION='"$(GIT_VERSION)"' -O3 +OPTIONS=-g -D $(UNAME_N) $(GPIO_OPTIONS) $(LIMESDR_OPTIONS) $(FREEDV_OPTIONS) $(PSK_OPTIONS) -D GIT_DATE='"$(GIT_DATE)"' -D GIT_VERSION='"$(GIT_VERSION)"' $(DEBUG_OPTION) -O3 GTKINCLUDES=`pkg-config --cflags gtk+-3.0` GTKLIBS=`pkg-config --libs gtk+-3.0` diff --git a/band.c b/band.c index 9667ac8..eaf0183 100644 --- a/band.c +++ b/band.c @@ -66,6 +66,7 @@ BANDSTACK_ENTRY bandstack_entries30[] = BANDSTACK_ENTRY bandstack_entries20[] = {{14010000LL,modeCWU,filterF0,200,2800,200,2800}, + {14150000LL,modeUSB,filterF5,200,2800,200,2800}, {14230000LL,modeUSB,filterF5,200,2800,200,2800}, {14336000LL,modeUSB,filterF5,200,2800,200,2800}}; @@ -164,7 +165,7 @@ BANDSTACK bandstack80={3,1,bandstack_entries80}; BANDSTACK bandstack60={5,1,bandstack_entries60}; BANDSTACK bandstack40={3,1,bandstack_entries40}; BANDSTACK bandstack30={3,1,bandstack_entries30}; -BANDSTACK bandstack20={3,1,bandstack_entries20}; +BANDSTACK bandstack20={4,1,bandstack_entries20}; BANDSTACK bandstack18={3,1,bandstack_entries18}; BANDSTACK bandstack15={3,1,bandstack_entries15}; BANDSTACK bandstack12={3,1,bandstack_entries12}; diff --git a/menu.c b/menu.c index 51eee5e..91d1c60 100644 --- a/menu.c +++ b/menu.c @@ -22,6 +22,7 @@ #include #include +#include "agc.h" #include "audio.h" #include "band.h" #include "bandstack.h" @@ -46,6 +47,32 @@ static GtkWidget *menu; static GtkWidget *ant_grid; static gint ant_id=-1; +#ifdef DEBUG +static void scale_value_changed_cb(GtkWidget *widget, gpointer data) { + scale=(int)gtk_range_get_value(GTK_RANGE(widget)); +} + +#ifdef PSK +static void psk_scale_value_changed_cb(GtkWidget *widget, gpointer data) { + psk_scale=(int)gtk_range_get_value(GTK_RANGE(widget)); +} +#endif + +#ifdef FREEDV +static void freedv_scale_value_changed_cb(GtkWidget *widget, gpointer data) { + freedv_scale=(int)gtk_range_get_value(GTK_RANGE(widget)); +} +#endif + +#endif + +static void agc_hang_threshold_value_changed_cb(GtkWidget *widget, gpointer data) { + agc_hang_threshold=(int)gtk_range_get_value(GTK_RANGE(widget)); + if(agc==AGC_LONG || agc==AGC_SLOW) { + SetRXAAGCHangThreshold(CHANNEL_RX0, (int)agc_hang_threshold); + } +} + static void display_panadapter_cb(GtkWidget *widget, gpointer data) { display_panadapter=display_panadapter==1?0:1; reconfigure_display(); @@ -979,30 +1006,30 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, GtkWidget *detector_mode_label=gtk_label_new("Detector: "); //gtk_widget_override_font(detector_mode_label, pango_font_description_from_string("Arial 18")); gtk_widget_show(detector_mode_label); - gtk_grid_attach(GTK_GRID(display_grid),detector_mode_label,3,0,1,1); + gtk_grid_attach(GTK_GRID(display_grid),detector_mode_label,2,0,1,1); GtkWidget *detector_mode_peak=gtk_radio_button_new_with_label(NULL,"Peak"); 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(display_grid),detector_mode_peak,3,1,1,1); + gtk_grid_attach(GTK_GRID(display_grid),detector_mode_peak,2,1,1,1); g_signal_connect(detector_mode_peak,"pressed",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_PEAK); GtkWidget *detector_mode_rosenfell=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(detector_mode_peak),"Rosenfell"); 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(display_grid),detector_mode_rosenfell,3,2,1,1); + gtk_grid_attach(GTK_GRID(display_grid),detector_mode_rosenfell,2,2,1,1); g_signal_connect(detector_mode_rosenfell,"pressed",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_ROSENFELL); GtkWidget *detector_mode_average=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(detector_mode_rosenfell),"Average"); 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(display_grid),detector_mode_average,3,3,1,1); + gtk_grid_attach(GTK_GRID(display_grid),detector_mode_average,2,3,1,1); g_signal_connect(detector_mode_average,"pressed",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_AVERAGE); GtkWidget *detector_mode_sample=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(detector_mode_average),"Sample"); 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(display_grid),detector_mode_sample,3,4,1,1); + gtk_grid_attach(GTK_GRID(display_grid),detector_mode_sample,2,4,1,1); g_signal_connect(detector_mode_sample,"pressed",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_SAMPLE); @@ -1010,70 +1037,70 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, GtkWidget *average_mode_label=gtk_label_new("Averaging: "); //gtk_widget_override_font(average_mode_label, pango_font_description_from_string("Arial 18")); gtk_widget_show(average_mode_label); - gtk_grid_attach(GTK_GRID(display_grid),average_mode_label,4,0,1,1); + gtk_grid_attach(GTK_GRID(display_grid),average_mode_label,3,0,1,1); GtkWidget *average_mode_none=gtk_radio_button_new_with_label(NULL,"None"); 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(display_grid),average_mode_none,4,1,1,1); + gtk_grid_attach(GTK_GRID(display_grid),average_mode_none,3,1,1,1); g_signal_connect(average_mode_none,"pressed",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_NONE); GtkWidget *average_mode_recursive=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(average_mode_none),"Recursive"); 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(display_grid),average_mode_recursive,4,2,1,1); + gtk_grid_attach(GTK_GRID(display_grid),average_mode_recursive,3,2,1,1); g_signal_connect(average_mode_recursive,"pressed",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_RECURSIVE); GtkWidget *average_mode_time_window=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(average_mode_recursive),"Time Window"); 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(display_grid),average_mode_time_window,4,3,1,1); + gtk_grid_attach(GTK_GRID(display_grid),average_mode_time_window,3,3,1,1); g_signal_connect(average_mode_time_window,"pressed",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_TIME_WINDOW); GtkWidget *average_mode_log_recursive=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(average_mode_time_window),"Log Recursive"); 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(display_grid),average_mode_log_recursive,4,4,1,1); + gtk_grid_attach(GTK_GRID(display_grid),average_mode_log_recursive,3,4,1,1); g_signal_connect(average_mode_log_recursive,"pressed",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_LOG_RECURSIVE); GtkWidget *time_label=gtk_label_new("Time (ms): "); //gtk_widget_override_font(average_mode_label, pango_font_description_from_string("Arial 18")); gtk_widget_show(time_label); - gtk_grid_attach(GTK_GRID(display_grid),time_label,4,5,1,1); + gtk_grid_attach(GTK_GRID(display_grid),time_label,3,5,1,1); GtkWidget *time_r=gtk_spin_button_new_with_range(1.0,9999.0,1.0); gtk_spin_button_set_value(GTK_SPIN_BUTTON(time_r),(double)display_average_time); gtk_widget_show(time_r); - gtk_grid_attach(GTK_GRID(display_grid),time_r,5,5,1,1); + gtk_grid_attach(GTK_GRID(display_grid),time_r,4,5,1,1); g_signal_connect(time_r,"value_changed",G_CALLBACK(time_value_changed_cb),NULL); GtkWidget *b_display_panadapter=gtk_check_button_new_with_label("Display Panadapter"); //gtk_widget_override_font(b_display_panadapter, pango_font_description_from_string("Arial 18")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_display_panadapter), display_panadapter); gtk_widget_show(b_display_panadapter); - gtk_grid_attach(GTK_GRID(display_grid),b_display_panadapter,6,0,1,1); + gtk_grid_attach(GTK_GRID(display_grid),b_display_panadapter,0,7,1,1); g_signal_connect(b_display_panadapter,"toggled",G_CALLBACK(display_panadapter_cb),(gpointer *)NULL); GtkWidget *b_display_waterfall=gtk_check_button_new_with_label("Display Waterfall"); //gtk_widget_override_font(b_display_waterfall, pango_font_description_from_string("Arial 18")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_display_waterfall), display_waterfall); gtk_widget_show(b_display_waterfall); - gtk_grid_attach(GTK_GRID(display_grid),b_display_waterfall,6,1,1,1); + gtk_grid_attach(GTK_GRID(display_grid),b_display_waterfall,1,7,1,1); g_signal_connect(b_display_waterfall,"toggled",G_CALLBACK(display_waterfall_cb),(gpointer *)NULL); GtkWidget *b_display_sliders=gtk_check_button_new_with_label("Display Sliders"); //gtk_widget_override_font(b_display_sliders, pango_font_description_from_string("Arial 18")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_display_sliders), display_sliders); gtk_widget_show(b_display_sliders); - gtk_grid_attach(GTK_GRID(display_grid),b_display_sliders,6,2,1,1); + gtk_grid_attach(GTK_GRID(display_grid),b_display_sliders,2,7,1,1); g_signal_connect(b_display_sliders,"toggled",G_CALLBACK(display_sliders_cb),(gpointer *)NULL); GtkWidget *b_display_toolbar=gtk_check_button_new_with_label("Display Toolbar"); //gtk_widget_override_font(b_display_toolbar, pango_font_description_from_string("Arial 18")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_display_toolbar), display_toolbar); gtk_widget_show(b_display_toolbar); - gtk_grid_attach(GTK_GRID(display_grid),b_display_toolbar,6,3,1,1); + gtk_grid_attach(GTK_GRID(display_grid),b_display_toolbar,3,7,1,1); g_signal_connect(b_display_toolbar,"toggled",G_CALLBACK(display_toolbar_cb),(gpointer *)NULL); @@ -1087,68 +1114,77 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, gtk_grid_set_row_homogeneous(GTK_GRID(dsp_grid),TRUE); gtk_grid_set_column_spacing (GTK_GRID(dsp_grid),10); + GtkWidget *agc_hang_threshold_label=gtk_label_new("AGC Hang Threshold:"); + gtk_widget_show(agc_hang_threshold_label); + gtk_grid_attach(GTK_GRID(dsp_grid),agc_hang_threshold_label,0,0,1,1); + GtkWidget *agc_hang_threshold_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0.0, 100.0, 1.0); + gtk_range_set_value (GTK_RANGE(agc_hang_threshold_scale),agc_hang_threshold); + gtk_widget_show(agc_hang_threshold_scale); + gtk_grid_attach(GTK_GRID(dsp_grid),agc_hang_threshold_scale,1,0,2,1); + g_signal_connect(G_OBJECT(agc_hang_threshold_scale),"value_changed",G_CALLBACK(agc_hang_threshold_value_changed_cb),NULL); + GtkWidget *pre_post_agc_label=gtk_label_new("NR/NR2/ANF"); //gtk_widget_override_font(pre_post_agc_label, pango_font_description_from_string("Arial 18")); gtk_widget_show(pre_post_agc_label); - gtk_grid_attach(GTK_GRID(dsp_grid),pre_post_agc_label,0,0,1,1); + gtk_grid_attach(GTK_GRID(dsp_grid),pre_post_agc_label,0,1,1,1); GtkWidget *pre_agc_b=gtk_radio_button_new_with_label(NULL,"Pre AGC"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pre_agc_b),nr_agc==0); gtk_widget_show(pre_agc_b); - gtk_grid_attach(GTK_GRID(dsp_grid),pre_agc_b,1,0,1,1); + gtk_grid_attach(GTK_GRID(dsp_grid),pre_agc_b,1,1,1,1); g_signal_connect(pre_agc_b,"pressed",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), nr_agc==1); gtk_widget_show(post_agc_b); - gtk_grid_attach(GTK_GRID(dsp_grid),post_agc_b,2,0,1,1); + gtk_grid_attach(GTK_GRID(dsp_grid),post_agc_b,2,1,1,1); g_signal_connect(post_agc_b,"pressed",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")); gtk_widget_show(nr2_gain_label); - gtk_grid_attach(GTK_GRID(dsp_grid),nr2_gain_label,0,1,1,1); + gtk_grid_attach(GTK_GRID(dsp_grid),nr2_gain_label,0,2,1,1); GtkWidget *linear_b=gtk_radio_button_new_with_label(NULL,"Linear"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linear_b),nr2_gain_method==0); gtk_widget_show(linear_b); - gtk_grid_attach(GTK_GRID(dsp_grid),linear_b,1,1,1,1); + gtk_grid_attach(GTK_GRID(dsp_grid),linear_b,1,2,1,1); g_signal_connect(linear_b,"pressed",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), nr2_gain_method==1); gtk_widget_show(log_b); - gtk_grid_attach(GTK_GRID(dsp_grid),log_b,2,1,1,1); + gtk_grid_attach(GTK_GRID(dsp_grid),log_b,2,2,1,1); g_signal_connect(log_b,"pressed",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), nr2_gain_method==2); gtk_widget_show(gamma_b); - gtk_grid_attach(GTK_GRID(dsp_grid),gamma_b,3,1,1,1); + gtk_grid_attach(GTK_GRID(dsp_grid),gamma_b,3,2,1,1); g_signal_connect(gamma_b,"pressed",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")); gtk_widget_show(nr2_npe_method_label); - gtk_grid_attach(GTK_GRID(dsp_grid),nr2_npe_method_label,0,2,1,1); + gtk_grid_attach(GTK_GRID(dsp_grid),nr2_npe_method_label,0,3,1,1); GtkWidget *osms_b=gtk_radio_button_new_with_label(NULL,"OSMS"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (osms_b),nr2_npe_method==0); gtk_widget_show(osms_b); - gtk_grid_attach(GTK_GRID(dsp_grid),osms_b,1,2,1,1); + gtk_grid_attach(GTK_GRID(dsp_grid),osms_b,1,3,1,1); g_signal_connect(osms_b,"pressed",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), nr2_npe_method==1); gtk_widget_show(mmse_b); - gtk_grid_attach(GTK_GRID(dsp_grid),mmse_b,2,2,1,1); + gtk_grid_attach(GTK_GRID(dsp_grid),mmse_b,2,3,1,1); g_signal_connect(mmse_b,"pressed",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")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ae_b), nr2_ae); gtk_widget_show(ae_b); - gtk_grid_attach(GTK_GRID(dsp_grid),ae_b,0,3,1,1); + gtk_grid_attach(GTK_GRID(dsp_grid),ae_b,0,4,1,1); g_signal_connect(ae_b,"toggled",G_CALLBACK(ae_cb),NULL); id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),dsp_grid,dsp_label); @@ -1446,27 +1482,43 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),exit_grid,exit_label); +#ifdef DEBUG + + GtkWidget *debug_label=gtk_label_new("Debug"); + GtkWidget *debug_grid=gtk_grid_new(); + gtk_grid_set_column_homogeneous(GTK_GRID(debug_grid),TRUE); + + GtkWidget *scale_label=gtk_label_new("Scale:"); + gtk_widget_show(scale_label); + gtk_grid_attach(GTK_GRID(debug_grid),scale_label,0,0,1,1); + GtkWidget *scale_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 20.0, 0.1); + gtk_range_set_value (GTK_RANGE(scale_scale),scale); + gtk_widget_show(scale_scale); + gtk_grid_attach(GTK_GRID(debug_grid),scale_scale,1,0,1,1); + g_signal_connect(G_OBJECT(scale_scale),"value_changed",G_CALLBACK(scale_value_changed_cb),NULL); + + GtkWidget *psk_scale_label=gtk_label_new("PSK Scale:"); + gtk_widget_show(psk_scale_label); + gtk_grid_attach(GTK_GRID(debug_grid),psk_scale_label,0,1,1,1); + GtkWidget *psk_scale_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 20.0, 0.1); + gtk_range_set_value (GTK_RANGE(psk_scale_scale),psk_scale); + gtk_widget_show(psk_scale_scale); + gtk_grid_attach(GTK_GRID(debug_grid),psk_scale_scale,1,1,1,1); + g_signal_connect(G_OBJECT(psk_scale_scale),"value_changed",G_CALLBACK(psk_scale_value_changed_cb),NULL); + + GtkWidget *freedv_scale_label=gtk_label_new("FREEDV Scale:"); + gtk_widget_show(freedv_scale_label); + gtk_grid_attach(GTK_GRID(debug_grid),freedv_scale_label,0,2,1,1); + GtkWidget *freedv_scale_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 20.0, 0.1); + gtk_range_set_value (GTK_RANGE(freedv_scale_scale),freedv_scale); + gtk_widget_show(freedv_scale_scale); + gtk_grid_attach(GTK_GRID(debug_grid),freedv_scale_scale,1,2,1,1); + g_signal_connect(G_OBJECT(freedv_scale_scale),"value_changed",G_CALLBACK(freedv_scale_value_changed_cb),NULL); + + id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),debug_grid,debug_label); + +#endif -/* - GtkWidget *about_label=gtk_label_new("About"); - GtkWidget *about_grid=gtk_grid_new(); - gtk_grid_set_column_homogeneous(GTK_GRID(about_grid),TRUE); - - char build[64]; - - sprintf(build,"build: %s %s",build_date, build_time); - GtkWidget *pi_label=gtk_label_new("pihpsdr by John Melton g0orx/n6lyt"); - gtk_widget_show(pi_label); - gtk_grid_attach(GTK_GRID(about_grid),pi_label,0,0,1,1); - GtkWidget *filler_label=gtk_label_new(""); - gtk_widget_show(filler_label); - gtk_grid_attach(GTK_GRID(about_grid),filler_label,0,1,1,1); - GtkWidget *build_date_label=gtk_label_new(build); - gtk_widget_show(build_date_label); - gtk_grid_attach(GTK_GRID(about_grid),build_date_label,0,2,1,1); - - id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),about_grid,about_label); -*/ gtk_container_add(GTK_CONTAINER(content),notebook); GtkWidget *close_button=gtk_dialog_add_button(GTK_DIALOG(dialog),"Close Dialog",GTK_RESPONSE_OK); diff --git a/old_protocol.c b/old_protocol.c index 6e35ef8..8e9fe6f 100644 --- a/old_protocol.c +++ b/old_protocol.c @@ -63,11 +63,6 @@ #define C3 6 #define C4 7 -#define SCALE 4.6 -#ifdef FREEDV -#define FREEDV_SCALE 8.5 -#endif - #define DATA_PORT 1024 #define SYNC 0x7F @@ -635,7 +630,7 @@ static void full_rx_buffer() { static void full_tx_buffer() { int j; int error; - double gain=32767.0*SCALE; // 2^16-1 + double gain=32767.0*scale; // 2^16-1 // debug //int min_sample=0; @@ -648,7 +643,7 @@ static void full_tx_buffer() { #ifdef FREEDV if(mode==modeFREEDV) { - gain=32767.0*FREEDV_SCALE; + gain=32767.0*freedv_scale; } #endif @@ -699,10 +694,8 @@ static void full_tx_buffer() { } } - //fprintf(stderr,"scale=%f min_sample=%d max_sample=%d\n",scale, min_sample,max_sample); - //fprintf(stderr,"scale=%f overflow=%d\n",scale,overflow); - } + /* static void process_bandscope_buffer(char *buffer) { } diff --git a/panadapter.c b/panadapter.c index ac81e88..9d34baf 100644 --- a/panadapter.c +++ b/panadapter.c @@ -24,7 +24,9 @@ #include #include #include +#include "agc.h" #include "band.h" +#include "channel.h" #include "discovered.h" #include "radio.h" #include "panadapter.h" @@ -309,6 +311,49 @@ void panadapter_update(float *data,int tx) { } } + // agc + if(agc!=AGC_OFF) { + double hang=0.0; + double thresh=0; + + GetRXAAGCHangLevel(CHANNEL_RX0, &hang); + GetRXAAGCThresh(CHANNEL_RX0, &thresh, 4096.0, (double)sample_rate); + + double knee_y=thresh+(double)get_attenuation()-20.0; + knee_y = floor((panadapter_high - knee_y) + * (double) display_height + / (panadapter_high - panadapter_low)); + + double hang_y=hang+(double)get_attenuation()-20.0; + hang_y = floor((panadapter_high - hang_y) + * (double) display_height + / (panadapter_high - panadapter_low)); + +//fprintf(stderr,"hang=%f thresh=%f hang_y=%f knee_y=%f\n",rx1_hang,rx1_thresh,hang_y,knee_y); + if(agc!=AGC_MEDIUM && agc!=AGC_FAST) { + cairo_set_source_rgb (cr, 1.0, 1.0, 0.0); + cairo_move_to(cr,40.0,hang_y-8.0); + cairo_rectangle(cr, 40, hang_y-8.0,8.0,8.0); + cairo_fill(cr); + cairo_move_to(cr,40.0,hang_y); + cairo_line_to(cr,(double)display_width-40.0,hang_y); + cairo_stroke(cr); + cairo_move_to(cr,48.0,hang_y); + cairo_show_text(cr, "-H"); + } + + cairo_set_source_rgb (cr, 0.0, 1.0, 0.0); + cairo_move_to(cr,40.0,knee_y-8.0); + cairo_rectangle(cr, 40, knee_y-8.0,8.0,8.0); + cairo_fill(cr); + cairo_move_to(cr,40.0,knee_y); + cairo_line_to(cr,(double)display_width-40.0,knee_y); + cairo_stroke(cr); + cairo_move_to(cr,48.0,knee_y); + cairo_show_text(cr, "-G"); + } + + // cursor cairo_set_source_rgb (cr, 1, 0, 0); cairo_set_line_width(cr, 1.0); @@ -355,6 +400,7 @@ void panadapter_update(float *data,int tx) { } #endif + cairo_destroy (cr); gtk_widget_queue_draw (panadapter); diff --git a/pihpsdr b/pihpsdr index e597d67..cfb5ee5 100755 Binary files a/pihpsdr and b/pihpsdr differ diff --git a/radio.c b/radio.c index 976682c..d1cd9f6 100644 --- a/radio.c +++ b/radio.c @@ -45,6 +45,13 @@ char property_path[128]; sem_t property_sem; +double scale=4.6; +#ifdef FREEDV +double freedv_scale=4.6; +#endif +#ifdef PSK +double psk_scale=8.5; +#endif int atlas_penelope=0; int atlas_clock_source_10mhz=0; @@ -96,7 +103,9 @@ int mic_ptt_enabled=0; int mic_ptt_tip_bias_ring=0; int agc=AGC_MEDIUM; -double agc_gain=60.0; +double agc_gain=80.0; +double agc_slope=35.0; +double agc_hang_threshold=0.0; int nr_none=1; int nr=0; @@ -495,6 +504,8 @@ void radioRestoreState() { if(value) agc=atoi(value); value=getProperty("agc_gain"); if(value) agc_gain=atof(value); + value=getProperty("agc_slope"); + if(value) agc_slope=atof(value); value=getProperty("step"); if(value) step=atoi(value); value=getProperty("cw_keys_reversed"); @@ -637,6 +648,8 @@ void radioSaveState() { setProperty("agc",value); sprintf(value,"%f",agc_gain); setProperty("agc_gain",value); + sprintf(value,"%f",agc_slope); + setProperty("agc_slope",value); sprintf(value,"%d",step); setProperty("step",value); sprintf(value,"%d",cw_keys_reversed); diff --git a/radio.h b/radio.h index e127cb4..5712282 100644 --- a/radio.h +++ b/radio.h @@ -40,6 +40,15 @@ extern char property_path[]; +extern double scale; +#ifdef FREEDV +extern double freedv_scale; +#endif +#ifdef PSK +extern double psk_scale; +#endif + + #define NONE 0 #define ALEX 1 @@ -98,6 +107,8 @@ extern double volume; extern double mic_gain; extern int agc; extern double agc_gain; +extern double agc_slope; +extern double agc_hang_threshold; extern int nr_none; extern int nr; diff --git a/release/pihpsdr.tar b/release/pihpsdr.tar index b2868bb..4e831a8 100644 Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ diff --git a/release/pihpsdr/pihpsdr b/release/pihpsdr/pihpsdr index e597d67..cfb5ee5 100755 Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ diff --git a/toolbar.c b/toolbar.c index 4aad9ab..7bfe95c 100644 --- a/toolbar.c +++ b/toolbar.c @@ -245,7 +245,7 @@ void bandstack_cb(GtkWidget *widget, gpointer data) { for(i=0;ientries;i++) { BANDSTACK_ENTRY *entry=&bandstack->entry[i]; - sprintf(label,"%lld",entry->frequencyA); + sprintf(label,"%lld %s",entry->frequencyA,mode_string[entry->mode]); GtkWidget *b=gtk_button_new_with_label(label); gtk_widget_override_background_color(b, GTK_STATE_NORMAL, &white); //gtk_widget_override_font(b, pango_font_description_from_string("Arial 20")); @@ -254,7 +254,7 @@ void bandstack_cb(GtkWidget *widget, gpointer data) { last_bandstack=b; } gtk_widget_show(b); - gtk_grid_attach(GTK_GRID(grid),b,i%5,i/5,1,1); + gtk_grid_attach(GTK_GRID(grid),b,i/5,i%5,1,1); g_signal_connect(b,"clicked",G_CALLBACK(bandstack_select_cb),(gpointer *)i); } @@ -417,7 +417,8 @@ void filter_cb(GtkWidget *widget, gpointer data) { static void agc_select_cb(GtkWidget *widget, gpointer data) { agc=(int)data; - SetRXAAGCMode(CHANNEL_RX0, agc); + wdsp_set_agc(CHANNEL_RX0, agc); + //SetRXAAGCMode(CHANNEL_RX0, agc); } static void update_noise() { diff --git a/wdsp_init.c b/wdsp_init.c index b1bccb9..3884206 100644 --- a/wdsp_init.c +++ b/wdsp_init.c @@ -36,6 +36,7 @@ #include #include +#include "agc.h" #include "alex.h" #include "new_protocol.h" #include "channel.h" @@ -180,6 +181,42 @@ int getFilterHigh() { return filterHigh; } +void wdsp_set_agc(int rx, int agc) { + + SetRXAAGCMode(rx, agc); + //SetRXAAGCThresh(rx, agc_thresh_point, 4096.0, sample_rate); + SetRXAAGCSlope(rx,agc_slope); + SetRXAAGCTop(rx,agc_gain); + switch(agc) { + case AGC_OFF: + break; + case AGC_LONG: + SetRXAAGCAttack(rx,2); + SetRXAAGCHang(rx,2000); + SetRXAAGCDecay(rx,2000); + SetRXAAGCHangThreshold(rx,(int)agc_hang_threshold); + break; + case AGC_SLOW: + SetRXAAGCAttack(rx,2); + SetRXAAGCHang(rx,1000); + SetRXAAGCDecay(rx,500); + SetRXAAGCHangThreshold(rx,(int)agc_hang_threshold); + break; + case AGC_MEDIUM: + SetRXAAGCAttack(rx,2); + SetRXAAGCHang(rx,0); + SetRXAAGCDecay(rx,250); + SetRXAAGCHangThreshold(rx,100); + break; + case AGC_FAST: + SetRXAAGCAttack(rx,2); + SetRXAAGCHang(rx,0); + SetRXAAGCDecay(rx,50); + SetRXAAGCHangThreshold(rx,100); + break; + } +} + void wdsp_set_offset(long long offset) { if(offset==0) { SetRXAShiftFreq(receiver, (double)offset); @@ -199,8 +236,10 @@ void wdsp_set_input_rate(double rate) { static void setupRX(int rx) { setRXMode(rx,mode); SetRXABandpassFreqs(rx, (double)filterLow, (double)filterHigh); - SetRXAAGCMode(rx, agc); - SetRXAAGCTop(rx,agc_gain); + + //SetRXAAGCMode(rx, agc); + //SetRXAAGCTop(rx,agc_gain); + wdsp_set_agc(rx, agc); SetRXAAMDSBMode(rx, 0); SetRXAShiftRun(rx, 0); diff --git a/wdsp_init.h b/wdsp_init.h index f19f871..72e89a9 100644 --- a/wdsp_init.h +++ b/wdsp_init.h @@ -26,3 +26,4 @@ extern int getFilterLow(); extern int getFilterHigh(); extern void wdsp_init(int rx,int pixels,int protocol); extern void wdsp_new_sample_rate(int rate); +extern void wdsp_set_agc(int rx, int agc);