]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
TX audio problem solved, and "setting out-of-band frequency" fixed.
authorc vw <dl1ycf@darc.de>
Thu, 19 Dec 2019 10:26:20 +0000 (11:26 +0100)
committerc vw <dl1ycf@darc.de>
Thu, 19 Dec 2019 10:26:20 +0000 (11:26 +0100)
audio.c
band.c
ext.c
freqent_menu.c
portaudio.c
rigctl.c
rigctl.h
store_menu.c
vfo_menu.c

diff --git a/audio.c b/audio.c
index 50ab75922a58cde2f28026daf8abf2418f07e8a6..30ad1731ca026716ce1f01d59589945ca111e123 100644 (file)
--- a/audio.c
+++ b/audio.c
@@ -75,8 +75,10 @@ AUDIO_DEVICE output_devices[MAX_AUDIO_DEVICES];
 
 //
 // Ring buffer for "local microphone" samples
+// NOTE: lead large buffer for some "loopback" devices which produce
+//       samples in large chunks if fed from digimode programs.
 //
-#define MICRINGLEN 2048
+#define MICRINGLEN 6000
 float  *mic_ring_buffer=NULL;
 int     mic_ring_read_pt=0;
 int     mic_ring_write_pt=0;
diff --git a/band.c b/band.c
index 194c9dfc0b6eed53dd3403327b81e0a2d3a4d3e3..7bb9c87305ce56826fc86b272772465cf0729b88 100644 (file)
--- a/band.c
+++ b/band.c
@@ -645,6 +645,7 @@ int get_band_from_frequency(long long f) {
       }
     }
   }
+  if (found < 0) found=bandGen;
 g_print("get_band_from_frequency: %lld id %d\n",f,found);
   return found;
 }
