]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
updated microphone gain settings.
authorJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Tue, 29 Nov 2016 14:20:37 +0000 (14:20 +0000)
committerJohn Melton - G0ORX/N6LYT <john.d.melton@googlemail.com>
Tue, 29 Nov 2016 14:20:37 +0000 (14:20 +0000)
audio.c
audio.h
new_menu.c
new_protocol.c
old_protocol.c
pihpsdr
rigctl.c

diff --git a/audio.c b/audio.c
index 443ad108bd873cb5cdea9988b7f131b81496663b..86df47ab7e0027cf2e33aa9839f9b75d2f21a9df 100644 (file)
--- a/audio.c
+++ b/audio.c
@@ -327,7 +327,7 @@ fprintf(stderr,"mic_read_thread: mic_buffer_size=%d\n",mic_buffer_size);
                   snd_strerror (rc));
           running=FALSE;
         } else {
-          fprintf(stderr,"mic_read_thread: read %d",rc);
+          fprintf(stderr,"mic_read_thread: read %d\n",rc);
         }
       }
     } else {
@@ -408,3 +408,54 @@ fprintf(stderr,"output_device: %s\n",device_id);
 
   }
 }
+/*
+int audio_get_mic_level() {
+  fprintf(stderr,"audio_get_mic_level\n");
+  if(local_microphone==0) {
+    fprintf(stderr,"local microphone not enabled\n");
+    return -1;
+  }
+  if(n_selected_input_device<0 || n_selected_input_device>=n_input_devices) {
+    fprintf(stderr,"no imput device selected\n");
+    return -1;
+  }
+
+  long db;
+
+  int i;
+  char hw[16];
+  char *selected=input_devices[n_selected_input_device];
+  fprintf(stderr,"audio_get_mic_level: selected=%d:%s\n",n_selected_input_device,selected);
+
+  i=0;
+  while(selected[i]!=' ') {
+    hw[i]=selected[i];
+    i++;
+  }
+  hw[i]='\0';
+  fprintf(stderr,"audio_get_mic_level: hw=%s\n",hw);
+
+  snd_mixer_t* handle;
+  snd_mixer_selem_id_t* sid;
+  const char *selem_name="Mic";
+
+  snd_mixer_open(&handle, 0);
+  snd_mixer_attach(handle, hw);
+  snd_mixer_selem_register(handle, NULL, NULL);
+  snd_mixer_load(handle);
+
+  snd_mixer_selem_id_alloca(&sid);
+  snd_mixer_selem_id_set_index(sid, 0);
+  snd_mixer_selem_id_set_name(sid, selem_name);
+  snd_mixer_elem_t* elem = snd_mixer_find_selem(handle, sid);
+
+  //snd_mixer_selem_get_capture_volume_range(elem, &min, &max);
+  snd_mixer_selem_get_capture_dB(elem,0,&db);
+
+  fprintf(stderr,"audio_get_mic_level: %ld dB\n",db);
+  snd_mixer_close(handle);
+
+
+  return 0;
+}
+*/
diff --git a/audio.h b/audio.h
index ceec2a0d763bff663c4e1733d9396d6f9372bde6..8ff8fe643919b7623be8e6dcd1929933346604e8 100644 (file)
--- a/audio.h
+++ b/audio.h
@@ -34,5 +34,7 @@ extern void audio_close_output();
 extern void audio_close_input();
 extern int audio_write(short left_sample,short right_sample);
 extern void audio_get_cards();
-
+/*
+extern int audio_get_mic_level();
+*/
 #endif
index 98408ac09b534a4bc66e03cc0077c3ff52836580..defa9c4de0a8b0a2a229f1d0714ba7f96beb5f7f 100644 (file)
@@ -22,6 +22,7 @@
 #include <stdio.h>
 #include <string.h>
 
+#include "audio.h"
 #include "new_menu.h"
 #include "exit_menu.h"
 #include "general_menu.h"
@@ -140,6 +141,12 @@ static gboolean equalizer_cb (GtkWidget *widget, GdkEventButton *event, gpointer
   return TRUE;
 }
 
+static gboolean test_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) {
+fprintf(stderr,"test_cb\n");
+  audio_get_mic_level();
+  return TRUE;
+}
+
 static gboolean new_menu_pressed_event_cb (GtkWidget *widget,
                GdkEventButton *event,
                gpointer        data)
