From: John Melton g0orx/n6lyt Date: Thu, 7 Apr 2016 11:17:55 +0000 (+0000) Subject: added open collector configuration, filled panadapter, wdsp options for display X-Git-Url: https://git.rkrishnan.org/pf/content/$rel_link?a=commitdiff_plain;h=3d64829ec1dddb84af9db4ea60d2a60fd7305f4a;p=pihpsdr.git added open collector configuration, filled panadapter, wdsp options for display --- diff --git a/band.c b/band.c index d023d04..fc35dd2 100644 --- a/band.c +++ b/band.c @@ -264,6 +264,14 @@ void bandSaveState() { sprintf(name,"band.%d.pa_calibration",b); setProperty(name,value); + sprintf(value,"%d",bands[b].OCrx); + sprintf(name,"band.%d.OCrx",b); + setProperty(name,value); + + sprintf(value,"%d",bands[b].OCtx); + sprintf(name,"band.%d.OCtx",b); + setProperty(name,value); + for(stack=0;stackentries;stack++) { entry=bands[b].bandstack->entry; entry+=stack; @@ -342,6 +350,14 @@ void bandRestoreState() { value=getProperty(name); if(value) bands[b].pa_calibration=atoi(value); + sprintf(name,"band.%d.OCrx",b); + value=getProperty(name); + if(value) bands[b].OCrx=atoi(value); + + sprintf(name,"band.%d.OCtx",b); + value=getProperty(name); + if(value) bands[b].OCtx=atoi(value); + for(stack=0;stackentries;stack++) { entry=bands[b].bandstack->entry; entry+=stack; diff --git a/gpio.c b/gpio.c index ccc35ba..06355af 100644 --- a/gpio.c +++ b/gpio.c @@ -24,6 +24,7 @@ #include "toolbar.h" #include "main.h" #include "property.h" +#include "wdsp.h" #define SYSFS_GPIO_DIR "/sys/class/gpio" @@ -963,12 +964,18 @@ fprintf(stderr,"noise_pressed\n"); if(function) { if(nr) { nr=0; - } else if(nb) { + } else if(nr2) { + nr2=0; nr=1; + } else if(nb) { nb=0; - } else if(anf) { + nr2=1; + } else if(nb2) { + nb2=0; nb=1; + } else if(anf) { anf=0; + nb2=1; } else if(snb) { snb=0; anf=1; @@ -978,9 +985,15 @@ fprintf(stderr,"noise_pressed\n"); } else { if(nr) { nr=0; + nr2=1; + } else if(nr2) { + nr2=0; nb=1; } else if(nb) { nb=0; + nb2=1; + } else if(nb2) { + nb2=0; anf=1; } else if(anf) { anf=0; @@ -992,6 +1005,7 @@ fprintf(stderr,"noise_pressed\n"); } } SetRXAANRRun(CHANNEL_RX0, nr); + SetRXAEMNRaeRun(CHANNEL_RX0, nb2); SetRXAEMNRRun(CHANNEL_RX0, nb); SetRXAANFRun(CHANNEL_RX0, anf); SetRXASNBARun(CHANNEL_RX0, snb); diff --git a/main.c b/main.c index ab7183b..1d71259 100644 --- a/main.c +++ b/main.c @@ -63,7 +63,6 @@ gint display_width; gint display_height; static gint update_timer_id; -static gint updates_per_second=10; static gint save_timer_id; diff --git a/menu.c b/menu.c index 317d867..ae46812 100644 --- a/menu.c +++ b/menu.c @@ -22,10 +22,12 @@ #include #include "band.h" +#include "channel.h" #include "discovered.h" #include "new_protocol.h" #include "radio.h" #include "version.h" +#include "wdsp.h" static GtkWidget *parent_window; @@ -180,12 +182,58 @@ static gboolean exit_pressed_event_cb (GtkWidget *widget, _exit(0); } +static void oc_rx_cb(GtkWidget *widget, gpointer data) { + int b=((int)data)>>4; + int oc=((int)data)&0xF; + BAND *band=band_get_band(b); + int mask=0x01<OCrx|=mask; + } else { + band->OCrx&=~mask; + } +} + +static void oc_tx_cb(GtkWidget *widget, gpointer data) { + int b=((int)data)>>4; + int oc=((int)data)&0xF; + BAND *band=band_get_band(b); + int mask=0x01<OCtx|=mask; + } else { + band->OCtx&=~mask; + } +} + +static void detector_mode_cb(GtkWidget *widget, gpointer data) { + display_detector_mode=(int)data; + SetDisplayDetectorMode(CHANNEL_RX0, 0, display_detector_mode); +} + +static void average_mode_cb(GtkWidget *widget, gpointer data) { + display_average_mode=(int)data; + SetDisplayAverageMode(CHANNEL_RX0, 0, display_average_mode); +} + +static void time_value_changed_cb(GtkWidget *widget, gpointer data) { + display_average_time=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget)); + calculate_display_average(); + SetDisplayAvBackmult(CHANNEL_RX0, 0, display_avb); + SetDisplayNumAverage(CHANNEL_RX0, 0, display_average); + +} + +static void filled_cb(GtkWidget *widget, gpointer data) { + display_filled=display_filled==1?0:1; +} + + static gboolean menu_pressed_event_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) { - int i; - int id; + int i, j, id; GtkWidget *dialog=gtk_dialog_new_with_buttons("Menu",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL); @@ -200,6 +248,13 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, GtkWidget *display_grid=gtk_grid_new(); gtk_grid_set_row_homogeneous(GTK_GRID(display_grid),TRUE); + GtkWidget *filled_b=gtk_check_button_new_with_label("Filled"); + //gtk_widget_override_font(filled_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (filled_b), display_filled); + gtk_widget_show(filled_b); + gtk_grid_attach(GTK_GRID(display_grid),filled_b,0,0,1,1); + g_signal_connect(filled_b,"toggled",G_CALLBACK(filled_cb),NULL); + GtkWidget *panadapter_high_label=gtk_label_new("Panadapter High: "); //gtk_widget_override_font(panadapter_high_label, pango_font_description_from_string("Arial 18")); gtk_widget_show(panadapter_high_label); @@ -260,6 +315,77 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, gtk_grid_attach(GTK_GRID(display_grid),waterfall_low_r,1,5,1,1); g_signal_connect(waterfall_low_r,"value_changed",G_CALLBACK(waterfall_low_value_changed_cb),NULL); + GtkWidget *detector_mode_label=gtk_label_new("Detector: "); + //gtk_widget_override_font(detector_mode_label, pango_font_description_from_string("Arial 18")); + gtk_widget_show(detector_mode_label); + gtk_grid_attach(GTK_GRID(display_grid),detector_mode_label,3,0,1,1); + + GtkWidget *detector_mode_peak=gtk_radio_button_new_with_label(NULL,"Peak"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (detector_mode_peak), display_detector_mode==DETECTOR_MODE_PEAK); + gtk_widget_show(detector_mode_peak); + gtk_grid_attach(GTK_GRID(display_grid),detector_mode_peak,4,0,1,1); + g_signal_connect(detector_mode_peak,"pressed",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_PEAK); + + GtkWidget *detector_mode_rosenfell=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(detector_mode_peak),"Rosenfell"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (detector_mode_rosenfell), display_detector_mode==DETECTOR_MODE_ROSENFELL); + gtk_widget_show(detector_mode_rosenfell); + gtk_grid_attach(GTK_GRID(display_grid),detector_mode_rosenfell,4,1,1,1); + g_signal_connect(detector_mode_rosenfell,"pressed",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_ROSENFELL); + + GtkWidget *detector_mode_average=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(detector_mode_rosenfell),"Average"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (detector_mode_average), display_detector_mode==DETECTOR_MODE_AVERAGE); + gtk_widget_show(detector_mode_average); + gtk_grid_attach(GTK_GRID(display_grid),detector_mode_average,4,2,1,1); + g_signal_connect(detector_mode_average,"pressed",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_AVERAGE); + + GtkWidget *detector_mode_sample=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(detector_mode_average),"Sample"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (detector_mode_sample), display_detector_mode==DETECTOR_MODE_SAMPLE); + gtk_widget_show(detector_mode_sample); + gtk_grid_attach(GTK_GRID(display_grid),detector_mode_sample,4,3,1,1); + g_signal_connect(detector_mode_sample,"pressed",G_CALLBACK(detector_mode_cb),(gpointer *)DETECTOR_MODE_SAMPLE); + + + GtkWidget *average_mode_label=gtk_label_new("Averaging: "); + //gtk_widget_override_font(average_mode_label, pango_font_description_from_string("Arial 18")); + gtk_widget_show(average_mode_label); + gtk_grid_attach(GTK_GRID(display_grid),average_mode_label,3,4,1,1); + + GtkWidget *average_mode_none=gtk_radio_button_new_with_label(NULL,"None"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (average_mode_none), display_detector_mode==AVERAGE_MODE_NONE); + gtk_widget_show(average_mode_none); + gtk_grid_attach(GTK_GRID(display_grid),average_mode_none,4,4,1,1); + g_signal_connect(average_mode_none,"pressed",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_NONE); + + GtkWidget *average_mode_recursive=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(average_mode_none),"Recursive"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (average_mode_recursive), display_average_mode==AVERAGE_MODE_RECURSIVE); + gtk_widget_show(average_mode_recursive); + gtk_grid_attach(GTK_GRID(display_grid),average_mode_recursive,4,5,1,1); + g_signal_connect(average_mode_recursive,"pressed",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_RECURSIVE); + + GtkWidget *average_mode_time_window=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(average_mode_recursive),"Time Window"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (average_mode_time_window), display_average_mode==AVERAGE_MODE_TIME_WINDOW); + gtk_widget_show(average_mode_time_window); + gtk_grid_attach(GTK_GRID(display_grid),average_mode_time_window,4,6,1,1); + g_signal_connect(average_mode_time_window,"pressed",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_TIME_WINDOW); + + GtkWidget *average_mode_log_recursive=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(average_mode_time_window),"Log Recursive"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (average_mode_log_recursive), display_average_mode==AVERAGE_MODE_LOG_RECURSIVE); + gtk_widget_show(average_mode_log_recursive); + gtk_grid_attach(GTK_GRID(display_grid),average_mode_log_recursive,4,7,1,1); + g_signal_connect(average_mode_log_recursive,"pressed",G_CALLBACK(average_mode_cb),(gpointer *)AVERAGE_MODE_LOG_RECURSIVE); + + + GtkWidget *time_label=gtk_label_new("Time (ms): "); + //gtk_widget_override_font(average_mode_label, pango_font_description_from_string("Arial 18")); + gtk_widget_show(time_label); + gtk_grid_attach(GTK_GRID(display_grid),time_label,3,8,1,1); + + GtkWidget *time_r=gtk_spin_button_new_with_range(1.0,9999.0,1.0); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(time_r),(double)display_average_time); + gtk_widget_show(time_r); + gtk_grid_attach(GTK_GRID(display_grid),time_r,4,8,1,1); + g_signal_connect(time_r,"value_changed",G_CALLBACK(time_value_changed_cb),NULL); + id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),display_grid,display_label); @@ -299,49 +425,49 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, gtk_grid_set_row_homogeneous(GTK_GRID(cw_grid),TRUE); GtkWidget *cw_keyer_internal_b=gtk_check_button_new_with_label("CW Internal - Speed (WPM)"); - gtk_widget_override_font(cw_keyer_internal_b, pango_font_description_from_string("Arial 18")); + //gtk_widget_override_font(cw_keyer_internal_b, pango_font_description_from_string("Arial 18")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_keyer_internal_b), cw_keyer_internal); gtk_widget_show(cw_keyer_internal_b); gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_internal_b,0,0,1,1); g_signal_connect(cw_keyer_internal_b,"toggled",G_CALLBACK(cw_keyer_internal_cb),NULL); GtkWidget *cw_keyer_speed_b=gtk_spin_button_new_with_range(1.0,60.0,1.0); - gtk_widget_override_font(cw_keyer_speed_b, pango_font_description_from_string("Arial 18")); + //gtk_widget_override_font(cw_keyer_speed_b, pango_font_description_from_string("Arial 18")); gtk_spin_button_set_value(GTK_SPIN_BUTTON(cw_keyer_speed_b),(double)cw_keyer_speed); gtk_widget_show(cw_keyer_speed_b); gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_speed_b,1,0,1,1); g_signal_connect(cw_keyer_speed_b,"value_changed",G_CALLBACK(cw_keyer_speed_value_changed_cb),NULL); GtkWidget *cw_breakin_b=gtk_check_button_new_with_label("CW Break In - Delay (ms)"); - gtk_widget_override_font(cw_breakin_b, pango_font_description_from_string("Arial 18")); + //gtk_widget_override_font(cw_breakin_b, pango_font_description_from_string("Arial 18")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_breakin_b), cw_breakin); gtk_widget_show(cw_breakin_b); gtk_grid_attach(GTK_GRID(cw_grid),cw_breakin_b,0,1,1,1); g_signal_connect(cw_breakin_b,"toggled",G_CALLBACK(cw_breakin_cb),NULL); GtkWidget *cw_keyer_hang_time_b=gtk_spin_button_new_with_range(0.0,1000.0,1.0); - gtk_widget_override_font(cw_keyer_hang_time_b, pango_font_description_from_string("Arial 18")); + //gtk_widget_override_font(cw_keyer_hang_time_b, pango_font_description_from_string("Arial 18")); gtk_spin_button_set_value(GTK_SPIN_BUTTON(cw_keyer_hang_time_b),(double)cw_keyer_hang_time); gtk_widget_show(cw_keyer_hang_time_b); gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_hang_time_b,1,1,1,1); g_signal_connect(cw_keyer_hang_time_b,"value_changed",G_CALLBACK(cw_keyer_hang_time_value_changed_cb),NULL); GtkWidget *cw_keyer_straight=gtk_radio_button_new_with_label(NULL,"CW KEYER STRAIGHT"); - gtk_widget_override_font(cw_keyer_straight, pango_font_description_from_string("Arial 18")); + //gtk_widget_override_font(cw_keyer_straight, pango_font_description_from_string("Arial 18")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_keyer_straight), cw_keyer_mode==KEYER_STRAIGHT); gtk_widget_show(cw_keyer_straight); gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_straight,0,2,1,1); g_signal_connect(cw_keyer_straight,"pressed",G_CALLBACK(cw_keyer_mode_cb),(gpointer *)KEYER_STRAIGHT); GtkWidget *cw_keyer_mode_a=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(cw_keyer_straight),"CW KEYER MODE A"); - gtk_widget_override_font(cw_keyer_mode_a, pango_font_description_from_string("Arial 18")); + //gtk_widget_override_font(cw_keyer_mode_a, pango_font_description_from_string("Arial 18")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_keyer_mode_a), cw_keyer_mode==KEYER_MODE_A); gtk_widget_show(cw_keyer_mode_a); gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_mode_a,0,3,1,1); g_signal_connect(cw_keyer_mode_a,"pressed",G_CALLBACK(cw_keyer_mode_cb),(gpointer *)KEYER_MODE_A); GtkWidget *cw_keyer_mode_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(cw_keyer_mode_a),"CW KEYER MODE B"); - gtk_widget_override_font(cw_keyer_mode_b, pango_font_description_from_string("Arial 18")); + //gtk_widget_override_font(cw_keyer_mode_b, pango_font_description_from_string("Arial 18")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cw_keyer_mode_b), cw_keyer_mode==KEYER_MODE_B); gtk_widget_show(cw_keyer_mode_b); gtk_grid_attach(GTK_GRID(cw_grid),cw_keyer_mode_b,0,4,1,1); @@ -355,12 +481,12 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, gtk_grid_set_row_homogeneous(GTK_GRID(encoder_grid),TRUE); GtkWidget *vfo_divisor_label=gtk_label_new("Divisor: "); - gtk_widget_override_font(vfo_divisor_label, pango_font_description_from_string("Arial 18")); + //gtk_widget_override_font(vfo_divisor_label, pango_font_description_from_string("Arial 18")); gtk_widget_show(vfo_divisor_label); gtk_grid_attach(GTK_GRID(encoder_grid),vfo_divisor_label,0,0,1,1); GtkWidget *vfo_divisor=gtk_spin_button_new_with_range(1.0,60.0,1.0); - gtk_widget_override_font(vfo_divisor, pango_font_description_from_string("Arial 18")); + //gtk_widget_override_font(vfo_divisor, pango_font_description_from_string("Arial 18")); gtk_spin_button_set_value(GTK_SPIN_BUTTON(vfo_divisor),(double)vfo_encoder_divisor); gtk_widget_show(vfo_divisor); gtk_grid_attach(GTK_GRID(encoder_grid),vfo_divisor,1,0,1,1); @@ -455,6 +581,69 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget, id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),filters_grid,filters_label); + GtkWidget *oc_label=gtk_label_new("OC"); + GtkWidget *oc_grid=gtk_grid_new(); + gtk_grid_set_row_homogeneous(GTK_GRID(oc_grid),TRUE); + gtk_grid_set_column_spacing (GTK_GRID(oc_grid),15); + + GtkWidget *band_title=gtk_label_new("Band"); + //gtk_widget_override_font(band_title, pango_font_description_from_string("Arial 18")); + gtk_widget_show(band_title); + gtk_grid_attach(GTK_GRID(oc_grid),band_title,0,0,1,1); + + GtkWidget *rx_title=gtk_label_new("Rx"); + //gtk_widget_override_font(rx_title, pango_font_description_from_string("Arial 18")); + gtk_widget_show(rx_title); + gtk_grid_attach(GTK_GRID(oc_grid),rx_title,4,0,1,1); + + GtkWidget *tx_title=gtk_label_new("Tx"); + //gtk_widget_override_font(tx_title, pango_font_description_from_string("Arial 18")); + gtk_widget_show(tx_title); + gtk_grid_attach(GTK_GRID(oc_grid),tx_title,11,0,1,1); + + for(i=1;i<8;i++) { + char oc_id[8]; + sprintf(oc_id,"%d",i); + GtkWidget *oc_rx_title=gtk_label_new(oc_id); + //gtk_widget_override_font(oc_rx_title, pango_font_description_from_string("Arial 18")); + gtk_widget_show(oc_rx_title); + gtk_grid_attach(GTK_GRID(oc_grid),oc_rx_title,i,1,1,1); + GtkWidget *oc_tx_title=gtk_label_new(oc_id); + //gtk_widget_override_font(oc_tx_title, pango_font_description_from_string("Arial 18")); + gtk_widget_show(oc_tx_title); + gtk_grid_attach(GTK_GRID(oc_grid),oc_tx_title,i+7,1,1,1); + } + + for(i=0;ititle); + //gtk_widget_override_font(band_label, pango_font_description_from_string("Arial 18")); + gtk_widget_show(band_label); + gtk_grid_attach(GTK_GRID(oc_grid),band_label,0,i+2,1,1); + + int mask; + for(j=1;j<8;j++) { + mask=0x01<OCrx&mask)==mask); + gtk_widget_show(oc_rx_b); + gtk_grid_attach(GTK_GRID(oc_grid),oc_rx_b,j,i+2,1,1); + g_signal_connect(oc_rx_b,"toggled",G_CALLBACK(oc_rx_cb),(gpointer)(j+(i<<4))); + + GtkWidget *oc_tx_b=gtk_check_button_new(); + //gtk_widget_override_font(oc_tx_b, pango_font_description_from_string("Arial 18")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (oc_tx_b), (band->OCtx&mask)==mask); + gtk_widget_show(oc_tx_b); + gtk_grid_attach(GTK_GRID(oc_grid),oc_tx_b,j+7,i+2,1,1); + g_signal_connect(oc_tx_b,"toggled",G_CALLBACK(oc_tx_cb),(gpointer)(j+(i<<4))); + } + } + + + id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),oc_grid,oc_label); + GtkWidget *exit_label=gtk_label_new("Exit"); GtkWidget *exit_grid=gtk_grid_new(); diff --git a/old_protocol.c b/old_protocol.c index 9be6c60..ed4b35f 100644 --- a/old_protocol.c +++ b/old_protocol.c @@ -628,11 +628,18 @@ void ozy_send_buffer() { #endif case 0: + { + BAND *band=band_get_current_band(); output_buffer[3]=control_out[0]; output_buffer[4]=control_out[1]; - output_buffer[5]=control_out[2]; + if(isTransmitting()) { + output_buffer[5]=control_out[2]|band->OCtx; + } else { + output_buffer[5]=control_out[2]|band->OCrx; + } output_buffer[6]=control_out[3]; output_buffer[7]=control_out[4]; + } break; case 1: output_buffer[3]=control_out[0]|0x04; diff --git a/panadapter.c b/panadapter.c index 4d50c37..5741463 100644 --- a/panadapter.c +++ b/panadapter.c @@ -229,13 +229,15 @@ void panadapter_update(float *data,int tx) { // plot frequency markers long f; long half=(long)getSampleRate()/2L; + cairo_text_extents_t extents; for(i=0;i 0) { if ((f % 20000) < (long) hz_per_pixel) { cairo_set_source_rgb (cr, 0, 1, 1); cairo_set_line_width(cr, 1.0); - cairo_move_to(cr,(double)i,0.0); + //cairo_move_to(cr,(double)i,0.0); + cairo_move_to(cr,(double)i,10.0); cairo_line_to(cr,(double)i,(double)panadapter_height); cairo_set_source_rgb (cr, 0, 1, 1); @@ -245,7 +247,9 @@ void panadapter_update(float *data,int tx) { cairo_set_font_size(cr, 12); char v[32]; sprintf(v,"%0ld.%03ld",f/1000000,(f%1000000)/1000); - cairo_move_to(cr, (double)i, (double)(panadapter_height-10)); + //cairo_move_to(cr, (double)i, (double)(panadapter_height-10)); + cairo_text_extents(cr, v, &extents); + cairo_move_to(cr, (double)i-(extents.width/2.0), 10.0); cairo_show_text(cr, v); } } @@ -279,27 +283,29 @@ void panadapter_update(float *data,int tx) { cairo_stroke(cr); // signal - cairo_set_source_rgb(cr, 1, 1, 1); - cairo_set_line_width(cr, 1.0); - double s1,s2; samples[0]=panadapter_low-20; samples[display_width-1]=panadapter_low-20; + s1=samples[0]-(get_attenuation()-20.0); + s1 = floor((panadapter_high - s1) + * (double) panadapter_height + / (panadapter_high - panadapter_low)); + cairo_move_to(cr, 0.0, s1); for(i=1;i #include #include +#include #include "radio.h" #include "agc.h" @@ -28,6 +29,10 @@ #include "discovered.h" #include "property.h" #include "new_protocol.h" +#include "wdsp.h" + +#define min(x,y) (x