diff options
-rw-r--r-- | grc/gsm_block_tree.xml | 1 | ||||
-rw-r--r-- | grc/misc_utils/CMakeLists.txt | 3 | ||||
-rw-r--r-- | grc/misc_utils/gsm_burst_sink_qa.xml | 12 | ||||
-rw-r--r-- | include/grgsm/misc_utils/CMakeLists.txt | 1 | ||||
-rw-r--r-- | include/grgsm/misc_utils/burst_sink_qa.h | 60 | ||||
-rw-r--r-- | lib/CMakeLists.txt | 1 | ||||
-rw-r--r-- | lib/misc_utils/burst_sink_qa_impl.cc | 110 | ||||
-rw-r--r-- | lib/misc_utils/burst_sink_qa_impl.h | 51 | ||||
-rw-r--r-- | swig/grgsm_swig.i | 3 |
9 files changed, 241 insertions, 1 deletions
diff --git a/grc/gsm_block_tree.xml b/grc/gsm_block_tree.xml index e75197c..2503710 100644 --- a/grc/gsm_block_tree.xml +++ b/grc/gsm_block_tree.xml @@ -42,6 +42,7 @@ <block>gsm_bursts_printer</block> <block>gsm_burst_sink</block> <block>gsm_burst_source</block> + <block>gsm_burst_sink_qa</block> <block>gsm_burst_source_qa</block> <block>gsm_extract_system_info</block> <block>gsm_extract_immediate_assignment</block> diff --git a/grc/misc_utils/CMakeLists.txt b/grc/misc_utils/CMakeLists.txt index 89c4650..5a3f874 100644 --- a/grc/misc_utils/CMakeLists.txt +++ b/grc/misc_utils/CMakeLists.txt @@ -28,5 +28,6 @@ install(FILES gsm_tmsi_dumper.xml gsm_burst_sink.xml gsm_burst_source.xml - gsm_burst_source_qa.xml DESTINATION share/gnuradio/grc/blocks + gsm_burst_source_qa.xml + gsm_burst_sink_qa.xml DESTINATION share/gnuradio/grc/blocks ) diff --git a/grc/misc_utils/gsm_burst_sink_qa.xml b/grc/misc_utils/gsm_burst_sink_qa.xml new file mode 100644 index 0000000..c028da3 --- /dev/null +++ b/grc/misc_utils/gsm_burst_sink_qa.xml @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<block> + <name>QA Burst sink</name> + <key>gsm_burst_sink_qa</key> + <import>import grgsm</import> + <make>grgsm.burst_sink_qa()</make> + + <sink> + <name>in</name> + <type>message</type> + </sink> +</block> diff --git a/include/grgsm/misc_utils/CMakeLists.txt b/include/grgsm/misc_utils/CMakeLists.txt index adedf1d..8b74fc7 100644 --- a/include/grgsm/misc_utils/CMakeLists.txt +++ b/include/grgsm/misc_utils/CMakeLists.txt @@ -24,6 +24,7 @@ install(FILES bursts_printer.h burst_sink.h burst_source.h + burst_sink_qa.h burst_source_qa.h extract_system_info.h extract_immediate_assignment.h diff --git a/include/grgsm/misc_utils/burst_sink_qa.h b/include/grgsm/misc_utils/burst_sink_qa.h new file mode 100644 index 0000000..3b5cac2 --- /dev/null +++ b/include/grgsm/misc_utils/burst_sink_qa.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* @file + * @author Roman Khassraf <rkhassraf@gmail.com> + * @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. + * + */ + +#ifndef INCLUDED_GSM_BURST_SINK_QA_H +#define INCLUDED_GSM_BURST_SINK_QA_H + +#include <grgsm/api.h> +#include <gnuradio/block.h> + +namespace gr { + namespace gsm { + + /*! + * \brief <+description of block+> + * \ingroup gsm + * + */ + class GSM_API burst_sink_qa : virtual public gr::block + { + public: + typedef boost::shared_ptr<burst_sink_qa> sptr; + + /*! + * \brief Return a shared_ptr to a new instance of grgsm::burst_sink_qa. + * + * To avoid accidental use of raw pointers, grgsm::burst_sink_qa's + * constructor is in a private implementation + * class. grgsm::burst_sink_qa::make is the public interface for + * creating new instances. + */ + static sptr make(); + + virtual std::vector<int> get_framenumbers() = 0; + virtual std::vector<int> get_timeslots() = 0; + virtual std::vector<std::string> get_burst_data() = 0; + }; + } // namespace gsm +} // namespace gr + +#endif /* INCLUDED_GSM_BURST_SINK_QA_H */ + diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 1f3570e..61f0858 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -52,6 +52,7 @@ list(APPEND grgsm_sources misc_utils/tmsi_dumper_impl.cc misc_utils/burst_sink_impl.cc misc_utils/burst_source_impl.cc + misc_utils/burst_sink_qa_impl.cc misc_utils/burst_source_qa_impl.cc decryption/decryption_impl.cc ) diff --git a/lib/misc_utils/burst_sink_qa_impl.cc b/lib/misc_utils/burst_sink_qa_impl.cc new file mode 100644 index 0000000..aa9df9d --- /dev/null +++ b/lib/misc_utils/burst_sink_qa_impl.cc @@ -0,0 +1,110 @@ +/* -*- c++ -*- */ +/* @file + * @author Roman Khassraf <rkhassraf@gmail.com> + * @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 <gnuradio/io_signature.h> +#include "burst_sink_qa_impl.h" +#include <stdio.h> +#include <sstream> +#include <grgsm/gsmtap.h> + +namespace gr { + namespace gsm { + + burst_sink_qa::sptr + burst_sink_qa::make() + { + return gnuradio::get_initial_sptr + (new burst_sink_qa_impl()); + } + + /* + * The private constructor + */ + burst_sink_qa_impl::burst_sink_qa_impl() + : gr::block("burst_sink_qa", + gr::io_signature::make(0, 0, 0), + gr::io_signature::make(0, 0, 0)) + { + message_port_register_in(pmt::mp("in")); + set_msg_handler(pmt::mp("in"), boost::bind(&burst_sink_qa_impl::process_burst, this, _1)); + } + + /* + * Our virtual destructor. + */ + burst_sink_qa_impl::~burst_sink_qa_impl() + { +// for (int i=0; i<d_burst_data.size(); i++) +// { +// std::cout << d_framenumbers[i] << " " << d_timeslots[i] << " " << d_burst_data[i] << std::endl; +// } + } + + void burst_sink_qa_impl::process_burst(pmt::pmt_t msg) + { + pmt::pmt_t header_plus_burst = pmt::cdr(msg); + + gsmtap_hdr * header = (gsmtap_hdr *)pmt::blob_data(header_plus_burst); + int8_t * burst = (int8_t *)(pmt::blob_data(header_plus_burst))+sizeof(gsmtap_hdr); + size_t burst_len=pmt::blob_length(header_plus_burst)-sizeof(gsmtap_hdr); + uint32_t frame_nr = be32toh(header->frame_number); + + std::stringstream burst_str; + for(int i=0; i<burst_len; i++) + { + if (static_cast<int>(burst[i]) == 0) + { + burst_str << "0"; + } + else + { + burst_str << "1"; + } + } + + d_framenumbers.push_back(frame_nr); + d_timeslots.push_back(header->timeslot); + d_burst_data.push_back(burst_str.str()); + } + + std::vector<int> burst_sink_qa_impl::get_framenumbers() + { + return d_framenumbers; + } + + std::vector<int> burst_sink_qa_impl::get_timeslots() + { + return d_timeslots; + } + + std::vector<std::string> burst_sink_qa_impl::get_burst_data() + { + return d_burst_data; + } + + } /* namespace gsm */ +} /* namespace gr */ + diff --git a/lib/misc_utils/burst_sink_qa_impl.h b/lib/misc_utils/burst_sink_qa_impl.h new file mode 100644 index 0000000..412a0a1 --- /dev/null +++ b/lib/misc_utils/burst_sink_qa_impl.h @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* @file + * @author Roman Khassraf <rkhassraf@gmail.com> + * @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. + * + */ + +#ifndef INCLUDED_GSM_BURST_SINK_QA_IMPL_H +#define INCLUDED_GSM_BURST_SINK_QA_IMPL_H + +#include <grgsm/misc_utils/burst_sink_qa.h> +#include <fstream> + +namespace gr { + namespace gsm { + + class burst_sink_qa_impl : public burst_sink_qa + { + private: + std::vector<int> d_framenumbers; + std::vector<int> d_timeslots; + std::vector<std::string> d_burst_data; + public: + burst_sink_qa_impl(); + ~burst_sink_qa_impl(); + void process_burst(pmt::pmt_t msg); + virtual std::vector<int> get_framenumbers(); + virtual std::vector<int> get_timeslots(); + virtual std::vector<std::string> get_burst_data(); + }; + + } // namespace gsm +} // namespace gr + +#endif /* INCLUDED_GSM_BURST_SINK_QA_IMPL_H */ + diff --git a/swig/grgsm_swig.i b/swig/grgsm_swig.i index 07f6418..5dc1bcd 100644 --- a/swig/grgsm_swig.i +++ b/swig/grgsm_swig.i @@ -24,6 +24,7 @@ #include "grgsm/misc_utils/message_printer.h" #include "grgsm/misc_utils/tmsi_dumper.h" #include "grgsm/misc_utils/burst_sink.h" +#include "grgsm/misc_utils/burst_sink_qa.h" #include "grgsm/misc_utils/burst_source.h" #include "grgsm/misc_utils/burst_source_qa.h" %} @@ -55,6 +56,8 @@ GR_SWIG_BLOCK_MAGIC2(gsm, bursts_printer); GR_SWIG_BLOCK_MAGIC2(gsm, burst_sink); %include "grgsm/misc_utils/burst_source.h" GR_SWIG_BLOCK_MAGIC2(gsm, burst_source); +%include "grgsm/misc_utils/burst_sink_qa.h" +GR_SWIG_BLOCK_MAGIC2(gsm, burst_sink_qa); %include "grgsm/misc_utils/burst_source_qa.h" GR_SWIG_BLOCK_MAGIC2(gsm, burst_source_qa); %include "grgsm/misc_utils/extract_system_info.h" |