]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
fixed tx antenna selection bug
authorJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Fri, 26 Aug 2016 15:53:51 +0000 (15:53 +0000)
committerJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Fri, 26 Aug 2016 15:53:51 +0000 (15:53 +0000)
band.c
gpio.c
new_protocol.c
old_protocol.c
panadapter.c
pihpsdr
release/pihpsdr.tar
release/pihpsdr/pihpsdr
sliders.c

diff --git a/band.c b/band.c
index eaf0183329e5d370137d1e9ef2519f71569035e0..5a727df52d1272fef750a70a190817b480ba9294 100644 (file)
--- a/band.c
+++ b/band.c
@@ -186,30 +186,30 @@ BANDSTACK bandstackGEN={3,1,bandstack_entriesGEN};
 BANDSTACK bandstackWWV={5,1,bandstack_entriesWWV};
 
 BAND bands[BANDS] = 
-    {{"160",&bandstack160,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"80",&bandstack80,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"60",&bandstack60,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"40",&bandstack40,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"30",&bandstack30,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"20",&bandstack20,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"18",&bandstack18,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"15",&bandstack15,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"12",&bandstack12,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"10",&bandstack10,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"50",&bandstack50,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+    {{"160",&bandstack160,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"80",&bandstack80,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"60",&bandstack60,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"40",&bandstack40,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"30",&bandstack30,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"20",&bandstack20,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"18",&bandstack18,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"15",&bandstack15,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"12",&bandstack12,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"10",&bandstack10,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"50",&bandstack50,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
 #ifdef LIMESDR
-     {"70",&bandstack70,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"144",&bandstack144,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"220",&bandstack144,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"430",&bandstack430,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"902",&bandstack430,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"1240",&bandstack1240,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"2300",&bandstack2300,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"3400",&bandstack3400,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"AIR",&bandstackAIR,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+     {"70",&bandstack70,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"144",&bandstack144,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"220",&bandstack144,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"430",&bandstack430,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"902",&bandstack430,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"1240",&bandstack1240,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"2300",&bandstack2300,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"3400",&bandstack3400,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
+     {"AIR",&bandstackAIR,0,0,0,0,0,ALEX_ATTENUATION_0dB,30},
 #endif
-     {"GEN",&bandstackGEN,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,0},
-     {"WWV",&bandstackWWV,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,0}};
+     {"GEN",&bandstackGEN,0,0,0,0,0,ALEX_ATTENUATION_0dB,0},
+     {"WWV",&bandstackWWV,0,0,0,0,0,ALEX_ATTENUATION_0dB,0}};
 
 #define NUM_BAND_LIMITS 22
 
@@ -420,6 +420,9 @@ void bandRestoreState() {
         value=getProperty(name);
         if(value) bands[b].alexTxAntenna=atoi(value);
 
+// fix bug so props file does not have to be deleted
+        if(bands[b].alexTxAntenna>2) bands[b].alexTxAntenna=0;
+
         sprintf(name,"band.%d.alexAttenuation",b);
         value=getProperty(name);
         if(value) bands[b].alexAttenuation=atoi(value);
diff --git a/gpio.c b/gpio.c
index 0bf2b9aa7728e6a3f091457fcfa43932108a9115..46ed2783542cac4e945871931ec3a007d6ab3b1b 100644 (file)
--- a/gpio.c
+++ b/gpio.c
@@ -27,6 +27,7 @@
 #include "toolbar.h"
 #include "main.h"
 #include "property.h"
+#include "vfo.h"
 #include "wdsp.h"
 #ifdef PSK
 #include "psk.h"
@@ -82,6 +83,7 @@ static volatile int afFunction;
 static volatile int rfEncoderPos;
 static volatile int rfFunction;
 static volatile int agcEncoderPos;
+static volatile int agcFunction;
 static volatile int function_state;
 static volatile int band_state;
 static volatile int bandstack_state;
@@ -122,6 +124,12 @@ static void afFunctionAlert(int gpio, int level, uint32_t tick) {
     afFunction=(level==0);
 }
 
+static void agcFunctionAlert(int gpio, int level, uint32_t tick) {
+    if(level==0) {
+      agcFunction=agcFunction==0?1:0;
+    }
+}
+
 static void rfFunctionAlert(int gpio, int level, uint32_t tick) {
     rfFunction=(level==0);
 }
@@ -497,6 +505,11 @@ fprintf(stderr,"encoder_init\n");
     rfEncoderPos=0;
   }
 
+  gpioSetMode(AGC_FUNCTION, PI_INPUT);
+  gpioSetPullUpDown(AGC_FUNCTION,PI_PUD_UP);
+  gpioSetAlertFunc(AGC_FUNCTION, agcFunctionAlert);
+  agcFunction=0;
+
   if(ENABLE_AGC_ENCODER) {
     gpioSetMode(AGC_ENCODER_A, PI_INPUT);
     gpioSetMode(AGC_ENCODER_B, PI_INPUT);
@@ -664,6 +677,10 @@ int agc_encoder_get_pos() {
     return pos;
 }
 
+int agc_function_get_state() {
+    return agcFunction;
+}
+
 int rf_function_get_state() {
     return rfFunction;
 }
@@ -713,13 +730,6 @@ static int vfo_encoder_changed(void *data) {
 #ifdef PSK
       if(mode==modePSK) {
         psk_set_frequency(psk_get_frequency()-(pos*10));
-      } else {
-#endif
-        //RIT
-        rit-=pos;
-        if(rit>1000) rit=1000;
-        if(rit<-1000) rit=-1000;
-#ifdef PSK
       }
 #endif
     } else {
@@ -794,24 +804,31 @@ static int rf_encoder_changed(void *data) {
 static int agc_encoder_changed(void *data) {
   int pos=*(int*)data;
   if(pos!=0) {
-    if(function) {
-      int att=attenuation;
-      att+=pos;
-      if(att<0) {
-        att=0;
-      } else if (att>31) {
-        att=31;
-      }
-      set_attenuation_value((double)att);
+    if(agcFunction) {
+      rit-=pos;
+      if(rit>1000) rit=1000;
+      if(rit<-1000) rit=-1000;
+      vfo_update(NULL);
     } else {
-      double gain=agc_gain;
-      gain+=(double)pos;
-      if(gain<-20.0) {
-        gain=-20.0;
-      } else if(gain>120.0) {
-        gain=120.0;
+      if(function) {
+        int att=attenuation;
+        att+=pos;
+        if(att<0) {
+          att=0;
+        } else if (att>31) {
+          att=31;
+        }
+        set_attenuation_value((double)att);
+      } else {
+        double gain=agc_gain;
+        gain+=(double)pos;
+        if(gain<-20.0) {
+          gain=-20.0;
+        } else if(gain>120.0) {
+          gain=120.0;
+        }
+        set_agc_gain(gain);
       }
-      set_agc_gain(gain);
     }
   }
   return 0;
index 316dc456686baed52c95f933a835f463bad981f4..0f61f51cf2aac57daa5851905943fa68d3683e86 100644 (file)
@@ -369,6 +369,11 @@ else                                               HPF <= 6'b000010;    // 20MHz
 
 
     long filters=0x00000000;
+
+    if(isTransmitting()) {
+      filters=0x08000000;
+    }
+
 // set HPF
     if(ddsFrequency<1800000L) {
         filters|=ALEX_BYPASS_HPF;
@@ -419,16 +424,18 @@ else LPF <= 7'b0001000;             // < 2.4MHz so use 160m LPF^M
         case 2:  // ANT 3
           break;
         case 3:  // EXT 1
-          //filters|=ALEX_RX_ANTENNA_EXT1;
           filters|=ALEX_RX_ANTENNA_EXT2;
           break;
         case 4:  // EXT 2
-          //filters|=ALEX_RX_ANTENNA_EXT2;
           filters|=ALEX_RX_ANTENNA_EXT1;
           break;
         case 5:  // XVTR
           filters|=ALEX_RX_ANTENNA_XVTR;
           break;
+        default:
+          // invalid value - set to 0
+          band->alexRxAntenna=0;
+          break;
     }
 
     if(isTransmitting()) {
@@ -442,6 +449,12 @@ else LPF <= 7'b0001000;             // < 2.4MHz so use 160m LPF^M
         case 2:  // ANT 3
           filters|=ALEX_TX_ANTENNA_3;
           break;
+        default:
+          // invalid value - set to 0
+          filters|=ALEX_TX_ANTENNA_1;
+          band->alexRxAntenna=0;
+          break;
+         
       }
     } else {
       switch(band->alexRxAntenna) {
@@ -472,17 +485,10 @@ else LPF <= 7'b0001000;             // < 2.4MHz so use 160m LPF^M
       }
     }
 
-    //filters|=alex_attenuation;
-
-    //if(isTransmitting() || mode==modeCWU || mode==modeCWL) {
-    if(isTransmitting()) {
-        filters|=0x08000000;
-    }
-
-    buffer[1432]=filters>>24;
-    buffer[1433]=filters>>16;
-    buffer[1434]=filters>>8;
-    buffer[1435]=filters;
+    buffer[1432]=(filters>>24)&0xFF;
+    buffer[1433]=(filters>>16)&0xFF;
+    buffer[1434]=(filters>>8)&0xFF;
+    buffer[1435]=filters&0xFF;
 
     //buffer[1442]=attenuation;
     buffer[1443]=attenuation;
@@ -554,7 +560,10 @@ static void new_protocol_transmit_specific() {
     if(mic_ptt_tip_bias_ring) {
       buffer[50]|=0x08;
     }
-    buffer[51]=0x7F; // Line in gain
+
+    // 0..30
+    int g=(int)(30.0*mic_gain);
+    buffer[51]=g&0xFF; // Line in gain
 
     if(sendto(data_socket,buffer,sizeof(buffer),0,(struct sockaddr*)&transmitter_addr,transmitter_addr_length)<0) {
         fprintf(stderr,"sendto socket failed for tx specific\n");
index a4c6189ee64d03aa1ae912a7c17ac5db046ba4e1..9ca7ce544d97c0fbb5fccde9350f1638cc27f1e1 100644 (file)
@@ -767,24 +767,28 @@ void ozy_send_buffer() {
       }
 */
 
-       switch(band->alexRxAntenna) {
-         case 0:  // ANT 1
-           break;
-         case 1:  // ANT 2
-           break;
-         case 2:  // ANT 3
-           break;
-         case 3:  // EXT 1
-           //output_buffer[C3]|=0xA0;
-           output_buffer[C3]|=0xC0;
-           break;
-         case 4:  // EXT 2
-           //output_buffer[C3]|=0xC0;
-           output_buffer[C3]|=0xA0;
-           break;
-         case 5:  // XVTR
-           output_buffer[C3]|=0xE0;
-           break;
+      switch(band->alexRxAntenna) {
+        case 0:  // ANT 1
+          break;
+        case 1:  // ANT 2
+          break;
+        case 2:  // ANT 3
+          break;
+        case 3:  // EXT 1
+          //output_buffer[C3]|=0xA0;
+          output_buffer[C3]|=0xC0;
+          break;
+        case 4:  // EXT 2
+          //output_buffer[C3]|=0xC0;
+          output_buffer[C3]|=0xA0;
+          break;
+        case 5:  // XVTR
+          output_buffer[C3]|=0xE0;
+          break;
+        default:
+          // invalid - set to 0
+          band->alexRxAntenna=0;
+          break;
       }
 
 
@@ -801,6 +805,10 @@ void ozy_send_buffer() {
           case 2:  // ANT 3
             output_buffer[C4]|=0x02;
             break;
+          default:
+            // invalid - set to 0
+            band->alexRxAntenna=0;
+            break;
         }
       } else {
         switch(band->alexRxAntenna) {
index 8c9608dd7053948c04d49404424db86a0a3a9d88..33f08b801a2e83c2ccbb0848d30442998ef06bb9 100644 (file)
@@ -319,12 +319,12 @@ void panadapter_update(float *data,int tx) {
                 GetRXAAGCHangLevel(CHANNEL_RX0, &hang);
                 GetRXAAGCThresh(CHANNEL_RX0, &thresh, 4096.0, (double)sample_rate);
 
-                double knee_y=thresh+(double)get_attenuation()-20.0;
+                double knee_y=thresh+(double)get_attenuation();
                 knee_y = floor((panadapter_high - knee_y)
                         * (double) display_height
                         / (panadapter_high - panadapter_low));
 
-                double hang_y=hang+(double)get_attenuation()-20.0;
+                double hang_y=hang+(double)get_attenuation();
                 hang_y = floor((panadapter_high - hang_y)
                         * (double) display_height
                         / (panadapter_high - panadapter_low));
@@ -368,26 +368,26 @@ void panadapter_update(float *data,int tx) {
 
             if(tx && protocol==NEW_PROTOCOL) {
               int offset=1200;
-              s1=(double)samples[0+offset]+(double)get_attenuation()-20.0;
+              s1=(double)samples[0+offset]+(double)get_attenuation();
               s1 = floor((panadapter_high - s1)
                           * (double) display_height
                           / (panadapter_high - panadapter_low));
               cairo_move_to(cr, 0.0, s1);
               for(i=1;i<display_width;i++) {
-                  s2=(double)samples[i+offset]+(double)get_attenuation()-20.0;
+                  s2=(double)samples[i+offset]+(double)get_attenuation();
                   s2 = floor((panadapter_high - s2)
                               * (double) display_height
                               / (panadapter_high - panadapter_low));
                   cairo_line_to(cr, (double)i, s2);
               }
             } else {
-              s1=(double)samples[0]+(double)get_attenuation()-20.0;
+              s1=(double)samples[0]+(double)get_attenuation();
               s1 = floor((panadapter_high - s1)
                           * (double) display_height
                           / (panadapter_high - panadapter_low));
               cairo_move_to(cr, 0.0, s1);
               for(i=1;i<display_width;i++) {
-                  s2=(double)samples[i]+(double)get_attenuation()-20.0;
+                  s2=(double)samples[i]+(double)get_attenuation();
                   s2 = floor((panadapter_high - s2)
                               * (double) display_height
                               / (panadapter_high - panadapter_low));
diff --git a/pihpsdr b/pihpsdr
index 3abafe4b31994e967f903bc71868d8382c90c0ad..e5bc1f5836e5d0cc4793cf0105e099d273469ccd 100755 (executable)
Binary files a/pihpsdr and b/pihpsdr differ
index 8aa444b7972dbbfe0bf641f7a1b6de0d246f1a0a..3542976d5efc20dbb51b8bc2ba113cb323d72609 100644 (file)
Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ
index 3abafe4b31994e967f903bc71868d8382c90c0ad..e5bc1f5836e5d0cc4793cf0105e099d273469ccd 100755 (executable)
Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ
index 5f06c43caeb362fee177d2979f9e3c77aa665b83..a256444857bb7842d6e1dbddf19018d624f7be4e 100644 (file)
--- a/sliders.c
+++ b/sliders.c
@@ -212,7 +212,7 @@ fprintf(stderr,"set_mic_gain: %f\n",mic_gain);
     }
     if(scale_status==NONE) {
       scale_status=MIC_GAIN;
-      scale_dialog=gtk_dialog_new_with_buttons("Mic Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
+      scale_dialog=gtk_dialog_new_with_buttons(mic_linein?"Linein Gain":"Mic Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
       GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
       mic_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00);
       gtk_widget_set_size_request (mic_gain_scale, 400, 30);
@@ -350,7 +350,7 @@ GtkWidget *sliders_init(int my_width, int my_height, GtkWidget* parent) {
 
 
 
-  mic_gain_label=gtk_label_new("Mic:");
+  mic_gain_label=gtk_label_new(mic_linein?"Linein:":"Mic:");
   //gtk_widget_override_font(mic_gain_label, pango_font_description_from_string("Arial 16"));
   gtk_widget_show(mic_gain_label);
   gtk_grid_attach(GTK_GRID(sliders),mic_gain_label,0,1,1,1);