]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
fixed bug when switching to PSK mode when only Panadapter displayed. Major changes...
authorJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Tue, 9 Aug 2016 19:39:30 +0000 (19:39 +0000)
committerJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Tue, 9 Aug 2016 19:39:30 +0000 (19:39 +0000)
main.c
old_protocol.c
pihpsdr
psk_waterfall.c
radio.c
release/pihpsdr.tar
release/pihpsdr/pihpsdr
waterfall.c

diff --git a/main.c b/main.c
index d62f28606e78d52da3d7c05a816586a5dbbd2bbb..3cda268d7b7e81adb03bddb13063ba2d72138b54 100644 (file)
--- a/main.c
+++ b/main.c
 #define SLIDERS_HEIGHT ((display_height/32)*6)
 #define TOOLBAR_HEIGHT ((display_height/32)*2)
 #define WATERFALL_HEIGHT (display_height-(VFO_HEIGHT+PANADAPTER_HEIGHT+SLIDERS_HEIGHT+TOOLBAR_HEIGHT))
+#ifdef PSK
+#define PSK_WATERFALL_HEIGHT ((display_height/32)*6)
+#define PSK_HEIGHT (display_height-(VFO_HEIGHT+PSK_WATERFALL_HEIGHT+SLIDERS_HEIGHT+TOOLBAR_HEIGHT))
+#endif
 
 struct utsname unameData;
 
@@ -602,10 +606,6 @@ fprintf(stderr,"meter_height=%d\n",METER_HEIGHT);
 fprintf(stderr,"panadapter_height=%d\n",height);
     panadapter = panadapter_init(display_width,height);
     gtk_fixed_put(GTK_FIXED(fixed),panadapter,0,VFO_HEIGHT);
-#ifdef PSK
-    psk_waterfall = psk_waterfall_init(display_width,height);
-    gtk_fixed_put(GTK_FIXED(fixed),psk_waterfall,0,VFO_HEIGHT);
-#endif
     y+=height;
   }
 
@@ -627,14 +627,24 @@ fprintf(stderr,"panadapter_height=%d\n",height);
 fprintf(stderr,"waterfall_height=%d\n",height);
     waterfall = waterfall_init(display_width,height);
     gtk_fixed_put(GTK_FIXED(fixed),waterfall,0,y);
-#ifdef PSK
-    psk = init_psk();
-    gtk_fixed_put(GTK_FIXED(fixed),psk,0,y);
-#endif
     y+=height;
 
   }
 
