Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gnuradio for openSUSE:Factory 
checked in at 2021-10-12 21:49:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnuradio (Old)
 and      /work/SRC/openSUSE:Factory/.gnuradio.new.2443 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gnuradio"

Tue Oct 12 21:49:22 2021 rev:46 rq:923435 version:3.8.4.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/gnuradio/gnuradio.changes        2021-09-01 
21:37:27.464896877 +0200
+++ /work/SRC/openSUSE:Factory/.gnuradio.new.2443/gnuradio.changes      
2021-10-12 21:50:38.947983022 +0200
@@ -1,0 +2,28 @@
+Tue Oct  5 23:10:14 UTC 2021 - Wojciech Kazubski <[email protected]>
+
+- Update to version 3.8.4.0
+  * Changed
+    GRC
+    + Fix drag and drop issue with Quartz
+    + Fix desync when dragging block
+    + Update disabled blocks if they depend on others
+    + Allow short and byte as valid types in an enum
+    + Fix evaluation of interdependent variables
+    modtool
+    + Set VERSION_PATH to 0 in new modules, instead of using GIT rev
+    + For Python3, return correct exeption ModuleNotFoundError
+      instead of ImportError
+    gr-blocks
+    + trix Interleaver block
+    gr-channels
+    + Fix "hide" expressions in yml files
+    gr-digital
+    + Remove unused msg output port from Chunks To Symbols block yml
+    gr-fft
+    + Add "shift" parameter to Log Power FFT    
+    gr-qtgui
+    + Fix: tags on the last sample were not shown
+    gr-video-sdl
+    + Fix: U and V channels were reversed on sink blocks
+
+-------------------------------------------------------------------

Old:
----
  gnuradio-3.8.3.1.tar.gz

New:
----
  gnuradio-3.8.4.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gnuradio.spec ++++++
--- /var/tmp/diff_new_pack.FwM7F4/_old  2021-10-12 21:50:39.635984006 +0200
+++ /var/tmp/diff_new_pack.FwM7F4/_new  2021-10-12 21:50:39.639984012 +0200
@@ -16,14 +16,14 @@
 #
 
 
-%define sover  3_8_3
+%define sover  3_8_4
 %ifarch %{arm}
 # boo#1182440
 %define _lto_cflags %{nil}
 %endif
 %bcond_without docs
 Name:           gnuradio
-Version:        3.8.3.1
+Version:        3.8.4.0
 Release:        0
 Summary:        GNU software radio
 License:        GPL-3.0-or-later

++++++ gnuradio-3.8.3.1.tar.gz -> gnuradio-3.8.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/CHANGELOG.md 
new/gnuradio-3.8.4.0/CHANGELOG.md
--- old/gnuradio-3.8.3.1/CHANGELOG.md   2021-06-10 22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/CHANGELOG.md   2021-09-30 16:10:55.000000000 +0200
@@ -7,6 +7,67 @@
 
 Older Logs can be found in `docs/RELEASE-NOTES-*`.
 
+## [3.8.4.0] - 2021-09-30
+
+API is compatible with C++ code written against previous v3.8 releases.
+
+ABI (link time) compatibility is not guaranteed. Out-of-tree C++ code
+linked to previous v3.8 releases should be rebuilt against this version.
+
+### Changed
+
+#### GRC
+
+- Fix drag and drop issue with Quartz
+- Fix desync when dragging block
+- Update disabled blocks if they depend on others
+- Allow short and byte as valid types in an enum
+- Fix evaluation of interdependent variables
+
+#### modtool
+
+- Set VERSION_PATH to 0 in new modules, instead of using GIT rev
+- For Python3, return correct exeption ModuleNotFoundError instead of 
ImportError
+
+#### gr-blocks
+
+- New Matrix Interleaver block
+
+#### gr-channels
+
+- Fix "hide" expressions in yml files
+
+#### gr-digital
+
+- Remove unused msg output port from Chunks To Symbols block yml
+
+#### gr-fft
+
+- Add "shift" parameter to Log Power FFT
+
+#### gr-qtgui
+
+- Fix: tags on the last sample were not shown
+
+#### gr-video-sdl
+
+- Fix: U and V channels were reversed on sink blocks
+
+At LEAST the following authors contributed to this release.
+
+- Adrien Michel <[email protected]>
+- David Winter <[email protected]>
+- Emmanuel Blot <[email protected]>
+- H??kon V??gsether <[email protected]>
+- Jared Dulmage <[email protected]>
+- Jason Uher <[email protected]>
+- Jeff Long <[email protected]>
+- Marc L <[email protected]>
+- Marcus M??ller <[email protected]>
+- Martin Braun <[email protected]>
+- Ron Economos <[email protected]>
+- Volker Schroer
+
 ## [3.8.3.1] - 2021-06-10
 
 This is a PATCH level revision. The API is compatible with C++ code written 
for previous v3.8 releases. ABI (shared library signature) is intended to be 
compatible, so code linked against v3.8.3.0 should not require recompilation.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/CMakeLists.txt 
new/gnuradio-3.8.4.0/CMakeLists.txt
--- old/gnuradio-3.8.3.1/CMakeLists.txt 2021-06-10 22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/CMakeLists.txt 2021-09-30 16:10:55.000000000 +0200
@@ -52,8 +52,8 @@
 # Set the version information here
 SET(VERSION_MAJOR 3)
 SET(VERSION_API   8)
-SET(VERSION_ABI   3)
-SET(VERSION_PATCH 1)
+SET(VERSION_ABI   4)
+SET(VERSION_PATCH 0)
 include(GrVersion) #setup version info
 
 # Minimum dependency versions for central dependencies:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/CODE_OF_CONDUCT.md 
new/gnuradio-3.8.4.0/CODE_OF_CONDUCT.md
--- old/gnuradio-3.8.3.1/CODE_OF_CONDUCT.md     2021-06-10 22:31:35.000000000 
+0200
+++ new/gnuradio-3.8.4.0/CODE_OF_CONDUCT.md     2021-09-30 16:10:55.000000000 
+0200
@@ -1,80 +1,134 @@
-# Contributor Covenant Code of Conduct
+# GNU Radio Code of Conduct
 
