diff options
Diffstat (limited to 'gr-digital/lib/header_payload_demux_impl.cc')
-rw-r--r-- | gr-digital/lib/header_payload_demux_impl.cc | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/gr-digital/lib/header_payload_demux_impl.cc b/gr-digital/lib/header_payload_demux_impl.cc index a2e81c5b8e..affbc92125 100644 --- a/gr-digital/lib/header_payload_demux_impl.cc +++ b/gr-digital/lib/header_payload_demux_impl.cc @@ -24,7 +24,7 @@ #endif #include <climits> -#include <gr_io_signature.h> +#include <gnuradio/io_signature.h> #include "header_payload_demux_impl.h" namespace gr { @@ -70,9 +70,9 @@ namespace gr { const std::string &trigger_tag_key, bool output_symbols, size_t itemsize - ) : gr_block("header_payload_demux", - gr_make_io_signature2(1, 2, itemsize, sizeof(char)), - gr_make_io_signature(2, 2, (output_symbols ? itemsize * items_per_symbol : itemsize))), + ) : block("header_payload_demux", + io_signature::make2(1, 2, itemsize, sizeof(char)), + io_signature::make(2, 2, (output_symbols ? itemsize * items_per_symbol : itemsize))), d_header_len(header_len), d_items_per_symbol(items_per_symbol), d_gi(guard_interval), @@ -123,7 +123,8 @@ namespace gr { int produced_hdr = 0; int produced_payload = 0; - while (nread < noutput_items && !exit_loop) { + // FIXME ninput_items[1] does not have to be defined O_o + while (nread < noutput_items && nread < ninput_items[0] && nread < ninput_items[1] && !exit_loop) { switch (d_state) { case STATE_IDLE: // 1) Search for a trigger signal on input 1 (if present) @@ -154,6 +155,7 @@ namespace gr { // 4) fall through to next state d_remaining_symbols = -1; if (!parse_header_data_msg()) { + d_state = STATE_IDLE; exit_loop = true; break; } @@ -199,7 +201,7 @@ namespace gr { } } if (d_uses_trigger_tag) { - std::vector<gr_tag_t> tags; + std::vector<tag_t> tags; get_tags_in_range(tags, 0, nitems_read(0), nitems_read(0)+noutput_items); uint64_t min_offset = ULLONG_MAX; int tag_index = -1; @@ -241,6 +243,8 @@ namespace gr { } } else if (pmt::is_null(msg)) { // Blocking call was interrupted return false; + } else if (msg == pmt::PMT_F) { // Header was invalid + return false; } else { throw std::runtime_error("Received illegal header data"); } @@ -250,7 +254,7 @@ namespace gr { void header_payload_demux_impl::copy_symbol(const unsigned char *&in, unsigned char *&out, int port, int &nread, int &nproduced) { - std::vector<gr_tag_t> tags; + std::vector<tag_t> tags; memcpy((void *) out, (void *) (in + d_gi * d_itemsize), d_itemsize * d_items_per_symbol |