summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohnathan Corgan <johnathan@corganlabs.com>2017-06-22 17:01:54 -0700
committerJohnathan Corgan <johnathan@corganlabs.com>2017-06-22 17:01:54 -0700
commit1d537a26b27b9d3ce6a3affc6ea500a9efc5a867 (patch)
treef4cd3b2ccb49a7ec76ee3197f14f30907fb49a71
parentc1f706fb1bec6a68191d44498c70d17226bd4ea7 (diff)
parentd8b3e478fed02053d06ad41037db1f9c9728c3b5 (diff)
Merge branch 'master' into next
-rw-r--r--gnuradio-runtime/python/gnuradio/gr/tag_utils.py16
-rw-r--r--gr-analog/lib/agc3_cc_impl.cc10
-rw-r--r--gr-blocks/examples/ctrlport/simple_copy.grc100
-rw-r--r--gr-blocks/lib/file_meta_sink_impl.cc31
-rw-r--r--gr-blocks/lib/file_meta_source_impl.cc22
-rw-r--r--gr-blocks/python/blocks/qa_file_metadata.py2
-rw-r--r--gr-fec/python/fec/polar/channel_construction.py4
-rw-r--r--gr-fft/lib/fft.cc28
-rw-r--r--gr-uhd/apps/uhd_app.py1
9 files changed, 162 insertions, 52 deletions
diff --git a/gnuradio-runtime/python/gnuradio/gr/tag_utils.py b/gnuradio-runtime/python/gnuradio/gr/tag_utils.py
index a7745428c7..0d4805a8b8 100644
--- a/gnuradio-runtime/python/gnuradio/gr/tag_utils.py
+++ b/gnuradio-runtime/python/gnuradio/gr/tag_utils.py
@@ -57,17 +57,17 @@ def python_to_tag(tag_struct):
good = True
if(tag_struct.has_key('key')):
- if(isinstance(tag_struct['key'], pmt.pmt_swig.swig_int_ptr)):
+ if(isinstance(tag_struct['key'], pmt.swig_int_ptr)):
tag.key = tag_struct['key']
good = True
if(tag_struct.has_key('value')):
- if(isinstance(tag_struct['value'], pmt.pmt_swig.swig_int_ptr)):
+ if(isinstance(tag_struct['value'], pmt.swig_int_ptr)):
tag.value = tag_struct['value']
good = True
if(tag_struct.has_key('srcid')):
- if(isinstance(tag_struct['srcid'], pmt.pmt_swig.swig_int_ptr)):
+ if(isinstance(tag_struct['srcid'], pmt.swig_int_ptr)):
tag.srcid = tag_struct['srcid']
good = True
@@ -77,15 +77,15 @@ def python_to_tag(tag_struct):
tag.offset = tag_struct[0]
good = True
- if(isinstance(tag_struct[1], pmt.pmt_swig.swig_int_ptr)):
+ if(isinstance(tag_struct[1], pmt.swig_int_ptr)):
tag.key = tag_struct[1]
good = True
- if(isinstance(tag_struct[2], pmt.pmt_swig.swig_int_ptr)):
+ if(isinstance(tag_struct[2], pmt.swig_int_ptr)):
tag.value = tag_struct[2]
good = True
- if(isinstance(tag_struct[3], pmt.pmt_swig.swig_int_ptr)):
+ if(isinstance(tag_struct[3], pmt.swig_int_ptr)):
tag.srcid = tag_struct[3]
good = True
@@ -94,11 +94,11 @@ def python_to_tag(tag_struct):
tag.offset = tag_struct[0]
good = True
- if(isinstance(tag_struct[1], pmt.pmt_swig.swig_int_ptr)):
+ if(isinstance(tag_struct[1], pmt.swig_int_ptr)):
tag.key = tag_struct[1]
good = True
- if(isinstance(tag_struct[2], pmt.pmt_swig.swig_int_ptr)):
+ if(isinstance(tag_struct[2], pmt.swig_int_ptr)):
tag.value = tag_struct[2]
good = True
diff --git a/gr-analog/lib/agc3_cc_impl.cc b/gr-analog/lib/agc3_cc_impl.cc
index fddefd6710..9d34c7b84d 100644
--- a/gr-analog/lib/agc3_cc_impl.cc
+++ b/gr-analog/lib/agc3_cc_impl.cc
@@ -79,7 +79,7 @@ namespace gr {
#else
// Compute a linear average on reset (no expected)
if(!d_reset) {
- std::vector<float> mags(noutput_items);
+ _declspec(align(16)) std::vector<float> mags(noutput_items) ;
volk_32fc_magnitude_32f(&mags[0], &in[0], noutput_items);
#endif
float mag(0.0);
@@ -104,8 +104,8 @@ namespace gr {
else {
// Otherwise perform a normal iir update
#ifdef _MSC_VER
- std::vector<float> mag_sq(noutput_items/d_iir_update_decim);
- std::vector<float> inv_mag(noutput_items/d_iir_update_decim);
+ __declspec(align(16)) std::vector<float> mag_sq(noutput_items/d_iir_update_decim) ;
+ __declspec(align(16)) std::vector<float> inv_mag(noutput_items/d_iir_update_decim) ;
#else
float mag_sq[noutput_items/d_iir_update_decim] __attribute__ ((aligned (16)));
float inv_mag[noutput_items/d_iir_update_decim] __attribute__ ((aligned (16)));
@@ -123,8 +123,8 @@ namespace gr {
// apply updates
for(int i=0; i<noutput_items/d_iir_update_decim; i++){
float magi = inv_mag[i];
-#ifdef _MSC_VER
- if(!_finite(magi)){
+#if defined(_MSC_VER) && _MSC_VER < 1900
+ if(!_finite(magi)){
#else
if(std::isfinite(magi)){
#endif
diff --git a/gr-blocks/examples/ctrlport/simple_copy.grc b/gr-blocks/examples/ctrlport/simple_copy.grc
index 6e795d751b..a52c350ded 100644
--- a/gr-blocks/examples/ctrlport/simple_copy.grc
+++ b/gr-blocks/examples/ctrlport/simple_copy.grc
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
-<?grc format='1' created='3.7.9'?>
+<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Sat Mar 16 22:03:14 2013</timestamp>
<block>
@@ -41,6 +41,10 @@
<value>qt_gui</value>
</param>
<param>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
+ </param>
+ <param>
<key>id</key>
<value>simple_copy</value>
</param>
@@ -49,10 +53,18 @@
<value>0</value>
</param>
<param>
+ <key>qt_qss_theme</key>
+ <value></value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
<param>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
+ </param>
+ <param>
<key>run_options</key>
<value>prompt</value>
</param>
@@ -381,12 +393,92 @@ to enable/disablethis block</value>
</param>
</block>
<block>
+ <key>epy_block</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_io_cache</key>
+ <value>('Null Msg Source', 'blk', [], [], [('fake_output', 'message', 1)], '', [])</value>
+ </param>
+ <param>
+ <key>_source_code</key>
+ <value># Block that doesn't do anything, just used to get a msg input port on another block exposed to ControlPort
+from gnuradio import gr
+import pmt
+class blk(gr.basic_block):
+ def __init__(self):
+ gr.basic_block.__init__(self,name='Null Msg Source',in_sig=[],out_sig=[])
+ self.message_port_register_out(pmt.intern("fake_output"))
+</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(357, 218)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>epy_block_0</value>
+ </param>
+ </block>
+ <block>
+ <key>note</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value>Make sure to turn on ControlPort (edit ~/.gnuradio/config.conf)
+and run the following script to toggle Copy block:
+cd /src/gnuradio/gr-blocks/examples/ctrlport
+python simple_copy_controller.py 127.0.0.1 &lt;PORT&gt; true</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(352, 13)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>note_0</value>
+ </param>
+ <param>
+ <key>note</key>
+ <value></value>
+ </param>
+ </block>
+ <block>
<key>qtgui_time_sink_x</key>
<param>
<key>autoscale</key>
<value>False</value>
</param>
<param>
+ <key>axislabels</key>
+ <value>True</value>
+ </param>
+ <param>
<key>alias</key>
<value></value>
</param>
@@ -769,4 +861,10 @@ to enable/disablethis block</value>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
+ <connection>
+ <source_block_id>epy_block_0</source_block_id>
+ <sink_block_id>blocks_copy_0</sink_block_id>
+ <source_key>fake_output</source_key>
+ <sink_key>en</sink_key>
+ </connection>
</flow_graph>
diff --git a/gr-blocks/lib/file_meta_sink_impl.cc b/gr-blocks/lib/file_meta_sink_impl.cc
index 027d12faf2..b6d858489d 100644
--- a/gr-blocks/lib/file_meta_sink_impl.cc
+++ b/gr-blocks/lib/file_meta_sink_impl.cc
@@ -141,17 +141,7 @@ namespace gr {
{
close();
- if(d_fp) {
- fclose(d_fp);
- d_fp = 0;
- }
- if(d_state == STATE_DETACHED) {
- if(d_hdr_fp) {
- fclose(d_hdr_fp);
- d_hdr_fp = 0;
- }
- }
}
bool
@@ -216,6 +206,18 @@ namespace gr {
d_new_fp = 0;
}
d_updated = true;
+
+ if (d_fp) {
+ fclose(d_fp);
+ d_fp = 0;
+ }
+
+ if (d_state == STATE_DETACHED) {
+ if (d_hdr_fp) {
+ fclose(d_hdr_fp);
+ d_hdr_fp = 0;
+ }
+ }
}
void
@@ -298,10 +300,11 @@ namespace gr {
void
file_meta_sink_impl::update_last_header()
{
- if(d_state == STATE_DETACHED)
- update_last_header_detached();
- else
- update_last_header_inline();
+ if(d_state == STATE_DETACHED) {
+ if (d_hdr_fp) update_last_header_detached();
+ } else {
+ if(d_fp) update_last_header_inline();
+ }
}
void
diff --git a/gr-blocks/lib/file_meta_source_impl.cc b/gr-blocks/lib/file_meta_source_impl.cc
index 4cb0ab8ed1..3c72e2a003 100644
--- a/gr-blocks/lib/file_meta_source_impl.cc
+++ b/gr-blocks/lib/file_meta_source_impl.cc
@@ -111,17 +111,7 @@ namespace gr {
{
close();
- if(d_fp) {
- fclose(d_fp);
- d_fp = 0;
- }
- if(d_state == STATE_DETACHED) {
- if(d_hdr_fp) {
- fclose(d_hdr_fp);
- d_hdr_fp = 0;
- }
- }
}
bool
@@ -339,6 +329,18 @@ namespace gr {
d_new_fp = 0;
}
d_updated = true;
+
+ if (d_fp) {
+ fclose(d_fp);
+ d_fp = 0;
+ }
+
+ if (d_state == STATE_DETACHED) {
+ if (d_hdr_fp) {
+ fclose(d_hdr_fp);
+ d_hdr_fp = 0;
+ }
+ }
}
void
diff --git a/gr-blocks/python/blocks/qa_file_metadata.py b/gr-blocks/python/blocks/qa_file_metadata.py
index 0d7628bbdc..886207f108 100644
--- a/gr-blocks/python/blocks/qa_file_metadata.py
+++ b/gr-blocks/python/blocks/qa_file_metadata.py
@@ -106,6 +106,7 @@ class test_file_metadata(gr_unittest.TestCase):
self.tb.connect(src, ssnk)
self.tb.run()
+ fsrc.close()
# Test to make sure tags with 'samp_rate' and 'rx_rate' keys
# were generated and received correctly.
tags = tsnk.current_tags()
@@ -187,6 +188,7 @@ class test_file_metadata(gr_unittest.TestCase):
self.tb.connect(src, ssnk)
self.tb.run()
+ fsrc.close()
# Test to make sure tags with 'samp_rate' and 'rx_rate' keys
# were generated and received correctly.
tags = tsnk.current_tags()
diff --git a/gr-fec/python/fec/polar/channel_construction.py b/gr-fec/python/fec/polar/channel_construction.py
index a981007b45..b7a3dee3bd 100644
--- a/gr-fec/python/fec/polar/channel_construction.py
+++ b/gr-fec/python/fec/polar/channel_construction.py
@@ -37,7 +37,7 @@ Z_PARAM_FIRST_HEADER_LINE = "Bhattacharyya parameters (Z-parameters) for a polar
def get_frozen_bit_indices_from_capacities(chan_caps, nfrozen):
indexes = np.array([], dtype=int)
while indexes.size < nfrozen:
- index = np.argmin(chan_caps)
+ index = np.argmin(chan_caps).astype(int)
indexes = np.append(indexes, index)
chan_caps[index] = 2.0 # make absolutely sure value is out of range!
return np.sort(indexes)
@@ -46,7 +46,7 @@ def get_frozen_bit_indices_from_capacities(chan_caps, nfrozen):
def get_frozen_bit_indices_from_z_parameters(z_params, nfrozen):
indexes = np.array([], dtype=int)
while indexes.size < nfrozen:
- index = np.argmax(z_params)
+ index = np.argmax(z_params).astype(int)
indexes = np.append(indexes, index)
z_params[index] = -1.0
return np.sort(indexes)
diff --git a/gr-fft/lib/fft.cc b/gr-fft/lib/fft.cc
index ef81583187..3b6d05c383 100644
--- a/gr-fft/lib/fft.cc
+++ b/gr-fft/lib/fft.cc
@@ -36,6 +36,10 @@ static int my_fftw_read_char(void *f) { return fgetc((FILE *) f); }
#define fftw_import_wisdom_from_file(f) fftw_import_wisdom(my_fftw_read_char, (void*) (f))
#define fftwf_import_wisdom_from_file(f) fftwf_import_wisdom(my_fftw_read_char, (void*) (f))
#define fftwl_import_wisdom_from_file(f) fftwl_import_wisdom(my_fftw_read_char, (void*) (f))
+#include <fcntl.h>
+#include <io.h>
+#define O_NOCTTY 0
+#define O_NONBLOCK 0
#endif //_MSC_VER
#include <stdlib.h>
@@ -52,6 +56,7 @@ namespace fs = boost::filesystem;
namespace gr {
namespace fft {
static boost::mutex wisdom_thread_mutex;
+ boost::interprocess::file_lock wisdom_lock;
gr_complex *
malloc_complex(int size)
@@ -96,23 +101,13 @@ namespace gr {
static void
lock_wisdom()
{
- const std::string wisdom_lock_file = wisdom_filename() + ".lock";
- int fd = open(wisdom_lock_file.c_str(),
- O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK,
- 0666);
- if (fd < 0){
- throw std::exception();
- }
- boost::interprocess::file_lock wisdom_lock(wisdom_lock_file.c_str());
- wisdom_lock.lock();
- wisdom_thread_mutex.lock();
+ wisdom_thread_mutex.lock();
+ wisdom_lock.lock();
}
static void
unlock_wisdom()
{
- const std::string wisdom_lock_file = wisdom_filename() + ".lock";
- boost::interprocess::file_lock wisdom_lock(wisdom_lock_file.c_str());
wisdom_lock.unlock();
wisdom_thread_mutex.unlock();
}
@@ -168,6 +163,15 @@ namespace gr {
{
// Hold global mutex during plan construction and destruction.
planner::scoped_lock lock(planner::mutex());
+ const std::string wisdom_lock_file = wisdom_filename() + ".lock";
+ int fd = open(wisdom_lock_file.c_str(),
+ O_WRONLY | O_CREAT | O_NOCTTY | O_NONBLOCK,
+ 0666);
+ if (fd < 0) {
+ throw std::exception();
+ }
+ close(fd);
+ wisdom_lock = boost::interprocess::file_lock(wisdom_lock_file.c_str());
assert (sizeof (fftwf_complex) == sizeof (gr_complex));
diff --git a/gr-uhd/apps/uhd_app.py b/gr-uhd/apps/uhd_app.py
index 7fccf858dc..8bec7c18db 100644
--- a/gr-uhd/apps/uhd_app.py
+++ b/gr-uhd/apps/uhd_app.py
@@ -125,6 +125,7 @@ class UHDApp(object):
raise ValueError("Invalid {m} setting for {n} {b}: {a}".format(
m=arg_name, n=num, a=arg, b=num_name
))
+
return args
def async_callback(self, msg):