]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
fixed TX Panadpter curosr position. Moved VOX from toolbar to VOX Menu to turn on...
authorJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Thu, 16 Feb 2017 16:23:36 +0000 (16:23 +0000)
committerJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Thu, 16 Feb 2017 16:23:36 +0000 (16:23 +0000)
discovery.c
new_protocol.c
old_protocol.c
toolbar.c
tx_panadapter.c
vfo.c
vfo.h
vox.c
vox_menu.c

index 3fc509debd04d7c6f572fd75f29bd306beb70384..b8e16c02a7fc53bdb06772af016c9f66f52a3377 100644 (file)
@@ -104,6 +104,7 @@ fprintf(stderr,"discovery\n");
   lime_discovery();
 #endif
 
+  status_text("Discovery");
 
   if(devices==0) {
     gdk_window_set_cursor(gtk_widget_get_window(top_window),gdk_cursor_new(GDK_ARROW));
index fa48079de7362f7f0275aab409f412644f0b574d..65433cc9576010476c2e0f15af63c7e533bdd089 100644 (file)
@@ -373,8 +373,10 @@ static void new_protocol_high_priority(int run) {
       //long long rxFrequency=ddsFrequency;
       //rxFrequency=receiver[r]->dds_frequency;
       int v=receiver[r]->id;
-      rxFrequency=vfo[v].frequency-vfo[v].lo+vfo[v].rit;
-
+      rxFrequency=vfo[v].frequency-vfo[v].lo;
+      if(vfo[v].rit_enabled) {
+        rxFrequency+=vfo[v].rit;
+      }
       if(vfo[v].mode==modeCWU) {
         rxFrequency-=cw_keyer_sidetone_frequency;
       } else if(vfo[v].mode==modeCWL) {
index bccd04245a45348a523242e7b7f5963745123ca6..dd5af16a6a7793a49ff6e48ed11207b7c6a53645 100644 (file)
@@ -800,7 +800,10 @@ void ozy_send_buffer() {
       if(current_rx<receivers) {
         output_buffer[C0]=0x04+(current_rx*2);
         int v=receiver[current_rx]->id;
-        long long rxFrequency=vfo[v].frequency+vfo[v].rit;
+        long long rxFrequency=vfo[v].frequency-vfo[v].lo;
+        if(vfo[v].rit_enabled) {
+          rxFrequency+=vfo[v].rit;
+        }
         if(vfo[active_receiver->id].mode==modeCWU) {
           rxFrequency-=(long long)cw_keyer_sidetone_frequency;
         } else if(vfo[active_receiver->id].mode==modeCWL) {
index 69fab0ec6b9646dc84bf5edbae4ab5e92613dae4..7a02eb587311d52b0d796d793b0f4a43411e027c 100644 (file)
--- a/toolbar.c
+++ b/toolbar.c
@@ -110,10 +110,12 @@ void update_toolbar_labels() {
       gtk_button_set_label(GTK_BUTTON(sim_mox),"Mox");
       gtk_button_set_label(GTK_BUTTON(sim_s1),"Freq");
       gtk_button_set_label(GTK_BUTTON(sim_s2),"Mem");
-      gtk_button_set_label(GTK_BUTTON(sim_s3),"Vox");
+      //gtk_button_set_label(GTK_BUTTON(sim_s3),"Vox");
+      gtk_button_set_label(GTK_BUTTON(sim_s3),vfo[active_receiver->id].rit_enabled==0?"RIT On":"RIT Off");
+
       gtk_button_set_label(GTK_BUTTON(sim_s4),"RIT+");
       gtk_button_set_label(GTK_BUTTON(sim_s5),"RIT-");
-      gtk_button_set_label(GTK_BUTTON(sim_s6),"");
+      gtk_button_set_label(GTK_BUTTON(sim_s6),"RIT CL");
       if(full_tune) {
         set_button_text_color(sim_s1,"red");
       }
@@ -209,6 +211,12 @@ static void split_cb (GtkWidget *widget, gpointer data) {
   vfo_update(NULL);
 }
 
+static void rit_enable_cb(GtkWidget *widget, gpointer data) {
+  vfo[active_receiver->id].rit_enabled=vfo[active_receiver->id].rit_enabled==1?0:1;
+  gtk_button_set_label(GTK_BUTTON(widget),vfo[active_receiver->id].rit_enabled==0?"RIT On":"RIT Off");
+  vfo_update(NULL);
+}
+
 static void rit_cb(GtkWidget *widget, gpointer data) {
   int i=(int)data;
   vfo[active_receiver->id].rit+=i*rit_increment;
@@ -218,6 +226,11 @@ static void rit_cb(GtkWidget *widget, gpointer data) {
   rit_timer=g_timeout_add(200,rit_timer_cb,(void *)i);
 }
 
+static void rit_clear_cb(GtkWidget *widget, gpointer data) {
+  vfo[active_receiver->id].rit=0;
+  vfo_update(NULL);
+}
+
 static void freq_cb(GtkWidget *widget, gpointer data) {
   start_vfo();
 }
@@ -659,7 +672,8 @@ void sim_s3_pressed_cb(GtkWidget *widget, gpointer data) {
       atob_cb(widget,data);
       break;
     case 2:
-      vox_cb(widget,data);
+      //vox_cb(widget,data);
+      rit_enable_cb(widget,data);
       break;
     case 3:
       break;
@@ -750,6 +764,7 @@ void sim_s6_pressed_cb(GtkWidget *widget, gpointer data) {
       split_cb(widget,data);
       break;
     case 2:
+      rit_clear_cb(widget,NULL);
       break;
     case 3:
       break;
index 0ec9fcf57b371bf64136f6a9c396cb39191cdf2f..10c09f13ccf7516a8324b784e119f9f2dce9731d 100644 (file)
@@ -177,6 +177,10 @@ void tx_panadapter_update(TRANSMITTER *tx) {
   int display_width=gtk_widget_get_allocated_width (tx->panadapter);
   int display_height=gtk_widget_get_allocated_height (tx->panadapter);
 
+  int id=0;
+  if(split) {
+    id=1;
+  }
   samples=tx->pixel_samples;
   //hz_per_pixel=(double)tx->output_rate/(double)display_width;
   hz_per_pixel=48000.0/(double)display_width;
@@ -220,38 +224,8 @@ void tx_panadapter_update(TRANSMITTER *tx) {
   long long divisor=20000;
   long long half=24000LL; //(long long)(tx->output_rate/2);
   long long frequency;
-  if(split) {
-    frequency=vfo[VFO_B].frequency+vfo[VFO_B].offset;
-  } else {
-    frequency=vfo[VFO_A].frequency+vfo[VFO_A].offset;
-  }
+  frequency=vfo[id].frequency+vfo[VFO_B].offset;
   divisor=5000LL;
-/*
-  switch(tx->output_rate) {
-    case 48000:
-      divisor=5000L;
-      break;
-    case 96000:
-    case 100000:
-      divisor=10000L;
-      break;
-    case 192000:
-      divisor=20000L;
-      break;
-    case 384000:
-      divisor=25000L;
-      break;
-    case 768000:
-      divisor=50000L;
-      break;
-    case 1048576:
-    case 1536000:
-    case 2097152:
-      divisor=100000L;
-      break;
-  }
-*/
-//fprintf(stderr,"tx_panadapter_update: frequency=%lld divisor=%lld split=%d\n",frequency,divisor,split);
   for(i=0;i<display_width;i++) {
     f = frequency - half + (long) (hz_per_pixel * i);
     if (f > 0) {
@@ -308,8 +282,8 @@ void tx_panadapter_update(TRANSMITTER *tx) {
   cairo_set_source_rgb (cr, 1, 0, 0);
   cairo_set_line_width(cr, 1.0);
 //fprintf(stderr,"cursor: x=%f\n",(double)(display_width/2.0)+(vfo[tx->id].offset/hz_per_pixel));
-  cairo_move_to(cr,(double)(display_width/2.0)+(vfo[tx->id].offset/hz_per_pixel),0.0);
-  cairo_line_to(cr,(double)(display_width/2.0)+(vfo[tx->id].offset/hz_per_pixel),(double)display_height);
+  cairo_move_to(cr,(double)(display_width/2.0)+(vfo[id].offset/hz_per_pixel),0.0);
+  cairo_line_to(cr,(double)(display_width/2.0)+(vfo[id].offset/hz_per_pixel),(double)display_height);
   cairo_stroke(cr);
 
   // signal
diff --git a/vfo.c b/vfo.c
index b5752d834426c22979e49efb925617951636742e..58533fab3847df40b9e7d8a5ad0020257e28a4b6 100644 (file)
--- a/vfo.c
+++ b/vfo.c
@@ -90,6 +90,9 @@ void vfo_save_state() {
     sprintf(name,"vfo.%d.ctun",i);
     sprintf(value,"%d",vfo[i].ctun);
     setProperty(name,value);
+    sprintf(name,"vfo.%d.rit_enabled",i);
+    sprintf(value,"%d",vfo[i].rit_enabled);
+    setProperty(name,value);
     sprintf(name,"vfo.%d.rit",i);
     sprintf(value,"%lld",vfo[i].rit);
     setProperty(name,value);
@@ -125,6 +128,7 @@ void vfo_restore_state() {
     vfo[i].filter=6;
     vfo[i].lo=0;
     vfo[i].offset=0;
+    vfo[i].rit_enabled=0;
     vfo[i].rit=0;
     vfo[i].ctun=0;
 
@@ -143,6 +147,9 @@ void vfo_restore_state() {
     sprintf(name,"vfo.%d.rit",i);
     value=getProperty(name);
     if(value) vfo[i].rit=atoll(value);
+    sprintf(name,"vfo.%d.rit_enabled",i);
+    value=getProperty(name);
+    if(value) vfo[i].rit_enabled=atoi(value);
     sprintf(name,"vfo.%d.lo",i);
     value=getProperty(name);
     if(value) vfo[i].lo=atoll(value);
@@ -306,6 +313,7 @@ void vfo_a_to_b() {
   vfo[VFO_B].filter=vfo[VFO_A].filter;
   vfo[VFO_B].lo=vfo[VFO_A].lo;
   vfo[VFO_B].offset=vfo[VFO_A].offset;
+  vfo[VFO_B].rit_enabled=vfo[VFO_A].rit_enabled;
   vfo[VFO_B].rit=vfo[VFO_A].rit;
 
   if(receivers==2) {
@@ -325,6 +333,7 @@ void vfo_b_to_a() {
   vfo[VFO_A].filter=vfo[VFO_B].filter;
   vfo[VFO_A].lo=vfo[VFO_B].lo;
   vfo[VFO_A].offset=vfo[VFO_B].offset;
+  vfo[VFO_A].rit_enabled=vfo[VFO_B].rit_enabled;
   vfo[VFO_A].rit=vfo[VFO_B].rit;
   receiver_vfo_changed(receiver[0]);
   if(!split) {
@@ -341,6 +350,7 @@ void vfo_a_swap_b() {
   int temp_filter;
   int temp_lo;
   int temp_offset;
+  int temp_rit_enabled;
   int temp_rit;
 
   temp_band=vfo[VFO_A].band;
@@ -350,6 +360,7 @@ void vfo_a_swap_b() {
   temp_filter=vfo[VFO_A].filter;
   temp_lo=vfo[VFO_A].lo;
   temp_offset=vfo[VFO_A].offset;
+  temp_rit_enabled=vfo[VFO_A].rit_enabled;
   temp_rit=vfo[VFO_A].rit;
 
   vfo[VFO_A].band=vfo[VFO_B].band;
@@ -359,6 +370,7 @@ void vfo_a_swap_b() {
   vfo[VFO_A].filter=vfo[VFO_B].filter;
   vfo[VFO_A].lo=vfo[VFO_B].lo;
   vfo[VFO_A].offset=vfo[VFO_B].offset;
+  vfo[VFO_A].rit_enabled=vfo[VFO_B].rit_enabled;
   vfo[VFO_A].rit=vfo[VFO_B].rit;
 
   vfo[VFO_B].band=temp_band;
@@ -368,6 +380,7 @@ void vfo_a_swap_b() {
   vfo[VFO_B].filter=temp_filter;
   vfo[VFO_B].lo=temp_lo;
   vfo[VFO_B].offset=temp_offset;
+  vfo[VFO_B].rit_enabled=temp_rit_enabled;
   vfo[VFO_B].rit=temp_rit;
 
   receiver_vfo_changed(receiver[0]);
@@ -624,7 +637,7 @@ int vfo_update(void *data) {
 
         cairo_set_font_size(cr, 12);
 
-        if(vfo[id].rit==0) {
+        if(vfo[id].rit_enabled==0) {
             cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
         } else {
             cairo_set_source_rgb(cr, 1, 1, 0);
diff --git a/vfo.h b/vfo.h
index dc13f0f53569ff2302e7434fde80db7f36107ed6..186297927918b1338b90af95757158378deefa49 100644 (file)
--- a/vfo.h
+++ b/vfo.h
@@ -36,6 +36,7 @@ struct _vfo {
 
   int ctun;
   long long ctun_frequency;
+  int rit_enabled;
   long long rit;
 
   long long lo;
diff --git a/vox.c b/vox.c
index cfeb6b7ed6bbee0200dfc89c2c0e01078a33b322..cfd78b5cc77c70f2f86e52c99853923c072949b5 100644 (file)
--- a/vox.c
+++ b/vox.c
@@ -29,7 +29,6 @@ static guint vox_timeout;
 static double peak=0.0;
 
 static int vox_timeout_cb(gpointer data) {
-fprintf(stderr,"vox timeout\n");
   setVox(0);
   g_idle_add(vfo_update,NULL);
   return FALSE;
@@ -59,7 +58,6 @@ void update_vox(TRANSMITTER *tx) {
 
 
   if(vox_enabled) {
-fprintf(stderr,"update_vox: id=%d peak=%f threshold=%f enabled=%d\n",tx->id,peak,vox_threshold,vox_enabled);
     if(peak>vox_threshold) {
       if(previous_vox) {
         g_source_remove(vox_timeout);
index 8c1a54c487b218c293ed58e83a057c90537a2975..27ac1131ef72408de784fa877bcc0451f5a6146b 100644 (file)
@@ -55,22 +55,23 @@ static int vox_timeout_cb(gpointer data) {
 
 static int level_update(void *data) {
   char title[16];
-fprintf(stderr,"vox peak=%f threshold=%f\n",peak,vox_threshold);
-  gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(level),peak);
-
-  if(peak>vox_threshold) {
-    // red indicator
-    led_set_color(1.0,0.0,0.0); // red
-    if(hold==0) {
-      hold=1;
+  if(run_level) {
+    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(level),peak);
+
+    if(peak>vox_threshold) {
+      // red indicator
+      led_set_color(1.0,0.0,0.0); // red
+      if(hold==0) {
+        hold=1;
+      } else {
+        g_source_remove(vox_timeout);
+      }
+      vox_timeout=g_timeout_add((int)vox_hang,vox_timeout_cb,NULL);
     } else {
-      g_source_remove(vox_timeout);
-    }
-    vox_timeout=g_timeout_add((int)vox_hang,vox_timeout_cb,NULL);
-  } else {
-    // green indicator
-    if(hold==0) {
-      led_set_color(0.0,1.0,0.0); // green
+      // green indicator
+      if(hold==0) {
+        led_set_color(0.0,1.0,0.0); // green
+      }
     }
   }
   return 0;
@@ -93,6 +94,13 @@ static gboolean close_cb (GtkWidget *widget, GdkEventButton *event, gpointer dat
   return TRUE;
 }
 
+static gboolean enable_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
+  vox_enabled=vox_enabled==1?0:1;
+  gtk_button_set_label(GTK_BUTTON(widget),vox_enabled==0?"VOX On":"VOX Off");
+  vfo_update(NULL);
+  return TRUE;
+}
+
 static void start_level_thread() {
   int rc;
   run_level=1;
@@ -147,6 +155,10 @@ void vox_menu(GtkWidget *parent) {
   led=create_led(10,10);
   gtk_grid_attach(GTK_GRID(grid),led,2,0,1,1);
  
+  GtkWidget *enable_b=gtk_button_new_with_label(vox_enabled==0?"VOX On":"VOX Off");
+  g_signal_connect (enable_b, "pressed", G_CALLBACK(enable_cb), NULL);
+  gtk_grid_attach(GTK_GRID(grid),enable_b,3,0,1,1);
+
   GtkWidget *level_label=gtk_label_new("Mic Level:");
   gtk_misc_set_alignment (GTK_MISC(level_label), 0, 0);
   gtk_widget_show(level_label);