aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/grgsm/CMakeLists.txt3
-rw-r--r--include/grgsm/flow_control/CMakeLists.txt28
-rw-r--r--include/grgsm/flow_control/burst_fnr_filter.h64
-rw-r--r--include/grgsm/flow_control/burst_sdcch_subslot_splitter.h61
-rw-r--r--include/grgsm/flow_control/burst_timeslot_splitter.h (renamed from include/grgsm/misc_utils/burst_sink_qa.h)21
-rw-r--r--include/grgsm/flow_control/dummy_burst_filter.h55
-rw-r--r--include/grgsm/misc_utils/CMakeLists.txt8
-rw-r--r--include/grgsm/misc_utils/burst_file_sink.h (renamed from include/grgsm/misc_utils/burst_source.h)17
-rw-r--r--include/grgsm/misc_utils/burst_file_source.h57
-rw-r--r--include/grgsm/misc_utils/bursts_printer.h3
-rw-r--r--include/grgsm/misc_utils/message_printer.h2
-rw-r--r--include/grgsm/qa_utils/CMakeLists.txt28
-rw-r--r--include/grgsm/qa_utils/burst_sink.h (renamed from include/grgsm/misc_utils/burst_sink.h)6
-rw-r--r--include/grgsm/qa_utils/burst_source.h (renamed from include/grgsm/misc_utils/burst_source_qa.h)16
-rw-r--r--include/grgsm/qa_utils/message_sink.h60
-rw-r--r--include/grgsm/qa_utils/message_source.h60
16 files changed, 450 insertions, 39 deletions
diff --git a/include/grgsm/CMakeLists.txt b/include/grgsm/CMakeLists.txt
index fd44c54..e9f6cc2 100644
--- a/include/grgsm/CMakeLists.txt
+++ b/include/grgsm/CMakeLists.txt
@@ -32,4 +32,5 @@ add_subdirectory(decryption)
add_subdirectory(demapping)
add_subdirectory(receiver)
add_subdirectory(misc_utils)
-
+add_subdirectory(qa_utils)
+add_subdirectory(flow_control)
diff --git a/include/grgsm/flow_control/CMakeLists.txt b/include/grgsm/flow_control/CMakeLists.txt
new file mode 100644
index 0000000..0a1a95a
--- /dev/null
+++ b/include/grgsm/flow_control/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright 2011,2012 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio 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.
+#
+# GNU Radio 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 GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install public header files
+########################################################################
+install(FILES
+ burst_timeslot_splitter.h
+ burst_sdcch_subslot_splitter.h
+ burst_fnr_filter.h
+ dummy_burst_filter.h DESTINATION include/grgsm/flow_control
+)
diff --git a/include/grgsm/flow_control/burst_fnr_filter.h b/include/grgsm/flow_control/burst_fnr_filter.h
new file mode 100644
index 0000000..9451d58
--- /dev/null
+++ b/include/grgsm/flow_control/burst_fnr_filter.h
@@ -0,0 +1,64 @@
+/* -*- 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_FNR_FILTER_H
+#define INCLUDED_GSM_BURST_FNR_FILTER_H
+
+#include <grgsm/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+ namespace gsm {
+
+ enum filter_mode
+ {
+ FILTER_LESS_OR_EQUAL,
+ FILTER_GREATER_OR_EQUAL
+ };
+
+ /*!
+ * \brief <+description of block+>
+ * \ingroup gsm
+ *
+ */
+ class GSM_API burst_fnr_filter : virtual public gr::block
+ {
+ public:
+ typedef boost::shared_ptr<burst_fnr_filter> sptr;
+
+ /*!
+ * \brief Return a shared_ptr to a new instance of gsm::burst_fnr_filter.
+ *
+ * To avoid accidental use of raw pointers, gsm::burst_fnr_filter's
+ * constructor is in a private implementation
+ * class. gsm::burst_fnr_filter::make is the public interface for
+ * creating new instances.
+ */
+ static sptr make(filter_mode mode, unsigned int fnr);
+
+ };
+
+ } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_BURST_FNR_FILTER_H */
diff --git a/include/grgsm/flow_control/burst_sdcch_subslot_splitter.h b/include/grgsm/flow_control/burst_sdcch_subslot_splitter.h
new file mode 100644
index 0000000..aee2a24
--- /dev/null
+++ b/include/grgsm/flow_control/burst_sdcch_subslot_splitter.h
@@ -0,0 +1,61 @@
+/* -*- 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_SDCCH_SUBSLOT_SPLITTER_H
+#define INCLUDED_GSM_BURST_SDCCH_SUBSLOT_SPLITTER_H
+
+#include <grgsm/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+ namespace gsm {
+
+ enum splitter_mode
+ {
+ SPLITTER_SDCCH8,
+ SPLITTER_SDCCH4
+ };
+
+ /*!
+ * \brief <+description of block+>
+ * \ingroup gsm
+ *
+ */
+ class GSM_API burst_sdcch_subslot_splitter : virtual public gr::block
+ {
+ public:
+ typedef boost::shared_ptr<burst_sdcch_subslot_splitter> sptr;
+
+ /*!
+ * \brief Return a shared_ptr to a new instance of grgsm::burst_sdcch_subslot_splitter.
+ *
+ * To avoid accidental use of raw pointers, grgsm::burst_sdcch_subslot_splitter's
+ * constructor is in a private implementation
+ * class. grgsm::burst_sdcch_subslot_splitter::make is the public interface for
+ * creating new instances.
+ */
+ static sptr make(splitter_mode mode);
+ };
+ } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_BURST_SDCCH_SUBSLOT_SPLITTER_H */
diff --git a/include/grgsm/misc_utils/burst_sink_qa.h b/include/grgsm/flow_control/burst_timeslot_splitter.h
index 3b5cac2..ee6298e 100644
--- a/include/grgsm/misc_utils/burst_sink_qa.h
+++ b/include/grgsm/flow_control/burst_timeslot_splitter.h
@@ -20,8 +20,8 @@
*
*/
-#ifndef INCLUDED_GSM_BURST_SINK_QA_H
-#define INCLUDED_GSM_BURST_SINK_QA_H
+#ifndef INCLUDED_GSM_BURST_TIMESLOT_SPLITTER_H
+#define INCLUDED_GSM_BURST_TIMESLOT_SPLITTER_H
#include <grgsm/api.h>
#include <gnuradio/block.h>
@@ -34,27 +34,22 @@ namespace gr {
* \ingroup gsm
*
*/
- class GSM_API burst_sink_qa : virtual public gr::block
+ class GSM_API burst_timeslot_splitter : virtual public gr::block
{
public:
- typedef boost::shared_ptr<burst_sink_qa> sptr;
+ typedef boost::shared_ptr<burst_timeslot_splitter> sptr;
/*!
- * \brief Return a shared_ptr to a new instance of grgsm::burst_sink_qa.
+ * \brief Return a shared_ptr to a new instance of grgsm::burst_timeslot_splitter.
*
- * To avoid accidental use of raw pointers, grgsm::burst_sink_qa's
+ * To avoid accidental use of raw pointers, grgsm::burst_timeslot_splitter's
* constructor is in a private implementation
- * class. grgsm::burst_sink_qa::make is the public interface for
+ * class. grgsm::burst_timeslot_splitter::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 */
-
+#endif /* INCLUDED_GSM_BURST_TIMESLOT_SPLITTER_H */
diff --git a/include/grgsm/flow_control/dummy_burst_filter.h b/include/grgsm/flow_control/dummy_burst_filter.h
new file mode 100644
index 0000000..0922433
--- /dev/null
+++ b/include/grgsm/flow_control/dummy_burst_filter.h
@@ -0,0 +1,55 @@
+/* -*- 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_DUMMY_BURST_FILTER_H
+#define INCLUDED_GSM_DUMMY_BURST_FILTER_H
+
+#include <grgsm/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+ namespace gsm {
+
+ /*!
+ * \brief <+description of block+>
+ * \ingroup gsm
+ *
+ */
+ class GSM_API dummy_burst_filter : virtual public gr::block
+ {
+ public:
+ typedef boost::shared_ptr<dummy_burst_filter> sptr;
+
+ /*!
+ * \brief Return a shared_ptr to a new instance of grgsm::dummy_burst_filter.
+ *
+ * To avoid accidental use of raw pointers, grgsm::dummy_burst_filter's
+ * constructor is in a private implementation
+ * class. grgsm::dummy_burst_filter::make is the public interface for
+ * creating new instances.
+ */
+ static sptr make();
+ };
+ } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_DUMMY_BURST_FILTER_H */
diff --git a/include/grgsm/misc_utils/CMakeLists.txt b/include/grgsm/misc_utils/CMakeLists.txt
index a7b9d67..d85ac21 100644
--- a/include/grgsm/misc_utils/CMakeLists.txt
+++ b/include/grgsm/misc_utils/CMakeLists.txt
@@ -22,16 +22,14 @@
########################################################################
install(FILES
bursts_printer.h
- burst_sink.h
- burst_source.h
+ burst_file_source.h
+ burst_file_sink.h
message_file_sink.h
message_file_source.h
- burst_sink_qa.h
- burst_source_qa.h
extract_system_info.h
extract_immediate_assignment.h
controlled_rotator_cc.h
controlled_const_source_f.h
- message_printer.h
+ message_printer.h
tmsi_dumper.h DESTINATION include/grgsm/misc_utils
)
diff --git a/include/grgsm/misc_utils/burst_source.h b/include/grgsm/misc_utils/burst_file_sink.h
index bd8644f..7263baa 100644
--- a/include/grgsm/misc_utils/burst_source.h
+++ b/include/grgsm/misc_utils/burst_file_sink.h
@@ -20,8 +20,8 @@
*
*/
-#ifndef INCLUDED_GSM_BURST_SOURCE_H
-#define INCLUDED_GSM_BURST_SOURCE_H
+#ifndef INCLUDED_GSM_BURST_FILE_SINK_H
+#define INCLUDED_GSM_BURST_FILE_SINK_H
#include <grgsm/api.h>
#include <gnuradio/block.h>
@@ -34,24 +34,23 @@ namespace gr {
* \ingroup gsm
*
*/
- class GSM_API burst_source : virtual public gr::block
+ class GSM_API burst_file_sink : virtual public gr::block
{
public:
- typedef boost::shared_ptr<burst_source> sptr;
+ typedef boost::shared_ptr<burst_file_sink> sptr;
/*!
- * \brief Return a shared_ptr to a new instance of grgsm::burst_source.
+ * \brief Return a shared_ptr to a new instance of grgsm::burst_file_sink.
*
- * To avoid accidental use of raw pointers, grgsm::burst_source's
+ * To avoid accidental use of raw pointers, grgsm::burst_file_sink's
* constructor is in a private implementation
- * class. grgsm::burst_source::make is the public interface for
+ * class. grgsm::burst_file_sink::make is the public interface for
* creating new instances.
*/
static sptr make(const std::string &filename);
};
-
} // namespace gsm
} // namespace gr
-#endif /* INCLUDED_GSM_BURST_SOURCE_H */
+#endif /* INCLUDED_GSM_BURST_FILE_SINK_H */
diff --git a/include/grgsm/misc_utils/burst_file_source.h b/include/grgsm/misc_utils/burst_file_source.h
new file mode 100644
index 0000000..e18ef44
--- /dev/null
+++ b/include/grgsm/misc_utils/burst_file_source.h
@@ -0,0 +1,57 @@
+/* -*- 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_FILE_SOURCE_H
+#define INCLUDED_GSM_BURST_FILE_SOURCE_H
+
+#include <grgsm/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+ namespace gsm {
+
+ /*!
+ * \brief <+description of block+>
+ * \ingroup gsm
+ *
+ */
+ class GSM_API burst_file_source : virtual public gr::block
+ {
+ public:
+ typedef boost::shared_ptr<burst_file_source> sptr;
+
+ /*!
+ * \brief Return a shared_ptr to a new instance of grgsm::burst_file_source.
+ *
+ * To avoid accidental use of raw pointers, grgsm::burst_file_source's
+ * constructor is in a private implementation
+ * class. grgsm::burst_file_source::make is the public interface for
+ * creating new instances.
+ */
+ static sptr make(const std::string &filename);
+ };
+
+ } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_BURST_FILE_SOURCE_H */
+
diff --git a/include/grgsm/misc_utils/bursts_printer.h b/include/grgsm/misc_utils/bursts_printer.h
index 099bf08..eb006c5 100644
--- a/include/grgsm/misc_utils/bursts_printer.h
+++ b/include/grgsm/misc_utils/bursts_printer.h
@@ -51,7 +51,8 @@ namespace gr {
* creating new instances.
*/
static sptr make(pmt::pmt_t prepend_string, bool prepend_fnr=false,
- bool prepend_frame_count=false, bool print_payload_only=false);
+ bool prepend_frame_count=false, bool print_payload_only=false,
+ bool ignore_dummy_bursts=false);
};
} // namespace gsm
diff --git a/include/grgsm/misc_utils/message_printer.h b/include/grgsm/misc_utils/message_printer.h
index 3914707..d40352f 100644
--- a/include/grgsm/misc_utils/message_printer.h
+++ b/include/grgsm/misc_utils/message_printer.h
@@ -48,7 +48,7 @@ namespace gr {
* class. gsm::message_printer::make is the public interface for
* creating new instances.
*/
- static sptr make(pmt::pmt_t prepend_string);
+ static sptr make(pmt::pmt_t prepend_string, bool print_gsmtap_header=false);
};
} // namespace gsm
diff --git a/include/grgsm/qa_utils/CMakeLists.txt b/include/grgsm/qa_utils/CMakeLists.txt
new file mode 100644
index 0000000..44bbbfb
--- /dev/null
+++ b/include/grgsm/qa_utils/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright 2011,2012 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio 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.
+#
+# GNU Radio 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 GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Install public header files
+########################################################################
+install(FILES
+ burst_sink.h
+ burst_source.h
+ message_source.h
+ message_sink.h DESTINATION include/grgsm/qa_utils
+)
diff --git a/include/grgsm/misc_utils/burst_sink.h b/include/grgsm/qa_utils/burst_sink.h
index 6903df9..266cbc8 100644
--- a/include/grgsm/misc_utils/burst_sink.h
+++ b/include/grgsm/qa_utils/burst_sink.h
@@ -47,7 +47,11 @@ namespace gr {
* class. grgsm::burst_sink::make is the public interface for
* creating new instances.
*/
- static sptr make(const std::string &filename);
+ 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
diff --git a/include/grgsm/misc_utils/burst_source_qa.h b/include/grgsm/qa_utils/burst_source.h
index c3c5713..bfed70f 100644
--- a/include/grgsm/misc_utils/burst_source_qa.h
+++ b/include/grgsm/qa_utils/burst_source.h
@@ -20,8 +20,8 @@
*
*/
-#ifndef INCLUDED_GSM_BURST_SOURCE_QA_H
-#define INCLUDED_GSM_BURST_SOURCE_QA_H
+#ifndef INCLUDED_GSM_BURST_SOURCE_H
+#define INCLUDED_GSM_BURST_SOURCE_H
#include <grgsm/api.h>
#include <gnuradio/block.h>
@@ -34,17 +34,17 @@ namespace gr {
* \ingroup gsm
*
*/
- class GSM_API burst_source_qa : virtual public gr::block
+ class GSM_API burst_source : virtual public gr::block
{
public:
- typedef boost::shared_ptr<burst_source_qa> sptr;
+ typedef boost::shared_ptr<burst_source> sptr;
/*!
- * \brief Return a shared_ptr to a new instance of grgsm::burst_source_qa.
+ * \brief Return a shared_ptr to a new instance of grgsm::burst_source.
*
- * To avoid accidental use of raw pointers, grgsm::burst_source_qa's
+ * To avoid accidental use of raw pointers, grgsm::burst_source's
* constructor is in a private implementation
- * class. grgsm::burst_source_qa::make is the public interface for
+ * class. grgsm::burst_source::make is the public interface for
* creating new instances.
*/
static sptr make(const std::vector<int> &framenumbers,
@@ -59,6 +59,6 @@ namespace gr {
} // namespace gsm
} // namespace gr
-#endif /* INCLUDED_GSM_BURST_SOURCE_QA_H */
+#endif /* INCLUDED_GSM_BURST_SOURCE_H */
diff --git a/include/grgsm/qa_utils/message_sink.h b/include/grgsm/qa_utils/message_sink.h
new file mode 100644
index 0000000..5cfe2f7
--- /dev/null
+++ b/include/grgsm/qa_utils/message_sink.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_MESSAGE_SINK_H
+#define INCLUDED_GSM_MESSAGE_SINK_H
+
+#include <grgsm/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+ namespace gsm {
+
+ /*!
+ * \brief <+description of block+>
+ * \ingroup gsm
+ *
+ */
+ class GSM_API message_sink : virtual public gr::block
+ {
+ public:
+ typedef boost::shared_ptr<message_sink> sptr;
+
+ /*!
+ * \brief Return a shared_ptr to a new instance of grgsm::message_sink.
+ *
+ * To avoid accidental use of raw pointers, grgsm::message_sink's
+ * constructor is in a private implementation
+ * class. grgsm::message_sink::make is the public interface for
+ * creating new instances.
+ */
+ static sptr make();
+
+ virtual std::vector<std::string> get_messages() = 0;
+ };
+
+ } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_MESSAGE_SINK_H */
+
diff --git a/include/grgsm/qa_utils/message_source.h b/include/grgsm/qa_utils/message_source.h
new file mode 100644
index 0000000..5c3e8a1
--- /dev/null
+++ b/include/grgsm/qa_utils/message_source.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_MESSAGE_SOURCE_H
+#define INCLUDED_GSM_MESSAGE_SOURCE_H
+
+#include <grgsm/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+ namespace gsm {
+
+ /*!
+ * \brief <+description of block+>
+ * \ingroup gsm
+ *
+ */
+ class GSM_API message_source : virtual public gr::block
+ {
+ public:
+ typedef boost::shared_ptr<message_source> sptr;
+
+ /*!
+ * \brief Return a shared_ptr to a new instance of grgsm::message_source.
+ *
+ * To avoid accidental use of raw pointers, grgsm::message_source's
+ * constructor is in a private implementation
+ * class. grgsm::message_source::make is the public interface for
+ * creating new instances.
+ */
+ static sptr make(const std::vector<std::string> &msg_data);
+
+ virtual void set_msg_data(const std::vector<std::string> &msg_data) = 0;
+ };
+
+ } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_MESSAGE_SOURCE_H */
+