From: bruceperens Date: Fri, 21 Mar 2014 23:18:02 +0000 (+0000) Subject: It turns out that even with -Wall you don't get -Wshadow unless you ask for X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=f8170f75ff36411d358d587a015b9bc904b35ea2;p=freetel-svn-tracking.git It turns out that even with -Wall you don't get -Wshadow unless you ask for 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 --- diff --git a/freedv-server/parameters/c-flags.txt b/freedv-server/parameters/c-flags.txt index 4ee6b833..dd832ff5 100644 --- a/freedv-server/parameters/c-flags.txt +++ b/freedv-server/parameters/c-flags.txt @@ -1 +1 @@ --g -pedantic -Wall -Wextra +-g -pedantic -Wall -Wextra -Wshadow -DDEBUG diff --git a/freedv-server/parameters/cxx-flags.txt b/freedv-server/parameters/cxx-flags.txt index 0891ade7..7bc2a5ff 100644 --- a/freedv-server/parameters/cxx-flags.txt +++ b/freedv-server/parameters/cxx-flags.txt @@ -1 +1 @@ --std=c++11 -g -pedantic -Wall -Wextra -DDEBUG +-std=c++11 -g -pedantic -Wall -Wextra -Wshadow -DDEBUG diff --git a/freedv-server/source/audio_device.cpp b/freedv-server/source/audio_device.cpp index ba8ad7a6..d02affa9 100644 --- a/freedv-server/source/audio_device.cpp +++ b/freedv-server/source/audio_device.cpp @@ -9,8 +9,8 @@ #include 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) { } diff --git a/freedv-server/source/audio_input.cpp b/freedv-server/source/audio_input.cpp index 4c768679..16d35f67 100644 --- a/freedv-server/source/audio_input.cpp +++ b/freedv-server/source/audio_input.cpp @@ -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) { } diff --git a/freedv-server/source/audio_output.cpp b/freedv-server/source/audio_output.cpp index 3012f483..c3ab890e 100644 --- a/freedv-server/source/audio_output.cpp +++ b/freedv-server/source/audio_output.cpp @@ -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) { } diff --git a/freedv-server/source/blank_panel.cpp b/freedv-server/source/blank_panel.cpp index 9e685673..f131d1bf 100644 --- a/freedv-server/source/blank_panel.cpp +++ b/freedv-server/source/blank_panel.cpp @@ -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) { } diff --git a/freedv-server/source/codec.cpp b/freedv-server/source/codec.cpp index 6e8fe53d..955c5fa2 100644 --- a/freedv-server/source/codec.cpp +++ b/freedv-server/source/codec.cpp @@ -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) { } diff --git a/freedv-server/source/codec_noop.cpp b/freedv-server/source/codec_noop.cpp index b3f0b484..f898b82a 100644 --- a/freedv-server/source/codec_noop.cpp +++ b/freedv-server/source/codec_noop.cpp @@ -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) { } diff --git a/freedv-server/source/platform/linux/alsa.cpp b/freedv-server/source/platform/linux/alsa.cpp index d9415301..e0c66ebe 100644 --- a/freedv-server/source/platform/linux/alsa.cpp +++ b/freedv-server/source/platform/linux/alsa.cpp @@ -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 ) { diff --git a/freedv-server/source/run.cpp b/freedv-server/source/run.cpp index 03372136..622af8b8 100644 --- a/freedv-server/source/run.cpp +++ b/freedv-server/source/run.cpp @@ -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,