#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;
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;
}
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);
#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);
}
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
#define C3 6
#define C4 7
+#define SCALE 4.6
+
#define DATA_PORT 1024
#define SYNC 0x7F
//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;
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);
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;
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;
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;
}
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);
gtk_widget_queue_draw (waterfall);
+ }
}
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",
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);
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;
}
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);
}
gtk_widget_queue_draw (waterfall);
-
+ }
}
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",