]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
fixed gpio configuration bugs, added attenuation slider, removed calculus file
authorJohn Melton g0orx/n6lyt <john.d.melton@googlemail.com>
Fri, 15 Apr 2016 11:08:30 +0000 (11:08 +0000)
committerJohn Melton g0orx/n6lyt <john.d.melton@googlemail.com>
Fri, 15 Apr 2016 11:08:30 +0000 (11:08 +0000)
17 files changed:
band.c
calculus [deleted file]
gpio.c
main.c
menu.c
old_protocol.c
panadapter.c
pihpsdr
radio.c
radio.h
release/pihpsdr.tar
release/pihpsdr/calculus [deleted file]
release/pihpsdr/libwdsp.so
release/pihpsdr/pihpsdr
toolbar.c
toolbar.h
vfo.c

diff --git a/band.c b/band.c
index fc35dd29d98b0cb7a83f798565e87a4fe4acc96c..7bc91c4241bc3c2280bc8b0c1d4ffaa60d22f630 100644 (file)
--- a/band.c
+++ b/band.c
@@ -119,19 +119,19 @@ BANDSTACK bandstackGEN={3,1,bandstack_entriesGEN};
 BANDSTACK bandstackWWV={5,1,bandstack_entriesWWV};
 
 BAND bands[BANDS] = 
-    {{"160",&bandstack160,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"80",&bandstack80,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"60",&bandstack60,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"40",&bandstack40,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"30",&bandstack30,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"20",&bandstack20,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"18",&bandstack18,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"15",&bandstack15,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"12",&bandstack12,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"10",&bandstack10,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"50",&bandstack50,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
-     {"GEN",&bandstackGEN,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,0},
-     {"WWV",&bandstackWWV,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,0}};
+    {{"160",&bandstack160,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+     {"80",&bandstack80,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+     {"60",&bandstack60,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+     {"40",&bandstack40,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+     {"30",&bandstack30,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+     {"20",&bandstack20,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+     {"18",&bandstack18,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+     {"15",&bandstack15,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+     {"12",&bandstack12,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+     {"10",&bandstack10,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+     {"50",&bandstack50,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30},
+     {"GEN",&bandstackGEN,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,0},
+     {"WWV",&bandstackWWV,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,0}};
 
 #define NUM_BAND_LIMITS 22
 
diff --git a/calculus b/calculus
deleted file mode 100644 (file)
index 7b51e4f..0000000
Binary files a/calculus and /dev/null differ
diff --git a/gpio.c b/gpio.c
index 06355af8184a5bb7b9480b29cee76f7736e54530..07aae4c5a4025d67b4f973ba43645b2e2e99e031 100644 (file)
--- a/gpio.c
+++ b/gpio.c
@@ -41,7 +41,7 @@ int VFO_ENCODER_A_PIN=0;
 int VFO_ENCODER_B_PIN=1;
 #endif
 int ENABLE_AF_ENCODER=88;
-int ENABLE_AF_PULLUP=87;
+int ENABLE_AF_PULLUP=0;
 int AF_ENCODER_A=20;
 int AF_ENCODER_B=26;
 int AF_FUNCTION=25;
@@ -815,14 +815,25 @@ static int rf_encoder_changed(void *data) {
 static int agc_encoder_changed(void *data) {
   int pos=*(int*)data;
   if(pos!=0) {
-    double gain=agc_gain;
-    gain+=(double)pos;
-    if(gain<0.0) {
-      gain=0.0;
-    } else if(gain>120.0) {
-      gain=120.0;
+    if(function) {
+      int att=attenuation;
+      att+=pos;
+      if(att<0) {
+        att=0;
+      } else if (att>31) {
+        att=31;
+      }
+      set_attenuation_value((double)att);
+    } else {
+      double gain=agc_gain;
+      gain+=(double)pos;
+      if(gain<0.0) {
+        gain=0.0;
+      } else if(gain>120.0) {
+        gain=120.0;
+      }
+      set_agc_gain(gain);
     }
-    set_agc_gain(gain);
   }
   return 0;
 }
diff --git a/main.c b/main.c
index 1d71259f1a40004297ca588179e677d80e26e53e..e276d55e953368cea581612a0da9fe85b9f7bc14 100644 (file)
--- a/main.c
+++ b/main.c
@@ -239,7 +239,7 @@ static void configure_gpio() {
   GtkWidget *dialog=gtk_dialog_new_with_buttons("Configure GPIO",GTK_WINDOW(splash_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
   GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
   GtkWidget *grid=gtk_grid_new();
-  gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
+  //gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
   gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
 
 
@@ -477,27 +477,24 @@ static void configure_gpio() {
   //gtk_widget_override_font(close_button, pango_font_description_from_string("Arial 20"));
   gtk_widget_show_all(dialog);
 
-/*
-  g_signal_connect_swapped (dialog,
-                           "response",
-                           G_CALLBACK (gtk_widget_destroy),
-                           dialog);
-*/
-
   int result=gtk_dialog_run(GTK_DIALOG(dialog));
 
   ENABLE_VFO_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_vfo_encoder))?1:0;
   VFO_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(vfo_a));
   VFO_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(vfo_b));
+  ENABLE_VFO_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_vfo_pullup))?1:0;
   ENABLE_AF_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_af_encoder))?1:0;
   AF_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(af_a));
   AF_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(af_b));
+  ENABLE_AF_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_af_pullup))?1:0;
   ENABLE_RF_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_rf_encoder))?1:0;
   RF_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(rf_a));
   RF_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(rf_b));
+  ENABLE_RF_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_rf_pullup))?1:0;
   ENABLE_AGC_ENCODER=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_agc_encoder))?1:0;
   AGC_ENCODER_A=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(agc_a));
   AGC_ENCODER_B=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(agc_b));
+  ENABLE_AGC_PULLUP=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_agc_pullup))?1:0;
   ENABLE_BAND_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_band))?1:0;
   BAND_BUTTON=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(band));
   ENABLE_MODE_BUTTON=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b_enable_mode))?1:0;
@@ -860,6 +857,10 @@ fprintf(stderr,"meter_height=%d\n",METER_HEIGHT);
       if(!display_toolbar) {
         height+=TOOLBAR_HEIGHT;
       }
+    } else {
+      if(!display_sliders) {
+        height+=SLIDERS_HEIGHT/2;
+      }
     }
 fprintf(stderr,"panadapter_height=%d\n",height);
     panadapter = panadapter_init(display_width,height);
