ros_thread.cpp
Go to the documentation of this file.
1 // *****************************************************************************
2 //
3 // Copyright (c) 2015, Southwest Research Institute® (SwRI®)
4 // All rights reserved.
5 //
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are met:
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of Southwest Research Institute® (SwRI®) nor the
14 // names of its contributors may be used to endorse or promote products
15 // derived from this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 // ARE DISCLAIMED. IN NO EVENT SHALL Southwest Research Institute® BE LIABLE
21 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
27 // DAMAGE.
28 //
29 // *****************************************************************************
30 
31 #include <QCoreApplication>
33 
34 using namespace swri_console;
35 
36 RosThread::RosThread(int argc, char** argv) :
37  is_connected_(false),
38  is_running_(true)
39 {
40  ros::init(argc, argv, "swri_console",
43 }
44 
46 {
47  while (is_running_)
48  {
49  bool master_status = ros::master::check();
50 
51  if (!is_connected_ && master_status) {
52  startRos();
53  } else if (is_connected_ && !master_status) {
54  stopRos();
55  } else if (is_connected_ && master_status) {
56  ros::spinOnce();
57  Q_EMIT spun();
58  }
59  msleep(50);
60  }
61 }
62 
63 
65 {
66  is_running_ = false;
67  if (ros::isStarted())
68  {
69  ros::shutdown();
71  }
72 }
73 
75 {
76  ros::start();
77  is_connected_ = true;
78 
79  ros::NodeHandle nh;
80  rosout_sub_ = nh.subscribe("/rosout_agg", 10000,
82  this);
83  Q_EMIT connected(true);
84 }
85 
87 {
88  ros::shutdown();
89  is_connected_ = false;
90  Q_EMIT connected(false);
91 }
92 
93 void RosThread::handleRosout(const rosgraph_msgs::LogConstPtr &msg)
94 {
95  Q_EMIT logReceived(msg);
96 }
ROSCPP_DECL bool check()
ROSCPP_DECL void start()
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
volatile bool is_running_
Definition: ros_thread.h:76
RosThread(int argc, char **argv)
Definition: ros_thread.cpp:36
ros::Subscriber rosout_sub_
Definition: ros_thread.h:77
ROSCPP_DECL bool isStarted()
void logReceived(const rosgraph_msgs::LogConstPtr &msg)
void handleRosout(const rosgraph_msgs::LogConstPtr &msg)
Definition: ros_thread.cpp:93
ROSCPP_DECL void shutdown()
ROSCPP_DECL void spinOnce()
ROSCPP_DECL void waitForShutdown()


swri_console
Author(s):
autogenerated on Fri Apr 3 2020 03:20:03