From: John Melton - G0ORX/N6LYT Date: Tue, 9 Aug 2016 19:39:30 +0000 (+0000) Subject: fixed bug when switching to PSK mode when only Panadapter displayed. Major changes... X-Git-Url: https://git.rkrishnan.org/pf/frontends/...?a=commitdiff_plain;h=84189128294044185202ed34f5b1b95ad7c3e1ab;p=pihpsdr.git fixed bug when switching to PSK mode when only Panadapter displayed. Major changes to gain control for all modes. --- diff --git a/main.c b/main.c index d62f286..3cda268 100644 --- a/main.c +++ b/main.c @@ -70,6 +70,10 @@ #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 diff --git a/old_protocol.c b/old_protocol.c index 73c8c3c..67515a2 100644 --- a/old_protocol.c +++ b/old_protocol.c @@ -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;j32767) { + 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 ab3d1a4..08c65a4 100755 Binary files a/pihpsdr and b/pihpsdr differ diff --git a/psk_waterfall.c b/psk_waterfall.c index bc5c3bc..5572b9f 100644 --- a/psk_waterfall.c +++ b/psk_waterfall.c @@ -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 639537c..976682c 100644 --- 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); diff --git a/release/pihpsdr.tar b/release/pihpsdr.tar index ab7968e..c1ae985 100644 Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ diff --git a/release/pihpsdr/pihpsdr b/release/pihpsdr/pihpsdr index ab3d1a4..9e737b8 100755 Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ diff --git a/waterfall.c b/waterfall.c index c52e070..7f55503 100644 --- a/waterfall.c +++ b/waterfall.c @@ -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",