@@ -227,6 +234,12 @@ static gboolean new_menu_pressed_event_cb (GtkWidget *widget,
     g_signal_connect (equalizer_b, "button-press-event", G_CALLBACK(equalizer_cb), NULL);
     gtk_grid_attach(GTK_GRID(grid),equalizer_b,0,3,1,1);
 
+/*
+    GtkWidget *test_b=gtk_button_new_with_label("Test");
+    g_signal_connect (test_b, "button-press-event", G_CALLBACK(test_cb), NULL);
+    gtk_grid_attach(GTK_GRID(grid),test_b,1,3,1,1);
+*/
+
     gtk_container_add(GTK_CONTAINER(content),grid);
 
     gtk_widget_show_all(dialog);
index 13a6bf745b8ecdfaad6a8c9617bf9d6d2208b3ef..94797450cc47e060d9a6840574af252932fe2275 100644 (file)
@@ -888,16 +888,18 @@ static void process_mic_data(unsigned char *buffer) {
     int b;
     int micsample;
     double micsampledouble;
+    double gain=pow(10, mic_gain/20.0);
 
     sequence=((buffer[0]&0xFF)<<24)+((buffer[1]&0xFF)<<16)+((buffer[2]&0xFF)<<8)+(buffer[3]&0xFF);
 //    if(isTransmitting()) {
         b=4;
         int i,j,s;
         for(i=0;i<MIC_SAMPLES;i++) {
+            micsample  = (int)((signed char) buffer[b++]) << 8;
+            micsample  |= (int)((unsigned char)buffer[b++] & 0xFF);
+            micsampledouble = (1.0 / 2147483648.0) * (double)(micsample<<16);
 #ifdef FREEDV
             if(mode==modeFREEDV && isTransmitting()) {
-                micsample  = (int)((signed char) buffer[b++]) << 8;
-                micsample  |= (int)((unsigned char)buffer[b++] & 0xFF);
                 if(freedv_samples==0) { // 48K to 8K
                     int sample=(int)((double)micsample*pow(10.0, mic_gain / 20.0));
                     int modem_samples=mod_sample_freedv(sample);
@@ -905,7 +907,7 @@ static void process_mic_data(unsigned char *buffer) {
                       for(s=0;s<modem_samples;s++) {
                         for(j=0;j<freedv_resample;j++) {  // 8K to 48K
                           micsample=mod_out[s];
-                          micsampledouble=(double)micsample/32767.0; // 16 bit sample 2^16-1
+                          micsampledouble = (1.0 / 2147483648.0) * (double)(micsample<<16);
                           micinputbuffer[micsamples*2]=micsampledouble;
                           micinputbuffer[(micsamples*2)+1]=micsampledouble;
                           micsamples++;
@@ -923,8 +925,6 @@ static void process_mic_data(unsigned char *buffer) {
                }
             } else {
 #endif
-               //micsampledouble = (double)micsample/32767.0; // 16 bit sample
-               micsampledouble = (1.0 / 2147483648.0) * (double)(buffer[b++] << 24 | buffer[b++] << 16);
                if(mode==modeCWL || mode==modeCWU || tune || !isTransmitting()) {
                    micinputbuffer[micsamples*2]=0.0;
                    micinputbuffer[(micsamples*2)+1]=0.0;
index 590c031b68fcda6833e86ffe455b90bc899325f1..07f9ac01bfd4e4fb2916b9aeed0af09b52d2c23f 100644 (file)
@@ -500,8 +500,8 @@ static void process_ozy_input_buffer(char  *buffer) {
             micinputbuffer[samples*2]=0.0;
             micinputbuffer[(samples*2)+1]=0.0;
           } else {
-            micinputbuffer[samples*2]=mic_sample_double*gain;
-            micinputbuffer[(samples*2)+1]=mic_sample_double*gain;
+            micinputbuffer[samples*2]=mic_sample_double;
+            micinputbuffer[(samples*2)+1]=mic_sample_double;
           }
           iqinputbuffer[0][samples*2]=0.0;
           iqinputbuffer[0][(samples*2)+1]=0.0;
@@ -693,35 +693,33 @@ 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;
+  int micsample;
+  double micsampledouble;
+  double gain=pow(10.0, mic_gain / 20.0);
 
   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=leftmicsample;
+        micsample  = (int)((unsigned char)buffer[b++] & 0xFF);
+        micsample  |= (int)((signed char) buffer[b++]) << 8;
       } else {
-        leftmicsample  = (int)((signed char) buffer[b++]) << 8;
-        leftmicsample  |= (int)((unsigned char)buffer[b++] & 0xFF);
-        rightmicsample=leftmicsample;
+        micsample  = (int)((signed char) buffer[b++]) << 8;
+        micsample  |= (int)((unsigned char)buffer[b++] & 0xFF);
       }
+      micsampledouble=(1.0 / 2147483648.0) * (double)(micsample<<16);
 #ifdef FREEDV
       if(mode==modeFREEDV && !tune) {
         if(freedv_samples==0) { // 48K to 8K
-          int modem_samples=mod_sample_freedv(leftmicsample);
+          int modem_samples=mod_sample_freedv(micsample*gain);
           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;
-                micinputbuffer[(samples*2)+1]=leftmicsampledouble;
+                micsample=mod_out[s];
+                micsampledouble = (1.0 / 2147483648.0) * (double)(micsample<<16);
+                micinputbuffer[samples*2]=micsampledouble;
+                micinputbuffer[(samples*2)+1]=micsampledouble;
                 iqinputbuffer[0][samples*2]=0.0;
                 iqinputbuffer[0][(samples*2)+1]=0.0;
                 samples++;
@@ -739,13 +737,12 @@ void old_protocol_process_local_mic(unsigned char *buffer,int le) {
          }
       } else {
 #endif
-         leftmicsampledouble=(double)leftmicsample/32767.0; // 16 bit sample 2^16-1
          if(mode==modeCWL || mode==modeCWU || tune) {
            micinputbuffer[samples*2]=0.0;
            micinputbuffer[(samples*2)+1]=0.0;
          } else {
-           micinputbuffer[samples*2]=leftmicsampledouble;
-           micinputbuffer[(samples*2)+1]=leftmicsampledouble;
+           micinputbuffer[samples*2]=micsampledouble*gain;
+           micinputbuffer[(samples*2)+1]=micsampledouble*gain;
          }
          iqinputbuffer[0][samples*2]=0.0;
          iqinputbuffer[0][(samples*2)+1]=0.0;
diff --git a/pihpsdr b/pihpsdr
index 6899f72bcc1908bd23d44745df56530ff8313d3f..264cc7c97a510c0dfcfcefbba16a9b9b5efe642a 100755 (executable)
Binary files a/pihpsdr and b/pihpsdr differ
index 43c2ffb56ef0dc1eceeca2e0de16c8a1b1c413ea..23be96061249a4513abea7772edf130d87625ccb 100644 (file)
--- a/rigctl.c
+++ b/rigctl.c
@@ -1014,9 +1014,9 @@ int init_server () {
     socket_desc = socket(AF_INET , SOCK_STREAM , 0);
     if (socket_desc == -1)
     {
-        fprintf(stderr,"RIGCTL: Could not create socket");
+        fprintf(stderr,"RIGCTL: Could not create socket\n");
     }
-    fprintf(stderr, "RIGCTL: Socket created");
+    fprintf(stderr, "RIGCTL: Socket created\n");
      
     //Prepare the sockaddr_in structure
     server.sin_family = AF_INET;
@@ -1027,23 +1027,23 @@ int init_server () {
     if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
     {
         //print the error message
-        fprintf(stderr,"RIGCLT: bind failed. Error");
+        fprintf(stderr,"RIGCLT: bind failed. Error\n");
         return 1;
     }
-    fprintf(stderr,"RIGCTL: bind done");
+    fprintf(stderr,"RIGCTL: bind done\n");
      
     //Listen
     listen(socket_desc , 3);
      
     //Accept and incoming connection
-    fprintf(stderr,"RIGCTL: Waiting for incoming connections...");
+    fprintf(stderr,"RIGCTL: Waiting for incoming connections...\n");
     c = sizeof(struct sockaddr_in);
      
     //accept connection from an incoming client
     client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c);
     if (client_sock < 0)
     {
-        fprintf(stderr,"RIGCTL: Accept failed");
+        fprintf(stderr,"RIGCTL: Accept failed\n");
         return 1;
     }
     fprintf(stderr,"RIGCTL: Connection accepted\n");