]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
Moved SWR calculation to transmitter.c, and store SWR in
authorc vw <dl1ycf@darc.de>
Tue, 27 Apr 2021 16:42:08 +0000 (18:42 +0200)
committerc vw <dl1ycf@darc.de>
Tue, 27 Apr 2021 16:42:08 +0000 (18:42 +0200)
transmitter data structure so it can be used elsewhere

meter.c
receiver.c
transmitter.c
transmitter.h

diff --git a/meter.c b/meter.c
index e9707260e479daf2702a4214e33a4dd15638bc92..ce0a6d7a440b0fc06b400915be716c10d01ab788 100644 (file)
--- a/meter.c
+++ b/meter.c
@@ -140,7 +140,7 @@ fprintf(stderr,"meter_init: width=%d height=%d\n",width,height);
 }
 
 
-void meter_update(RECEIVER *rx,int meter_type,double value,double reverse,double exciter,double alc) {
+void meter_update(RECEIVER *rx,int meter_type,double value,double reverse,double alc,double swr) {
   
   double level;
   char sf[32];
@@ -148,28 +148,10 @@ void meter_update(RECEIVER *rx,int meter_type,double value,double reverse,double
   double offset;
   char *units="W";
   double interval=10.0;
-  static double swr = 1.0;  // will eventually become part of TRANSMITTER
   cairo_t *cr = cairo_create (meter_surface);
 
   if(meter_type==POWER) {
     level=value;
-    if(level==0.0) {
-      level=exciter;
-      reverse=0.0;  // If no fwd power is available, clear reverse power
-    }
-    if (level > 0.01 && level > 1.01*reverse) {
-        //
-        // SWR means VSWR (voltage based) but we have the forward and
-        // reflected power, so correct for that
-        //
-        double gamma=sqrt(reverse/level);
-        swr=0.7*(1+gamma)/(1-gamma) + 0.3*swr;
-    } else {
-        //
-        // This value may be used for auto SWR protection, so move towards 1.0
-        //
-        swr = 0.7 + 0.3*swr;
-    }
     switch(pa_power) {
       case PA_1W:
         units="mW";
index 37c149edf87fbf22dcfee1a1079c5936adc9cbed..a073e71e28ecdf1150fc23c38f114260e017200a 100644 (file)
@@ -632,6 +632,7 @@ static gint update_display(gpointer data) {
       g_mutex_unlock(&rx->display_mutex);
       if(active_receiver==rx) {
         rx->meter=GetRXAMeter(rx->id,smeter)+meter_calibration;
+        // the three "unused" parameters are the TX rev, alc, and swr values
         meter_update(rx,SMETER,rx->meter,0.0,0.0,0.0);
       }
       return TRUE;
@@ -651,6 +652,7 @@ void receiver_remote_update_display(RECEIVER *rx) {
         waterfall_update(rx);
       }
       if(active_receiver==rx) {
+        // the three "unused" parameters are the TX rev, alc, and swr values
         meter_update(rx,SMETER,rx->meter,0.0,0.0,0.0);
       }
       g_mutex_unlock(&rx->display_mutex);
index 72def803e316b88e94bbddcb7789aa1009421b11..d0f49ee15f32a856288264971c20ba90d8035e9e 100644 (file)
@@ -612,10 +612,33 @@ static gboolean update_display(gpointer data) {
     double fwd=compute_power(transmitter->fwd);
     double rev=compute_power(transmitter->rev);
 
+    //
+    // Calculate SWR here such that it is available in DUPLEX mode
+    // transmitter->swr can be used in other parts of the program to
+    // implement SWR protection etc.
+    //
+    if (fwd > 0.01 && fwd > 1.01*rev) {
+        //
+        // SWR means VSWR (voltage based) but we have the forward and
+        // reflected power, so correct for that
+        //
+        double gamma=sqrt(rev/fwd);
+        transmitter->swr=0.7*(1+gamma)/(1-gamma) + 0.3*transmitter->swr;
+    } else {
+        //
+        // This value may be used for auto SWR protection, so move towards 1.0
+        //
+        transmitter->swr = 0.7 + 0.3*transmitter->swr;
+    }
+    if (fwd == 0.0) {
+      fwd = transmitter->exciter;
+    }
+
+
 //g_print("transmitter: meter_update: fwd:%f->%f rev:%f->%f ex_fwd=%d alex_fwd=%d alex_rev=%d\n",transmitter->fwd,fwd,transmitter->rev,rev,exciter_power,alex_forward_power,alex_reverse_power);
 
     if(!duplex) {
-      meter_update(active_receiver,POWER,/*transmitter->*/fwd,/*transmitter->*/rev,transmitter->exciter,transmitter->alc);
+      meter_update(active_receiver,POWER,fwd,rev,transmitter->alc,transmitter->swr);
     }
 
     return TRUE; // keep going
@@ -804,6 +827,7 @@ fprintf(stderr,"create_transmitter: id=%d buffer_size=%d mic_sample_rate=%d mic_
 
   tx->dialog_x=-1;
   tx->dialog_y=-1;
+  tx->swr = 1.0;
 
   transmitter_restore_state(tx);
 
index 91ba4dd2b058b9adaf4a43ae5deaaa63055d47ed..7327013276d9a3349b9a87a8875c88453f949fcc 100644 (file)
@@ -102,6 +102,7 @@ typedef struct _transmitter {
   double exciter;
   double rev;
   double alc;
+  double swr;
 
   gint xit_enabled;
   long long xit;