diff options
author | Marcus Müller <mmueller@gnuradio.org> | 2019-08-07 21:45:12 +0200 |
---|---|---|
committer | Marcus Müller <marcus@hostalia.de> | 2019-08-09 23:04:28 +0200 |
commit | f7bbf2c1d8d780294f3e016aff239ca35eb6516e (patch) | |
tree | e09ab6112e02b2215b2d59ac24d3d6ea2edac745 /gr-fec/lib/async_decoder_impl.cc | |
parent | 78431dc6941e3acc67c858277dfe4a0ed583643c (diff) |
Tree: clang-format without the include sorting
Diffstat (limited to 'gr-fec/lib/async_decoder_impl.cc')
-rw-r--r-- | gr-fec/lib/async_decoder_impl.cc | 321 |
1 files changed, 157 insertions, 164 deletions
diff --git a/gr-fec/lib/async_decoder_impl.cc b/gr-fec/lib/async_decoder_impl.cc index 4f563d349e..c8db512068 100644 --- a/gr-fec/lib/async_decoder_impl.cc +++ b/gr-fec/lib/async_decoder_impl.cc @@ -30,213 +30,206 @@ #include <stdio.h> namespace gr { - namespace fec { - - async_decoder::sptr - async_decoder::make(generic_decoder::sptr my_decoder, - bool packed, bool rev_pack, - int mtu) - { - return gnuradio::get_initial_sptr - (new async_decoder_impl(my_decoder, packed, rev_pack, mtu)); +namespace fec { + +async_decoder::sptr +async_decoder::make(generic_decoder::sptr my_decoder, bool packed, bool rev_pack, int mtu) +{ + return gnuradio::get_initial_sptr( + new async_decoder_impl(my_decoder, packed, rev_pack, mtu)); +} + +async_decoder_impl::async_decoder_impl(generic_decoder::sptr my_decoder, + bool packed, + bool rev_pack, + int mtu) + : block("async_decoder", io_signature::make(0, 0, 0), io_signature::make(0, 0, 0)) +{ + d_in_port = pmt::mp("in"); + d_out_port = pmt::mp("out"); + + d_decoder = my_decoder; + + if (d_decoder->get_history() > 0) { + throw std::runtime_error("async_decoder deploment does not support decoders with " + "history requirements."); } - async_decoder_impl::async_decoder_impl(generic_decoder::sptr my_decoder, - bool packed, bool rev_pack, - int mtu) - : block("async_decoder", - io_signature::make(0,0,0), - io_signature::make(0,0,0)) - { - d_in_port = pmt::mp("in"); - d_out_port = pmt::mp("out"); + d_packed = packed; + d_rev_pack = rev_pack; + d_mtu = mtu; - d_decoder = my_decoder; + message_port_register_in(d_in_port); + message_port_register_out(d_out_port); - if(d_decoder->get_history() > 0) { - throw std::runtime_error("async_decoder deploment does not support decoders with history requirements."); - } + if (d_packed) { + d_pack = new blocks::kernel::pack_k_bits(8); + set_msg_handler(d_in_port, + boost::bind(&async_decoder_impl::decode_packed, this, _1)); + } else { + set_msg_handler(d_in_port, + boost::bind(&async_decoder_impl::decode_unpacked, this, _1)); + } - d_packed = packed; - d_rev_pack = rev_pack; - d_mtu = mtu; + // The maximum frame size is set by the initial frame size of the decoder. + d_max_bits_in = d_mtu * 8 * 1.0 / d_decoder->rate(); + d_tmp_f32 = (float*)volk_malloc(d_max_bits_in * sizeof(float), volk_get_alignment()); - message_port_register_in(d_in_port); - message_port_register_out(d_out_port); + if (strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) { + d_tmp_u8 = + (int8_t*)volk_malloc(d_max_bits_in * sizeof(uint8_t), volk_get_alignment()); + } - if(d_packed) { - d_pack = new blocks::kernel::pack_k_bits(8); - set_msg_handler(d_in_port, boost::bind(&async_decoder_impl::decode_packed, this ,_1)); - } - else { - set_msg_handler(d_in_port, boost::bind(&async_decoder_impl::decode_unpacked, this ,_1)); - } - - // The maximum frame size is set by the initial frame size of the decoder. - d_max_bits_in = d_mtu*8 * 1.0/d_decoder->rate(); - d_tmp_f32 = (float*)volk_malloc(d_max_bits_in*sizeof(float), - volk_get_alignment()); - - if(strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) { - d_tmp_u8 = (int8_t*)volk_malloc(d_max_bits_in*sizeof(uint8_t), - volk_get_alignment()); - } - - if(d_packed) { - int max_bits_out = d_mtu*8; - d_bits_out = (uint8_t*)volk_malloc(max_bits_out*sizeof(uint8_t), - volk_get_alignment()); - } + if (d_packed) { + int max_bits_out = d_mtu * 8; + d_bits_out = + (uint8_t*)volk_malloc(max_bits_out * sizeof(uint8_t), volk_get_alignment()); } +} - async_decoder_impl::~async_decoder_impl() - { - if(d_packed) { +async_decoder_impl::~async_decoder_impl() +{ + if (d_packed) { delete d_pack; volk_free(d_bits_out); - } + } - volk_free(d_tmp_f32); + volk_free(d_tmp_f32); - if(strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) { + if (strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) { volk_free(d_tmp_u8); - } + } +} + +void async_decoder_impl::decode_unpacked(pmt::pmt_t msg) +{ + // extract input pdu + pmt::pmt_t meta(pmt::car(msg)); + pmt::pmt_t bits(pmt::cdr(msg)); + + // Watch out for this diff. It might be over-specializing to the + // CC decoder in terminated mode that has an extra rate(K-1) + // bits added on to the transmitted frame. + int diff = + d_decoder->rate() * d_decoder->get_input_size() - d_decoder->get_output_size(); + + size_t nbits_in = pmt::length(bits); + size_t nbits_out = 0; + size_t nblocks = 1; + bool variable_frame_size = d_decoder->set_frame_size(nbits_in * d_decoder->rate()); + + // Check here if the frame size is larger than what we've + // allocated for in the constructor. + if (variable_frame_size && (nbits_in > d_max_bits_in)) { + throw std::runtime_error( + "async_decoder: Received frame larger than max frame size."); } - void - async_decoder_impl::decode_unpacked(pmt::pmt_t msg) - { - // extract input pdu - pmt::pmt_t meta(pmt::car(msg)); - pmt::pmt_t bits(pmt::cdr(msg)); - - // Watch out for this diff. It might be over-specializing to the - // CC decoder in terminated mode that has an extra rate(K-1) - // bits added on to the transmitted frame. - int diff = d_decoder->rate()*d_decoder->get_input_size() - d_decoder->get_output_size(); - - size_t nbits_in = pmt::length(bits); - size_t nbits_out = 0; - size_t nblocks = 1; - bool variable_frame_size = d_decoder->set_frame_size(nbits_in*d_decoder->rate()); - - // Check here if the frame size is larger than what we've - // allocated for in the constructor. - if(variable_frame_size && (nbits_in > d_max_bits_in)) { - throw std::runtime_error("async_decoder: Received frame larger than max frame size."); - } - - // set up nbits_out - if(variable_frame_size){ - nbits_out = nbits_in*d_decoder->rate() - diff; - } - else { + // set up nbits_out + if (variable_frame_size) { + nbits_out = nbits_in * d_decoder->rate() - diff; + } else { nblocks = nbits_in / d_decoder->get_input_size(); nbits_out = nblocks * d_decoder->get_output_size(); - if(nblocks * d_decoder->get_input_size() != nbits_in){ - throw std::runtime_error("bad block multiple in!"); + if (nblocks * d_decoder->get_input_size() != nbits_in) { + throw std::runtime_error("bad block multiple in!"); } - } + } - size_t o0(0); - const float* f32in = pmt::f32vector_elements(bits, o0); - pmt::pmt_t outvec(pmt::make_u8vector(nbits_out, 0x00)); - uint8_t* u8out = pmt::u8vector_writable_elements(outvec, o0); + size_t o0(0); + const float* f32in = pmt::f32vector_elements(bits, o0); + pmt::pmt_t outvec(pmt::make_u8vector(nbits_out, 0x00)); + uint8_t* u8out = pmt::u8vector_writable_elements(outvec, o0); - if(strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) { + if (strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) { volk_32f_s32f_multiply_32f(d_tmp_f32, f32in, 48.0f, nbits_in); - } - else { - memcpy(d_tmp_f32, f32in, nbits_in*sizeof(float)); - } + } else { + memcpy(d_tmp_f32, f32in, nbits_in * sizeof(float)); + } - if(d_decoder->get_shift() != 0) { - for(size_t n = 0; n < nbits_in; n++) - d_tmp_f32[n] += d_decoder->get_shift(); - } + if (d_decoder->get_shift() != 0) { + for (size_t n = 0; n < nbits_in; n++) + d_tmp_f32[n] += d_decoder->get_shift(); + } - if(strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) { - //volk_32f_s32f_convert_8i(d_tmp_u8, d_tmp_f32, 1, nbits_in); - for(size_t n = 0; n < nbits_in; n++) - d_tmp_u8[n] = static_cast<uint8_t>(d_tmp_f32[n]); + if (strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) { + // volk_32f_s32f_convert_8i(d_tmp_u8, d_tmp_f32, 1, nbits_in); + for (size_t n = 0; n < nbits_in; n++) + d_tmp_u8[n] = static_cast<uint8_t>(d_tmp_f32[n]); d_decoder->generic_work((void*)d_tmp_u8, (void*)u8out); - } - else { - for(size_t i = 0; i < nblocks; i++){ - d_decoder->generic_work((void*)&d_tmp_f32[i*d_decoder->get_input_size()], - (void*)&u8out[i*d_decoder->get_output_size()]); + } else { + for (size_t i = 0; i < nblocks; i++) { + d_decoder->generic_work((void*)&d_tmp_f32[i * d_decoder->get_input_size()], + (void*)&u8out[i * d_decoder->get_output_size()]); } - } - - static const pmt::pmt_t iterations_key = pmt::mp("iterations"); - meta = pmt::dict_add(meta, iterations_key, pmt::mp(d_decoder->get_iterations()) ); - message_port_pub(d_out_port, pmt::cons(meta, outvec)); } - void - async_decoder_impl::decode_packed(pmt::pmt_t msg) - { - // extract input pdu - pmt::pmt_t meta(pmt::car(msg)); - pmt::pmt_t bits(pmt::cdr(msg)); - - size_t o0 = 0; - size_t nbits_in = pmt::length(bits); - int nbits_out = nbits_in*d_decoder->rate(); - int nbytes_out = nbits_out/8; - - // Check here if the frame size is larger than what we've - // allocated for in the constructor. - if(nbits_in > d_max_bits_in) { - throw std::runtime_error("async_decoder: Received frame larger than max frame size."); - } + static const pmt::pmt_t iterations_key = pmt::mp("iterations"); + meta = pmt::dict_add(meta, iterations_key, pmt::mp(d_decoder->get_iterations())); + message_port_pub(d_out_port, pmt::cons(meta, outvec)); +} + +void async_decoder_impl::decode_packed(pmt::pmt_t msg) +{ + // extract input pdu + pmt::pmt_t meta(pmt::car(msg)); + pmt::pmt_t bits(pmt::cdr(msg)); + + size_t o0 = 0; + size_t nbits_in = pmt::length(bits); + int nbits_out = nbits_in * d_decoder->rate(); + int nbytes_out = nbits_out / 8; + + // Check here if the frame size is larger than what we've + // allocated for in the constructor. + if (nbits_in > d_max_bits_in) { + throw std::runtime_error( + "async_decoder: Received frame larger than max frame size."); + } - d_decoder->set_frame_size(nbits_out); + d_decoder->set_frame_size(nbits_out); - pmt::pmt_t outvec(pmt::make_u8vector(nbytes_out, 0x00)); - uint8_t* bytes_out = pmt::u8vector_writable_elements(outvec, o0); - const float* f32in = pmt::f32vector_elements(bits, o0); + pmt::pmt_t outvec(pmt::make_u8vector(nbytes_out, 0x00)); + uint8_t* bytes_out = pmt::u8vector_writable_elements(outvec, o0); + const float* f32in = pmt::f32vector_elements(bits, o0); - if(strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) { + if (strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) { volk_32f_s32f_multiply_32f(d_tmp_f32, f32in, 48.0f, nbits_in); - } - else { - memcpy(d_tmp_f32, f32in, nbits_in*sizeof(float)); - } + } else { + memcpy(d_tmp_f32, f32in, nbits_in * sizeof(float)); + } - if(d_decoder->get_shift() != 0) { - for(size_t n = 0; n < nbits_in; n++) - d_tmp_f32[n] += d_decoder->get_shift(); - } + if (d_decoder->get_shift() != 0) { + for (size_t n = 0; n < nbits_in; n++) + d_tmp_f32[n] += d_decoder->get_shift(); + } - if(strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) { - //volk_32f_s32f_convert_8i(d_tmp_u8, d_tmp_f32, 1.0, nbits_in); - for(size_t n = 0; n < nbits_in; n++) - d_tmp_u8[n] = static_cast<uint8_t>(d_tmp_f32[n]); + if (strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) { + // volk_32f_s32f_convert_8i(d_tmp_u8, d_tmp_f32, 1.0, nbits_in); + for (size_t n = 0; n < nbits_in; n++) + d_tmp_u8[n] = static_cast<uint8_t>(d_tmp_f32[n]); d_decoder->generic_work((void*)d_tmp_u8, (void*)d_bits_out); - } - else { + } else { d_decoder->generic_work((void*)d_tmp_f32, (void*)d_bits_out); - } + } - if(d_rev_pack) + if (d_rev_pack) d_pack->pack_rev(bytes_out, d_bits_out, nbytes_out); - else + else d_pack->pack(bytes_out, d_bits_out, nbytes_out); - message_port_pub(d_out_port, pmt::cons(meta, outvec)); - } + message_port_pub(d_out_port, pmt::cons(meta, outvec)); +} - int - async_decoder_impl::general_work(int noutput_items, +int async_decoder_impl::general_work(int noutput_items, gr_vector_int& ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) - { - return noutput_items; - } + gr_vector_const_void_star& input_items, + gr_vector_void_star& output_items) +{ + return noutput_items; +} - } /* namespace fec */ +} /* namespace fec */ } /* namespace gr */ |