-This Code of Conduct is also available [here on the GNU Radio
-wiki](https://wiki.gnuradio.org/index.php/Code_of_Conduct).
+NOTE: This is a copy of the GNU Radio Code of Conduct, it might be out of 
date, the latest version can be found [on the gnuradio/gr-governance 
repository](https://github.com/gnuradio/gr-governance/blob/main/CODE_OF_CONDUCT.md).
 
 ## Our Pledge
 
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to making participation in our project and
-our community a harassment-free experience for everyone, regardless of age, 
body
-size, disability, ethnicity, sex characteristics, gender identity and 
expression,
-level of experience, education, socio-economic status, nationality, personal
-appearance, race, religion, or sexual identity and orientation.
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, caste, color, religion, or sexual 
identity
+and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
 
 ## Our Standards
 
-Examples of behavior that contributes to creating a positive environment
-include:
+Examples of behavior that contributes to a positive environment for our
+community include:
 
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
-
-Examples of unacceptable behavior by participants include:
-
-* The use of sexualized language or imagery and unwelcome sexual attention or
-  advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+  and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the
+  overall community
+
+Examples of unacceptable behavior include:
+
+* The use of sexualized language or imagery, and sexual attention or
+  advances of any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
 * Public or private harassment
-* Publishing others' private information, such as a physical or electronic
-  address, without explicit permission
+* Publishing others' private information, such as a physical or email
+  address, without their explicit permission
 * Other conduct which could reasonably be considered inappropriate in a
   professional setting
 
-## Our Responsibilities
+## Enforcement Responsibilities
 
-Project maintainers are responsible for clarifying the standards of acceptable
-behavior and are expected to take appropriate and fair corrective action in
-response to any instances of unacceptable behavior.
-
-Project maintainers have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct, or to ban temporarily or
-permanently any contributor for other behaviors that they deem inappropriate,
-threatening, offensive, or harmful.
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for 
moderation
+decisions when appropriate.
 
 ## Scope
 
-This Code of Conduct applies within all project spaces, and it also applies 
when
-an individual is representing the project or its community in public spaces.
-Examples of representing a project or community include using an official
-project e-mail address, posting via an official social media account, or acting
-as an appointed representative at an online or offline event. Representation of
-a project may be further defined and clarified by project maintainers.
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail 
address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
 
 ## Enforcement
 
 Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team at [email protected]. All
-complaints will be reviewed and investigated and will result in a response that
-is deemed necessary and appropriate to the circumstances. The project team is
-obligated to maintain confidentiality with regard to the reporter of an 
incident.
-Further details of specific enforcement policies may be posted separately.
-
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by other
-members of the project's leadership.
+reported by contacting the project team at [email protected].
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series
+of actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or
+permanent ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior,  harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within
+the community.
 
 ## Attribution
 
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], 
version 1.4,
-available at 
https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.0, available at
+[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
+
+Community Impact Guidelines were inspired by 
+[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
+
+For answers to common questions about this code of conduct, see the FAQ at
+[https://www.contributor-covenant.org/faq][FAQ]. Translations are available 
+at [https://www.contributor-covenant.org/translations][translations].
 
 [homepage]: https://www.contributor-covenant.org
-
-For answers to common questions about this code of conduct, see
-https://www.contributor-covenant.org/faq
+[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
+[Mozilla CoC]: https://github.com/mozilla/diversity
+[FAQ]: https://www.contributor-covenant.org/faq
+[translations]: https://www.contributor-covenant.org/translations
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-analog/grc/analog_const_source_x.block.yml 
new/gnuradio-3.8.4.0/gr-analog/grc/analog_const_source_x.block.yml
--- old/gnuradio-3.8.3.1/gr-analog/grc/analog_const_source_x.block.yml  
2021-06-10 22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-analog/grc/analog_const_source_x.block.yml  
2021-09-30 16:10:55.000000000 +0200
@@ -8,7 +8,7 @@
     dtype: enum
     options: [complex, float, int, short, byte]
     option_attributes:
-        const_type: [complex, real, int, short, gr.sizeof_char]
+        const_type: [complex, real, int, short, byte]
         fcn: [c, f, i, s, b]
     hide: part
 -   id: const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-analog/grc/analog_probe_avg_mag_sqrd_x.block.yml 
new/gnuradio-3.8.4.0/gr-analog/grc/analog_probe_avg_mag_sqrd_x.block.yml
--- old/gnuradio-3.8.3.1/gr-analog/grc/analog_probe_avg_mag_sqrd_x.block.yml    
2021-06-10 22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-analog/grc/analog_probe_avg_mag_sqrd_x.block.yml    
2021-09-30 16:10:55.000000000 +0200
@@ -9,7 +9,7 @@
     options: [c, f, cf]
     option_labels: [Complex, Float, Complex->Float]
     option_attributes:
-        hide: [all, all, '']
+        hide: [all, all, none]
         input: [complex, float, complex]
         optional: ['1', '1', '0']
     hide: part
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/gr-audio/lib/jack/jack_sink.cc 
new/gnuradio-3.8.4.0/gr-audio/lib/jack/jack_sink.cc
--- old/gnuradio-3.8.3.1/gr-audio/lib/jack/jack_sink.cc 2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-audio/lib/jack/jack_sink.cc 2021-09-30 
16:10:55.000000000 +0200
@@ -161,7 +161,7 @@
 
     // Create ports and ringbuffers
     for (int i = 0; i < d_portcount; i++) {
-        std::string portname("out" + boost::to_string(i));
+        std::string portname("out" + std::to_string(i));
 
         d_jack_output_port[i] = jack_port_register(d_jack_client,
                                                    portname.c_str(),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/gr-audio/lib/jack/jack_source.cc 
new/gnuradio-3.8.4.0/gr-audio/lib/jack/jack_source.cc
--- old/gnuradio-3.8.3.1/gr-audio/lib/jack/jack_source.cc       2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-audio/lib/jack/jack_source.cc       2021-09-30 
16:10:55.000000000 +0200
@@ -161,7 +161,7 @@
 
     // Create ports and ringbuffers
     for (int i = 0; i < d_portcount; i++) {
-        std::string portname("in" + boost::to_string(i));
+        std::string portname("in" + std::to_string(i));
 
         d_jack_input_port[i] = jack_port_register(
             d_jack_client, portname.c_str(), JACK_DEFAULT_AUDIO_TYPE, 
JackPortIsInput, 0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/gr-blocks/examples/CMakeLists.txt 
new/gnuradio-3.8.4.0/gr-blocks/examples/CMakeLists.txt
--- old/gnuradio-3.8.3.1/gr-blocks/examples/CMakeLists.txt      2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-blocks/examples/CMakeLists.txt      2021-09-30 
16:10:55.000000000 +0200
@@ -19,6 +19,7 @@
 
 install(
   FILES
+  matrix_interleaver.grc
   matrix_multiplexer.grc
   peak_detector2.grc
   py_snippets_demo.grc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-blocks/examples/matrix_interleaver.grc 
new/gnuradio-3.8.4.0/gr-blocks/examples/matrix_interleaver.grc
--- old/gnuradio-3.8.3.1/gr-blocks/examples/matrix_interleaver.grc      
1970-01-01 01:00:00.000000000 +0100
+++ new/gnuradio-3.8.4.0/gr-blocks/examples/matrix_interleaver.grc      
2021-09-30 16:10:55.000000000 +0200
@@ -0,0 +1,341 @@
+options:
+  parameters:
+    author: Jared Dulmage
+    category: '[GRC Hier Blocks]'
+    cmake_opt: ''
+    comment: ''
+    copyright: 2020 Caliola Engineering, LLC
+    description: Matrix interleaver, inputs along rows, outputs along columns
+    gen_cmake: 'On'
+    gen_linking: dynamic
+    generate_options: qt_gui
+    hier_block_src_path: '.:'
+    id: matrix_interleaver_example
+    max_nouts: '0'
+    output_language: python
+    placement: (0,0)
+    qt_qss_theme: ''
+    realtime_scheduling: ''
+    run: 'True'
+    run_command: '{python} -u {filename}'
+    run_options: prompt
+    sizing_mode: fixed
+    thread_safe_setters: ''
+    title: Block Interleaver Test
+    window_size: ''
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [8, 8]
+    rotation: 0
+    state: enabled
+
+blocks:
+- name: cols
+  id: variable
+  parameters:
+    comment: ''
+    value: '8'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [8, 215]
+    rotation: 0
+    state: enabled
+- name: rows
+  id: variable
+  parameters:
+    comment: ''
+    value: '4'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [8, 152]
+    rotation: 0
+    state: enabled
+- name: samp_rate
+  id: variable
+  parameters:
+    comment: ''
+    value: '32000'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [184, 12]
+    rotation: 0
+    state: enabled
+- name: blocks_add_const_vxx_0
+  id: blocks_add_const_vxx
+  parameters:
+    affinity: ''
+    alias: ''
+    comment: Offset for visual
+    const: '1'
+    maxoutbuf: '0'
+    minoutbuf: '0'
+    type: float
+    vlen: '1'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [640, 215]
+    rotation: 0
+    state: true
+- name: blocks_add_const_vxx_0_0
+  id: blocks_add_const_vxx
+  parameters:
+    affinity: ''
+    alias: ''
+    comment: Offset for visual
+    const: '1'
+    maxoutbuf: '0'
+    minoutbuf: '0'
+    type: float
+    vlen: '1'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [640, 318]
+    rotation: 0
+    state: true
+- name: blocks_matrix_interleaver_0
+  id: blocks_matrix_interleaver
+  parameters:
+    affinity: ''
+    alias: ''
+    cols: cols
+    comment: ''
+    deint: 'False'
+    maxoutbuf: '0'
+    minoutbuf: '0'
+    rows: rows
+    type: float
+    vlen: '1'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [447, 199]
+    rotation: 0
+    state: true
+- name: blocks_matrix_interleaver_0_0
+  id: blocks_matrix_interleaver
+  parameters:
+    affinity: ''
+    alias: ''
+    cols: cols
+    comment: ''
+    deint: 'True'
+    maxoutbuf: '0'
+    minoutbuf: '0'
+    rows: rows
+    type: float
+    vlen: '1'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [448, 302]
+    rotation: 0
+    state: true
+- name: blocks_stream_to_vector_0
+  id: blocks_stream_to_vector
+  parameters:
+    affinity: ''
+    alias: ''
+    comment: ''
+    maxoutbuf: '0'
+    minoutbuf: '0'
+    num_items: rows * cols
+    type: float
+    vlen: '1'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [824, 219]
+    rotation: 0
+    state: true
+- name: blocks_stream_to_vector_0_0
+  id: blocks_stream_to_vector
+  parameters:
+    affinity: ''
+    alias: ''
+    comment: ''
+    maxoutbuf: '0'
+    minoutbuf: '0'
+    num_items: rows * cols
+    type: float
+    vlen: '1'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [824, 152]
+    rotation: 0
+    state: true
+- name: blocks_stream_to_vector_0_1
+  id: blocks_stream_to_vector
+  parameters:
+    affinity: ''
+    alias: ''
+    comment: ''
+    maxoutbuf: '0'
+    minoutbuf: '0'
+    num_items: rows * cols
+    type: float
+    vlen: '1'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [824, 283]
+    rotation: 0
+    state: true
+- name: blocks_throttle_0
+  id: blocks_throttle
+  parameters:
+    affinity: ''
+    alias: ''
+    comment: ''
+    ignoretag: 'True'
+    maxoutbuf: '0'
+    minoutbuf: '0'
+    samples_per_second: samp_rate
+    type: float
+    vlen: '1'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [452, 148]
+    rotation: 0
+    state: true
+- name: blocks_vector_source_x_0
+  id: blocks_vector_source_x
+  parameters:
+    affinity: ''
+    alias: ''
+    comment: ''
+    maxoutbuf: '0'
+    minoutbuf: '0'
+    repeat: 'True'
+    tags: '[]'
+    type: float
+    vector: np.kron(np.ones(cols), np.arange(rows))
+    vlen: '1'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [115, 199]
+    rotation: 0
+    state: true
+- name: import_0
+  id: import
+  parameters:
+    alias: ''
+    comment: ''
+    imports: import numpy as np
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [300, 15]
+    rotation: 0
+    state: true
+- name: qtgui_vector_sink_f_0
+  id: qtgui_vector_sink_f
+  parameters:
+    affinity: ''
+    alias: ''
+    alpha1: '0.4'
+    alpha10: '1.0'
+    alpha2: '0.4'
+    alpha3: '0.4'
+    alpha4: '1.0'
+    alpha5: '1.0'
+    alpha6: '1.0'
+    alpha7: '1.0'
+    alpha8: '1.0'
+    alpha9: '1.0'
+    autoscale: 'False'
+    average: '1.0'
+    color1: '"blue"'
+    color10: '"dark blue"'
+    color2: '"red"'
+    color3: '"green"'
+    color4: '"black"'
+    color5: '"cyan"'
+    color6: '"magenta"'
+    color7: '"yellow"'
+    color8: '"dark red"'
+    color9: '"dark green"'
+    comment: ''
+    grid: 'True'
+    gui_hint: ''
+    label1: Input
+    label10: ''
+    label2: Interleaved
+    label3: Deinterleaved
+    label4: ''
+    label5: ''
+    label6: ''
+    label7: ''
+    label8: ''
+    label9: ''
+    maxoutbuf: '0'
+    minoutbuf: '0'
+    name: '""'
+    nconnections: '3'
+    ref_level: '0'
+    showports: 'False'
+    update_time: '0.10'
+    vlen: rows * cols
+    width1: '1'
+    width10: '1'
+    width2: '1'
+    width3: '1'
+    width4: '1'
+    width5: '1'
+    width6: '1'
+    width7: '1'
+    width8: '1'
+    width9: '1'
+    x_axis_label: index
+    x_start: '0'
+    x_step: '1.0'
+    x_units: '""'
+    y_axis_label: value
+    y_units: '""'
+    ymax: max(rows, cols) + 1
+    ymin: '-1'
+  states:
+    bus_sink: false
+    bus_source: false
+    bus_structure: null
+    coordinate: [1040, 159]
+    rotation: 0
+    state: true
+
+connections:
+- [blocks_add_const_vxx_0, '0', blocks_matrix_interleaver_0_0, '0']
+- [blocks_add_const_vxx_0, '0', blocks_stream_to_vector_0, '0']
+- [blocks_add_const_vxx_0_0, '0', blocks_stream_to_vector_0_1, '0']
+- [blocks_matrix_interleaver_0, '0', blocks_add_const_vxx_0, '0']
+- [blocks_matrix_interleaver_0_0, '0', blocks_add_const_vxx_0_0, '0']
+- [blocks_stream_to_vector_0, '0', qtgui_vector_sink_f_0, '1']
+- [blocks_stream_to_vector_0_0, '0', qtgui_vector_sink_f_0, '0']
+- [blocks_stream_to_vector_0_1, '0', qtgui_vector_sink_f_0, '2']
+- [blocks_throttle_0, '0', blocks_stream_to_vector_0_0, '0']
+- [blocks_vector_source_x_0, '0', blocks_matrix_interleaver_0, '0']
+- [blocks_vector_source_x_0, '0', blocks_throttle_0, '0']
+
+metadata:
+  file_format: 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/gr-blocks/grc/blocks.tree.yml 
new/gnuradio-3.8.4.0/gr-blocks/grc/blocks.tree.yml
--- old/gnuradio-3.8.3.1/gr-blocks/grc/blocks.tree.yml  2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-blocks/grc/blocks.tree.yml  2021-09-30 
16:10:55.000000000 +0200
@@ -125,6 +125,7 @@
   - blocks_stream_to_vector_decimator
   - blocks_vector_to_stream
   - blocks_vector_to_streams
+  - blocks_matrix_interleaver
   - blocks_patterned_interleaver
   - blocks_endian_swap
   - blocks_vector_insert_x
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-blocks/grc/blocks_matrix_interleaver.block.yml 
new/gnuradio-3.8.4.0/gr-blocks/grc/blocks_matrix_interleaver.block.yml
--- old/gnuradio-3.8.3.1/gr-blocks/grc/blocks_matrix_interleaver.block.yml      
1970-01-01 01:00:00.000000000 +0100
+++ new/gnuradio-3.8.4.0/gr-blocks/grc/blocks_matrix_interleaver.block.yml      
2021-09-30 16:10:55.000000000 +0200
@@ -0,0 +1,63 @@
+id: blocks_matrix_interleaver
+label: Matrix Interleaver
+flags: [ python ]
+
+templates:
+    imports: from gnuradio import blocks
+    make: |-
+        blocks.matrix_interleaver(
+            itemsize=${ type.size } * ${ vlen }, rows=${ rows }, cols=${ cols 
}, deint=${ deint }
+        )
+    callbacks:
+    - set_rowsandcols(${ rows }, ${ cols }, ${ deint })
+
+parameters:
+-   id: type
+    label: IO Type
+    dtype: enum
+    options: [complex, float, int, short, byte]
+    option_attributes:
+        size: [gr.sizeof_gr_complex, gr.sizeof_float, gr.sizeof_int, 
gr.sizeof_short, gr.sizeof_char]
+    hide: part
+-   id: vlen
+    label: Vec Length
+    dtype: int
+    default: '1'
+    hide: ${ 'part' if vlen == 1 else 'none' }
+-   id: rows
+    label: Rows
+    dtype: int
+    default: '1'
+    hide: none
+-   id: cols
+    label: Columns
+    dtype: int
+    default: '1'
+    hide: none
+-   id: deint
+    label: Deinterleave
+    dtype: bool
+    options: [True, False]
+    default: False
+    hide: none
+
+inputs:
+-   label: in
+    dtype: ${ type }
+    vlen: ${ vlen }
+
+outputs:
+-   label: out
+    dtype: ${ type }
+    vlen: ${ vlen }
+
+asserts:
+- ${ vlen > 0 }
+
+documentation: 'Jared Dulmage
+
+    Block interleaver reads inputs into rows and writes outputs by cols
+
+    python/matrix_interleaver.py'
+
+file_format: 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-blocks/python/blocks/CMakeLists.txt 
new/gnuradio-3.8.4.0/gr-blocks/python/blocks/CMakeLists.txt
--- old/gnuradio-3.8.3.1/gr-blocks/python/blocks/CMakeLists.txt 2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-blocks/python/blocks/CMakeLists.txt 2021-09-30 
16:10:55.000000000 +0200
@@ -23,6 +23,7 @@
 GR_PYTHON_INSTALL(
     FILES
     __init__.py
+    matrix_interleaver.py
     parse_file_metadata.py
     stream_to_vector_decimator.py
     DESTINATION ${GR_PYTHON_DIR}/gnuradio/blocks
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/gr-blocks/python/blocks/__init__.py 
new/gnuradio-3.8.4.0/gr-blocks/python/blocks/__init__.py
--- old/gnuradio-3.8.3.1/gr-blocks/python/blocks/__init__.py    2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-blocks/python/blocks/__init__.py    2021-09-30 
16:10:55.000000000 +0200
@@ -36,6 +36,7 @@
     from .blocks_swig import *
 
 from .stream_to_vector_decimator import *
+from .matrix_interleaver import *
 
 #alias old add_vXX and multiply_vXX
 add_vcc = add_cc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-blocks/python/blocks/matrix_interleaver.py 
new/gnuradio-3.8.4.0/gr-blocks/python/blocks/matrix_interleaver.py
--- old/gnuradio-3.8.3.1/gr-blocks/python/blocks/matrix_interleaver.py  
1970-01-01 01:00:00.000000000 +0100
+++ new/gnuradio-3.8.4.0/gr-blocks/python/blocks/matrix_interleaver.py  
2021-09-30 16:10:55.000000000 +0200
@@ -0,0 +1,61 @@
+#
+# Copyright 2021 Caliola Engineering, LLC.
+#
+# This file is part of GNU Radio
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from gnuradio import gr
+
+class matrix_interleaver(gr.hier_block2):
+    """
+    Block interleaver writes inputs into conceptual rows of the matrix
+    and reads outputs by conceptual columns of the matrix.
+    In deinterleaver mode it writes inputs into conceptual columns
+    and reads outputs by conceptual rows.
+    """
+    def __init__(self, itemsize, rows=1, cols=1, deint=False):
+        gr.hier_block2.__init__(
+            self, "Matrix Interleaver",
+                gr.io_signature(1, 1, itemsize),
+                gr.io_signature(1, 1, itemsize),
+        )
+
+        self.itemsize = itemsize
+        self.set_rowsandcols(rows, cols, deint)
+
+    def set_rowsandcols(self, rows, cols, deint):
+        from gnuradio import blocks
+
+        self.disconnect_all()
+
+        self.passthrough = None
+        self.interleaver = None
+        self.deinterleaver = None
+
+        ##################################################
+        # Parameters
+        ##################################################
+        self.rows = rows
+        self.cols = cols
+        self.deint = deint
+
+        ##################################################
+        # Blocks
+        ##################################################
+        # short circuit for unitary rows / columns
+        if rows == 1 or cols == 1:
+          self.passthrough = blocks.copy(self.itemsize)
+          self.connect((self, 0), (self.passthrough, 0), (self, 0))
+          return
+
+        self.deinterleaver = blocks.deinterleave(self.itemsize, 1 if deint 
else cols)
+        self.interleaver = blocks.interleave(self.itemsize, cols if deint else 
1)
+
+        ##################################################
+        # Connections
+        ##################################################
+        self.connect((self, 0), (self.deinterleaver, 0))
+        for n in range(rows):
+            self.connect((self.deinterleaver, n), (self.interleaver, n))
+        self.connect((self.interleaver, 0), (self, 0))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-blocks/python/blocks/qa_matrix_interleaver.py 
new/gnuradio-3.8.4.0/gr-blocks/python/blocks/qa_matrix_interleaver.py
--- old/gnuradio-3.8.3.1/gr-blocks/python/blocks/qa_matrix_interleaver.py       
1970-01-01 01:00:00.000000000 +0100
+++ new/gnuradio-3.8.4.0/gr-blocks/python/blocks/qa_matrix_interleaver.py       
2021-09-30 16:10:55.000000000 +0200
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2020 Caliola Engineering, LLC.
+#
+# This is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# This software is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this software; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+from gnuradio import gr, gr_unittest
+from gnuradio import blocks
+from matrix_interleaver import matrix_interleaver
+
+class qa_matrix_interleaver(gr_unittest.TestCase):
+
+    def setUp(self):
+        self.tb = gr.top_block()
+
+    def tearDown(self):
+        self.tb = None
+
+    def test_interleave(self):
+        tb = self.tb
+
+        # set up fg
+        cols, rows = 4, 10
+        vec = sum((cols * [x,] for x in range(rows)), [])
+        expected = cols * list(range(rows))
+
+        src = blocks.vector_source_f(vec, False)
+        itlv = matrix_interleaver(gr.sizeof_float, rows=rows, cols=cols)
+        snk = blocks.vector_sink_f()
+
+        tb.connect(src, itlv, snk)
+        tb.run()
+        result = snk.data()
+
+        # check data
+        self.assertFloatTuplesAlmostEqual(expected, result)
+
+    def test_deinterleave(self):
+        tb = self.tb
+
+        # set up fg
+        cols, rows = 4, 10
+        vec = sum((rows * [x,] for x in range(cols)), [])
+        expected = rows * list(range(cols))
+
+        src = blocks.vector_source_f(vec, False)
+        itlv = matrix_interleaver(gr.sizeof_float, rows=rows, cols=cols, 
deint=True)
+        snk = blocks.vector_sink_f()
+
+        tb.connect(src, itlv, snk)
+        tb.run()
+        result = snk.data()
+
+        # check data
+        self.assertFloatTuplesAlmostEqual(expected, result)
+
+if __name__ == '__main__':
+    gr_unittest.run(qa_matrix_interleaver)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-channels/grc/channels_channel_model2.block.yml 
new/gnuradio-3.8.4.0/gr-channels/grc/channels_channel_model2.block.yml
--- old/gnuradio-3.8.3.1/gr-channels/grc/channels_channel_model2.block.yml      
2021-06-10 22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-channels/grc/channels_channel_model2.block.yml      
2021-09-30 16:10:55.000000000 +0200
@@ -25,7 +25,7 @@
     options: ['True', 'False']
     option_labels: ['Yes', 'No']
     option_attributes:
-        hide_block: ['', part]
+        hide_block: [none, part]
     hide: ${ block_tags.hide_block }
 
 inputs:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-channels/grc/channels_dynamic_channel_model.block.yml 
new/gnuradio-3.8.4.0/gr-channels/grc/channels_dynamic_channel_model.block.yml
--- 
old/gnuradio-3.8.3.1/gr-channels/grc/channels_dynamic_channel_model.block.yml   
    2021-06-10 22:31:35.000000000 +0200
+++ 
new/gnuradio-3.8.4.0/gr-channels/grc/channels_dynamic_channel_model.block.yml   
    2021-09-30 16:10:55.000000000 +0200
@@ -40,7 +40,7 @@
     options: ['False', 'True']
     option_labels: [Rayleigh/NLOS, Rician/LOS]
     option_attributes:
-        hide_K: [all, '']
+        hide_K: [all, none]
 -   id: K
     label: Rician factor (K)
     dtype: real
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-channels/grc/channels_fading_model.block.yml 
new/gnuradio-3.8.4.0/gr-channels/grc/channels_fading_model.block.yml
--- old/gnuradio-3.8.3.1/gr-channels/grc/channels_fading_model.block.yml        
2021-06-10 22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-channels/grc/channels_fading_model.block.yml        
2021-09-30 16:10:55.000000000 +0200
@@ -16,7 +16,7 @@
     options: ['False', 'True']
     option_labels: [Rayleigh/NLOS, Rician/LOS]
     option_attributes:
-        hide_K: [all, '']
+        hide_K: [all, none]
 -   id: K
     label: Rician factor (K)
     dtype: real
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-channels/grc/channels_selective_fading_model.block.yml 
new/gnuradio-3.8.4.0/gr-channels/grc/channels_selective_fading_model.block.yml
--- 
old/gnuradio-3.8.3.1/gr-channels/grc/channels_selective_fading_model.block.yml  
    2021-06-10 22:31:35.000000000 +0200
+++ 
new/gnuradio-3.8.4.0/gr-channels/grc/channels_selective_fading_model.block.yml  
    2021-09-30 16:10:55.000000000 +0200
@@ -16,7 +16,7 @@
     options: ['False', 'True']
     option_labels: [Rayleigh/NLOS, Rician/LOS]
     option_attributes:
-        hide_K: [all, '']
+        hide_K: [all, none]
 -   id: K
     label: Rician factor (K)
     dtype: real
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-channels/grc/channels_selective_fading_model2.block.yml 
new/gnuradio-3.8.4.0/gr-channels/grc/channels_selective_fading_model2.block.yml
--- 
old/gnuradio-3.8.3.1/gr-channels/grc/channels_selective_fading_model2.block.yml 
    2021-06-10 22:31:35.000000000 +0200
+++ 
new/gnuradio-3.8.4.0/gr-channels/grc/channels_selective_fading_model2.block.yml 
    2021-09-30 16:10:55.000000000 +0200
@@ -16,7 +16,7 @@
     options: ['False', 'True']
     option_labels: [Rayleigh/NLOS, Rician/LOS]
     option_attributes:
-        hide_K: [all, '']
+        hide_K: [all, none]
 -   id: K
     label: Rician factor (K)
     dtype: real
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-digital/grc/digital_chunks_to_symbols.block.yml 
new/gnuradio-3.8.4.0/gr-digital/grc/digital_chunks_to_symbols.block.yml
--- old/gnuradio-3.8.3.1/gr-digital/grc/digital_chunks_to_symbols.block.yml     
2021-06-10 22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-digital/grc/digital_chunks_to_symbols.block.yml     
2021-09-30 16:10:55.000000000 +0200
@@ -43,9 +43,6 @@
 -   domain: stream
     dtype: ${ out_type }
     multiplicity: ${ num_ports }
--   domain: message
-    id: set_symbol_table
-    optional: true
 
 asserts:
 - ${ num_ports > 0 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-digital/grc/digital_symbol_sync_xx.block.yml 
new/gnuradio-3.8.4.0/gr-digital/grc/digital_symbol_sync_xx.block.yml
--- old/gnuradio-3.8.3.1/gr-digital/grc/digital_symbol_sync_xx.block.yml        
2021-06-10 22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-digital/grc/digital_symbol_sync_xx.block.yml        
2021-09-30 16:10:55.000000000 +0200
@@ -21,8 +21,8 @@
         digital.TED_MENGALI_AND_DANDREA_GMSK, 
digital.TED_SIGNAL_TIMES_SLOPE_ML, digital.TED_SIGNUM_TIMES_SLOPE_ML]
     option_labels: ["Mueller and Mueller", "Modified Mueller and Mueller", Zero
             Crossing, Gardner, Early-Late, D'Andrea and Mengali Gen MSK, 
Mengali and
-            D'Andrea GMSK, 'y[n]y''[n] Maximum Likelyhood', 'sgn(y[n])y''[n] 
Maximum
-            Likelyhood']
+            D'Andrea GMSK, 'y[n]y''[n] Maximum likelihood', 'sgn(y[n])y''[n] 
Maximum
+            likelihood']
     option_attributes:
         hide_constellation: [part, part, part, all, all, all, all, all, all]
 -   id: constellation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-fft/grc/fft_logpwrfft_x.block.yml 
new/gnuradio-3.8.4.0/gr-fft/grc/fft_logpwrfft_x.block.yml
--- old/gnuradio-3.8.3.1/gr-fft/grc/fft_logpwrfft_x.block.yml   2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-fft/grc/fft_logpwrfft_x.block.yml   2021-09-30 
16:10:55.000000000 +0200
@@ -35,6 +35,12 @@
     label: Average Alpha
     dtype: real
     default: '1.0'
+-   id: shift
+    label: FFT Shift
+    dtype: bool
+    default: 'False'
+    options: ['True', 'False']
+    option_labels: ['On', 'Off']
 
 inputs:
 -   domain: stream
@@ -54,7 +60,8 @@
             ref_scale=${ref_scale},
             frame_rate=${frame_rate},
             avg_alpha=${avg_alpha},
-            average=${average})
+            average=${average},
+            shift=${shift})
     callbacks:
     - set_sample_rate(${sample_rate})
     - set_avg_alpha(${avg_alpha})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/gr-fft/lib/CMakeLists.txt 
new/gnuradio-3.8.4.0/gr-fft/lib/CMakeLists.txt
--- old/gnuradio-3.8.3.1/gr-fft/lib/CMakeLists.txt      2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-fft/lib/CMakeLists.txt      2021-09-30 
16:10:55.000000000 +0200
@@ -70,7 +70,7 @@
   include(GrTest)
 
   list(APPEND test_gr_fft_sources
-    qa_fft_shift
+    qa_fft_shift.cc
   )
   list(APPEND GR_TEST_TARGET_DEPS gnuradio-fft)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/gr-fft/python/fft/logpwrfft.py 
new/gnuradio-3.8.4.0/gr-fft/python/fft/logpwrfft.py
--- old/gnuradio-3.8.3.1/gr-fft/python/fft/logpwrfft.py 2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-fft/python/fft/logpwrfft.py 2021-09-30 
16:10:55.000000000 +0200
@@ -39,7 +39,7 @@
     Create a log10(abs(fft)) stream chain, with real or complex input.
     """
 
-    def __init__(self, sample_rate, fft_size, ref_scale, frame_rate, 
avg_alpha, average, win=None):
+    def __init__(self, sample_rate, fft_size, ref_scale, frame_rate, 
avg_alpha, average, win=None, shift=False):
         """
         Create an log10(abs(fft)) stream chain.
         Provide access to the setting the filter and sample rate.
@@ -52,6 +52,7 @@
             avg_alpha: FFT averaging (over time) constant [0.0-1.0]
             average: Whether to average [True, False]
             win: the window taps generation function
+            shift: shift zero-frequency component to center of spectrum
         """
         gr.hier_block2.__init__(self, self._name,
                                 gr.io_signature(1, 1, self._item_size),        
  # Input signature
@@ -61,10 +62,9 @@
                                                      sample_rate=sample_rate,
                                                      vec_rate=frame_rate,
                                                      vec_len=fft_size)
-
         if win is None: win = window.blackmanharris
         fft_window = win(fft_size)
-        fft = self._fft_block[0](fft_size, True, fft_window)
+        fft = self._fft_block[0](fft_size, True, fft_window, shift=shift)
         window_power = sum([x*x for x in fft_window])
 
         c2magsq = blocks.complex_to_mag_squared(fft_size)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-qtgui/grc/qtgui_vector_sink_f.block.yml 
new/gnuradio-3.8.4.0/gr-qtgui/grc/qtgui_vector_sink_f.block.yml
--- old/gnuradio-3.8.3.1/gr-qtgui/grc/qtgui_vector_sink_f.block.yml     
2021-06-10 22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-qtgui/grc/qtgui_vector_sink_f.block.yml     
2021-09-30 16:10:55.000000000 +0200
@@ -37,12 +37,12 @@
     label: X-Axis Units
     dtype: string
     default: '""'
-    hide: '''part'''
+    hide: part
 -   id: y_units
     label: Y-Axis Units
     dtype: string
     default: '""'
-    hide: '''part'''
+    hide: part
 -   id: ref_level
     label: Ref Level
     dtype: real
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/gr-qtgui/lib/time_sink_c_impl.cc 
new/gnuradio-3.8.4.0/gr-qtgui/lib/time_sink_c_impl.cc
--- old/gnuradio-3.8.3.1/gr-qtgui/lib/time_sink_c_impl.cc       2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-qtgui/lib/time_sink_c_impl.cc       2021-09-30 
16:10:55.000000000 +0200
@@ -588,7 +588,7 @@
 
         uint64_t nr = nitems_read(n);
         std::vector<gr::tag_t> tags;
-        get_tags_in_range(tags, n, nr, nr + nitems);
+        get_tags_in_range(tags, n, nr, nr + nitems + 1);
         for (size_t t = 0; t < tags.size(); t++) {
             tags[t].offset = tags[t].offset - nr + (d_index - d_start - 1);
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/gr-qtgui/lib/time_sink_f_impl.cc 
new/gnuradio-3.8.4.0/gr-qtgui/lib/time_sink_f_impl.cc
--- old/gnuradio-3.8.3.1/gr-qtgui/lib/time_sink_f_impl.cc       2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-qtgui/lib/time_sink_f_impl.cc       2021-09-30 
16:10:55.000000000 +0200
@@ -577,7 +577,7 @@
 
         uint64_t nr = nitems_read(idx);
         std::vector<gr::tag_t> tags;
-        get_tags_in_range(tags, idx, nr, nr + nitems);
+        get_tags_in_range(tags, idx, nr, nr + nitems + 1);
         for (size_t t = 0; t < tags.size(); t++) {
             tags[t].offset = tags[t].offset - nr + (d_index - d_start - 1);
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-uhd/examples/python/freq_hopping.py 
new/gnuradio-3.8.4.0/gr-uhd/examples/python/freq_hopping.py
--- old/gnuradio-3.8.3.1/gr-uhd/examples/python/freq_hopping.py 2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-uhd/examples/python/freq_hopping.py 2021-09-30 
16:10:55.000000000 +0200
@@ -170,7 +170,7 @@
     def __init__(self, args):
         gr.top_block.__init__(self)
         if args.input_file is not None:
-            src = blocks.file_source(gr.sizeof_gr_complex, args.filename, 
repeat=True)
+            src = blocks.file_source(gr.sizeof_gr_complex, args.input_file, 
repeat=True)
         else:
             src = blocks.vector_source_c((.5,) * int(1e6) * 2, repeat=True)
         # Setup USRP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-utils/python/modtool/templates/gr-newmod/CMakeLists.txt 
new/gnuradio-3.8.4.0/gr-utils/python/modtool/templates/gr-newmod/CMakeLists.txt
--- 
old/gnuradio-3.8.3.1/gr-utils/python/modtool/templates/gr-newmod/CMakeLists.txt 
    2021-06-10 22:31:35.000000000 +0200
+++ 
new/gnuradio-3.8.4.0/gr-utils/python/modtool/templates/gr-newmod/CMakeLists.txt 
    2021-09-30 16:10:55.000000000 +0200
@@ -45,7 +45,7 @@
 set(VERSION_MAJOR 1)
 set(VERSION_API   0)
 set(VERSION_ABI   0)
-set(VERSION_PATCH git)
+set(VERSION_PATCH 0)
 
 cmake_policy(SET CMP0011 NEW)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnuradio-3.8.3.1/gr-utils/python/modtool/templates/gr-newmod/python/__init__.py
 
new/gnuradio-3.8.4.0/gr-utils/python/modtool/templates/gr-newmod/python/__init__.py
--- 
old/gnuradio-3.8.3.1/gr-utils/python/modtool/templates/gr-newmod/python/__init__.py
 2021-06-10 22:31:35.000000000 +0200
+++ 
new/gnuradio-3.8.4.0/gr-utils/python/modtool/templates/gr-newmod/python/__init__.py
 2021-09-30 16:10:55.000000000 +0200
@@ -24,11 +24,18 @@
 '''
 from __future__ import unicode_literals
 
+# GNU Radio 3.8 is compatible with both Python 2 and 3,
+# which raise different exceptions if a module is not found.
+try:
+    module_not_found_error = ModuleNotFoundError
+except NameError:
+    module_not_found_error = ImportError
+
 # import swig generated symbols into the howto namespace
 try:
     # this might fail if the module is python-only
     from .howto_swig import *
-except ImportError:
+except module_not_found_error:
     pass
 
 # import any pure python here
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/gr-video-sdl/lib/sink_s_impl.cc 
new/gnuradio-3.8.4.0/gr-video-sdl/lib/sink_s_impl.cc
--- old/gnuradio-3.8.3.1/gr-video-sdl/lib/sink_s_impl.cc        2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-video-sdl/lib/sink_s_impl.cc        2021-09-30 
16:10:55.000000000 +0200
@@ -112,7 +112,7 @@
 
     /* Initialize and create the YUV Overlay used for video out */
     if (!(d_image =
-              SDL_CreateYUVOverlay(d_width, d_height, SDL_YV12_OVERLAY, 
d_screen))) {
+              SDL_CreateYUVOverlay(d_width, d_height, SDL_IYUV_OVERLAY, 
d_screen))) {
         std::cerr << "SDL: Couldn't create a YUV overlay: \n" << 
SDL_GetError() << "\n";
         throw std::runtime_error("video_sdl::sink_s");
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/gr-video-sdl/lib/sink_uc_impl.cc 
new/gnuradio-3.8.4.0/gr-video-sdl/lib/sink_uc_impl.cc
--- old/gnuradio-3.8.3.1/gr-video-sdl/lib/sink_uc_impl.cc       2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/gr-video-sdl/lib/sink_uc_impl.cc       2021-09-30 
16:10:55.000000000 +0200
@@ -114,7 +114,7 @@
 
     /* Initialize and create the YUV Overlay used for video out */
     if (!(d_image =
-              SDL_CreateYUVOverlay(d_width, d_height, SDL_YV12_OVERLAY, 
d_screen))) {
+              SDL_CreateYUVOverlay(d_width, d_height, SDL_IYUV_OVERLAY, 
d_screen))) {
         std::cerr << "SDL: Couldn't create a YUV overlay: \n" << 
SDL_GetError() << "\n";
         throw std::runtime_error("video_sdl::sink_uc");
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/grc/core/Constants.py 
new/gnuradio-3.8.4.0/grc/core/Constants.py
--- old/gnuradio-3.8.3.1/grc/core/Constants.py  2021-06-10 22:31:35.000000000 
+0200
+++ new/gnuradio-3.8.4.0/grc/core/Constants.py  2021-09-30 16:10:55.000000000 
+0200
@@ -58,7 +58,7 @@
 
 PARAM_TYPE_NAMES = {
     'raw', 'enum',
-    'complex', 'real', 'float', 'int',
+    'complex', 'real', 'float', 'int', 'short', 'byte',
     'complex_vector', 'real_vector', 'float_vector', 'int_vector',
     'hex', 'string', 'bool',
     'file_open', 'file_save', '_multiline', '_multiline_python_external',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/grc/core/FlowGraph.py 
new/gnuradio-3.8.4.0/grc/core/FlowGraph.py
--- old/gnuradio-3.8.3.1/grc/core/FlowGraph.py  2021-06-10 22:31:35.000000000 
+0200
+++ new/gnuradio-3.8.4.0/grc/core/FlowGraph.py  2021-09-30 16:10:55.000000000 
+0200
@@ -228,7 +228,7 @@
         return elements
 
     def children(self):
-        return itertools.chain(self.iter_enabled_blocks(), self.connections)
+        return itertools.chain(self.blocks, self.connections)
 
     def rewrite(self):
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/grc/core/params/param.py 
new/gnuradio-3.8.4.0/grc/core/params/param.py
--- old/gnuradio-3.8.3.1/grc/core/params/param.py       2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/grc/core/params/param.py       2021-09-30 
16:10:55.000000000 +0200
@@ -218,7 +218,7 @@
         #########################
         # Numeric Types
         #########################
-        elif dtype in ('raw', 'complex', 'real', 'float', 'int', 'hex', 
'bool'):
+        elif dtype in ('raw', 'complex', 'real', 'float', 'int', 'short', 
'byte', 'hex', 'bool'):
             if expr:
                 try:
                     if isinstance(expr, str) and self.is_float(expr[:-1]):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/grc/gui/Application.py 
new/gnuradio-3.8.4.0/grc/gui/Application.py
--- old/gnuradio-3.8.3.1/grc/gui/Application.py 2021-06-10 22:31:35.000000000 
+0200
+++ new/gnuradio-3.8.4.0/grc/gui/Application.py 2021-09-30 16:10:55.000000000 
+0200
@@ -130,6 +130,7 @@
 
         def flow_graph_update(fg=flow_graph):
             main.vars.update_gui(fg.blocks)
+            fg.namespace.clear()
             fg.update()
 
         ##################################################
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/grc/gui/Constants.py 
new/gnuradio-3.8.4.0/grc/gui/Constants.py
--- old/gnuradio-3.8.3.1/grc/gui/Constants.py   2021-06-10 22:31:35.000000000 
+0200
+++ new/gnuradio-3.8.4.0/grc/gui/Constants.py   2021-09-30 16:10:55.000000000 
+0200
@@ -52,7 +52,8 @@
 STATE_CACHE_SIZE = 42
 
 # Shared targets for drag and drop of blocks
-DND_TARGETS = [('STRING', Gtk.TargetFlags.SAME_APP, 0)]
+DND_TARGETS = [Gtk.TargetEntry.new('STRING', Gtk.TargetFlags.SAME_APP, 0),
+               Gtk.TargetEntry.new('UTF8_STRING', Gtk.TargetFlags.SAME_APP, 1)]
 
 # label constraint dimensions
 LABEL_SEPARATION = 3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnuradio-3.8.3.1/grc/gui/canvas/flowgraph.py 
new/gnuradio-3.8.4.0/grc/gui/canvas/flowgraph.py
--- old/gnuradio-3.8.3.1/grc/gui/canvas/flowgraph.py    2021-06-10 
22:31:35.000000000 +0200
+++ new/gnuradio-3.8.4.0/grc/gui/canvas/flowgraph.py    2021-09-30 
16:10:55.000000000 +0200
@@ -810,11 +810,17 @@
         x, y = coordinate
         if not self.drawing_area.ctrl_mask:
             X, Y = self.coordinate
-            dX, dY = int(x - X), int(y - Y)
-            active = Actions.TOGGLE_SNAP_TO_GRID.get_active() or 
self.drawing_area.mod1_mask
-            if not active or abs(dX) >= Constants.CANVAS_GRID_SIZE or abs(dY) 
>= Constants.CANVAS_GRID_SIZE:
+            dX, dY = x - X, y - Y
+
+            if Actions.TOGGLE_SNAP_TO_GRID.get_active() or 
self.drawing_area.mod1_mask:
+                dX, dY = int(round(dX / Constants.CANVAS_GRID_SIZE)), 
int(round(dY / Constants.CANVAS_GRID_SIZE))
+                dX, dY = dX * Constants.CANVAS_GRID_SIZE, dY * 
Constants.CANVAS_GRID_SIZE
+            else:
+                dX, dY = int(round(dX)), int(round(dY))
+
+            if dX != 0 or dY != 0:
                 self.move_selected((dX, dY))
-                self.coordinate = (x, y)
+                self.coordinate = (X+dX, Y+dY)
                 redraw = True
         return redraw
 

Reply via email to