diff options
author | Johnathan Corgan <johnathan@corganlabs.com> | 2014-11-03 10:35:24 -0800 |
---|---|---|
committer | Johnathan Corgan <johnathan@corganlabs.com> | 2014-11-03 10:35:24 -0800 |
commit | 6e3fbfd50f338932a20edbca3ba4d08e004198b5 (patch) | |
tree | 8364c661f6b819c459254fd8d67cc84ea80cb141 | |
parent | cd7918af4c5dd846256cc0ddd84cdb075dc6a329 (diff) | |
parent | e4873df6d040b2e559d1ae9135627e0ca7f2a6c9 (diff) |
Merge branch 'maint'
-rw-r--r-- | gr-digital/lib/correlate_access_code_tag_bb_impl.cc | 5 | ||||
-rwxr-xr-x | gr-digital/python/digital/qa_correlate_access_code_tag.py | 80 | ||||
-rw-r--r-- | grc/python/Generator.py | 6 | ||||
-rw-r--r-- | grc/python/flow_graph.tmpl | 5 |
4 files changed, 91 insertions, 5 deletions
diff --git a/gr-digital/lib/correlate_access_code_tag_bb_impl.cc b/gr-digital/lib/correlate_access_code_tag_bb_impl.cc index 31ae6d9282..de2e1a06c3 100644 --- a/gr-digital/lib/correlate_access_code_tag_bb_impl.cc +++ b/gr-digital/lib/correlate_access_code_tag_bb_impl.cc @@ -77,13 +77,14 @@ namespace gr { if(d_len > 64) return false; - // set len top bits to 1. - d_mask = ((~0ULL) >> (64 - d_len)) << (64 - d_len); + // set len bottom bits to 1. + d_mask = ((~0ULL) >> (64 - d_len)); d_access_code = 0; for(unsigned i=0; i < d_len; i++){ d_access_code = (d_access_code << 1) | (access_code[i] & 1); } + if(VERBOSE) { std::cerr << "Access code: " << std::hex << d_access_code << std::dec << std::endl; std::cerr << "Mask: " << std::hex << d_mask << std::dec << std::endl; diff --git a/gr-digital/python/digital/qa_correlate_access_code_tag.py b/gr-digital/python/digital/qa_correlate_access_code_tag.py new file mode 100755 index 0000000000..f2663e4ecc --- /dev/null +++ b/gr-digital/python/digital/qa_correlate_access_code_tag.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007,2010,2011,2013 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio 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. +# +# GNU Radio 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 GNU Radio; 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, digital, blocks + +default_access_code = '\xAC\xDD\xA4\xE2\xF2\x8C\x20\xFC' + +def string_to_1_0_list(s): + r = [] + for ch in s: + x = ord(ch) + for i in range(8): + t = (x >> i) & 0x1 + r.append(t) + + return r + +def to_1_0_string(L): + return ''.join(map(lambda x: chr(x + ord('0')), L)) + +class test_correlate_access_code(gr_unittest.TestCase): + + def setUp(self): + self.tb = gr.top_block() + + def tearDown(self): + self.tb = None + + def test_001(self): + pad = (0,) * 64 + src_data = (1, 0, 1, 1, 1, 1, 0, 1, 1) + pad + (0,) * 7 + src = blocks.vector_source_b(src_data) + op = digital.correlate_access_code_tag_bb("1011", 0, "sync") + dst = blocks.tag_debug(1, "sync") + self.tb.connect(src, op, dst) + self.tb.run() + result_data = dst.current_tags() + self.assertEqual(len(result_data), 2) + self.assertEqual(result_data[0].offset, 4) + self.assertEqual(result_data[1].offset, 9) + + def test_002(self): + code = tuple(string_to_1_0_list(default_access_code)) + access_code = to_1_0_string(code) + pad = (0,) * 64 + #print code + #print access_code + src_data = code + (1, 0, 1, 1) + pad + expected_result = pad + code + (3, 0, 1, 1) + src = blocks.vector_source_b(src_data) + op = digital.correlate_access_code_tag_bb(access_code, 0, "sync") + dst = blocks.tag_debug(1, "sync") + self.tb.connect(src, op, dst) + self.tb.run() + result_data = dst.current_tags() + self.assertEqual(len(result_data), 1) + self.assertEqual(result_data[0].offset, len(code)) + +if __name__ == '__main__': + gr_unittest.run(test_correlate_access_code, "test_correlate_access_code_tag.xml") + diff --git a/grc/python/Generator.py b/grc/python/Generator.py index caf45fa3b1..4a496b7c0f 100644 --- a/grc/python/Generator.py +++ b/grc/python/Generator.py @@ -21,6 +21,7 @@ import os import sys import subprocess import tempfile +from distutils.spawn import find_executable from Cheetah.Template import Template import expr_utils from Constants import \ @@ -96,8 +97,9 @@ This is usually undesired. Consider removing the throttle block.''') cmds = [python_exe, '-u', self.get_file_path()] # -u is unbuffered stdio # when in no gui mode on linux, use a graphical terminal (looks nice) - if self._generate_options == 'no_gui' and os.path.exists(XTERM_EXECUTABLE): - cmds = [XTERM_EXECUTABLE, '-e'] + cmds + xterm_executable = find_executable(XTERM_EXECUTABLE) + if self._generate_options == 'no_gui' and xterm_executable: + cmds = [xterm_executable, '-e'] + cmds p = subprocess.Popen(args=cmds, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, universal_newlines=True) return p diff --git a/grc/python/flow_graph.tmpl b/grc/python/flow_graph.tmpl index ace217c967..bee9c68af5 100644 --- a/grc/python/flow_graph.tmpl +++ b/grc/python/flow_graph.tmpl @@ -354,7 +354,10 @@ if __name__ == '__main__': #for $m in $monitors (tb.$m.get_id()).start() #end for - raw_input('Press Enter to quit: ') + try: + raw_input('Press Enter to quit: ') + except EOFError: + pass tb.stop() #elif $run_options == 'run' #if $flow_graph.get_option('max_nouts') |