]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
added ALC when transmitting. added dialog to select S-Meter and ALC meter settings...
authorJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Sat, 9 Jul 2016 16:15:18 +0000 (16:15 +0000)
committerJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Sat, 9 Jul 2016 16:15:18 +0000 (16:15 +0000)
main.c
meter.c
meter.h
pihpsdr
radio.c
radio.h
release/pihpsdr.tar
release/pihpsdr/install.sh
release/pihpsdr/pihpsdr

diff --git a/main.c b/main.c
index 39c735085863af270d2a57caa13353d9a6618e93..d96e15c2f80193260181193f221a765ccb687bd5 100644 (file)
--- 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 f93e58ea3d3fd0e54741a21b0b7235054ef190b0..cd01fbfc716b9bddad3e487258358388d47fa857 100644 (file)
--- a/meter.c
+++ b/meter.c
 #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 eb6c57bdc159c6ff4bb820e22e3ed28b93860dae..d78ddc6220026154bd1581b0c8e1f27be07ccd31 100644 (file)
--- 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 58afba1a1048b844ea32e2b1cbfad1319756a119..74f215aa69a5b506bc28ba2835a839d55a355bc9 100755 (executable)
Binary files a/pihpsdr and b/pihpsdr differ
diff --git a/radio.c b/radio.c
index 131d7115495584bc1a8753b611113f317fbce283..0cf7aecf300c9ab8fc61590b1007382c0df1427e 100644 (file)
--- 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 c1d6aed00220e9819c57ec74d776d5109f677625..934b964c37dd72a066888a73899b7db40bad1119 100644 (file)
--- 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();
index 724f9fafecdb035a01981e28426041c2e6943017..a080be85893cd1e3fef26ca20df270ce118f7e34 100644 (file)
Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ
index f838b187a343635633959bbeee9589917a0ec3f7..6696c859a34fef424c094a6aedf1e17f9b15551d 100755 (executable)
@@ -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
index 58afba1a1048b844ea32e2b1cbfad1319756a119..74f215aa69a5b506bc28ba2835a839d55a355bc9 100755 (executable)
Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