From 0ce637465630f63fa2e47d15f8bc700e450df776 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Wed, 17 Jul 2013 18:03:45 -0700 Subject: [PATCH] Convert next branch to 3.7 API. Based on Johnathan Corgan's 3.7 conversion of the master branch. --- CMakeLists.txt | 25 +++-------- cmake/Modules/FindGnuradioCore.cmake | 26 ----------- cmake/Modules/FindGnuradioRuntime.cmake | 6 +++ cmake/Modules/FindGruel.cmake | 26 ----------- include/air_modes_api.h | 2 +- include/air_modes_preamble.h | 6 +-- include/air_modes_slicer.h | 16 +++---- lib/CMakeLists.txt | 2 +- lib/air_modes_preamble.cc | 59 +++++++++---------------- lib/air_modes_slicer.cc | 46 +++++++++---------- python/radio.py | 5 ++- python/rx_path.py | 8 ++-- swig/CMakeLists.txt | 7 +-- swig/air_modes.i | 10 ++--- 14 files changed, 82 insertions(+), 162 deletions(-) delete mode 100644 cmake/Modules/FindGnuradioCore.cmake create mode 100644 cmake/Modules/FindGnuradioRuntime.cmake delete mode 100644 cmake/Modules/FindGruel.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index a1e9092..e5bb48a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,23 +69,10 @@ set(GRC_BLOCKS_DIR ${GR_PKG_DATA_DIR}/grc/blocks) ######################################################################## # Find gnuradio build dependencies ######################################################################## -find_package(Gruel) -find_package(GnuradioCore) +find_package(GnuradioRuntime) -if(NOT GRUEL_FOUND) - message(FATAL_ERROR "Gruel required to compile gr-air-modes") -endif() - -if(NOT GNURADIO_CORE_FOUND) - message(FATAL_ERROR "GnuRadio Core required to compile gr-air-modes") -endif() - -######################################################################## -# Find 0MQ networking library -######################################################################## -find_package(ZeroMQ) -if(NOT ZEROMQ_FOUND) - message(FATAL_ERROR "Could not find required library libzmq (ZeroMQ).") +if(NOT GNURADIO_RUNTIME_FOUND) + message(FATAL_ERROR "GnuRadio Runtime required to compile gr-air-modes") endif() ######################################################################## @@ -94,14 +81,12 @@ endif() include_directories( ${CMAKE_SOURCE_DIR}/include ${Boost_INCLUDE_DIRS} - ${GRUEL_INCLUDE_DIRS} - ${GNURADIO_CORE_INCLUDE_DIRS} + ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) link_directories( ${Boost_LIBRARY_DIRS} - ${GRUEL_LIBRARY_DIRS} - ${GNURADIO_CORE_LIBRARY_DIRS} + ${GNURADIO_RUNTIME_LIBRARY_DIRS} ) # Set component parameters diff --git a/cmake/Modules/FindGnuradioCore.cmake b/cmake/Modules/FindGnuradioCore.cmake deleted file mode 100644 index 3773588..0000000 --- a/cmake/Modules/FindGnuradioCore.cmake +++ /dev/null @@ -1,26 +0,0 @@ -INCLUDE(FindPkgConfig) -PKG_CHECK_MODULES(PC_GNURADIO_CORE gnuradio-core) - -FIND_PATH( - GNURADIO_CORE_INCLUDE_DIRS - NAMES gr_random.h - HINTS $ENV{GNURADIO_CORE_DIR}/include/gnuradio - ${PC_GNURADIO_CORE_INCLUDEDIR} - PATHS /usr/local/include/gnuradio - /usr/include/gnuradio -) - -FIND_LIBRARY( - GNURADIO_CORE_LIBRARIES - NAMES gnuradio-core - HINTS $ENV{GNURADIO_CORE_DIR}/lib - ${PC_GNURADIO_CORE_LIBDIR} - PATHS /usr/local/lib - /usr/local/lib64 - /usr/lib - /usr/lib64 -) - -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_CORE DEFAULT_MSG GNURADIO_CORE_LIBRARIES GNURADIO_CORE_INCLUDE_DIRS) -MARK_AS_ADVANCED(GNURADIO_CORE_LIBRARIES GNURADIO_CORE_INCLUDE_DIRS) diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake new file mode 100644 index 0000000..99a4a6d --- /dev/null +++ b/cmake/Modules/FindGnuradioRuntime.cmake @@ -0,0 +1,6 @@ +INCLUDE(FindPkgConfig) +PKG_CHECK_MODULES(GNURADIO_RUNTIME gnuradio-runtime) + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS) +MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS) diff --git a/cmake/Modules/FindGruel.cmake b/cmake/Modules/FindGruel.cmake deleted file mode 100644 index c7a10a4..0000000 --- a/cmake/Modules/FindGruel.cmake +++ /dev/null @@ -1,26 +0,0 @@ -INCLUDE(FindPkgConfig) -PKG_CHECK_MODULES(PC_GRUEL gnuradio-core) - -FIND_PATH( - GRUEL_INCLUDE_DIRS - NAMES gruel/attributes.h - HINTS $ENV{GRUEL_DIR}/include - ${PC_GRUEL_INCLUDEDIR} - PATHS /usr/local/include - /usr/include -) - -FIND_LIBRARY( - GRUEL_LIBRARIES - NAMES gruel - HINTS $ENV{GRUEL_DIR}/lib - ${PC_GRUEL_LIBDIR} - PATHS /usr/local/lib - /usr/local/lib64 - /usr/lib - /usr/lib64 -) - -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(GRUEL DEFAULT_MSG GRUEL_LIBRARIES GRUEL_INCLUDE_DIRS) -MARK_AS_ADVANCED(GRUEL_LIBRARIES GRUEL_INCLUDE_DIRS) diff --git a/include/air_modes_api.h b/include/air_modes_api.h index d49d2e4..d34502d 100644 --- a/include/air_modes_api.h +++ b/include/air_modes_api.h @@ -22,7 +22,7 @@ #ifndef INCLUDED_AIR_MODES_API_H #define INCLUDED_AIR_MODES_API_H -#include +#include #ifdef AIR_MODES_EXPORTS # define AIR_MODES_API __GR_ATTR_EXPORT diff --git a/include/air_modes_preamble.h b/include/air_modes_preamble.h index f419343..7a0994b 100644 --- a/include/air_modes_preamble.h +++ b/include/air_modes_preamble.h @@ -23,7 +23,7 @@ #ifndef INCLUDED_AIR_MODES_PREAMBLE_H #define INCLUDED_AIR_MODES_PREAMBLE_H -#include +#include #include class air_modes_preamble; @@ -35,7 +35,7 @@ AIR_MODES_API air_modes_preamble_sptr air_make_modes_preamble(int channel_rate, * \brief mode select preamble detection * \ingroup block */ -class AIR_MODES_API air_modes_preamble : public gr_block +class AIR_MODES_API air_modes_preamble : public gr::block { private: friend air_modes_preamble_sptr air_make_modes_preamble(int channel_rate, float threshold_db); @@ -49,7 +49,7 @@ private: float d_threshold_db; float d_threshold; pmt::pmt_t d_me, d_key; - gr_tag_t d_timestamp; + gr::tag_t d_timestamp; double d_secs_per_sample; public: diff --git a/include/air_modes_slicer.h b/include/air_modes_slicer.h index 1ddcf5f..8915d0c 100644 --- a/include/air_modes_slicer.h +++ b/include/air_modes_slicer.h @@ -23,38 +23,36 @@ #ifndef INCLUDED_AIR_MODES_slicer_H #define INCLUDED_AIR_MODES_slicer_H -#include -#include +#include +#include #include class air_modes_slicer; typedef boost::shared_ptr air_modes_slicer_sptr; -AIR_MODES_API air_modes_slicer_sptr air_make_modes_slicer(int channel_rate, gr_msg_queue_sptr queue); +AIR_MODES_API air_modes_slicer_sptr air_make_modes_slicer(int channel_rate, gr::msg_queue::sptr queue); /*! * \brief mode select slicer detection * \ingroup block */ -class AIR_MODES_API air_modes_slicer : public gr_sync_block +class AIR_MODES_API air_modes_slicer : public gr::sync_block { private: - friend air_modes_slicer_sptr air_make_modes_slicer(int channel_rate, gr_msg_queue_sptr queue); - air_modes_slicer(int channel_rate, gr_msg_queue_sptr queue); + friend air_modes_slicer_sptr air_make_modes_slicer(int channel_rate, gr::msg_queue::sptr queue); + air_modes_slicer(int channel_rate, gr::msg_queue::sptr queue); int d_check_width; int d_chip_rate; int d_samples_per_chip; int d_samples_per_symbol; - gr_msg_queue_sptr d_queue; + gr::msg_queue::sptr d_queue; std::ostringstream d_payload; public: int work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); - - void set_rate(int channel_rate); }; #endif /* INCLUDED_AIR_MODES_slicer_H */ diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 9ed79ae..fffd623 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -27,7 +27,7 @@ add_library(air_modes SHARED air_modes_slicer.cc modes_crc.cc ) -target_link_libraries(air_modes ${Boost_LIBRARIES} ${GRUEL_LIBRARIES} ${GNURADIO_CORE_LIBRARIES}) +target_link_libraries(air_modes ${Boost_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES}) set_target_properties(air_modes PROPERTIES DEFINE_SYMBOL "AIR_MODES_EXPORTS") set_target_properties(air_modes PROPERTIES SOVERSION "${gr-gr-air-modes_VERSION_MAJOR}") set_target_properties(air_modes PROPERTIES VERSION "${gr-gr-air-modes_VERSION_MAJOR}.${gr-gr-air-modes_VERSION_MINOR}") diff --git a/lib/air_modes_preamble.cc b/lib/air_modes_preamble.cc index 284d8c1..7498d8a 100644 --- a/lib/air_modes_preamble.cc +++ b/lib/air_modes_preamble.cc @@ -27,10 +27,10 @@ #include #include -#include +#include #include #include -#include +#include air_modes_preamble_sptr air_make_modes_preamble(int channel_rate, float threshold_db) { @@ -38,39 +38,24 @@ air_modes_preamble_sptr air_make_modes_preamble(int channel_rate, float threshol } air_modes_preamble::air_modes_preamble(int channel_rate, float threshold_db) : - gr_block ("modes_preamble", - gr_make_io_signature2 (2, 2, sizeof(float), sizeof(float)), //stream 0 is received data, stream 1 is moving average for reference - gr_make_io_signature (1, 1, sizeof(float))) //the output packets -{ - set_rate(channel_rate); - set_threshold(threshold_db); - - std::stringstream str; - str << name() << unique_id(); - d_me = pmt::pmt_string_to_symbol(str.str()); - d_key = pmt::pmt_string_to_symbol("preamble_found"); - set_history(d_samples_per_symbol); -} - -void air_modes_preamble::set_rate(int channel_rate) + gr::block ("modes_preamble", + gr::io_signature::make2 (2, 2, sizeof(float), sizeof(float)), //stream 0 is received data, stream 1 is moving average for reference + gr::io_signature::make (1, 1, sizeof(float))) //the output packets { d_chip_rate = 2000000; //2Mchips per second d_samples_per_chip = channel_rate / d_chip_rate; //must be integer number of samples per chip to work d_samples_per_symbol = d_samples_per_chip * 2; - d_secs_per_sample = 1.0 / channel_rate; - d_check_width = 240 * d_samples_per_symbol; //only search to this far from the end of the stream buffer - set_output_multiple(1+d_check_width); -} - -void air_modes_preamble::set_threshold(float threshold_db) -{ + d_check_width = 120 * d_samples_per_symbol; //only search to this far from the end of the stream buffer d_threshold_db = threshold_db; d_threshold = powf(10., threshold_db/20.); //the level that the sample must be above the moving average in order to qualify as a pulse -} - -float air_modes_preamble::get_threshold(void) -{ - return d_threshold_db; + d_secs_per_sample = 1.0 / channel_rate; + set_output_multiple(1+d_check_width*2); + + std::stringstream str; + str << name() << unique_id(); + d_me = pmt::string_to_symbol(str.str()); + d_key = pmt::string_to_symbol("preamble_found"); + set_history(d_samples_per_symbol); } static void integrate_and_dump(float *out, const float *in, int chips, int samps_per_chip) { @@ -96,14 +81,14 @@ static double correlate_preamble(const float *in, int samples_per_chip) { } //todo: make it return a pair of some kind, otherwise you can lose precision -static double tag_to_timestamp(gr_tag_t tstamp, uint64_t abs_sample_cnt, double secs_per_sample) { +static double tag_to_timestamp(gr::tag_t tstamp, uint64_t abs_sample_cnt, double secs_per_sample) { uint64_t ts_sample, last_whole_stamp; double last_frac_stamp; - if(tstamp.key == NULL || pmt::pmt_symbol_to_string(tstamp.key) != "rx_time") return 0; + if(tstamp.key == NULL || pmt::symbol_to_string(tstamp.key) != "rx_time") return 0; - last_whole_stamp = pmt::pmt_to_uint64(pmt::pmt_tuple_ref(tstamp.value, 0)); - last_frac_stamp = pmt::pmt_to_double(pmt::pmt_tuple_ref(tstamp.value, 1)); + last_whole_stamp = pmt::to_uint64(pmt::tuple_ref(tstamp.value, 0)); + last_frac_stamp = pmt::to_double(pmt::tuple_ref(tstamp.value, 1)); ts_sample = tstamp.offset; double tstime = double(abs_sample_cnt * secs_per_sample) + last_whole_stamp + last_frac_stamp; @@ -137,8 +122,8 @@ int air_modes_preamble::general_work(int noutput_items, }; uint64_t abs_sample_cnt = nitems_read(0); - std::vector tstamp_tags; - get_tags_in_range(tstamp_tags, 0, abs_sample_cnt, abs_sample_cnt + ninputs, pmt::pmt_string_to_symbol("rx_time")); + std::vector tstamp_tags; + get_tags_in_range(tstamp_tags, 0, abs_sample_cnt, abs_sample_cnt + ninputs, pmt::string_to_symbol("rx_time")); //tags.back() is the most recent timestamp, then. if(tstamp_tags.size() > 0) { d_timestamp = tstamp_tags.back(); @@ -210,10 +195,10 @@ int air_modes_preamble::general_work(int noutput_items, add_item_tag(0, //stream ID nitems_written(0), //sample d_key, //frame_info - pmt::pmt_make_tuple(pmt::pmt_from_double(tstamp), pmt::pmt_from_double(inavg[i])), + pmt::from_double(tstamp), d_me //block src id ); - + //std::cout << "PREAMBLE" << std::endl; //produce only one output per work call -- TODO this should probably change diff --git a/lib/air_modes_slicer.cc b/lib/air_modes_slicer.cc index 43d60dd..34a0ac2 100644 --- a/lib/air_modes_slicer.cc +++ b/lib/air_modes_slicer.cc @@ -27,13 +27,13 @@ #include #include -#include +#include #include #include #include #include #include -#include +#include extern "C" { @@ -41,26 +41,23 @@ extern "C" #include } -air_modes_slicer_sptr air_make_modes_slicer(int channel_rate, gr_msg_queue_sptr queue) +air_modes_slicer_sptr air_make_modes_slicer(int channel_rate, gr::msg_queue::sptr queue) { return air_modes_slicer_sptr (new air_modes_slicer(channel_rate, queue)); } -air_modes_slicer::air_modes_slicer(int channel_rate, gr_msg_queue_sptr queue) : - gr_sync_block ("modes_slicer", - gr_make_io_signature (1, 1, sizeof(float)), //stream 0 is received data, stream 1 is binary preamble detector output - gr_make_io_signature (0, 0, 0) ) -{ - set_rate(channel_rate); - d_queue = queue; -} - -void air_modes_slicer::set_rate(int channel_rate) +air_modes_slicer::air_modes_slicer(int channel_rate, gr::msg_queue::sptr queue) : + gr::sync_block ("modes_slicer", + gr::io_signature::make (1, 1, sizeof(float)), //stream 0 is received data, stream 1 is binary preamble detector output + gr::io_signature::make (0, 0, 0) ) { + //initialize private data here d_chip_rate = 2000000; //2Mchips per second d_samples_per_chip = 2;//FIXME this is constant now channel_rate / d_chip_rate; d_samples_per_symbol = d_samples_per_chip * 2; d_check_width = 120 * d_samples_per_symbol; //how far you will have to look ahead + d_queue = queue; + set_output_multiple(d_check_width*2); //how do you specify buffer size for sinks? } @@ -110,10 +107,10 @@ int air_modes_slicer::work(int noutput_items, if(0) std::cout << "Slicer called with " << size << " samples" << std::endl; - std::vector tags; + std::vector tags; uint64_t abs_sample_cnt = nitems_read(0); - get_tags_in_range(tags, 0, abs_sample_cnt, abs_sample_cnt + size, pmt::pmt_string_to_symbol("preamble_found")); - std::vector::iterator tag_iter; + get_tags_in_range(tags, 0, abs_sample_cnt, abs_sample_cnt + size, pmt::string_to_symbol("preamble_found")); + std::vector::iterator tag_iter; for(tag_iter = tags.begin(); tag_iter != tags.end(); tag_iter++) { uint64_t i = tag_iter->offset - abs_sample_cnt; @@ -159,14 +156,17 @@ int air_modes_slicer::work(int noutput_items, if(rx_packet.numlowconf < 24) rx_packet.lowconfbits[rx_packet.numlowconf++] = j; } } - - rx_packet.timestamp = pmt_to_double(pmt_tuple_ref(tag_iter->value, 0)); - double ref = pmt_to_double(pmt_tuple_ref(tag_iter->value, 1)); - //traverse the whole packet and if you find all 0's, just toss it. don't know why these packets turn up, but they pass ECC. + /******************** BEGIN TIMESTAMP BS ******************/ + rx_packet.timestamp = pmt::to_double(tag_iter->value); + /******************* END TIMESTAMP BS *********************/ + + //increment for the next round + + //here you might want to traverse the whole packet and if you find all 0's, just toss it. don't know why these packets turn up, but they pass ECC. bool zeroes = 1; for(int m = 0; m < 14; m++) { - if(rx_packet.data[m]) { zeroes = 0; break; } + if(rx_packet.data[m]) zeroes = 0; } if(zeroes) {continue;} //toss it @@ -187,9 +187,9 @@ int air_modes_slicer::work(int noutput_items, d_payload << std::hex << std::setw(2) << std::setfill('0') << unsigned(rx_packet.data[m]); } - d_payload << " " << std::setw(6) << rx_packet.crc << " " << std::dec << rx_packet.reference_level / ref + d_payload << " " << std::setw(6) << rx_packet.crc << " " << std::dec << rx_packet.reference_level << " " << std::setprecision(10) << std::setw(10) << rx_packet.timestamp; - gr_message_sptr msg = gr_make_message_from_string(std::string(d_payload.str())); + gr::message::sptr msg = gr::message::make_from_string(std::string(d_payload.str())); d_queue->handle(msg); } if(0) std::cout << "Slicer consumed " << size << ", returned " << size << std::endl; diff --git a/python/radio.py b/python/radio.py index 2a024d6..6bab259 100644 --- a/python/radio.py +++ b/python/radio.py @@ -23,7 +23,8 @@ # You pass it options, it gives you data. # It uses the pubsub interface to allow clients to subscribe to its data feeds. -from gnuradio import gr, gru, optfir, eng_notation, blks2 +from gnuradio import gr, gru, eng_notation, filter +from gnuradio.filter import optfir from gnuradio.eng_option import eng_option from gnuradio.gr.pubsub import pubsub from optparse import OptionParser, OptionGroup @@ -186,7 +187,7 @@ class modes_radio (gr.top_block, pubsub): #Note: this should only come into play if using an RTLSDR. # lpfiltcoeffs = gr.firdes.low_pass(1, 5*3.2e6, 1.6e6, 300e3) -# self._resample = blks2.rational_resampler_ccf(interpolation=5, decimation=4, taps=lpfiltcoeffs) +# self._resample = filter.rational_resampler_ccf(interpolation=5, decimation=4, taps=lpfiltcoeffs) else: #semantically detect whether it's ip.ip.ip.ip:port or filename diff --git a/python/rx_path.py b/python/rx_path.py index 1178099..1b9ee6c 100644 --- a/python/rx_path.py +++ b/python/rx_path.py @@ -19,7 +19,7 @@ # Boston, MA 02110-1301, USA. # -from gnuradio import gr +from gnuradio import gr, blocks import air_modes_swig class rx_path(gr.hier_block2): @@ -35,17 +35,17 @@ class rx_path(gr.hier_block2): self._spc = int(rate/2e6) # Convert incoming I/Q baseband to amplitude - self._demod = gr.complex_to_mag() + self._demod = blocks.complex_to_mag() self._bb = self._demod # Pulse matched filter for 0.5us pulses if use_pmf: - self._pmf = gr.moving_average_ff(self._spc, 1.0/self._spc)#, self._rate) + self._pmf = blocks.moving_average_ff(self._spc, 1.0/self._spc)#, self._rate) self.connect(self._demod, self._pmf) self._bb = self._pmf # Establish baseline amplitude (noise, interference) - self._avg = gr.moving_average_ff(48*self._spc, 1.0/(48*self._spc))#, self._rate) # 3 preambles + self._avg = blocks.moving_average_ff(48*self._spc, 1.0/(48*self._spc))#, self._rate) # 3 preambles # Synchronize to Mode-S preamble self._sync = air_modes_swig.modes_preamble(self._rate, self._threshold) diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt index 9b22303..dfde7b4 100644 --- a/swig/CMakeLists.txt +++ b/swig/CMakeLists.txt @@ -31,11 +31,8 @@ include(GrPython) ######################################################################## # Setup swig generation ######################################################################## -foreach(incdir ${GNURADIO_CORE_INCLUDE_DIRS}) - list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/swig) -endforeach(incdir) -foreach(incdir ${GRUEL_INCLUDE_DIRS}) - list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gruel/swig) +foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS}) + list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig) endforeach(incdir) set(GR_SWIG_LIBRARIES air_modes) diff --git a/swig/air_modes.i b/swig/air_modes.i index a616b55..556f6d6 100644 --- a/swig/air_modes.i +++ b/swig/air_modes.i @@ -5,7 +5,7 @@ %{ #include "air_modes_preamble.h" #include "air_modes_slicer.h" -#include +#include %} // ---------------------------------------------------------------- @@ -21,7 +21,7 @@ GR_SWIG_BLOCK_MAGIC(air,modes_preamble); air_modes_preamble_sptr air_make_modes_preamble (int channel_rate, float threshold_db); -class air_modes_preamble : public gr_sync_block +class air_modes_preamble : public gr::sync_block { set_rate(int channel_rate); set_threshold(float threshold_db); @@ -32,13 +32,13 @@ private: GR_SWIG_BLOCK_MAGIC(air,modes_slicer); -air_modes_slicer_sptr air_make_modes_slicer (int channel_rate, gr_msg_queue_sptr queue); +air_modes_slicer_sptr air_make_modes_slicer (int channel_rate, gr::msg_queue::sptr queue); -class air_modes_slicer : public gr_block +class air_modes_slicer : public gr::block { set_rate(int channel_rate); private: - air_modes_slicer (int channel_rate, gr_msg_queue_sptr queue); + air_modes_slicer (int channel_rate, gr::msg_queue::sptr queue); }; // ----------------------------------------------------------------