From: John Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
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/components/%22file:/frontends/htmlfontify-example.html?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 <unistd.h>
 
 #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