@@ -877,7 +878,11 @@ fprintf(stderr,"panadapter_height=%d\n",height);
       height+=PANADAPTER_HEIGHT;
     }
     if(!display_sliders) {
-      height+=SLIDERS_HEIGHT;
+      if(display_panadapter) {
+        height+=SLIDERS_HEIGHT/2;
+      } else {
+        height+=SLIDERS_HEIGHT;
+      }
     }
     if(!display_toolbar) {
       height+=TOOLBAR_HEIGHT;
diff --git a/menu.c b/menu.c
index fcc96f8bea27a0522f28dd63598c6acd7cc403df..6cdfec6b2034328e15ac7dabe9f050f86bf45e00 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -159,6 +159,24 @@ static void pa_cb(GtkWidget *widget, gpointer data) {
   }
 }
 
+static void rx_dither_cb(GtkWidget *widget, gpointer data) {
+  rx_dither=rx_dither==1?0:1;
+  if(protocol==NEW_PROTOCOL) {
+  }
+}
+
+static void rx_random_cb(GtkWidget *widget, gpointer data) {
+  rx_random=rx_random==1?0:1;
+  if(protocol==NEW_PROTOCOL) {
+  }
+}
+
+static void rx_preamp_cb(GtkWidget *widget, gpointer data) {
+  rx_preamp=rx_preamp==1?0:1;
+  if(protocol==NEW_PROTOCOL) {
+  }
+}
+
 
 static void tx_out_of_band_cb(GtkWidget *widget, gpointer data) {
   tx_out_of_band=tx_out_of_band==1?0:1;
@@ -206,6 +224,16 @@ static void oc_tx_cb(GtkWidget *widget, gpointer data) {
   }
 }
 
+static void oc_tune_cb(GtkWidget *widget, gpointer data) {
+  int oc=((int)data)&0xF;
+  int mask=0x01<<oc;
+  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
+    OCtune|=mask;
+  } else {
+    OCtune&=~mask;
+  }
+}
+
 static void detector_mode_cb(GtkWidget *widget, gpointer data) {
   display_detector_mode=(int)data;
   SetDisplayDetectorMode(CHANNEL_RX0, 0, display_detector_mode);
@@ -247,6 +275,126 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
 
   GtkWidget *notebook=gtk_notebook_new();
 
+  GtkWidget *general_label=gtk_label_new("General");
+  GtkWidget *general_grid=gtk_grid_new();
+  gtk_grid_set_row_homogeneous(GTK_GRID(general_grid),TRUE);
+  gtk_grid_set_column_homogeneous(GTK_GRID(general_grid),TRUE);
+
+
+  GtkWidget *vfo_divisor_label=gtk_label_new("VFO Encoder Divisor: ");
+  //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(general_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_spin_button_set_value(GTK_SPIN_BUTTON(vfo_divisor),(double)vfo_encoder_divisor);
+  gtk_widget_show(vfo_divisor);
+  gtk_grid_attach(GTK_GRID(general_grid),vfo_divisor,1,0,1,1);
+  g_signal_connect(vfo_divisor,"value_changed",G_CALLBACK(vfo_divisor_value_changed_cb),NULL);
+
+
+  GtkWidget *rx_dither_b=gtk_check_button_new_with_label("Dither");
+  //gtk_widget_override_font(rx_dither_b, pango_font_description_from_string("Arial 18"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx_dither_b), rx_dither);
+  gtk_widget_show(rx_dither_b);
+  gtk_grid_attach(GTK_GRID(general_grid),rx_dither_b,0,1,1,1);
+  g_signal_connect(rx_dither_b,"toggled",G_CALLBACK(rx_dither_cb),NULL);
+
+  GtkWidget *rx_random_b=gtk_check_button_new_with_label("Random");
+  //gtk_widget_override_font(rx_random_b, pango_font_description_from_string("Arial 18"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx_random_b), rx_random);
+  gtk_widget_show(rx_random_b);
+  gtk_grid_attach(GTK_GRID(general_grid),rx_random_b,0,2,1,1);
+  g_signal_connect(rx_random_b,"toggled",G_CALLBACK(rx_random_cb),NULL);
+
+/*
+  GtkWidget *rx_preamp_b=gtk_check_button_new_with_label("Preamp");
+  //gtk_widget_override_font(rx_preamp_b, pango_font_description_from_string("Arial 18"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rx_preamp_b), rx_preamp);
+  gtk_widget_show(rx_preamp_b);
+  gtk_grid_attach(GTK_GRID(general_grid),rx_preamp_b,0,3,1,1);
+  g_signal_connect(rx_preamp_b,"toggled",G_CALLBACK(rx_preamp_cb),NULL);
+*/
+
+  GtkWidget *linein_b=gtk_check_button_new_with_label("Mic Line In");
+  //gtk_widget_override_font(linein_b, pango_font_description_from_string("Arial 18"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linein_b), mic_linein);
+  gtk_widget_show(linein_b);
+  gtk_grid_attach(GTK_GRID(general_grid),linein_b,1,1,1,1);
+  g_signal_connect(linein_b,"toggled",G_CALLBACK(linein_cb),NULL);
+
+  GtkWidget *micboost_b=gtk_check_button_new_with_label("Mic Boost");
+  //gtk_widget_override_font(micboost_b, pango_font_description_from_string("Arial 18"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (micboost_b), mic_boost);
+  gtk_widget_show(micboost_b);
+  gtk_grid_attach(GTK_GRID(general_grid),micboost_b,1,2,1,1);
+  g_signal_connect(micboost_b,"toggled",G_CALLBACK(micboost_cb),NULL);
+
+
+  if((protocol==NEW_PROTOCOL && device==NEW_DEVICE_ORION) || (protocol==ORIGINAL_PROTOCOL && device==DEVICE_ORION)) {
+
+    GtkWidget *ptt_ring_b=gtk_radio_button_new_with_label(NULL,"PTT On Ring, Mic and Bias on Tip");
+    //gtk_widget_override_font(ptt_ring_b, pango_font_description_from_string("Arial 18"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_ring_b), mic_ptt_tip_bias_ring==0);
+    gtk_widget_show(ptt_ring_b);
+    gtk_grid_attach(GTK_GRID(general_grid),ptt_ring_b,1,3,1,1);
+    g_signal_connect(ptt_ring_b,"pressed",G_CALLBACK(ptt_ring_cb),NULL);
+
+    GtkWidget *ptt_tip_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(ptt_ring_b),"PTT On Tip, Mic and Bias on Ring");
+    //gtk_widget_override_font(ptt_tip_b, pango_font_description_from_string("Arial 18"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_tip_b), mic_ptt_tip_bias_ring==1);
+    gtk_widget_show(ptt_tip_b);
+    gtk_grid_attach(GTK_GRID(general_grid),ptt_tip_b,1,4,1,1);
+    g_signal_connect(ptt_tip_b,"pressed",G_CALLBACK(ptt_tip_cb),NULL);
+
+    GtkWidget *ptt_b=gtk_check_button_new_with_label("PTT Enabled");
+    //gtk_widget_override_font(ptt_b, pango_font_description_from_string("Arial 18"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_b), mic_ptt_enabled);
+    gtk_widget_show(ptt_b);
+    gtk_grid_attach(GTK_GRID(general_grid),ptt_b,1,5,1,1);
+    g_signal_connect(ptt_b,"toggled",G_CALLBACK(ptt_cb),NULL);
+
+    GtkWidget *bias_b=gtk_check_button_new_with_label("BIAS Enabled");
+    //gtk_widget_override_font(bias_b, pango_font_description_from_string("Arial 18"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bias_b), mic_bias_enabled);
+    gtk_widget_show(bias_b);
+    gtk_grid_attach(GTK_GRID(general_grid),bias_b,1,6,1,1);
+    g_signal_connect(bias_b,"toggled",G_CALLBACK(bias_cb),NULL);
+  }
+
+
+  GtkWidget *alex_b=gtk_check_button_new_with_label("ALEX");
+  //gtk_widget_override_font(alex_b, pango_font_description_from_string("Arial 18"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alex_b), filter_board==ALEX);
+  gtk_widget_show(alex_b);
+  gtk_grid_attach(GTK_GRID(general_grid),alex_b,2,1,1,1);
+
+  GtkWidget *apollo_b=gtk_check_button_new_with_label("APOLLO");
+  //gtk_widget_override_font(apollo_b, pango_font_description_from_string("Arial 18"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (apollo_b), filter_board==APOLLO);
+  gtk_widget_show(apollo_b);
+  gtk_grid_attach(GTK_GRID(general_grid),apollo_b,2,2,1,1);
+
+  g_signal_connect(alex_b,"toggled",G_CALLBACK(alex_cb),apollo_b);
+  g_signal_connect(apollo_b,"toggled",G_CALLBACK(apollo_cb),alex_b);
+
+  GtkWidget *apollo_tuner_b=gtk_check_button_new_with_label("Auto Tuner");
+  //gtk_widget_override_font(apollo_tuner_b, pango_font_description_from_string("Arial 18"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (apollo_tuner_b), apollo_tuner);
+  gtk_widget_show(apollo_tuner_b);
+  gtk_grid_attach(GTK_GRID(general_grid),apollo_tuner_b,2,3,1,1);
+  g_signal_connect(apollo_tuner_b,"toggled",G_CALLBACK(apollo_tuner_cb),NULL);
+
+  GtkWidget *pa_b=gtk_check_button_new_with_label("PA");
+  //gtk_widget_override_font(pa_b, pango_font_description_from_string("Arial 18"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pa_b), pa);
+  gtk_widget_show(pa_b);
+  gtk_grid_attach(GTK_GRID(general_grid),pa_b,2,4,1,1);
+  g_signal_connect(pa_b,"toggled",G_CALLBACK(pa_cb),NULL);
+
+  id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),general_grid,general_label);
+
 
   GtkWidget *display_label=gtk_label_new("Display");
   GtkWidget *display_grid=gtk_grid_new();
