| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
|
| |
|
|
|
|
| |
create a new derived class for pmt dicts so they can be distinguished without complicated try/catch logic, updated QA with a few additional checks. also added an is_pdu() method which returns true if the pmt is a pair of a dict-type PMT and a uniform-vector type, otherwise false
|
|
|
|
| |
this is more portable since endian.h is not available on all platforms, and may have some implementation inconsistencies
|
|
|
|
|
|
|
| |
No reason to assume only `general_work`-containing blocks would want to
log.
This enables us especially to log in `basic_block` itself.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This removes the volk/ submodule pointer and updates the CMake to detect
VOLK like any other dependency. The VOLK_MIN_VERSION CMake variable is
added (and set to 2.1.0).
The GR_VOLK_LIB variable is replaced with Volk::volk everywhere.
The VOLK_INSTALL_LIBRARY_DIR and VOLK_INSTALL_INCLUDE_DIR variables
weren't used and were removed.
CMake will now fail if VOLK cannot be detected. Therefore, ENABLE_VOLK
was also removed as a variable; all in-tree components may assume the
existence of VOLK.
|
| |
|
|
|
|
|
| |
Remove deprecation warning and prefer using std::{lcm,gcd} to Boost.
Fixes #2712.
|
|
|
|
| |
This is the last boost::lexical_cast in gnuradio.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
boost::lexical_cast seems not not be consistent given different
inputs. E.g. std::complex is stringified like iostream, but float and
double avoid scientific notation… mostly. See below for comparisons
between before and after (`printf` is what this commit switches to).
I don't think the differences matter.
```
int main() {
constexpr float low_float = 200000000.2;
constexpr float high_float = 20000000000.2;
constexpr float low_double = 200000000.2;
constexpr float mid_double = 20000000000.2;
constexpr float high_double = 200000000000000000.2;
const std::complex<float> c(1.3,low_float);
const std::complex<double> d(1.3,low_double);
const std::complex<double> d2(1.3,high_double);
const std::vector<float> fs = {low_float, high_float};
const std::vector<double> ds = {low_double, mid_double, high_double};
std::cout << "# complex\n";
std::cout << "iostream: " << c << std::endl;
std::cout << "lexical_cast: " << boost::lexical_cast<std::string>(c) << std::endl;
std::cout << std::endl;
for (int i = 0; i < fs.size(); i++) {
std::cout << "# float " << i << std::endl;
std::cout << "iostream: " << fs[i] << std::endl;
std::cout << "to_string: " << std::to_string(fs[i]) << std::endl;
printf("printf %.f\n", std::numeric_limits<float>::digits10, fs[i]);
std::cout << "lexical: " << boost::lexical_cast<std::string, float>(fs[i]) << std::endl;
std::cout << std::endl;
}
for (int i = 0; i < ds.size(); i++) {
std::cout << "# double " << i << std::endl;
std::cout << "iostream: " << ds[i] << std::endl;
std::cout << "to_string: " << std::to_string(ds[i]) << std::endl;
printf("printf %.*g\n", std::numeric_limits<double>::digits10, ds[i]);
std::cout << "lexical: " << boost::lexical_cast<std::string, double>(ds[i]) << std::endl;
std::cout << std::endl;
}
}
```
Output (Debian amd64):
```
iostream: (1.3,2e+08)
lexical_cast: (1.3,2e+08)
iostream: 2e+08
to_string: 200000000.000000
printf 200000000
lexical: 200000000
iostream: 2e+10
to_string: 20000000000.000000
printf 20000000000
lexical: 2e+10
iostream: 2e+08
to_string: 200000000.000000
printf 200000000
lexical: 200000000
iostream: 2e+10
to_string: 20000000000.000000
printf 20000000000
lexical: 20000000000
iostream: 2e+17
to_string: 199999996861349888.000000
printf 1.9999999686135e+17
lexical: 1.9999999686134989e+17
```
|
| |
|
|
|
|
|
|
| |
The remaining ones:
* `pmt_pool.cc`, which is a memory allocator so that makes sense
* the tricky and aptly named `sptr_magic.cc`.
|
|
|
|
|
| |
This exposed some missing forwarding of RNG seed from one object to
another, also fixed in this commit.
|
|
|
|
|
|
|
|
|
|
|
| |
This is what gnuradio currently documents seeding will do, but it's
not what C++ defaults to.
See C++11 26.5.3.2, paragraph 3. Default for mersenne twister is
constexpr 5489.
Or easier, the bottom of
https://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Most of this code is automated code changes:
```
set -e
SUB="s/dummy/dummy/"
for i in shared_ptr make_shared dynamic_pointer_cast weak_ptr enable_shared_from_this get_deleter; do
SUB="$SUB;s/boost::$i/std::$i/g"
done
SUB="$SUB;s^#include <boost/shared_ptr.hpp>^#include <memory>^g"
SUB="$SUB;s^namespace boost^namespace std^g"
find . \( -name "*.cc" -o -name "*.h" -o -name "*.i" -o -name "*.cxx" -o -name "*.py" \) -print0 | xargs -0 sed -i "$SUB"
```
Only one manual change. In `./gr-fec/lib/fec_mtrx_impl.cc`, add
`#include <algorithm>`.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This update is focused on improving the throughput of the Costas
loop, however some changes are more global performance enhancements
as this PR has evolved. Updates include an ENABLE_NATIVE added to
CMake, which is off by default but enables native compiling (including
FMA support) if desired; sincos was inlined in sincos.h and sincos.cc
was removed from the appropriate CMake to improve sincos speed, some
constants were added to math.h, inlined functions in costas loop and
nco.h, used switch instead of function pointer (much faster), and
used fast complex multiply to get around all the range checking in
the standard complex.h complex multiply function on all builds.
|
|
|
|
|
|
|
| |
Python has a RuntimeError that's thrown during the pmt to_python function.
Instead of throwing this error, SWIG has been updated to throw a TypeError.
This allows us to keep the same behavior whereby we iterate over PMT types
until the proper conversion is found
|
| |
|
| |
|
|
|
|
|
| |
This fixes every leftover file in the GNU Radio source tree to match our
clang-format definition.
|
|
|
|
|
|
|
|
|
|
|
| |
The buffer object keeps track of the max reader delay
(d_max_reader_delay) so that it won't prune tags until after the delay
has passed. However, the d_max_reader_delay value was being set to 0
with every buffer_reader instantiation for a given buffer, essentially
ignoring delays that are set for prior readers.
This patch removes the spurious setting of d_max_reader_delay to 0
whenever a new buffer_reader is instantiated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, stream tags would be lost (not propagated downstream) when a
block has a tag delay set and it is called with a number of input
samples that is less than the delay. Since this happens depending on the
scheduler and the number of samples provided, tags might mostly work or
seemingly randomly disappear. The problem occurs because a wrong
correction is included for underflows in unsigned arithmetic that limits
the tags propagated to a smaller sample window than desired. Correctly
detecting the underflow and setting the value to 0 rather than abs_start
or abs_end fixes the problem.
For a real example, let the d_attr_delay=209, abs_start=0, and
abs_end=200 with a tag at input sample 0. Then tags from min(abs_start,
abs_start - d_attr_delay) == 0 to min(abs_end, abs_end - d_attr_delay)
== 200 are iterated through, including the tag at 0 (item_time == 209),
but it is not propagated to the output yet since item_time >= abs_end
(209 >= 200). On the next call to the block, with abs_start=200 and
abs_end=400, the tag at input sample 0 is ignored because min(abs_start,
abs_start - d_attr_delay) == 200 and the iterator skips it. The correct
calculation for the lower bound of the tag iterator would result in 0
and find the tag since (abs_start - d_attr_delay) == -9 -> 0 when
constrained to unsigned values. With the proper lower bound (and upper
bound corrected as well), the tag at 0 is found with an item_time == 209
which falls between abs_start and abs_end and is propagated to output
sample 209.
|
|
|
|
|
|
|
| |
When looking for the config file, allow the env variable
GR_PREFS_PATH to be searched so that multiple installations
of GR each with its own prefs can be used, similar to what
is currently done in GRC
|
|
|
|
|
|
|
|
|
| |
This restores past behavior where the scheduler catches exceptions
raised in block threads, allowing flowgraphs to continue running after
the failure of an individual block. It also adds optional new behavior,
selected by setting catch_exceptions=False to the top block, which causes
exceptions to not be caught. In this mode of operation, a std::terminate
handler can be installed to print a stack trace before the flowgraph exits.
|
|
|
|
|
|
| |
This also includes removing the new/delete for the local objects. C++
doesn't need you to manually new/delete objects with definite
lifetime...
|
|
|
|
|
|
|
| |
gr.logger.add_file_appender offered use of the
truncation flag but did not use it in the creation
of log4cpp::FileAppender. Added the bool append as
an argument.
|
|
|
|
| |
Fixes commit 48d535e9d9d95524b2c8ed35b44c7eda541aea68
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We are writting cpp for these operations we should be using std:string
and boost:format. This also cleans up some compiler warnings about
possible string truncation.
Signed-off-by: Brennan Ashton <bashton@brennanashton.com>
Also, removing the `HAVE_SNPRINT` check around the now snprintf-free
handling
Signed-off-by: Marcus Müller <mmueller@gnuradio.org>
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is C++11: you can convert
std::vector<complextype> vec;
vec.push_back(complextype(foo, bar, baz));
by
std::vector<complextype> vec;
vec.emplace_back(foo, bar, baz);
which saves one unnecessary copy.
This mostly happened in rpc code.
The automated clang-tidy check failed miserably, so most of this was
done by hand.
|
|
|
|
|
| |
Exceptions should be thrown by value and caught by reference.
Closes #2708
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
clang-format: ordering includes in gnuradio-runtime
clang-format: ordering includes in gr-filter
clang-format: ordering includes in gr-fft
clang-format: ordering includes in gr-audio
clang-format: ordering includes in gr-analog
clang-format: ordering includes in gr-fec
clang-format: ordering includes in gr-wavelet
clang-format: ordering includes in gr-zeromq
clang-format: ordering includes in gr-vocoder
clang-format: ordering includes in gr-video-sdl
clang-format: ordering includes in gr-trellis
clang-format: ordering includes in gr-blocks
clang-format: ordering includes in gr-digital
clang-format: ordering includes in gr-uhd
clang-format: ordering includes in gr-dtv
clang-format: ordering includes in gr-channels
clang-format: ordering includes in gr-qtgui
clang_format.py: re-enable include reordering
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Found via `codespell -q 3 -L ans,sinc,hist,ist,ith,uint,fo -S ./volk`
Fix typos in gnuradio-runtime/
Fix typos in gr-digital/
Fix typos in gr-qtgui/
Fix typos in gr-channels/
Fix typos in grc/
Fix typos gr-filter/
Fix typos in gr-uhd/
Fix typos in gr-blocks/
Fix typos in gr-fec/
|
|
|
|
|
|
| |
Before, this lead to systems where due to missing system paths, a user
couldn't even use their own config file, because GNU Radio didn't even
look for it.
|
| |
|
| |
|
|
|
|
|
|
|
| |
There was an #ifdef missing in lib/thread/thread.cc and in gr-vocoder
the include directive for gsm.h contains a gsm/ prefix.
The cmake FindGSM.cmake looks for **/include/ and **/include/gsm
anyways.
|
|
|
|
|
| |
Previously only the Target.cmake was used. This lead to thrift not being
added to the list of dependencies to call find_dependency() on.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This includes using target based setting of includes
and link libraries. This will transitively add the includes
and linking flags to dependent targets.
This is still a work in progress since only the dynamic
libraries have been touched and not all of include_directories
directives are gone yet.
cmake: remove GR_INCLUDE_SUBDIRECTORY macro
Previously this macro was used to inject subdirectories in the
current CMake namespace. This is generally undesired and pollutes the
current context.
previously GNU Radio CMake had a non-default option ENABLE_STATIC_LIBS
to build both, shared libraries and static libraries.
This seems to be a construction taken over from autotools and serves
no purpuose in CMake and complicates the library building.
cmake: remove GR_LIBTOOL and la generation support
This looks like it was primarily used to support projects using
autotools, but comments state that the generated .la files aren't
compatible with autotools anyway.
cmake: Bump required CMake version to 3.8
UseSWIG cmake uses syntax which requires at least CMake 3.8 and is non-trivial
to change
|
|
|
|
| |
serialization
|