]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
old protocol source changes for local microphone
authorJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Sat, 10 Sep 2016 07:00:54 +0000 (07:00 +0000)
committerJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Sat, 10 Sep 2016 07:00:54 +0000 (07:00 +0000)
audio.c
old_protocol.c
old_protocol.h

diff --git a/audio.c b/audio.c
index d45f5e170045ac6aa46df7495922e2de05b3cf99..87ec58bc7f056fefaf0f750b45c1d6c661904f7f 100644 (file)
--- a/audio.c
+++ b/audio.c
@@ -315,6 +315,7 @@ static void *mic_read_thread(void *arg) {
       // process the mic input
       switch(protocol) {
         case ORIGINAL_PROTOCOL:
+          old_protocol_process_local_mic(mic_buffer,1);
           break;
         case NEW_PROTOCOL:
           new_protocol_process_local_mic(mic_buffer,1);
index c974822de60439642602fd58d346b468c0fecfcc..b46a1b67eda054294d36e20808d98b347fe4b924 100644 (file)
@@ -239,6 +239,13 @@ void old_protocol_init(int rx,int pixels) {
     }
   }
 
+  if(local_microphone) {
+    if(audio_open_input()!=0) {
+      fprintf(stderr,"audio_open_input failed\n");
+      local_microphone=0;
+    }
+  }
+
   receiver=rx;
   display_width=pixels;
  
@@ -442,7 +449,7 @@ static void process_ozy_input_buffer(char  *buffer) {
       mic_sample_double=(double)mic_sample/32767.0; // 16 bit sample 2^16-1
 
       // add to buffer
-      if(isTransmitting()) {
+      if(isTransmitting() && !local_microphone) {
 #ifdef FREEDV
         if(mode==modeFREEDV && !tune) {
           if(freedv_samples==0) {
@@ -694,6 +701,79 @@ static void full_tx_buffer() {
 
 }
 
+void *old_protocol_process_local_mic(unsigned char *buffer,int le) {
+  int b;
+  int leftmicsample;
+  int rightmicsample;
+  double leftmicsampledouble;
+  double rightmicsampledouble;
+
+  if(isTransmitting()) {
+    b=0;
+    int i,j,s;
+    for(i=0;i<720;i++) {
+      if(le) {
+        leftmicsample  = (int)((unsigned char)buffer[b++] & 0xFF);
+        leftmicsample  |= (int)((signed char) buffer[b++]) << 8;
+        //rightmicsample  = (int)((unsigned char)buffer[b++] & 0xFF);
+        //rightmicsample  |= (int)((signed char) buffer[b++]) << 8;
+        rightmicsample=leftmicsample;
+      } else {
+        leftmicsample  = (int)((signed char) buffer[b++]) << 8;
+        leftmicsample  |= (int)((unsigned char)buffer[b++] & 0xFF);
+        rightmicsample  = (int)((signed char) buffer[b++]) << 8;
+        rightmicsample  |= (int)((unsigned char)buffer[b++] & 0xFF);
+      }
+#ifdef FREEDV
+      if(mode==modeFREEDV && !tune) {
+        if(freedv_samples==0) { // 48K to 8K
+          int modem_samples=mod_sample_freedv(leftmicsample);
+          if(modem_samples!=0) {
+            for(s=0;s<modem_samples;s++) {
+              for(j=0;j<freedv_divisor;j++) {  // 8K to 48K
+                leftmicsample=mod_out[s];
+                leftmicsampledouble=(double)leftmicsample/32767.0; // 16 bit sample 2^16-1
+                micinputbuffer[samples*2]=leftmicsampledouble*mic_gain;
+                micinputbuffer[(samples*2)+1]=leftmicsampledouble*mic_gain;
+                iqinputbuffer[samples*2]=0.0;
+                iqinputbuffer[(samples*2)+1]=0.0;
+                samples++;
+                if(samples==buffer_size) {
+                  full_tx_buffer();
+                  samples=0;
+                }
+              }
+            }
+          }
+         }
+         freedv_samples++;
+         if(freedv_samples==freedv_divisor) {
+           freedv_samples=0;
+         }
+      } else {
+#endif
+         if(mode==modeCWL || mode==modeCWU || tune) {
+            micinputbuffer[samples*2]=0.0;
+            micinputbuffer[(samples*2)+1]=0.0;
+          } else {
+            micinputbuffer[samples*2]=leftmicsampledouble*mic_gain;
+            micinputbuffer[(samples*2)+1]=leftmicsampledouble*mic_gain;
+          }
+          iqinputbuffer[samples*2]=0.0;
+          iqinputbuffer[(samples*2)+1]=0.0;
+          samples++;
+          if(samples==buffer_size) {
+            full_tx_buffer();
+            samples=0;
+          }
+#ifdef FREEDV
+       }
+#endif
+
+    }
+  }
+}
+
 /*
 static void process_bandscope_buffer(char  *buffer) {
 }
index e77e7d65ec327f2395f27fec87ee5193d9aa8abd..25872f654f9f8fe88c9e710da777ce6f1239f8b1 100644 (file)
@@ -25,5 +25,6 @@ void old_protocol_stop();
 void old_protocol_init(int rx,int pixels);
 void old_protocol_new_sample_rate(int rate);
 void schedule_frequency_changed();
+void *old_protocol_process_local_mic(unsigned char *buffer,int le);
 
 #endif