It turns out that even with -Wall you don't get -Wshadow unless you ask for
authorbruceperens <bruceperens@01035d8c-6547-0410-b346-abe4f91aad63>
Fri, 21 Mar 2014 23:18:02 +0000 (23:18 +0000)
committerbruceperens <bruceperens@01035d8c-6547-0410-b346-abe4f91aad63>
Fri, 21 Mar 2014 23:18:02 +0000 (23:18 +0000)
it explicitly. I turned it on (after encountering a variable shadowing bug,
of course) and fixed all of the shadowing issues.

git-svn-id: https://svn.code.sf.net/p/freetel/code@1470 01035d8c-6547-0410-b346-abe4f91aad63

freedv-server/parameters/c-flags.txt
freedv-server/parameters/cxx-flags.txt
freedv-server/source/audio_device.cpp
freedv-server/source/audio_input.cpp
freedv-server/source/audio_output.cpp
freedv-server/source/blank_panel.cpp
freedv-server/source/codec.cpp
freedv-server/source/codec_noop.cpp
freedv-server/source/platform/linux/alsa.cpp
freedv-server/source/run.cpp

index 4ee6b833c4b67092fd3a890cb21430f471798771..dd832ff54cbe3bd76cdf94f8fb5f90ec371bf045 100644 (file)
@@ -1 +1 @@
--g -pedantic -Wall -Wextra
+-g -pedantic -Wall -Wextra -Wshadow -DDEBUG
index 0891ade7222a891ba2c0f1e0a3d66f1f9a955d11..7bc2a5ff72445dac90b6f87c9a5441b2a1d32816 100644 (file)
@@ -1 +1 @@
--std=c++11 -g -pedantic -Wall -Wextra -DDEBUG
+-std=c++11 -g -pedantic -Wall -Wextra -Wshadow -DDEBUG
index ba8ad7a698fd5b84ceef8e0fffccaec8ba63e324..d02affa92b52ce0a2d7c2eb0d31e4da85e30be36 100644 (file)
@@ -9,8 +9,8 @@
 #include <stdexcept>
 
 namespace FreeDV {
-  AudioDevice::AudioDevice(const char * name, const char * parameters)
-  : IODevice(name, parameters), master_amplitude(1.0)
+  AudioDevice::AudioDevice(const char * _name, const char * _parameters)
+  : IODevice(_name, _parameters), master_amplitude(1.0)
   {
   }
 
index 4c768679aebc33d5fc92cf3bc9e5cc98a5b4c1f3..16d35f67207c676ae54b463f877bbc20c62ab669 100644 (file)
@@ -7,8 +7,8 @@
 #include "drivers.h"
 
 namespace FreeDV {
-  AudioInput::AudioInput(const char * name, const char * parameters)
-  : AudioDevice(name, parameters)
+  AudioInput::AudioInput(const char * _name, const char * _parameters)
+  : AudioDevice(_name, _parameters)
   {
   }
 
index 3012f4832ebdc7d222a855563b2acd43b9a654fc..c3ab890ed4e5dc57f22ac5d216f57ee716391f46 100644 (file)
@@ -7,8 +7,8 @@
 #include "drivers.h"
 
 namespace FreeDV {
-  AudioOutput::AudioOutput(const char * name, const char * parameters)
-  : AudioDevice(name, parameters)
+  AudioOutput::AudioOutput(const char * _name, const char * _parameters)
+  : AudioDevice(_name, _parameters)
   {
   }
 
index 9e685673cb4030219be5a87744efdb2a83a3e039..f131d1bf4fced7376b4bdddfce23557c00008370 100644 (file)
@@ -29,8 +29,8 @@ namespace FreeDV {
     std::size_t        ready();
   };
 
-  BlankPanel::BlankPanel(const char * parameter, Interfaces * interfaces)
-  : UserInterface("blank-panel", parameter, interfaces)
+  BlankPanel::BlankPanel(const char * _parameter, Interfaces * _interfaces)
+  : UserInterface("blank-panel", _parameter, _interfaces)
   {
   }
 
index 6e8fe53d9313e6064146f2d5c7d813af09db3e19..955c5fa22d39ec09b35892052f7d907a026a1ede 100644 (file)
@@ -7,8 +7,8 @@
 #include "drivers.h"
 
 namespace FreeDV {
-  Codec::Codec(const char * name, const char * parameters)
-  : Base(name, parameters)
+  Codec::Codec(const char * _name, const char * _parameters)
+  : Base(_name, _parameters)
   {
   }
 
index b3f0b4846c3778171374a778a3213fafe5e46468..f898b82a99ecb8e5aa718700fd508ff5a4a898fc 100644 (file)
@@ -57,8 +57,8 @@ namespace FreeDV {
                        min_frame_duration() const;
   };
 
-  CodecNoOp::CodecNoOp(const char * parameters)
-  : Codec("no-op", parameters)
+  CodecNoOp::CodecNoOp(const char * _parameters)
+  : Codec("no-op", _parameters)
   {
   }
 
index d94153014b5e7e4182594e01ae5a419e27ad5a3b..e0c66ebe1d2e36501410e0ca81f2f07e46e2587c 100644 (file)
@@ -74,7 +74,7 @@ namespace FreeDV {
           pcm_error = snd_pcm_open(&pcm_handle, device_name, mode, 0);
         }
           
-        const int error = ctl_error ? ctl_error : pcm_error;
+        const int card_error = ctl_error ? ctl_error : pcm_error;
     
         i = strstr(longname, ", full speed");
         if ( i )
@@ -85,7 +85,7 @@ namespace FreeDV {
           *i = '\0';
 
         stream << "\"alsa:" << longname << '"';
-        error_message(stream, error);
+        error_message(stream, card_error);
         stream << std::endl;
   
         if ( ctl_error == 0 ) {
index 0337213697c221b335ffb2b4bcc84763d2fffacc..622af8b894e595deb9fca6945b7850ff162285c9 100644 (file)
@@ -180,43 +180,71 @@ namespace FreeDV {
        std::cerr << "Receiver I/O error: " << strerror(errno) << std::endl;
     }
     
+    std::size_t bytes_demodulated = 0;
     std::size_t        samples_to_demodulate = in_fifo.get_available() / 2;
     if ( samples_to_demodulate > 0 ) {
       const std::size_t        bytes_to_demodulate = codec_fifo.put_space();
 
-      std::size_t result = i->modem->demodulate16(
-                           (const std::int16_t *)in_fifo.get(
-                            samples_to_demodulate * 2),
-                           codec_fifo.put(bytes_to_demodulate),
-                           bytes_to_demodulate,
-                           &samples_to_demodulate);
+      bytes_demodulated = i->modem->demodulate16(
+       (const std::int16_t *)in_fifo.get(
+       samples_to_demodulate * 2),
+       codec_fifo.put(bytes_to_demodulate),
+       bytes_to_demodulate,
+       &samples_to_demodulate);
 
 
-      if ( samples_to_demodulate > 0 )
-        in_fifo.get_done(samples_to_demodulate * 2);
-
-      if ( result > 0 )
-        codec_fifo.put_done(result);
+      if ( bytes_demodulated > 0 )
+        codec_fifo.put_done(bytes_demodulated);
     }
 
-    std::size_t bytes_to_decode = codec_fifo.get_available();
-    if ( bytes_to_decode > 0 ) {
-
-      const std::size_t samples_to_decode = out_fifo.put_space() / 2;
-
-      const std::size_t result = i->codec->decode16(
-                                 codec_fifo.get(bytes_to_decode),
-                                 (std::int16_t *)out_fifo.put(
-                                   samples_to_decode * 2),
-                                 &bytes_to_decode,
-                                 samples_to_decode);
-
-      if ( bytes_to_decode > 0 )
-        codec_fifo.get_done(bytes_to_decode);
-
-      if ( result > 0 )
-        out_fifo.put_done(result * 2);
+    if ( bytes_demodulated > 0 ) {
+      std::size_t bytes_to_decode = codec_fifo.get_available();
+      if ( bytes_to_decode > 0 ) {
+  
+        const std::size_t samples_to_decode = out_fifo.put_space() / 2;
+  
+        const std::size_t result = i->codec->decode16(
+                                 codec_fifo.get(bytes_to_decode),
+                                 (std::int16_t *)out_fifo.put(
+                                     samples_to_decode * 2),
+                                 &bytes_to_decode,
+                                 samples_to_decode);
+  
+        if ( bytes_to_decode > 0 )
+          codec_fifo.get_done(bytes_to_decode);
+  
+        if ( result > 0 )
+          out_fifo.put_done(result * 2);
+      }
+    }
+    else {
+      std::size_t length = samples_to_demodulate * 2;
+      // Did not demodulate any data. Push it to the loudspeaker.
+      //
+      // For this to work, we need the modem to:
+      // * Consume input samples demodulating no data.
+      // or
+      // * Consume input samples demodulating them all as data.
+      // and
+      // * Never consume input samples demodulating less than the complete
+      //   amount consumed as data.
+      // So, the modem should return before it either starts demodulating data
+      // or stops doing so.
+      // 
+      // The problem is that we wish to continue to send to the loudspeaker
+      // the correct number of samples per second regardless of what is
+      // happening. And we want the time sequence of non-demodulated analog
+      // signal (or noise) and demodulated digital data to be in the correct
+      // order.
+      //
+      // FIX: Squelch here.
+      const uint8_t * in = in_fifo.get(length);
+      uint8_t * out = out_fifo.put(length);
+      memcpy(out, in, length);
+      out_fifo.put_done(length);
     }
+    if ( samples_to_demodulate > 0 )
+      in_fifo.get_done(samples_to_demodulate * 2);
 
     // Drain any data that the loudspeaker can take.
     const std::size_t  out_samples = min(
@@ -244,8 +272,8 @@ namespace FreeDV {
     for ( ; ; ) {
       receive();
 
-      for ( int i = 0; i < poll_fd_count; i++ )
-        poll_fds[i].revents = 0;
+      for ( int j = 0; j < poll_fd_count; j++ )
+        poll_fds[j].revents = 0;
 
       const int result = IODevice::poll(
        poll_fds,