From: John Melton g0orx/n6lyt Date: Fri, 22 Apr 2016 10:42:45 +0000 (+0000) Subject: added support for Alex antenna selection X-Git-Url: https://git.rkrishnan.org/pf/components//%22%22.?a=commitdiff_plain;h=3bef5de96937075d92adbd5b9e141d6b5eed36c1;p=pihpsdr.git added support for Alex antenna selection --- diff --git a/band.c b/band.c index fc35dd2..d50da61 100644 --- a/band.c +++ b/band.c @@ -248,15 +248,15 @@ void bandSaveState() { sprintf(name,"band.%d.preamp",b); setProperty(name,value); - sprintf(value,"%ld",bands[b].alexRxAntenna); + sprintf(value,"%d",bands[b].alexRxAntenna); sprintf(name,"band.%d.alexRxAntenna",b); setProperty(name,value); - sprintf(value,"%ld",bands[b].alexTxAntenna); + sprintf(value,"%d",bands[b].alexTxAntenna); sprintf(name,"band.%d.alexTxAntenna",b); setProperty(name,value); - sprintf(value,"%ld",bands[b].alexAttenuation); + sprintf(value,"%d",bands[b].alexAttenuation); sprintf(name,"band.%d.alexAttenuation",b); setProperty(name,value); diff --git a/band.h b/band.h index add9288..ec5037d 100644 --- a/band.h +++ b/band.h @@ -58,9 +58,9 @@ struct _BAND { unsigned char OCrx; unsigned char OCtx; int preamp; - unsigned long alexRxAntenna; - unsigned long alexTxAntenna; - unsigned long alexAttenuation; + int alexRxAntenna; + int alexTxAntenna; + int alexAttenuation; int pa_calibration; }; diff --git a/menu.c b/menu.c index 6b8a3ca..4d18ee3 100644 --- a/menu.c +++ b/menu.c @@ -41,6 +41,9 @@ static GtkWidget *parent_window; static GtkWidget *box; static GtkWidget *menu; +static GtkWidget *ant_grid; +static gint ant_id; + static void cw_keyer_internal_cb(GtkWidget *widget, gpointer data) { cw_keyer_internal=cw_keyer_internal==1?0:1; cw_changed(); @@ -334,6 +337,46 @@ static void ae_cb(GtkWidget *widget, gpointer data) { SetRXAEMNRaeRun(CHANNEL_RX0, nr2_ae); } +static void rx_ant_cb(GtkWidget *widget, gpointer data) { + int b=((int)data)>>4; + int ant=((int)data)&0xF; + BAND *band=band_get_band(b); + band->alexRxAntenna=ant; +} + +static void tx_ant_cb(GtkWidget *widget, gpointer data) { + int b=((int)data)>>4; + int ant=((int)data)&0xF; + BAND *band=band_get_band(b); + band->alexTxAntenna=ant; +} + +static void switch_page_cb(GtkNotebook *notebook, + GtkWidget *page, + guint page_num, + gpointer user_data) +{ + int i, j; + GtkWidget *child; + if(page_num==ant_id) { + if(filter_board==ALEX) { + 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(ant_grid),band_label,0,i+1,1,1); + + GtkWidget *rx1_b=gtk_radio_button_new(NULL); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx1_b), band->alexRxAntenna==0); + gtk_widget_show(rx1_b); + gtk_grid_attach(GTK_GRID(ant_grid),rx1_b,1,i+1,1,1); + g_signal_connect(rx1_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)((i<<4)+0)); + + GtkWidget *rx2_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(rx1_b)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx2_b), band->alexRxAntenna==1); + gtk_widget_show(rx2_b); + gtk_grid_attach(GTK_GRID(ant_grid),rx2_b,2,i+1,1,1); + g_signal_connect(rx2_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)((i<<4)+1)); + + GtkWidget *rx3_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(rx2_b)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx3_b), band->alexRxAntenna==2); + gtk_widget_show(rx3_b); + gtk_grid_attach(GTK_GRID(ant_grid),rx3_b,3,i+1,1,1); + g_signal_connect(rx3_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)((i<<4)+2)); + + GtkWidget *ext1_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(rx3_b)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ext1_b), band->alexRxAntenna==3); + gtk_widget_show(ext1_b); + gtk_grid_attach(GTK_GRID(ant_grid),ext1_b,4,i+1,1,1); + g_signal_connect(ext1_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)((i<<4)+3)); + + GtkWidget *ext2_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(ext1_b)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ext2_b), band->alexRxAntenna==4); + gtk_widget_show(ext2_b); + gtk_grid_attach(GTK_GRID(ant_grid),ext2_b,5,i+1,1,1); + g_signal_connect(ext2_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)((i<<4)+4)); + + GtkWidget *xvtr_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(ext2_b)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (xvtr_b), band->alexRxAntenna==5); + gtk_widget_show(xvtr_b); + gtk_grid_attach(GTK_GRID(ant_grid),xvtr_b,6,i+1,1,1); + g_signal_connect(xvtr_b,"pressed",G_CALLBACK(rx_ant_cb),(gpointer)((i<<4)+5)); + + GtkWidget *ant_band_label=gtk_label_new(band->title); + //gtk_widget_override_font(ant_band_label, pango_font_description_from_string("Arial 18")); + gtk_widget_show(ant_band_label); + gtk_grid_attach(GTK_GRID(ant_grid),ant_band_label,7,i+1,1,1); + + GtkWidget *tx1_b=gtk_radio_button_new(NULL); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tx1_b), band->alexTxAntenna==0); + gtk_widget_show(tx1_b); + gtk_grid_attach(GTK_GRID(ant_grid),tx1_b,8,i+1,1,1); + g_signal_connect(tx1_b,"pressed",G_CALLBACK(tx_ant_cb),(gpointer)((i<<4)+0)); + + GtkWidget *tx2_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(tx1_b)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tx2_b), band->alexTxAntenna==1); + gtk_widget_show(tx2_b); + gtk_grid_attach(GTK_GRID(ant_grid),tx2_b,9,i+1,1,1); + g_signal_connect(tx2_b,"pressed",G_CALLBACK(tx_ant_cb),(gpointer)((i<<4)+1)); + + GtkWidget *tx3_b=gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(tx2_b)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tx3_b), band->alexTxAntenna==2); + gtk_widget_show(tx3_b); + gtk_grid_attach(GTK_GRID(ant_grid),tx3_b,10,i+1,1,1); + g_signal_connect(tx3_b,"pressed",G_CALLBACK(tx_ant_cb),(gpointer)((i<<4)+2)); + + } + + ant_id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),ant_grid,ant_label); + GtkWidget *display_label=gtk_label_new("Display"); GtkWidget *display_grid=gtk_grid_new(); diff --git a/old_protocol.c b/old_protocol.c index 203e8d6..ae06510 100644 --- a/old_protocol.c +++ b/old_protocol.c @@ -604,8 +604,67 @@ 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; + break; + case 4: // EXT 2 + output_buffer[C3]|=0xC0; + break; + case 5: // XVTR + output_buffer[C3]|=0xE0; + break; + } + + // TODO - add Alex TX relay, duplex, receivers Mercury board frequency output_buffer[C4]=0x00; + if(isTransmitting()) { + switch(band->alexTxAntenna) { + case 0: // ANT 1 + output_buffer[C4]|=0x00; + break; + case 1: // ANT 2 + output_buffer[C4]|=0x01; + break; + case 2: // ANT 3 + output_buffer[C4]|=0x02; + break; + } + } else { + switch(band->alexRxAntenna) { + case 0: // ANT 1 + output_buffer[C4]|=0x00; + break; + case 1: // ANT 2 + output_buffer[C4]|=0x01; + break; + case 2: // ANT 3 + output_buffer[C4]|=0x02; + break; + case 3: // EXT 1 + case 4: // EXT 2 + case 5: // XVTR + switch(band->alexTxAntenna) { + case 0: // ANT 1 + output_buffer[C4]|=0x00; + break; + case 1: // ANT 2 + output_buffer[C4]|=0x01; + break; + case 2: // ANT 3 + output_buffer[C4]|=0x02; + break; + } + break; + } + } } break; case 1: diff --git a/panadapter.c b/panadapter.c index 3412cf5..104f090 100644 --- a/panadapter.c +++ b/panadapter.c @@ -239,13 +239,28 @@ void panadapter_update(float *data,int tx) { cairo_stroke(cr); // plot frequency markers + long divisor=20000; long f; long half=(long)getSampleRate()/2L; cairo_text_extents_t extents; + switch(sample_rate) { + case 48000: + divisor=5000L; + break; + case 96000: + divisor=10000L; + break; + case 192000: + divisor=20000L; + break; + case 384000: + divisor=25000L; + break; + } for(i=0;i 0) { - if ((f % 20000) < (long) hz_per_pixel) { + if ((f % divisor) < (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); diff --git a/pihpsdr b/pihpsdr index d3c9f3c..f0d26e4 100755 Binary files a/pihpsdr and b/pihpsdr differ diff --git a/radio.c b/radio.c index 62734dc..3e1d2c3 100644 --- a/radio.c +++ b/radio.c @@ -58,7 +58,7 @@ int updates_per_second=10; int display_panadapter=1; int panadapter_high=-60; -int panadapter_low=-140; +int panadapter_low=-160; int display_filled=1; int display_detector_mode=DETECTOR_MODE_AVERAGE; diff --git a/release/pihpsdr.tar b/release/pihpsdr.tar index 2d2d983..12ef828 100644 Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ diff --git a/release/pihpsdr/pihpsdr b/release/pihpsdr/pihpsdr index d3c9f3c..f0d26e4 100755 Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