@@ -408,7 +556,7 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
 
 
 
-  GtkWidget *tx_label=gtk_label_new("TX");
+  GtkWidget *tx_label=gtk_label_new("PA Gain");
   GtkWidget *tx_grid=gtk_grid_new();
   gtk_grid_set_row_homogeneous(GTK_GRID(tx_grid),TRUE);
   gtk_grid_set_column_spacing (GTK_GRID(tx_grid),10);
@@ -493,112 +641,6 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
 
   id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),cw_grid,cw_label);
 
-
-  GtkWidget *encoder_label=gtk_label_new("VFO Encoder");
-  GtkWidget *encoder_grid=gtk_grid_new();
-  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_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_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);
-  g_signal_connect(vfo_divisor,"value_changed",G_CALLBACK(vfo_divisor_value_changed_cb),NULL);
-
-  id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),encoder_grid,encoder_label);
-
-  GtkWidget *microphone_label=gtk_label_new("Microphone");
-  GtkWidget *microphone_grid=gtk_grid_new();
-  gtk_grid_set_row_homogeneous(GTK_GRID(microphone_grid),TRUE);
-
-  GtkWidget *linein_b=gtk_check_button_new_with_label("Line In");
-  //gtk_widget_override_font(linein_b, pango_font_description_from_string("Arial 18"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linein_b), mic_linein);
-  gtk_widget_show(linein_b);
-  gtk_grid_attach(GTK_GRID(microphone_grid),linein_b,1,1,1,1);
-  g_signal_connect(linein_b,"toggled",G_CALLBACK(linein_cb),NULL);
-
-  GtkWidget *micboost_b=gtk_check_button_new_with_label("Boost");
-  //gtk_widget_override_font(micboost_b, pango_font_description_from_string("Arial 18"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (micboost_b), mic_boost);
-  gtk_widget_show(micboost_b);
-  gtk_grid_attach(GTK_GRID(microphone_grid),micboost_b,1,2,1,1);
-  g_signal_connect(micboost_b,"toggled",G_CALLBACK(micboost_cb),NULL);
-
-
-  if((protocol==NEW_PROTOCOL && device==NEW_DEVICE_ORION) || (protocol==ORIGINAL_PROTOCOL && device==DEVICE_ORION)) {
-
-    GtkWidget *ptt_ring_b=gtk_radio_button_new_with_label(NULL,"PTT On Ring, Mic and Bias on Tip");
-    //gtk_widget_override_font(ptt_ring_b, pango_font_description_from_string("Arial 18"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_ring_b), mic_ptt_tip_bias_ring==0);
-    gtk_widget_show(ptt_ring_b);
-    gtk_grid_attach(GTK_GRID(microphone_grid),ptt_ring_b,1,3,1,1);
-    g_signal_connect(ptt_ring_b,"pressed",G_CALLBACK(ptt_ring_cb),NULL);
-
-    GtkWidget *ptt_tip_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(ptt_ring_b),"PTT On Tip, Mic and Bias on Ring");
-    //gtk_widget_override_font(ptt_tip_b, pango_font_description_from_string("Arial 18"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_tip_b), mic_ptt_tip_bias_ring==1);
-    gtk_widget_show(ptt_tip_b);
-    gtk_grid_attach(GTK_GRID(microphone_grid),ptt_tip_b,1,4,1,1);
-    g_signal_connect(ptt_tip_b,"pressed",G_CALLBACK(ptt_tip_cb),NULL);
-
-    GtkWidget *ptt_b=gtk_check_button_new_with_label("PTT Enabled");
-    //gtk_widget_override_font(ptt_b, pango_font_description_from_string("Arial 18"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_b), mic_ptt_enabled);
-    gtk_widget_show(ptt_b);
-    gtk_grid_attach(GTK_GRID(microphone_grid),ptt_b,1,5,1,1);
-    g_signal_connect(ptt_b,"toggled",G_CALLBACK(ptt_cb),NULL);
-
-    GtkWidget *bias_b=gtk_check_button_new_with_label("BIAS Enabled");
-    //gtk_widget_override_font(bias_b, pango_font_description_from_string("Arial 18"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bias_b), mic_bias_enabled);
-    gtk_widget_show(bias_b);
-    gtk_grid_attach(GTK_GRID(microphone_grid),bias_b,1,6,1,1);
-    g_signal_connect(bias_b,"toggled",G_CALLBACK(bias_cb),NULL);
-  }
-
-  id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),microphone_grid,microphone_label);
-
-  GtkWidget *filters_label=gtk_label_new("Filters/PA");
-  GtkWidget *filters_grid=gtk_grid_new();
-  gtk_grid_set_row_homogeneous(GTK_GRID(filters_grid),TRUE);
-
-  GtkWidget *alex_b=gtk_check_button_new_with_label("ALEX");
-  //gtk_widget_override_font(alex_b, pango_font_description_from_string("Arial 18"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alex_b), filter_board==ALEX);
-  gtk_widget_show(alex_b);
-  gtk_grid_attach(GTK_GRID(filters_grid),alex_b,2,1,1,1);
-
-  GtkWidget *apollo_b=gtk_check_button_new_with_label("APOLLO");
-  //gtk_widget_override_font(apollo_b, pango_font_description_from_string("Arial 18"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (apollo_b), filter_board==APOLLO);
-  gtk_widget_show(apollo_b);
-  gtk_grid_attach(GTK_GRID(filters_grid),apollo_b,2,2,1,1);
-
-  g_signal_connect(alex_b,"toggled",G_CALLBACK(alex_cb),apollo_b);
-  g_signal_connect(apollo_b,"toggled",G_CALLBACK(apollo_cb),alex_b);
-
-  GtkWidget *apollo_tuner_b=gtk_check_button_new_with_label("Auto Tuner");
-  //gtk_widget_override_font(apollo_tuner_b, pango_font_description_from_string("Arial 18"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (apollo_tuner_b), apollo_tuner);
-  gtk_widget_show(apollo_tuner_b);
-  gtk_grid_attach(GTK_GRID(filters_grid),apollo_tuner_b,2,3,1,1);
-  g_signal_connect(apollo_tuner_b,"toggled",G_CALLBACK(apollo_tuner_cb),NULL);
-
-  GtkWidget *pa_b=gtk_check_button_new_with_label("PA");
-  //gtk_widget_override_font(pa_b, pango_font_description_from_string("Arial 18"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pa_b), pa);
-  gtk_widget_show(pa_b);
-  gtk_grid_attach(GTK_GRID(filters_grid),pa_b,2,4,1,1);
-  g_signal_connect(pa_b,"toggled",G_CALLBACK(pa_cb),NULL);
-
-  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);
@@ -619,6 +661,11 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
   gtk_widget_show(tx_title);
   gtk_grid_attach(GTK_GRID(oc_grid),tx_title,11,0,1,1);
 
