]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
added support for Alex antenna selection
authorJohn Melton g0orx/n6lyt <john.d.melton@googlemail.com>
Fri, 22 Apr 2016 10:42:45 +0000 (10:42 +0000)
committerJohn Melton g0orx/n6lyt <john.d.melton@googlemail.com>
Fri, 22 Apr 2016 10:42:45 +0000 (10:42 +0000)
band.c
band.h
menu.c
old_protocol.c
panadapter.c
pihpsdr
radio.c
release/pihpsdr.tar
release/pihpsdr/pihpsdr

diff --git a/band.c b/band.c
index fc35dd29d98b0cb7a83f798565e87a4fe4acc96c..d50da614cc2a3ea853313ae13f40ca213121bb7a 100644 (file)
--- 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 add9288b1e956f1e01ebd53bddbdab01565423a9..ec5037db17ae5d2c86f46565b2b9723a8beae854 100644 (file)
--- 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 6b8a3ca6bb942d46cf290a473274733537ad73aa..4d18ee3a3bbeda137a5fe683bc4c47c7dcc41faa 100644 (file)
--- 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;i<HAM_BANDS;i++) {
+        for(j=0;j<11;j++) {
+          child=gtk_grid_get_child_at(GTK_GRID(ant_grid),j,i+1);
+          gtk_widget_set_sensitive(child,TRUE);
+        }
+      }
+    } else {
+      for(i=0;i<HAM_BANDS;i++) {
+        for(j=0;j<11;j++) {
+          child=gtk_grid_get_child_at(GTK_GRID(ant_grid),j,i+1);
+          gtk_widget_set_sensitive(child,FALSE);
+        }
+      }
+    }
+  }
+}
+
 static gboolean menu_pressed_event_cb (GtkWidget *widget,
                GdkEventButton *event,
                gpointer        data)
@@ -347,6 +390,7 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
 
 
   GtkWidget *notebook=gtk_notebook_new();
+  g_signal_connect(notebook,"switch_page",G_CALLBACK(switch_page_cb),NULL);
 
   GtkWidget *general_label=gtk_label_new("General");
   GtkWidget *general_grid=gtk_grid_new();
@@ -468,6 +512,139 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
 
   id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),general_grid,general_label);
 
+  GtkWidget *ant_label=gtk_label_new("Ant");
+  ant_grid=gtk_grid_new();
+  gtk_grid_set_row_homogeneous(GTK_GRID(ant_grid),TRUE);
+  gtk_grid_set_column_spacing (GTK_GRID(ant_grid),10);
+
+  GtkWidget *rx_ant_label=gtk_label_new("Receive");
+  //gtk_widget_override_font(rx_ant_label, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(rx_ant_label);
+  gtk_grid_attach(GTK_GRID(ant_grid),rx_ant_label,0,0,1,1);
+
+  GtkWidget *rx1_label=gtk_label_new("1");
+  //gtk_widget_override_font(rx1_label, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(rx1_label);
+  gtk_grid_attach(GTK_GRID(ant_grid),rx1_label,1,0,1,1);
+
+  GtkWidget *rx2_label=gtk_label_new("2");
+  //gtk_widget_override_font(rx2_label, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(rx2_label);
+  gtk_grid_attach(GTK_GRID(ant_grid),rx2_label,2,0,1,1);
+
+  GtkWidget *rx3_label=gtk_label_new("3");
+  //gtk_widget_override_font(rx3_label, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(rx3_label);
+  gtk_grid_attach(GTK_GRID(ant_grid),rx3_label,3,0,1,1);
+
+  GtkWidget *ext1_label=gtk_label_new("EXT1");
+  //gtk_widget_override_font(ext1_label, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(ext1_label);
+  gtk_grid_attach(GTK_GRID(ant_grid),ext1_label,4,0,1,1);
+
+  GtkWidget *ext2_label=gtk_label_new("EXT2");
+  //gtk_widget_override_font(ext2_label, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(ext2_label);
+  gtk_grid_attach(GTK_GRID(ant_grid),ext2_label,5,0,1,1);
+
+  GtkWidget *xvtr_label=gtk_label_new("XVTR");
+  //gtk_widget_override_font(xvtr_label, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(xvtr_label);
+  gtk_grid_attach(GTK_GRID(ant_grid),xvtr_label,6,0,1,1);
+
+  GtkWidget *tx_ant_label=gtk_label_new("Transmit");
+  //gtk_widget_override_font(tx_ant_label, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(tx_ant_label);
+  gtk_grid_attach(GTK_GRID(ant_grid),tx_ant_label,7,0,1,1);
+
+  GtkWidget *tx1_label=gtk_label_new("1");
+  //gtk_widget_override_font(tx1_label, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(tx1_label);
+  gtk_grid_attach(GTK_GRID(ant_grid),tx1_label,8,0,1,1);
+
+  GtkWidget *tx2_label=gtk_label_new("2");
+  //gtk_widget_override_font(tx2_label, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(tx2_label);
+  gtk_grid_attach(GTK_GRID(ant_grid),tx2_label,9,0,1,1);
+
+  GtkWidget *tx3_label=gtk_label_new("3");
+  //gtk_widget_override_font(tx3_label, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(tx3_label);
+  gtk_grid_attach(GTK_GRID(ant_grid),tx3_label,10,0,1,1);
+
+
+  
+  for(i=0;i<HAM_BANDS;i++) {
+    BAND *band=band_get_band(i);
+
+    GtkWidget *band_label=gtk_label_new(band->title);
+    //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();
index 203e8d67c3535d2f698182277d5dbdb65f7cd549..ae06510e5b9d8d7dc3317ad88d8c69bf3333ca33 100644 (file)
@@ -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:
index 3412cf5bada5c592bfdf78fbac5eaa2c3ac4cb74..104f090b7e8b8bcec173070a62767d122eea14b6 100644 (file)
@@ -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<display_width;i++) {
                 f = getFrequency() - half + (long) (hz_per_pixel * i);
                 if (f > 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 d3c9f3c52b357e569eb208e9262bf9728f9cfd99..f0d26e45e18b27cc3eb5675acfe6646d69962e67 100755 (executable)
Binary files a/pihpsdr and b/pihpsdr differ
diff --git a/radio.c b/radio.c
index 62734dc41812472f9d8abbcacdb4d616aa34c033..3e1d2c33b71718200beeccc90a6dbc15a294d110 100644 (file)
--- 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;
index 2d2d9834f354756bca0907d43969ad0fef258b2d..12ef82832b7c9733dfae408604e868890e27ce4e 100644 (file)
Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ
index d3c9f3c52b357e569eb208e9262bf9728f9cfd99..f0d26e45e18b27cc3eb5675acfe6646d69962e67 100755 (executable)
Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