From: John Melton - G0ORX/N6LYT Date: Sat, 9 Jul 2016 16:15:18 +0000 (+0000) Subject: added ALC when transmitting. added dialog to select S-Meter and ALC meter settings... X-Git-Url: https://git.rkrishnan.org/pf/components/$rel_link?a=commitdiff_plain;h=c1705aab6e1b17baa8f8c206785dce997a8530bf;p=pihpsdr.git added ALC when transmitting. added dialog to select S-Meter and ALC meter settings - tap meter area to display dialog --- diff --git a/main.c b/main.c index 39c7350..d96e15c 100644 --- a/main.c +++ b/main.c @@ -122,10 +122,12 @@ gint update(gpointer data) { } if(!isTransmitting()) { - float m=GetRXAMeter(CHANNEL_RX0, 1/*WDSP.S_AV*/); - meter_update(SMETER,(double)m,0.0,0.0); + double m=GetRXAMeter(CHANNEL_RX0, smeter); + meter_update(SMETER,m,0.0,0.0,0.0); } else { + double alc=GetTXAMeter(CHANNEL_TX, alc); + DISCOVERED *d=&discovered[selected_device]; double constant1=3.3; @@ -221,7 +223,7 @@ gint update(gpointer data) { //fprintf(stderr,"drive=%d tune_drive=%d alex_forward_power=%d alex_reverse_power=%d exciter_power=%d fwd=%f rev=%f exciter=%f\n", // drive, tune_drive, alex_forward_power, alex_reverse_power, exciter_power, fwd, rev, exciter); - meter_update(POWER,fwd,rev,exciter); + meter_update(POWER,fwd,rev,exciter,alc); } return TRUE; @@ -572,7 +574,7 @@ fprintf(stderr,"menu_height=%d\n",MENU_HEIGHT); #endif fprintf(stderr,"meter_height=%d\n",METER_HEIGHT); - meter = meter_init(METER_WIDTH,METER_HEIGHT); + meter = meter_init(METER_WIDTH,METER_HEIGHT,window); #ifdef GRID_LAYOUT gtk_grid_attach(GTK_GRID(grid), meter, 17, 0, 15, 1); #else diff --git a/meter.c b/meter.c index f93e58e..cd01fbf 100644 --- a/meter.c +++ b/meter.c @@ -24,12 +24,15 @@ #include #include "meter.h" +#include "wdsp.h" #ifdef FREEDV #include "radio.h" #include "mode.h" #include "freedv.h" #endif +static GtkWidget *parent_window; + static GtkWidget *meter; static cairo_surface_t *meter_surface = NULL; @@ -84,11 +87,86 @@ meter_draw_cb (GtkWidget *widget, cairo_t *cr, gpointer data) { return FALSE; } -GtkWidget* meter_init(int width,int height) { +smeter_select_cb (GtkWidget *widget, + gpointer data) +{ + smeter=(int)data; +} + +alc_meter_select_cb (GtkWidget *widget, + gpointer data) +{ + alc=(int)data; +} + +static gboolean +meter_press_event_cb (GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + GtkWidget *dialog=gtk_dialog_new_with_buttons("Meter",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); + + GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + GtkWidget *grid=gtk_grid_new(); + + gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE); + gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE); + + + GtkWidget *smeter_peak=gtk_radio_button_new_with_label(NULL,"S Meter Peak"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (smeter_peak), alc==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); + + 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), alc==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); + + 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); + + 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); + + GtkWidget *alc_gain=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(alc_average),"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); + + + gtk_container_add(GTK_CONTAINER(content),grid); + + GtkWidget *close_button=gtk_dialog_add_button(GTK_DIALOG(dialog),"Close",GTK_RESPONSE_OK); + gtk_widget_override_font(close_button, pango_font_description_from_string("Arial 18")); + gtk_widget_show_all(dialog); + + g_signal_connect_swapped (dialog, + "response", + G_CALLBACK (gtk_widget_destroy), + dialog); + + int result=gtk_dialog_run(GTK_DIALOG(dialog)); + + return TRUE; +} + + +GtkWidget* meter_init(int width,int height,GtkWidget *parent) { fprintf(stderr,"meter_init: width=%d height=%d\n",width,height); meter_width=width; meter_height=height; + parent_window=parent; meter = gtk_drawing_area_new (); gtk_widget_set_size_request (meter, width, height); @@ -99,12 +177,17 @@ fprintf(stderr,"meter_init: width=%d height=%d\n",width,height); g_signal_connect (meter,"configure-event", G_CALLBACK (meter_configure_event_cb), NULL); + /* Event signals */ + g_signal_connect (meter, "button-press-event", + G_CALLBACK (meter_press_event_cb), NULL); + gtk_widget_set_events (meter, gtk_widget_get_events (meter) + | GDK_BUTTON_PRESS_MASK); return meter; } -void meter_update(int meter_type,double value,double reverse,double exciter) { +void meter_update(int meter_type,double value,double reverse,double exciter,double alc) { char sf[32]; int text_location; @@ -248,6 +331,10 @@ void meter_update(int meter_type,double value,double reverse,double exciter) { sprintf(sf,"SWR: %1.1f:1",swr); cairo_move_to(cr, 10, 45); cairo_show_text(cr, sf); + + sprintf(sf,"ALC: %2.1f dB",alc); + cairo_move_to(cr, meter_width/2, 45); + cairo_show_text(cr, sf); /* sprintf(sf,"REV: %3.2f W",reverse); diff --git a/meter.h b/meter.h index eb6c57b..d78ddc6 100644 --- a/meter.h +++ b/meter.h @@ -21,5 +21,5 @@ #define POWER 1 -GtkWidget* meter_init(int width,int height); -void meter_update(int meter_type,double value,double reverse,double exciter); +GtkWidget* meter_init(int width,int height,GtkWidget *parent); +void meter_update(int meter_type,double value,double reverse,double exciter,double alc); diff --git a/pihpsdr b/pihpsdr index 58afba1..74f215a 100755 Binary files a/pihpsdr and b/pihpsdr differ diff --git a/radio.c b/radio.c index 131d711..0cf7aec 100644 --- a/radio.c +++ b/radio.c @@ -175,6 +175,9 @@ int OCfull_tune_time=2800; // ms int OCmemory_tune_time=550; // ms long long tune_timeout; +int smeter=RXA_S_AV; +int alc=TXA_ALC_PK; + #ifdef FREEDV char freedv_tx_text_data[64]; #endif @@ -511,6 +514,10 @@ void radioRestoreState() { value=getProperty("freedv_tx_text_data"); if(value) strcpy(freedv_tx_text_data,value); #endif + value=getProperty("smeter"); + if(value) smeter=atoi(value); + value=getProperty("alc"); + if(value) alc=atoi(value); bandRestoreState(); sem_post(&property_sem); } @@ -646,6 +653,10 @@ void radioSaveState() { setProperty("freedv_tx_text_data",freedv_tx_text_data); } #endif + sprintf(value,"%d",smeter); + setProperty("smeter",value); + sprintf(value,"%d",alc); + setProperty("alc",value); bandSaveState(); saveProperties(property_path); diff --git a/radio.h b/radio.h index c1d6aed..934b964 100644 --- a/radio.h +++ b/radio.h @@ -186,6 +186,9 @@ extern long long tune_timeout; extern char freedv_tx_text_data[64]; #endif +extern int smeter; +extern int alc; + extern void init_radio(); extern void setSampleRate(int rate); extern int getSampleRate(); diff --git a/release/pihpsdr.tar b/release/pihpsdr.tar index 724f9fa..a080be8 100644 Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ diff --git a/release/pihpsdr/install.sh b/release/pihpsdr/install.sh index f838b18..6696c85 100755 --- a/release/pihpsdr/install.sh +++ b/release/pihpsdr/install.sh @@ -1,3 +1,6 @@ +rm -rf /usr/local/lib/libwdsp.so +rm -rf /usr/local/lib/libcodec2.so +rm -rf /usr/local/lib/libSoapySDR.so cp libwdsp.so /usr/local/lib cp libcodec2.so.0.5 /usr/local/lib cp libSoapySDR.so.0.5-1 /usr/local/lib diff --git a/release/pihpsdr/pihpsdr b/release/pihpsdr/pihpsdr index 58afba1..74f215a 100755 Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