+  GtkWidget *tune_title=gtk_label_new("Tune (ORed with TX)");
+  //gtk_widget_override_font(tune_title, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(tune_title);
+  gtk_grid_attach(GTK_GRID(oc_grid),tune_title,18,0,2,1);
+
   for(i=1;i<8;i++) {
     char oc_id[8];
     sprintf(oc_id,"%d",i);
@@ -630,6 +677,12 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
     //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);
+/*
+    GtkWidget *oc_tune_title=gtk_label_new(oc_id);
+    //gtk_widget_override_font(oc_tune_title, pango_font_description_from_string("Arial 18"));
+    gtk_widget_show(oc_tune_title);
+    gtk_grid_attach(GTK_GRID(oc_grid),oc_tune_title,i+14,1,1,1);
+*/
   }
 
   for(i=0;i<HAM_BANDS;i++) {
@@ -656,10 +709,38 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
       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)));
+
+/*
+      GtkWidget *oc_tune_b=gtk_check_button_new();
+      //gtk_widget_override_font(oc_tune_b, pango_font_description_from_string("Arial 18"));
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (oc_tune_b), (band->OCtune&mask)==mask);
+      gtk_widget_show(oc_tune_b);
+      gtk_grid_attach(GTK_GRID(oc_grid),oc_tune_b,j+14,i+2,1,1);
+      g_signal_connect(oc_tune_b,"toggled",G_CALLBACK(oc_tune_cb),(gpointer)(j+(i<<4)));
+*/
     }
   }
 
 
+  int mask;
+  for(j=1;j<8;j++) {
+    char oc_id[8];
+    sprintf(oc_id,"%d",j);
+    GtkWidget *oc_tune_title=gtk_label_new(oc_id);
+    //gtk_widget_override_font(oc_tune_title, pango_font_description_from_string("Arial 18"));
+    gtk_widget_show(oc_tune_title);
+    gtk_grid_attach(GTK_GRID(oc_grid),oc_tune_title,18,j+2,1,1);
+
+    mask=0x01<<j;
+    GtkWidget *oc_tune_b=gtk_check_button_new();
+    //gtk_widget_override_font(oc_tune_b, pango_font_description_from_string("Arial 18"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (oc_tune_b), (OCtune&mask)==mask);
+    gtk_widget_show(oc_tune_b);
+    gtk_grid_attach(GTK_GRID(oc_grid),oc_tune_b,19,j+2,1,1);
+    g_signal_connect(oc_tune_b,"toggled",G_CALLBACK(oc_tune_cb),(gpointer)j);
+  }
+
+
   id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),oc_grid,oc_label);
 
 
index ed4b35f9b8e31b8082e5873593c3b49d21ff9233..7994a1e5acf4dd46cc834e19f9e4a5a3cd89c010 100644 (file)
 #include "radio.h"
 #include "toolbar.h"
 
+#define SYNC0 0
+#define SYNC1 1
+#define SYNC2 2
+#define C0 3
+#define C1 4
+#define C2 5
+#define C3 6
+#define C4 7
+
 #define PI 3.1415926535897932F
 
 #define DATA_PORT 1024
@@ -84,6 +93,8 @@
 #define LT2208_RANDOM_OFF         0x00
 #define LT2208_RANDOM_ON          0x10
 
+static DISCOVERED *d;
+
 static int buffer_size=BUFFER_SIZE;
 
 static int receiver;
@@ -101,7 +112,6 @@ static int data_addr_length;
 static int output_buffer_size;
 
 static unsigned char control_in[5]={0x00,0x00,0x00,0x00,0x00};
-static unsigned char control_out[5]={0x00,0x00,0x00,0x00,0x00};
 
 static double tuning_phase;
 static float phase=0.0f;
@@ -175,39 +185,6 @@ static float sineWave(double* buf, int samples, float phase, float freq) {
     return phase;
 }
 
