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