diff --git a/ext.c b/ext.c
index 15d9b6f414142512b3240222b7d94c75340074f7..0436735787a81dd4d243d5e73c8b5ff181e1e260 100644 (file)
--- a/ext.c
+++ b/ext.c
@@ -65,7 +65,6 @@ int ext_set_frequency(void *data) {
   long long freq = *(long long *)data;
   int id=active_receiver->id;
   int b = get_band_from_frequency(freq);
-  if (b < 0) b=bandGen;
   if (b != vfo[id].band) {
     vfo_band_changed(b);
   }
index 7a1fdc5fb7f4135c49bf42fab11d852a67cccd5c..b378b3afe8d3ac05bd8d1f26d5e31532569b4e03 100644 (file)
@@ -121,10 +121,6 @@ static gboolean freqent_select_cb (GtkWidget *widget, gpointer data) {
             sprintf(output, "<big>%lld</big>", f);
             gtk_label_set_markup (GTK_LABEL (label), output);
             int b=get_band_from_frequency(f);
-            if(b<0) {
-              fprintf(stderr,"get_band_from_frequency: failed for f=%lld\n",f);
-              b=bandGen;
-            }
             if(b!=band_get_current()) {
               BAND *band=band_set_current(b);
               set_mode(active_receiver,entry->mode);
index 98275695c85ad183b7b4c0d24af646502e6d5f97..c797fe11b29a3d03bfc610997ffadbe0714d5426 100644 (file)
@@ -51,8 +51,10 @@ int n_output_devices=0;
 
 //
 // Ring buffer for "local microphone" samples
+// NOTE: lead large buffer for some "loopback" devices which produce
+//       samples in large chunks if fed from digimode programs.
 //
-#define MICRINGLEN 2048
+#define MICRINGLEN 6000
 float  *mic_ring_buffer=NULL;
 int     mic_ring_read_pt=0;
 int     mic_ring_write_pt=0;
@@ -318,7 +320,7 @@ int audio_open_output(RECEIVER *rx)
   rx->local_audio_buffer=g_new(float,BUFFER_SIZE);
   rx->local_audio_buffer_offset=0;
   err = Pa_OpenStream(&(rx->playback_handle), NULL, &outputParameters, 48000.0, framesPerBuffer, paNoFlag, NULL, NULL);
-  if (err != paNoError) {
+  if (err != paNoError || rx->local_audio_buffer == NULL) {
     fprintf(stderr,"PORTAUDIO ERROR: out open stream: %s\n",Pa_GetErrorText(err));
     rx->playback_handle = NULL;
     if (rx->local_audio_buffer) g_free(rx->local_audio_buffer);
@@ -339,7 +341,7 @@ int audio_open_output(RECEIVER *rx)
   // Write one buffer to avoid under-flow errors
   // (this gives us 5 msec to pass before we have to call audio_write the first time)
   bzero(rx->local_audio_buffer, (size_t) BUFFER_SIZE*sizeof(float));
-  err=Pa_WriteStream(rx->playback_handle, rx->local_audio_buffer, (unsigned long) BUFFER_SIZE);
+  Pa_WriteStream(rx->playback_handle, rx->local_audio_buffer, (unsigned long) BUFFER_SIZE);
   g_mutex_unlock(&rx->local_audio_mutex);
   return 0;
 }
@@ -441,10 +443,10 @@ int audio_write (RECEIVER *rx, float left, float right)
   }
 
   g_mutex_lock(&rx->local_audio_mutex);
-  if (rx->playback_handle != NULL && rx->local_audio_buffer != NULL) {
+  if (rx->playback_handle != NULL && buffer != NULL) {
     buffer[rx->local_audio_buffer_offset++] = (left+right)*0.5;  //   mix to MONO   
     if (rx->local_audio_buffer_offset == BUFFER_SIZE) {
-      Pa_WriteStream(rx->playback_handle, rx->local_audio_buffer, (unsigned long) BUFFER_SIZE);
+      Pa_WriteStream(rx->playback_handle, buffer, (unsigned long) BUFFER_SIZE);
       rx->local_audio_buffer_offset=0;
       // do not check on errors, there will be underflows every now and then
     }
index 7ff0035d4337f19fe0e0e79e1358e2dc82eb14e9..a6e86ff290a85c324241ee371edf8beb8df04664 100644 (file)
--- a/rigctl.c
+++ b/rigctl.c
@@ -1750,11 +1750,6 @@ void parse_cmd ( char * cmd_input,int len,int client_sock) {
                                                *p= new_freqA;
                                                g_idle_add(ext_set_frequency,(gpointer)p);
                                                g_idle_add(ext_vfo_update,NULL);
-                                               //g_idle_add(set_band,(gpointer) p_int);
-                                               //long long * freq_p;
-                                               //*freq_p=new_freqA;
-                                               //setFrequency(new_freqA);
-                                               //g_idle_add(gui_vfo_move_to,(gpointer)freq_p);
                                                return;
                                             } else {
                                                if(len==2) {
@@ -4032,113 +4027,6 @@ void set_freqB(long long new_freqB) {
 }
 
 
-int set_band (gpointer data) {
-  
-  BANDSTACK *bandstack;
-  long long new_freq = *(long long *) data;
-  free(data);
-
-  #ifdef RIGCTL_DEBUG
-  fprintf(stderr,"RIGCTL set_band: New freq=%lld\n",new_freq);
-  #endif
-
-  // If CTUN=1 - can only change frequencies within the sample_rate range!
-  if((vfo[active_receiver->id].ctun == 1) &&
-        ((vfo[active_receiver->id].ctun_frequency + (active_receiver->sample_rate/2) < new_freq) ||
-         (vfo[active_receiver->id].ctun_frequency - (active_receiver->sample_rate/2) > new_freq))) {
-       fprintf(stderr,"RIGCTL: *** set_band: CTUN Bounce ***\n");
-       return 0;
-  }
-
-  int b = get_band_from_frequency (new_freq);
-
-  if(b == -1) { // Not in the ham bands!
-     // We're not going to update the bandstack - but rather just
-     // change the frequency and move on  
-        vfo[active_receiver->id].frequency=new_freq;
-        receiver_vfo_changed(receiver[active_receiver->id]);
-        g_idle_add(ext_vfo_update,NULL);
-        return 0;
-  }
-
-  #ifdef RIGCTL_DEBUG
-  fprintf(stderr,"RIGCTL set_band: New Band=%d\n",b);
-  #endif
-  int id=active_receiver->id;
-
-  //if(id==0) {
-  //  fprintf(stderr,"RIGCTL set_band: id=0\n");
-  //  vfo_save_bandstack();
-  //}
-  if(b==vfo[id].band) {
-    //fprintf(stderr,"RIGCTL set_band:b=cur_band \n");
-    // same band selected - step to the next band stack
-    bandstack=bandstack_get_bandstack(b);
-    vfo[id].bandstack++;
-    if(vfo[id].bandstack>=bandstack->entries) {
-      //fprintf(stderr,"VFO_BAND_CHANGED: bandstack set to 0\n");
-      vfo[id].bandstack=0;
-    }
-  } else {
-    // new band - get band stack entry
-    //fprintf(stderr,"VFO_BAND_CHANGED: new_band\n");
-    bandstack=bandstack_get_bandstack(b)      ;
-    vfo[id].bandstack=bandstack->current_entry;
-    //fprintf(stderr,"VFO_BAND_CHANGED: vfo[id].banstack=%d\n",vfo[id].bandstack);
-  }
-
-  BAND *band=band_get_band(b);
-  BANDSTACK_ENTRY *entry=&bandstack->entry[vfo[id].bandstack];
-  if(vfo[id].band != b) {
-     vfo[id].mode=entry->mode;
-  }
-  vfo[id].band=b;
-  entry->frequency = new_freq;
-  //vfo[id].frequency=entry->frequency;
-  if(vfo[id].ctun == 1) {
-      fprintf(stderr,"RIGCTL: set_band #### Change frequency");
-      if(new_freq > vfo[id].ctun_frequency) {
-         vfo[id].offset = new_freq - vfo[id].ctun_frequency; 
-      } else {
-         vfo[id].offset = vfo[id].ctun_frequency - new_freq; 
-      }
-      fprintf(stderr,"RIGCTL: set_band OFSET= %011lld\n",vfo[id].offset);
-  } else {
-      entry->frequency = new_freq;
-  }
-
-  //vfo[id].mode=entry->mode;
-  vfo[id].filter=entry->filter;
-  vfo[id].lo=band->frequencyLO;
-
-  switch(id) {
-    case 0:
-      bandstack->current_entry=vfo[id].bandstack;
-      receiver_vfo_changed(receiver[id]);
-      BAND *band=band_get_band(vfo[id].band);
-      set_alex_rx_antenna(band->alexRxAntenna);
-      set_alex_tx_antenna(band->alexTxAntenna);
-      set_alex_attenuation(band->alexAttenuation);
-      receiver_vfo_changed(receiver[0]);
-      break;
-   case 1:
-      if(receivers==2) {
-        receiver_vfo_changed(receiver[1]);
-      }
-      break;
-  }
-
-  if(split) {
-    tx_set_mode(transmitter,vfo[VFO_B].mode);
-  } else {
-    tx_set_mode(transmitter,vfo[VFO_A].mode);
-  }
-  calcDriveLevel();
-  //calcTuneDriveLevel();
-  g_idle_add(ext_vfo_update,NULL);
-
-  return 0;
-}
 int set_alc(gpointer data) {
     int * lcl_ptr = (int *) data;
     alc = *lcl_ptr;
index da827ebdde7a8cc36ab119e03cc8e41f0a6711f6..45a8ad084c0d67adcdd9c9f26e7f8b787efc0b0a 100644 (file)
--- a/rigctl.h
+++ b/rigctl.h
@@ -10,7 +10,6 @@ int   rigctlGetMode();
 int   lookup_band(int);
 char * rigctlGetFilter();
 void set_freqB(long long);
-int set_band(void *);
 extern int cat_control;
 int set_alc(gpointer);
 extern int rigctl_busy;
index e8d1c4ebc9d60719556e0272d22c80be256f28f9..29f8808802de14322fded814435b095228fcb63b 100644 (file)
@@ -98,7 +98,6 @@ static gboolean recall_select_cb (GtkWidget *widget, gpointer data) {
     fprintf(stderr,"recall_select_cb: mode=%d\n",mem[index].mode);
     fprintf(stderr,"recall_select_cb: filter=%d\n",mem[index].filter);
     
-    //set_band(mem[index].frequency,index);
     vfo[active_receiver->id].frequency = new_freq;
     vfo[active_receiver->id].band = get_band_from_frequency(new_freq);
     vfo[active_receiver->id].mode = mem[index].mode;
index 3f5da0dc92f7198ff17b2322a26167930c96f5a2..8744a27f6ef9ac8b7a9577bece536add10f2181f 100644 (file)
@@ -86,7 +86,7 @@ static gboolean freqent_select_cb (GtkWidget *widget, gpointer data) {
   double  mult;
   long long f;
   static int set = 0;
-  int id, b;
+  long long *fp;
 
   // Instead of messing with LOCALE settings,
   // we print a "0.0" and look what the decimal
@@ -152,20 +152,9 @@ static gboolean freqent_select_cb (GtkWidget *widget, gpointer data) {
       f = ((long long)(atof(buffer)*mult)+5)/10;
       sprintf(output, "<big>%lld</big>", f);
       gtk_label_set_markup (GTK_LABEL (label), output);
-      id=active_receiver->id;
-      b = get_band_from_frequency(f);
-      if (b < 0) {
-       b=bandGen;
-      }
-      //
-      // If new frequency is outside of current band,
-      // behave as if the user had chosen the new band
-      // via the menu prior to changing the frequency
-      //
-      if (b != vfo[id].band) {
-        g_idle_add(ext_vfo_band_changed, GINT_TO_POINTER(b));
-      }
-      setFrequency(f);
+      fp = malloc(sizeof(long long));
+      *fp = f;
+      g_idle_add(ext_set_frequency, fp);
       g_idle_add(ext_vfo_update,NULL);
       set = 1;
     }