From 1ce4469fd20a466984607ce0d075cb213e9c86f9 Mon Sep 17 00:00:00 2001 From: Roman Khassraf Date: Mon, 3 Aug 2015 11:16:10 +0200 Subject: Renamed burst_sink_qa/burst_source_qa to burst_sink/burst_source --- lib/qa_utils/burst_source_impl.cc | 162 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 lib/qa_utils/burst_source_impl.cc (limited to 'lib/qa_utils/burst_source_impl.cc') diff --git a/lib/qa_utils/burst_source_impl.cc b/lib/qa_utils/burst_source_impl.cc new file mode 100644 index 0000000..7391872 --- /dev/null +++ b/lib/qa_utils/burst_source_impl.cc @@ -0,0 +1,162 @@ +/* -*- c++ -*- */ +/* @file + * @author Roman Khassraf + * @section LICENSE + * + * Gr-gsm 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. + * + * Gr-gsm 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 gr-gsm; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include "burst_source_impl.h" +#include "stdio.h" +#include +#include +#include + +#define PMT_SIZE 174 + +namespace gr { + namespace gsm { + + burst_source::sptr + burst_source::make(const std::vector &framenumbers, + const std::vector ×lots, + const std::vector &burst_data) + { + return gnuradio::get_initial_sptr + (new burst_source_impl(framenumbers, timeslots, burst_data)); + } + + /* + * The private constructor + */ + burst_source_impl::burst_source_impl(const std::vector &framenumbers, + const std::vector ×lots, + const std::vector &burst_data) + : gr::block("burst_source", + gr::io_signature::make(0, 0, 0), + gr::io_signature::make(0, 0, 0)), + d_finished(false) + { + message_port_register_out(pmt::mp("out")); + set_framenumbers(framenumbers); + set_timeslots(timeslots); + set_burst_data(burst_data); + } + + /* + * Our virtual destructor. + */ + burst_source_impl::~burst_source_impl() + { + if (d_finished == false){ + d_finished = true; + } + } + + void burst_source_impl::set_framenumbers(const std::vector &framenumbers) + { + d_framenumbers = framenumbers; + } + + void burst_source_impl::set_timeslots(const std::vector ×lots) + { + d_timeslots = timeslots; + } + + void burst_source_impl::set_burst_data(const std::vector &burst_data) + { + d_burst_data = burst_data; + } + + bool burst_source_impl::start() + { + d_finished = false; + d_thread = boost::shared_ptr + (new gr::thread::thread(boost::bind(&burst_source_impl::run, this))); + return block::start(); + } + + bool burst_source_impl::stop() + { + d_finished = true; + d_thread->interrupt(); + d_thread->join(); + return block::stop(); + } + + bool burst_source_impl::finished() + { + return d_finished; + } + + void burst_source_impl::run() + { + char *unserialized = (char*)malloc(sizeof(char) * PMT_SIZE); + + for (int i=0; i= 0 && d_timeslots[i] <= 7 && + d_framenumbers[i] >= 0 && d_framenumbers[i] <= (26 * 51 * 2048 - 1)) + { + boost::scoped_ptr tap_header(new gsmtap_hdr()); + + tap_header->version = GSMTAP_VERSION; + tap_header->hdr_len = sizeof(gsmtap_hdr)/4; + tap_header->type = GSMTAP_TYPE_UM_BURST; + tap_header->timeslot = d_timeslots[i]; + tap_header->frame_number = htobe32(d_framenumbers[i]); + tap_header->sub_type = GSMTAP_BURST_NORMAL; + tap_header->arfcn = 0; + tap_header->signal_dbm = 0; + tap_header->snr_db = 0; + + uint8_t burst[BURST_SIZE]; + + for (int j=0; j