+#ifdef PSK
+    int psk_height=PSK_WATERFALL_HEIGHT;
+    if(!display_sliders) {
+      psk_height+=SLIDERS_HEIGHT/2;
+    }
+    if(!display_toolbar) {
+      psk_height+=TOOLBAR_HEIGHT/2;
+    }
+    psk_waterfall = psk_waterfall_init(display_width,psk_height);
+    gtk_fixed_put(GTK_FIXED(fixed),psk_waterfall,0,VFO_HEIGHT);
+    psk = init_psk();
+    gtk_fixed_put(GTK_FIXED(fixed),psk,0,VFO_HEIGHT+psk_height);
+#endif
+
   if(display_sliders) {
 fprintf(stderr,"sliders_height=%d\n",SLIDERS_HEIGHT);
     sliders = sliders_init(display_width,SLIDERS_HEIGHT,window);
@@ -686,8 +696,12 @@ fprintf(stderr,"toolbar_height=%d\n",TOOLBAR_HEIGHT);
 
 #ifdef PSK
 void show_psk() {
-  gtk_widget_hide(waterfall);
-  gtk_widget_hide(panadapter);
+  if(display_waterfall) {
+    gtk_widget_hide(waterfall);
+  }
+  if(display_panadapter) {
+    gtk_widget_hide(panadapter);
+  }
   gtk_widget_show(psk);
   gtk_widget_show(psk_waterfall);
 }
@@ -695,8 +709,12 @@ void show_psk() {
 void show_waterfall() {
   gtk_widget_hide(psk_waterfall);
   gtk_widget_hide(psk);
-  gtk_widget_show(panadapter);
-  gtk_widget_show(waterfall);
+  if(display_panadapter) {
+    gtk_widget_show(panadapter);
+  }
+  if(display_waterfall) {
+    gtk_widget_show(waterfall);
+  }
 }
 #endif
 
index 73c8c3c29520b9cb7752e39df308bb5e770c4a2d..67515a2aa989648c0d89dcce9cb9964c87131257 100644 (file)
@@ -63,6 +63,8 @@
 #define C3 6
 #define C4 7
 
+#define SCALE 4.6
+
 #define DATA_PORT 1024
 
 #define SYNC 0x7F
@@ -154,12 +156,12 @@ static double audiooutputbuffer[BUFFER_SIZE*2];
 
 //static float left_tx_buffer[OUTPUT_BUFFER_SIZE];
 //static float right_tx_buffer[OUTPUT_BUFFER_SIZE];
-static double micoutputbuffer[BUFFER_SIZE*2];
+static double iqoutputbuffer[BUFFER_SIZE*2];
 
-static short left_rx_sample;
-static short right_rx_sample;
-static short left_tx_sample;
-static short right_tx_sample;
+static int left_rx_sample;
+static int right_rx_sample;
+static int left_tx_sample;
+static int right_tx_sample;
 
 static unsigned char output_buffer[OZY_BUFFER_SIZE];
 static int output_buffer_index=0;
@@ -203,39 +205,15 @@ void old_protocol_calc_buffers() {
   switch(sample_rate) {
     case 48000:
       output_buffer_size=OUTPUT_BUFFER_SIZE;
-#ifdef FREEDV
-      freedv_divisor=6;
-#endif
-#ifdef PSK
-      psk_divisor=6;
-#endif
       break;
     case 96000:
       output_buffer_size=OUTPUT_BUFFER_SIZE/2;
-#ifdef FREEDV
-      freedv_divisor=12;
-#endif
-#ifdef PSK
-      psk_divisor=12;
-#endif
       break;
     case 192000:
       output_buffer_size=OUTPUT_BUFFER_SIZE/4;
-#ifdef FREEDV
-      freedv_divisor=24;
-#endif
-#ifdef PSK
-      psk_divisor=24;
-#endif
       break;
     case 384000:
       output_buffer_size=OUTPUT_BUFFER_SIZE/8;
-#ifdef FREEDV
-      freedv_divisor=48;
-#endif
-#ifdef PSK
-      psk_divisor=48;
-#endif
       break;
     default:
       fprintf(stderr,"Invalid sample rate: %d. Defaulting to 48K.\n",sample_rate);
@@ -656,26 +634,34 @@ static void full_rx_buffer() {
 static void full_tx_buffer() {
   int j;
   int error;
-  double gain=32767.0; // 2^16-1
+  double gain=32767.0*SCALE; // 2^16-1
 
   // process the output
   fexchange0(CHANNEL_RX0, iqinputbuffer, audiooutputbuffer, &error);
-  fexchange0(CHANNEL_TX, micinputbuffer, micoutputbuffer, &error);
-  Spectrum0(1, CHANNEL_TX, 0, 0, micoutputbuffer);
-  if(d->device!=DEVICE_METIS || atlas_penelope) {
+  fexchange0(CHANNEL_TX, micinputbuffer, iqoutputbuffer, &error);
+  Spectrum0(1, CHANNEL_TX, 0, 0, iqoutputbuffer);
+  if(d->device==DEVICE_METIS && atlas_penelope) {
     if(tune) {
-      gain=65535.0*tune_drive;
+      gain=32767.0*tune_drive;
     } else {
-      gain=65535.0*drive;
+      gain=32767.0*drive;
     }
-  } else {
-    gain=65535.0;
   }
   for(j=0;j<output_buffer_size;j++) {
     left_rx_sample=0;
     right_rx_sample=0;
-    left_tx_sample=(short)(micoutputbuffer[j*2]*gain);
-    right_tx_sample=(short)(micoutputbuffer[(j*2)+1]*gain);
+    left_tx_sample=(int)(iqoutputbuffer[j*2]*gain);
+    right_tx_sample=(int)(iqoutputbuffer[(j*2)+1]*gain);
+    if(left_tx_sample>32767) {
+      left_tx_sample=32767;
+    } else if(left_tx_sample<-32767) {
+      left_tx_sample=-2767;
+    }
+    if(right_tx_sample>32767) {
+      right_tx_sample=32767;
+    } else if(right_tx_sample<-32767) {
+      right_tx_sample=-32767;
+    }
     output_buffer[output_buffer_index++]=left_rx_sample>>8;
     output_buffer[output_buffer_index++]=left_rx_sample;
     output_buffer[output_buffer_index++]=right_rx_sample>>8;
@@ -859,6 +845,8 @@ void ozy_send_buffer() {
       d=d*((float)band->pa_calibration/100.0F);
       int power=(int)(d*255.0);
 
+//fprintf(stderr,"power=%d\n", power);
+
       output_buffer[C0]=0x12;
       output_buffer[C1]=power&0xFF;
       output_buffer[C2]=0x00;
diff --git a/pihpsdr b/pihpsdr
index ab3d1a48e3a9b3b4f88fe509a5a8dfe037d15c88..08c65a47ff2cc814a716a61bcf00d46ac7f35363 100755 (executable)
Binary files a/pihpsdr and b/pihpsdr differ
index bc5c3bc128f0fd2551f1c688882759adbf9c6108..5572b9f7b52515599887b2c84a495171d46893a6 100644 (file)
@@ -73,6 +73,11 @@ waterfall_configure_event_cb (GtkWidget         *widget,
             GdkEventConfigure *event,
             gpointer           data)
 {
+  int width=gtk_widget_get_allocated_width (widget);
+  int height=gtk_widget_get_allocated_height (widget);
+  pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, width, height);
+  char *pixels = gdk_pixbuf_get_pixels (pixbuf);
+  memset(pixels, 0, width*height*3);
   return TRUE;
 }
 
@@ -177,8 +182,9 @@ waterfall_scroll_event_cb (GtkWidget      *widget,
 
 void psk_waterfall_update(float *data) {
 
-    int i;
+  int i;
 
+  if(pixbuf) {
     char *pixels = gdk_pixbuf_get_pixels (pixbuf);
 
     int width=gdk_pixbuf_get_width(pixbuf);
@@ -256,6 +262,7 @@ void psk_waterfall_update(float *data) {
 
     gtk_widget_queue_draw (waterfall);
 
+  }
 }
 
 GtkWidget* psk_waterfall_init(int width,int height) {
@@ -274,7 +281,7 @@ GtkWidget* psk_waterfall_init(int width,int height) {
   g_signal_connect (waterfall,"configure-event",
             G_CALLBACK (waterfall_configure_event_cb), NULL);
 
-  pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, width, height);
+  //pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, width, height);
 
   /* Event signals */
   g_signal_connect (waterfall, "motion-notify-event",
diff --git a/radio.c b/radio.c
index 639537c4fcb86ef6cb5db27f56fd6399dd7845f8..976682c2e14d944eafab98537f17706d45c57b82 100644 (file)
--- a/radio.c
+++ b/radio.c
@@ -259,13 +259,13 @@ fprintf(stderr,"setTune: protocol=%d\n", protocol);
         setMode(modeUSB);
       }
       
+      SetTXAPostGenMode(CHANNEL_TX,0);
       if(mode==modeLSB || mode==modeCWL || mode==modeDIGL) {
         SetTXAPostGenToneFreq(CHANNEL_TX,-(double)cw_keyer_sidetone_frequency);
       } else {
         SetTXAPostGenToneFreq(CHANNEL_TX,(double)cw_keyer_sidetone_frequency);
       }
-      SetTXAPostGenToneMag(CHANNEL_TX,0.99999);
-      SetTXAPostGenMode(CHANNEL_TX,0);
+      SetTXAPostGenToneMag(CHANNEL_TX,1.0);
       SetTXAPostGenRun(CHANNEL_TX,1);
       SetChannelState(CHANNEL_RX0,0,1);
       SetChannelState(CHANNEL_TX,1,0);
index ab7968ebc1ceaf8e0e7717af6d81a0f9ea8a1055..c1ae98537603ef46980b99766784283cfa65f279 100644 (file)
Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ
index ab3d1a48e3a9b3b4f88fe509a5a8dfe037d15c88..9e737b8c5f97a2f34dde6ec78de8ac55b5b56311 100755 (executable)
Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ
index c52e070c42277599a591a380e695dd64a2b7171e..7f55503293a9b293c2dac5a2f4f4e037492775df 100644 (file)
@@ -66,6 +66,14 @@ waterfall_configure_event_cb (GtkWidget         *widget,
             GdkEventConfigure *event,
             gpointer           data)
 {
+  int width=gtk_widget_get_allocated_width (widget);
+  int height=gtk_widget_get_allocated_height (widget);
+  pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, width, height);
+
+  char *pixels = gdk_pixbuf_get_pixels (pixbuf);
+
+  memset(pixels, 0, width*height*3);
+
   return TRUE;
 }
 
@@ -153,9 +161,9 @@ waterfall_scroll_event_cb (GtkWidget      *widget,
 
 void waterfall_update(float *data) {
 
+  int i;
 
-    int i;
-
+  if(pixbuf) {
     char *pixels = gdk_pixbuf_get_pixels (pixbuf);
 
     int width=gdk_pixbuf_get_width(pixbuf);
@@ -231,7 +239,7 @@ void waterfall_update(float *data) {
     }
 
     gtk_widget_queue_draw (waterfall);
-
+  }
 }
 
 GtkWidget* waterfall_init(int width,int height) {
@@ -250,7 +258,6 @@ GtkWidget* waterfall_init(int width,int height) {
   g_signal_connect (waterfall,"configure-event",
             G_CALLBACK (waterfall_configure_event_cb), NULL);
 
-  pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, width, height);
 
   /* Event signals */
   g_signal_connect (waterfall, "motion-notify-event",