[hamradio-commits] [gnss-sdr] 197/236: Split the message collector block in a separated object inside channel

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Tue Apr 26 16:02:53 UTC 2016


This is an automated email from the git hooks/post-receive script.

carles_fernandez-guest pushed a commit to branch next
in repository gnss-sdr.

commit 853e314bf07b4b839af75497e4fd0316910166ed
Author: Javier Arribas <javiarribas at gmail.com>
Date:   Mon Apr 18 14:17:09 2016 +0200

    Split the message collector block in a separated object inside channel
---
 src/algorithms/channel/adapters/channel.cc         | 50 ++----------
 src/algorithms/channel/adapters/channel.h          |  7 +-
 src/algorithms/channel/libs/CMakeLists.txt         |  5 +-
 .../channel/libs/channel_msg_receiver_cc.cc        | 94 ++++++++++++++++++++++
 .../channel/libs/channel_msg_receiver_cc.h         | 60 ++++++++++++++
 5 files changed, 169 insertions(+), 47 deletions(-)

diff --git a/src/algorithms/channel/adapters/channel.cc b/src/algorithms/channel/adapters/channel.cc
index 9c0de5e..9928566 100644
--- a/src/algorithms/channel/adapters/channel.cc
+++ b/src/algorithms/channel/adapters/channel.cc
@@ -37,55 +37,17 @@
 #include "tracking_interface.h"
 #include "telemetry_decoder_interface.h"
 #include "configuration_interface.h"
+#include "channel_msg_receiver_cc.h"
 
 using google::LogMessage;
 
-void Channel::msg_handler_events(pmt::pmt_t msg)
-{
-    try {
-        long int message=pmt::to_long(msg);
-        switch (message)
-        {
-        case 1: //positive acquisition
-            DLOG(INFO) << "Channel " << channel_ << " ACQ SUCCESS satellite " <<
-                gnss_synchro_.System << " " << gnss_synchro_.PRN;
-            channel_fsm_.Event_valid_acquisition();
-            break;
-        case 2: //negative acquisition
-            DLOG(INFO) << "Channel " << channel_
-                << " ACQ FAILED satellite " << gnss_synchro_.System << " " << gnss_synchro_.PRN;
-            if (repeat_ == true)
-                {
-                    channel_fsm_.Event_failed_acquisition_repeat();
-                }
-            else
-                {
-                    channel_fsm_.Event_failed_acquisition_no_repeat();
-                }
-            break;
-        case 3: // tracking loss of lock event
-            channel_fsm_.Event_failed_tracking_standby();
-            break;
-        default:
-            LOG(WARNING) << "Default case, invalid message.";
-            break;
-        }
-    }catch(boost::bad_any_cast& e)
-    {
-            LOG(WARNING) << "msg_handler_telemetry Bad any cast!\n";
-    }
-}
 // Constructor
 Channel::Channel(ConfigurationInterface *configuration, unsigned int channel,
         GNSSBlockInterface *pass_through, AcquisitionInterface *acq,
         TrackingInterface *trk, TelemetryDecoderInterface *nav,
-        std::string role, std::string implementation, boost::shared_ptr<gr::msg_queue> queue) :
-        gr::block("galileo_e1_pvt_cc", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0))
+        std::string role, std::string implementation, boost::shared_ptr<gr::msg_queue> queue)
 {
 
-    this->message_port_register_in(pmt::mp("events"));
-    this->set_msg_handler(pmt::mp("events"), boost::bind(&Channel::msg_handler_events, this, _1));
-
     pass_through_=pass_through;
     acq_=acq;
     trk_=trk;
@@ -133,11 +95,15 @@ Channel::Channel(ConfigurationInterface *configuration, unsigned int channel,
 
     connected_ = false;
     gnss_signal_ = Gnss_Signal();
+
+    chennel_msg_rx= channel_msg_receiver_make_cc(&channel_fsm_, repeat_);
+
 }
 
 // Destructor
 Channel::~Channel()
 {
+    channel_fsm_.terminate();
 }
 
 void Channel::connect(gr::top_block_sptr top_block)
@@ -165,8 +131,8 @@ void Channel::connect(gr::top_block_sptr top_block)
     DLOG(INFO) << "MSG FEEDBACK CHANNEL telemetry_decoder -> tracking";
 
     //std::cout<<"has port: "<<trk_->get_right_block()->has_msg_port(pmt::mp("events"))<<std::endl;
-    top_block->msg_connect(acq_->get_right_block(),pmt::mp("events"), gr::basic_block_sptr(this),pmt::mp("events"));
-    top_block->msg_connect(trk_->get_right_block(),pmt::mp("events"), gr::basic_block_sptr(this),pmt::mp("events"));
+    top_block->msg_connect(acq_->get_right_block(),pmt::mp("events"), chennel_msg_rx,pmt::mp("events"));
+    top_block->msg_connect(trk_->get_right_block(),pmt::mp("events"), chennel_msg_rx,pmt::mp("events"));
 
     connected_ = true;
 }