-static void setSpeed(int s) {
-  int speed=SPEED_48K;
-  output_buffer_size=OUTPUT_BUFFER_SIZE;
-  switch(s) {
-    case 48000:
-        speed=SPEED_48K;
-        output_buffer_size=OUTPUT_BUFFER_SIZE;
-        break;
-    case 96000:
-        speed=SPEED_96K;
-        output_buffer_size=OUTPUT_BUFFER_SIZE/2;
-        break;
-    case 192000:
-        speed=SPEED_192K;
-        output_buffer_size=OUTPUT_BUFFER_SIZE/4;
-        break;
-    case 384000:
-        speed=SPEED_384K;
-        output_buffer_size=OUTPUT_BUFFER_SIZE/8;
-        break;
-    default:
-        fprintf(stderr,"Invalid sample rate: %d. Defaulting to 48K.\n",s);
-        break;
-  }
-
-  //fprintf(stderr,"setSpeed sample_rate=%d speed=%d\n",s,speed);
-
-  control_out[1]=control_out[1]&0xFC;
-  control_out[1]=control_out[1]|speed;
-
-}
-
-
 void old_protocol_stop() {
   metis_start_stop(0);
   running=FALSE;
@@ -218,26 +195,30 @@ void old_protocol_init(int rx,int pixels) {
 
   fprintf(stderr,"old_protocol_init\n");
 
+  d=&discovered[selected_device];
+
   //int result=sem_init(&frequency_changed_sem, 0, 1);
 
   receiver=rx;
   display_width=pixels;
-
-   // setup defaults
-  control_out[0] = MOX_DISABLED;
-  control_out[1] = CONFIG_BOTH
-            | MERCURY_122_88MHZ_SOURCE
-            | MERCURY_10MHZ_SOURCE
-            | speed
-            | MIC_SOURCE_PENELOPE;
-  control_out[2] = MODE_OTHERS;
-  control_out[3] = ALEX_ATTENUATION_0DB
-            | LT2208_GAIN_OFF
-            | LT2208_DITHER_ON
-            | LT2208_RANDOM_ON;
-  control_out[4] = 0;
-
-  setSpeed(sample_rate);
+  switch(sample_rate) {
+    case 48000:
+      output_buffer_size=OUTPUT_BUFFER_SIZE;
+      break;
+    case 96000:
+      output_buffer_size=OUTPUT_BUFFER_SIZE/2;
+      break;
+    case 192000:
+      output_buffer_size=OUTPUT_BUFFER_SIZE/4;
+      break;
+    case 384000:
+      output_buffer_size=OUTPUT_BUFFER_SIZE/8;
+      break;
+    default:
+      fprintf(stderr,"Invalid sample rate: %d. Defaulting to 48K.\n",sample_rate);
+      break;
+  }
 
   start_receive_thread();
 
@@ -245,10 +226,18 @@ void old_protocol_init(int rx,int pixels) {
   for(i=8;i<OZY_BUFFER_SIZE;i++) {
     output_buffer[i]=0;
   }
+
+
+  // send commands twice
+  do {
+    ozy_send_buffer();
+  } while (command!=0);
+
   do {
     ozy_send_buffer();
   } while (command!=0);
 
+  // start the data flowing
   metis_start_stop(1);
 
 }
@@ -260,8 +249,6 @@ static void start_receive_thread() {
 
   fprintf(stderr,"old_protocol starting receive thread\n");
 
-  DISCOVERED* d=&discovered[selected_device];
-
   data_socket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
   if(data_socket<0) {
     perror("old_protocol: create socket failed for data_socket\n");
@@ -476,7 +463,7 @@ static void process_ozy_input_buffer(char  *buffer) {
             fprintf(stderr,"fexchange0 (CHANNEL_TX) returned error: %d\n", error);
           }
           Spectrum0(1, CHANNEL_TX, 0, 0, micoutputbuffer);
-          if(penelope) {
+          if(d->device!=DEVICE_METIS || atlas_penelope) {
             if(tune) {
               gain=65535.0*255.0/(double)tune_drive;
             } else {
@@ -551,109 +538,80 @@ static void process_bandscope_buffer(char  *buffer) {
 
 
 void ozy_send_buffer() {
-  output_buffer[0]=SYNC;
-  output_buffer[1]=SYNC;
-  output_buffer[2]=SYNC;
+
+  output_buffer[SYNC0]=SYNC;
+  output_buffer[SYNC1]=SYNC;
+  output_buffer[SYNC2]=SYNC;
 
   switch(command) {
-#ifdef EXCLUDE
     case 0:
-      //sem_wait(&frequency_changed_sem);
-      if(frequencyChanged) {
-        // send rx frequency
-        output_buffer[3]=control_out[0]|0x04;
-        output_buffer[4]=ddsFrequency>>24;
-        output_buffer[5]=ddsFrequency>>16;
-        output_buffer[6]=ddsFrequency>>8;
-        output_buffer[7]=ddsFrequency;
-        //freqcommand++;
-      } else {
-        output_buffer[3]=control_out[0];
-        output_buffer[4]=control_out[1];
-        output_buffer[5]=control_out[2];
-        output_buffer[6]=control_out[3];
-        output_buffer[7]=control_out[4];
+      {
+      BAND *band=band_get_current_band();
+   
+      output_buffer[C0]=0x00;
+
+      output_buffer[C1]=0x00;
+      switch(sample_rate) {
+        case 48000:
+          output_buffer[C1]|=SPEED_48K;
+          break;
+        case 96000:
+          output_buffer[C1]|=SPEED_96K;
+          break;
+        case 192000:
+          output_buffer[C1]|=SPEED_192K;
+          break;
+        case 384000:
+          output_buffer[C1]|=SPEED_384K;
+          break;
       }
-      //sem_post(&frequency_changed_sem);
-      break;
-    case 1:
-      // send tx frequency
-      output_buffer[3]=control_out[0]|0x02;
-/*
-      if(bSplit) {
-        if(frequencyBChanged) {
-          output_buffer[3]=control_out[0]|0x02; // Penelope
-          output_buffer[4]=ddsBFrequency>>24;
-          output_buffer[5]=ddsBFrequency>>16;
-          output_buffer[6]=ddsBFrequency>>8;
-          output_buffer[7]=ddsBFrequency;
-        } else {
-          output_buffer[3]=control_out[0];
-          output_buffer[4]=control_out[1];
-          output_buffer[5]=control_out[2];
-          output_buffer[6]=control_out[3];
-          output_buffer[7]=control_out[4];
+      if(d->device==DEVICE_METIS) {
+      }
+
+      output_buffer[C2]=0x00;
+      if(classE) {
+        output_buffer[C2]|=0x01;
+      }
+      if(isTransmitting()) {
+        output_buffer[C2]|=band->OCtx;
+        if(tune) {
+          output_buffer[C2]|=OCtune;
         }
       } else {
-*/
-        //sem_wait(&frequency_changed_sem);
-        if(frequencyChanged) {
-          output_buffer[4]=ddsFrequency>>24;
-          output_buffer[5]=ddsFrequency>>16;
-          output_buffer[6]=ddsFrequency>>8;
-          output_buffer[7]=ddsFrequency;
-        } else {
-          output_buffer[3]=control_out[0];
-          output_buffer[4]=control_out[1];
-          output_buffer[5]=control_out[2];
-          output_buffer[6]=control_out[3];
-          output_buffer[7]=control_out[4];
-        }
-        frequencyChanged=0;
-        //sem_post(&frequency_changed_sem);
-/*
+        output_buffer[C2]|=band->OCrx;
+      }
+
+// TODO - add Alex Attenuation and Alex Antenna
+      output_buffer[C3]=0x00;
+      if(rx_random) {
+        output_buffer[C3]|=LT2208_RANDOM_ON;
+      }
+      if(rx_dither) {
+        output_buffer[C3]|=LT2208_DITHER_ON;
       }
-*/
 /*
-      frequencyBChanged=0;
+      if(rx_preamp) {
+        output_buffer[C3]|=LT2208_GAIN_ON;
+      }
 */
-      break;
-    case 2:
-      output_buffer[3]=control_out[0];
-      output_buffer[4]=control_out[1];
-      output_buffer[5]=control_out[2];
-      output_buffer[6]=control_out[3];
-      output_buffer[7]=control_out[4];
-      break;
-#endif
 
-    case 0:
-      {
-      BAND *band=band_get_current_band();
-      output_buffer[3]=control_out[0];
-      output_buffer[4]=control_out[1];
-      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];
+// TODO - add Alex TX relay, duplex, receivers Mercury board frequency
+      output_buffer[C4]=0x00;
       }
       break;
     case 1:
-      output_buffer[3]=control_out[0]|0x04;
-      output_buffer[4]=ddsFrequency>>24;
-      output_buffer[5]=ddsFrequency>>16;
-      output_buffer[6]=ddsFrequency>>8;
-      output_buffer[7]=ddsFrequency;
+      output_buffer[C0]=0x04;
+      output_buffer[C1]=ddsFrequency>>24;
+      output_buffer[C2]=ddsFrequency>>16;
+      output_buffer[C3]=ddsFrequency>>8;
+      output_buffer[C4]=ddsFrequency;
       break;
     case 2:
-      output_buffer[3]=control_out[0]|0x02;
-      output_buffer[4]=ddsFrequency>>24;
-      output_buffer[5]=ddsFrequency>>16;
-      output_buffer[6]=ddsFrequency>>8;
-      output_buffer[7]=ddsFrequency;
+      output_buffer[C0]=0x02;
+      output_buffer[C1]=ddsFrequency>>24;
+      output_buffer[C2]=ddsFrequency>>16;
+      output_buffer[C3]=ddsFrequency>>8;
+      output_buffer[C4]=ddsFrequency;
       break;
     case 3:
       {
@@ -664,95 +622,105 @@ void ozy_send_buffer() {
       BAND *band=band_get_current_band();
       d=(d/100.0F)*(float)band->pa_calibration;
 
-      output_buffer[3]=0x12;
-      output_buffer[4]=(int)d;
-      output_buffer[5]=control_out[2];
+      output_buffer[C0]=0x12;
+      output_buffer[C1]=(int)d;
+      output_buffer[C2]=0x00;
       if(mic_boost) {
-        output_buffer[5]|=0x01;
+        output_buffer[C2]|=0x01;
       }
       if(mic_linein) {
-        output_buffer[5]|=0x02;
+        output_buffer[C2]|=0x02;
       }
       if(filter_board==APOLLO) {
-        output_buffer[5]|=0x2C; // board, filter ,tuner
+        output_buffer[C2]|=0x2C; // board, filter ,tuner
       }
       if((filter_board==APOLLO) && tune && apollo_tuner) {
-        output_buffer[5]|=0x10;
+        output_buffer[C2]|=0x10;
+      }
+      output_buffer[C3]=0x00;
+      if(band_get_current()==band6) {
+        output_buffer[C3]=output_buffer[6]|0x40; // Alex 6M low noise amplifier
       }
-      output_buffer[6]=control_out[3];
-      output_buffer[7]=control_out[4];
+      output_buffer[C4]=0x00;
       }
       break;
     case 4:
-      // need to add orion tip/ring and bias configuration
-      output_buffer[3]=0x14;
-      output_buffer[4]=0x00;
+      output_buffer[C0]=0x14;
+      output_buffer[C1]=0x00;
       if(mic_ptt_enabled==0) {
-        output_buffer[4]|=0x40;
+        output_buffer[C1]|=0x40;
       }
       if(mic_bias_enabled) {
-        output_buffer[4]|=0x20;
+        output_buffer[C1]|=0x20;
       }
       if(mic_ptt_tip_bias_ring) {
-        output_buffer[4]|=0x10;
+        output_buffer[C1]|=0x10;
+      }
+      output_buffer[C2]=0x00;
+      output_buffer[C3]=0x00;
+
+      if(d->device==DEVICE_HERMES || d->device==DEVICE_ANGELIA || d->device==DEVICE_ORION) {
+        output_buffer[C4]=0x20|attenuation;
+      } else {
+        output_buffer[C4]=0x00;
       }
-      output_buffer[5]=0x00;
-      output_buffer[6]=0x00;
-      output_buffer[7]=0x00;
       break;
     case 5:
-      // need to add rx attenuation and cw configuration
-      output_buffer[3]=0x16;
-      output_buffer[4]=0x00;
-      output_buffer[5]=0x00;
+      // need to add adc 2 and 3 attenuation
+      output_buffer[C0]=0x16;
+      output_buffer[C1]=0x00;
+      output_buffer[C2]=0x00;
       if(cw_keys_reversed!=0) {
-        output_buffer[5]|=0x40;
+        output_buffer[C2]|=0x40;
       }
-      output_buffer[6]=cw_keyer_speed | (cw_keyer_mode<<6);
-      output_buffer[7]=cw_keyer_weight | (cw_keyer_spacing<<7);
+      output_buffer[C3]=cw_keyer_speed | (cw_keyer_mode<<6);
+      output_buffer[C4]=cw_keyer_weight | (cw_keyer_spacing<<7);
       break;
     case 6:
       // need to add tx attenuation and rx ADC selection
-      output_buffer[3]=0x1C;
-      output_buffer[4]=0x00;
-      output_buffer[5]=0x00;
-      output_buffer[6]=0x00;
-      output_buffer[7]=0x00;
+      output_buffer[C0]=0x1C;
+      output_buffer[C1]=0x00;
+      output_buffer[C2]=0x00;
+      output_buffer[C3]=0x00;
+      output_buffer[C4]=0x00;
       break;
     case 7:
       // need to add cw configuration
-      output_buffer[3]=0x1E;
+      output_buffer[C0]=0x1E;
       if(cw_keyer_internal==1) {
         if(isTransmitting() || (mode!=modeCWU && mode!=modeCWL)) {
-          output_buffer[4]=0x00;
+          output_buffer[C1]=0x00;
         } else {
-          output_buffer[4]=0x01;
+          output_buffer[C1]=0x01;
         }
       } else {
-        output_buffer[4]=0x00;
+        output_buffer[C1]=0x00;
       }
-      output_buffer[5]=cw_keyer_sidetone_volume;
-      output_buffer[6]=cw_keyer_ptt_delay;
-      output_buffer[7]=0x00;
+      output_buffer[C2]=cw_keyer_sidetone_volume;
+      output_buffer[C3]=cw_keyer_ptt_delay;
+      output_buffer[C4]=0x00;
       break;
     case 8:
       // need to add cw configuration
-      output_buffer[3]=0x20;
-      output_buffer[4]=cw_keyer_hang_time;
-      output_buffer[5]=cw_keyer_hang_time>>8;
-      output_buffer[6]=cw_keyer_sidetone_frequency;
-      output_buffer[7]=cw_keyer_sidetone_frequency>>8;
+      output_buffer[C0]=0x20;
+      output_buffer[C1]=cw_keyer_hang_time;
+      output_buffer[C2]=cw_keyer_hang_time>>8;
+      output_buffer[C3]=cw_keyer_sidetone_frequency;
+      output_buffer[C4]=cw_keyer_sidetone_frequency>>8;
       break;
   }
   command++;
-  //if(command>=14) {
-    if(command>=8) {
-      command=0;
-    }
+  if(command>8) {
+    command=0;
+  }
+
   // set mox
-  output_buffer[3]|=isTransmitting();
+  output_buffer[C0]|=isTransmitting();
 
   metis_write(0x02,output_buffer,OZY_BUFFER_SIZE);
+
+  //fprintf(stderr,"C0=%02X C1=%02X C2=%02X C3=%02X C4=%02X\n",
+  //                output_buffer[C0],output_buffer[C1],output_buffer[C2],output_buffer[C3],output_buffer[C4]);
 }
 
 static int metis_write(unsigned char ep,char* buffer,int length) {
index 57414635ed443ed811bbf2960b20428364d29091..f5d4f26ec09e990fbb5a3bc380d60099fef0658c 100644 (file)
@@ -284,15 +284,15 @@ void panadapter_update(float *data,int tx) {
 
             // signal
             double s1,s2;
-            samples[0]=panadapter_low-20;
-            samples[display_width-1]=panadapter_low-20;
-            s1=samples[0]-(get_attenuation()-20.0);
+            samples[0]=-200.0;
+            samples[display_width-1]=-200.0;
+            s1=(double)samples[0]+(double)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<display_width;i++) {
-                s2=samples[i]-(get_attenuation()-20.0);
+                s2=(double)samples[i]+(double)get_attenuation()-20.0;
                 s2 = floor((panadapter_high - s2)
                             * (double) panadapter_height
                             / (panadapter_high - panadapter_low));
diff --git a/pihpsdr b/pihpsdr
index 86ce2f31d2ae1c12faed3a9a716473f10b20533b..6fd61600d52592c54f1949a68f07371591175f4e 100755 (executable)
Binary files a/pihpsdr and b/pihpsdr differ
diff --git a/radio.c b/radio.c
index 1783a7421a49e2ace91d30e3b628d1554c4ff485..34cf7c0c152a3ab853058ad4eaa519dab475b733 100644 (file)
--- a/radio.c
+++ b/radio.c
@@ -39,7 +39,14 @@ char property_path[128];
 sem_t property_sem;
 
 
-int penelope=0;
+int atlas_penelope=0;
+int atlas_clock_source_10mhz=0;
+int atlas_clock_source_128mhz=0;
+int atlas_config=0;
+int atlas_mic_source=0;
+
+int classE=0;
+
 int tx_out_of_band=0;
 
 int sample_rate=48000;
@@ -70,6 +77,10 @@ int display_toolbar=1;
 double volume=0.2;
 double mic_gain=1.5;
 
+int rx_dither=0;
+int rx_random=0;
+int rx_preamp=0;
+
 int mic_linein=0;
 int mic_boost=0;
 int mic_bias_enabled=0;
@@ -102,7 +113,7 @@ int byte_swap=0;
 
 int lt2208Dither = 0;
 int lt2208Random = 0;
-int attenuation = 20; // 20dB
+int attenuation = 0; // 0dB
 unsigned long alex_rx_antenna=0;
 unsigned long alex_tx_antenna=0;
 unsigned long alex_attenuation=0;
@@ -146,6 +157,8 @@ int tune;
 
 long long ddsFrequency=14250000;
 
+unsigned char OCtune=0;
+
 void init_radio() {
   int rc;
   rc=sem_init(&property_sem, 0, 0);
@@ -270,8 +283,8 @@ void radioRestoreState() {
     sem_wait(&property_sem);
     loadProperties(property_path);
 
-    value=getProperty("penelope");
-    if(value) penelope=atoi(value);
+    value=getProperty("atlas_penelope");
+    if(value) atlas_penelope=atoi(value);
     value=getProperty("tx_out_of_band");
     if(value) tx_out_of_band=atoi(value);
     value=getProperty("sample_rate");
@@ -366,6 +379,8 @@ void radioRestoreState() {
     if(value) cw_breakin=atoi(value);
     value=getProperty("vfo_encoder_divisor");
     if(value) vfo_encoder_divisor=atoi(value);
+    value=getProperty("OCtune");
+    if(value) OCtune=atoi(value);
 
     bandRestoreState();
     sem_post(&property_sem);
@@ -375,6 +390,8 @@ void radioSaveState() {
     char value[80];
 
     sem_wait(&property_sem);
+    sprintf(value,"%d",atlas_penelope);
+    setProperty("atlas_penelope",value);
     sprintf(value,"%d",sample_rate);
     setProperty("sample_rate",value);
     sprintf(value,"%d",filter_board);
@@ -467,6 +484,8 @@ void radioSaveState() {
     setProperty("cw_breakin",value);
     sprintf(value,"%d",vfo_encoder_divisor);
     setProperty("vfo_encoder_divisor",value);
+    sprintf(value,"%d",OCtune);
+    setProperty("OCtune",value);
 
     bandSaveState();
 
diff --git a/radio.h b/radio.h
index 7cd0fb251e4576f85f9c3e1ac47e763d6da34e60..92f4c5ffb4ee7c2b3a0e4bf21a898f5375a99177 100644 (file)
--- a/radio.h
+++ b/radio.h
@@ -55,7 +55,18 @@ extern char property_path[];
 #define KEYER_MODE_A 1
 #define KEYER_MODE_B 2
 
-extern int penelope;
+extern int rx_dither;
+extern int rx_random;
+extern int rx_preamp;
+
+extern int atlas_penelope;
+extern int atlas_clock_source_10mhz;
+extern int atlas_clock_source_128mhz;
+extern int atlas_config;
+extern int atlas_mic_source;
+
+extern int classE;
+
 extern int tx_out_of_band;
 
 extern int sample_rate;
@@ -160,6 +171,8 @@ extern int supply_volts;
 
 extern long long ddsFrequency;
 
+extern unsigned char OCtune;
+
 extern void init_radio();
 extern void setSampleRate(int rate);
 extern int getSampleRate();
index ef7fa369d893c629dec1dd7759d74bb379e6c5fa..34226fa378918e435606f4e44dfb9b5644804632 100644 (file)
Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ
diff --git a/release/pihpsdr/calculus b/release/pihpsdr/calculus
deleted file mode 100644 (file)
index 7b51e4f..0000000
Binary files a/release/pihpsdr/calculus and /dev/null differ
index e085ec53139abe8ed4c7f1030e5c251533bf2cf8..09179a90b3e829be5443ad7bea27b3b241687ea7 100755 (executable)
Binary files a/release/pihpsdr/libwdsp.so and b/release/pihpsdr/libwdsp.so differ
index 86ce2f31d2ae1c12faed3a9a716473f10b20533b..6fd61600d52592c54f1949a68f07371591175f4e 100755 (executable)
Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ
index b4d6c79a33ad30c5a12a60a232af8149660967fc..7423b3f0ebaeac33967ecc06fd6c830753855c2c 100644 (file)
--- a/toolbar.c
+++ b/toolbar.c
@@ -54,6 +54,7 @@ static GtkWidget *last_filter;
 #define AGC_GAIN 3
 #define DRIVE 4
 #define TUNE_DRIVE 5
+#define ATTENUATION 5
 
 #define MIC_GAIN_FUDGE 25.0
 
@@ -64,6 +65,8 @@ static GtkWidget *af_gain_label;
 static GtkWidget *af_gain_scale;
 static GtkWidget *agc_gain_label;
 static GtkWidget *agc_scale;
+static GtkWidget *attenuation_label;
+static GtkWidget *attenuation_scale;
 static GtkWidget *mic_gain_label;
 static GtkWidget *mic_gain_scale;
 static GtkWidget *drive_label;
@@ -253,6 +256,48 @@ fprintf(stderr,"scale_timeout_cb\n");
   return FALSE;
 }
 
+static void attenuation_value_changed_cb(GtkWidget *widget, gpointer data) {
+  attenuation=gtk_range_get_value(GTK_RANGE(attenuation_scale));
+  if(protocol==NEW_PROTOCOL) {
+    // need to schedule something
+  }
+}
+
+void set_attenuation_value(double value) {
+  attenuation=(int)value;
+  if(display_sliders) {
+    gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation);
+  } else {
+    if(scale_status!=ATTENUATION) {
+      if(scale_status!=NONE) {
+        g_source_remove(scale_timer);
+        gtk_widget_destroy(scale_dialog);
+        scale_status=NONE;
+      }
+    }
+    if(scale_status==NONE) {
+      scale_status=ATTENUATION;
+      scale_dialog=gtk_dialog_new_with_buttons("Attenuation (dB)",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
+      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
+      attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.00);
+      gtk_widget_set_size_request (attenuation_scale, 400, 30);
+      gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation);
+      gtk_widget_show(attenuation_scale);
+      gtk_container_add(GTK_CONTAINER(content),attenuation_scale);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+      //gtk_widget_show_all(scale_dialog);
+      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
+    } else {
+      g_source_remove(scale_timer);
+      gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+    }
+  }
+  if(protocol==NEW_PROTOCOL) {
+    // need to schedule something
+  }
+}
+
 static void agc_select_cb(GtkWidget *widget, gpointer data) {
   agc=(int)data;
   SetRXAAGCMode(CHANNEL_RX0, agc);
@@ -960,6 +1005,18 @@ GtkWidget *sliders_init(int my_width, int my_height, GtkWidget* parent) {
   gtk_grid_attach(GTK_GRID(sliders),agc_scale,4,0,2,1);
   g_signal_connect(G_OBJECT(agc_scale),"value_changed",G_CALLBACK(agcgain_value_changed_cb),NULL);
 
+  attenuation_label=gtk_label_new("ATT (dB):");
+  //gtk_widget_override_font(attenuation_label, pango_font_description_from_string("Arial 16"));
+  gtk_widget_show(attenuation_label);
+  gtk_grid_attach(GTK_GRID(sliders),attenuation_label,6,0,1,1);
+
+  attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.0);
+  gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation);
+  gtk_widget_show(attenuation_scale);
+  gtk_grid_attach(GTK_GRID(sliders),attenuation_scale,7,0,2,1);
+  g_signal_connect(G_OBJECT(attenuation_scale),"value_changed",G_CALLBACK(attenuation_value_changed_cb),NULL);
+
+
 
   mic_gain_label=gtk_label_new("Mic:");
   //gtk_widget_override_font(mic_gain_label, pango_font_description_from_string("Arial 16"));
index 99940ea1a81a441ab37d92f107fc880ece753bea..fbf2fdfcd2eba5b1f303b09e2727b5e85a6061cb 100644 (file)
--- a/toolbar.h
+++ b/toolbar.h
@@ -22,6 +22,7 @@ void set_af_gain(double value);
 void set_mic_gain(double value);
 void set_drive(double drive);
 void set_tune(double tune);
+void set_attenuation_value(double attenuation);
 int ptt_update(void *data);
 void lock_cb(GtkWidget *widget, gpointer data);
 void mox_cb(GtkWidget *widget, gpointer data);
diff --git a/vfo.c b/vfo.c
index bfc2d937d7686ff19d16b06d09e660281ddf54b7..3386211f133e27d6938ebe9a3ba991ad26b8f4e7 100644 (file)
--- a/vfo.c
+++ b/vfo.c
@@ -138,9 +138,9 @@ int vfo_update(void *data) {
         cairo_move_to(cr, (my_width/2)+20, 30);  
         cairo_show_text(cr, getFrequencyInfo(entry->frequencyA));
 
-//        sprintf(sf,"Step %dHz",step);
-//        cairo_move_to(cr, 10, 25);  
-//        cairo_show_text(cr, sf);
+        sprintf(sf,"Step %dHz",step);
+        cairo_move_to(cr, (my_width/2)+20, 15);  
+        cairo_show_text(cr, sf);
 
         if(locked) {
             cairo_set_source_rgb(cr, 1, 0, 0);