diff --git a/src/algorithms/channel/adapters/channel.h b/src/algorithms/channel/adapters/channel.h
index b82ee8a..0f9e33b 100644
--- a/src/algorithms/channel/adapters/channel.h
+++ b/src/algorithms/channel/adapters/channel.h
@@ -42,7 +42,7 @@
 #include "channel_interface.h"
 #include "channel_fsm.h"
 #include "gnss_synchro.h"
-
+#include "channel_msg_receiver_cc.h"
 
 class ConfigurationInterface;
 class AcquisitionInterface;
@@ -55,7 +55,7 @@ class TelemetryDecoderInterface;
  * their interaction through a Finite State Machine
  *
  */
-class Channel: public ChannelInterface, public gr::block
+class Channel: public ChannelInterface
 {
 
 public:
@@ -87,6 +87,7 @@ public:
 
 
 private:
+    channel_msg_receiver_cc_sptr chennel_msg_rx;
     GNSSBlockInterface *pass_through_;
     AcquisitionInterface *acq_;
     TrackingInterface *trk_;
@@ -97,8 +98,6 @@ private:
     Gnss_Synchro gnss_synchro_;
     Gnss_Signal gnss_signal_;
     bool connected_;
-    //bool stop_;
-    //int message_;
     bool repeat_;
     ChannelFsm channel_fsm_;
     boost::shared_ptr<gr::msg_queue> queue_;
diff --git a/src/algorithms/channel/libs/CMakeLists.txt b/src/algorithms/channel/libs/CMakeLists.txt
index badf5f8..e169fd4 100644
--- a/src/algorithms/channel/libs/CMakeLists.txt
+++ b/src/algorithms/channel/libs/CMakeLists.txt
@@ -16,7 +16,10 @@
 # along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
 #
 
-set(CHANNEL_FSM_SOURCES channel_fsm.cc )
+set(CHANNEL_FSM_SOURCES 
+    channel_fsm.cc 
+    channel_msg_receiver_cc.cc
+    )
 
 include_directories(
      $(CMAKE_CURRENT_SOURCE_DIR)
diff --git a/src/algorithms/channel/libs/channel_msg_receiver_cc.cc b/src/algorithms/channel/libs/channel_msg_receiver_cc.cc
new file mode 100644
index 0000000..9eebfe0
--- /dev/null
+++ b/src/algorithms/channel/libs/channel_msg_receiver_cc.cc
@@ -0,0 +1,94 @@
+/*!
+ * \file channel_msg_receiver_cc.cc
+ * \brief GNURadio block that receives asynchronous channel messages from acquisition and tracking blocks
+ * \author Javier Arribas, 2016. jarribas(at)cttc.es
+ *
+ * -------------------------------------------------------------------------
+ *
+ * Copyright (C) 2010-2016  (see AUTHORS file for a list of contributors)
+ *
+ * GNSS-SDR is a software defined Global Navigation
+ *          Satellite Systems receiver
+ *
+ * This file is part of GNSS-SDR.
+ *
+ * GNSS-SDR 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 of the License, or
+ * (at your option) any later version.
+ *
+ * GNSS-SDR 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 GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * -------------------------------------------------------------------------
+ */
+
+
+#include "channel_msg_receiver_cc.h"
+#include <gnuradio/gr_complex.h>
+#include <gnuradio/io_signature.h>
+#include <glog/logging.h>
+
+using google::LogMessage;
+
+
+channel_msg_receiver_cc_sptr channel_msg_receiver_make_cc(ChannelFsm* channel_fsm,  bool repeat)
+{
+    return channel_msg_receiver_cc_sptr(new channel_msg_receiver_cc(channel_fsm, repeat));
+}
+
+void channel_msg_receiver_cc::msg_handler_events(pmt::pmt_t msg)
+{
+    try {
+        long int message=pmt::to_long(msg);
+        switch (message)
+        {
+        case 1: //positive acquisition
+            //DLOG(INFO) << "Channel " << channel_ << " ACQ SUCCESS satellite " <<
+            //    gnss_synchro_.System << " " << gnss_synchro_.PRN;
+            d_channel_fsm->Event_valid_acquisition();
+            break;
+        case 2: //negative acquisition
+            //DLOG(INFO) << "Channel " << channel_
+            //    << " ACQ FAILED satellite " << gnss_synchro_.System << " " << gnss_synchro_.PRN;
+            if (d_repeat == true)
+                {
+                    d_channel_fsm->Event_failed_acquisition_repeat();
+                }
+            else
+                {
+                    d_channel_fsm->Event_failed_acquisition_no_repeat();
+                }
+            break;
+        case 3: // tracking loss of lock event
+            d_channel_fsm->Event_failed_tracking_standby();
+            break;
+        default:
+            LOG(WARNING) << "Default case, invalid message.";
+            break;
+        }
+    }catch(boost::bad_any_cast& e)
+    {
+            LOG(WARNING) << "msg_handler_telemetry Bad any cast!\n";
+    }
+}
+
+channel_msg_receiver_cc::channel_msg_receiver_cc(ChannelFsm* channel_fsm, bool repeat) :
+    gr::block("channel_msg_receiver_cc", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0))
+{
+
+    this->message_port_register_in(pmt::mp("events"));
+    this->set_msg_handler(pmt::mp("events"), boost::bind(&channel_msg_receiver_cc::msg_handler_events, this, _1));
+
+    d_channel_fsm=channel_fsm;
+    d_repeat=repeat;
+}
+
+channel_msg_receiver_cc::~channel_msg_receiver_cc()
+{}
+
diff --git a/src/algorithms/channel/libs/channel_msg_receiver_cc.h b/src/algorithms/channel/libs/channel_msg_receiver_cc.h
new file mode 100644
index 0000000..1ba0519
--- /dev/null
+++ b/src/algorithms/channel/libs/channel_msg_receiver_cc.h
@@ -0,0 +1,60 @@
+/*!
+ * \file channel_msg_receiver_cc.h
+ * \brief GNURadio block that receives asynchronous channel messages from acquisition and tracking blocks
+ * \author Javier Arribas, 2016. jarribas(at)cttc.es
+ *
+ * -------------------------------------------------------------------------
+ *
+ * Copyright (C) 2010-2016  (see AUTHORS file for a list of contributors)
+ *
+ * GNSS-SDR is a software defined Global Navigation
+ *          Satellite Systems receiver
+ *
+ * This file is part of GNSS-SDR.
+ *
+ * GNSS-SDR 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 of the License, or
+ * (at your option) any later version.
+ *
+ * GNSS-SDR 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 GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#ifndef GNSS_SDR_CHANNEL_MSG_RECEIVER_CC_H
+#define GNSS_SDR_CHANNEL_MSG_RECEIVER_CC_H
+
+#include <gnuradio/block.h>
+#include "channel_fsm.h"
+
+class channel_msg_receiver_cc;
+
+typedef boost::shared_ptr<channel_msg_receiver_cc> channel_msg_receiver_cc_sptr;
+
+channel_msg_receiver_cc_sptr channel_msg_receiver_make_cc(ChannelFsm* channel_fsm, bool repeat);
+
+/*!
+ * \brief This class implements a block that computes the PVT solution with Galileo E1 signals
+ */
+class channel_msg_receiver_cc : public gr::block
+{
+private:
+    ChannelFsm* d_channel_fsm;
+    bool d_repeat; // todo: change FSM to include repeat value
+    friend channel_msg_receiver_cc_sptr channel_msg_receiver_make_cc(ChannelFsm* channel_fsm, bool repeat);
+    void msg_handler_events(pmt::pmt_t msg);
+    channel_msg_receiver_cc(ChannelFsm* channel_fsm, bool repeat);
+
+public:
+    ~channel_msg_receiver_cc (); //!< Default destructor
+
+};
+
+#endif

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/gnss-sdr.git



More information about the pkg-hamradio-commits mailing list