communication_core.hpp
Go to the documentation of this file.
1 // *****************************************************************************
2 //
3 // © Copyright 2020, Septentrio NV/SA.
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 // 1. Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // 2. 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 // 3. Neither the name of the copyright holder nor the names of its
14 // contributors may be used to endorse or promote products derived
15 // 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 THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 // POSSIBILITY OF SUCH DAMAGE.
28 //
29 // *****************************************************************************
30 
31 // *****************************************************************************
32 //
33 // Boost Software License - Version 1.0 - August 17th, 2003
34 //
35 // Permission is hereby granted, free of charge, to any person or organization
36 // obtaining a copy of the software and accompanying documentation covered by
37 // this license (the "Software") to use, reproduce, display, distribute,
38 // execute, and transmit the Software, and to prepare derivative works of the
39 // Software, and to permit third-parties to whom the Software is furnished to
40 // do so, all subject to the following:
41 
42 // The copyright notices in the Software and this entire statement, including
43 // the above license grant, this restriction and the following disclaimer,
44 // must be included in all copies of the Software, in whole or in part, and
45 // all derivative works of the Software, unless such copies or derivative
46 // works are solely in the form of machine-executable object code generated by
47 // a source language processor.
48 //
49 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
50 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
51 // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
52 // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
53 // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
54 // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
55 // DEALINGS IN THE SOFTWARE.
56 //
57 // *****************************************************************************
58 
59 
60 #ifndef COMMUNICATION_CORE_HPP // This block is called a conditional group. The controlled text will get included
61  // in the preprocessor output iff the macroname is not defined.
62 #define COMMUNICATION_CORE_HPP // Include guards help to avoid the double inclusion of header files, by defining a token = macro.
63 
64 // Boost includes
65 #include <boost/function.hpp>
66 #include <boost/date_time/posix_time/posix_time.hpp>
67 #include <boost/asio.hpp>
68 #include <boost/exception/diagnostic_information.hpp> // dealing with bad file descriptor error
69 #include <boost/bind.hpp>
70 #include <boost/asio/serial_port.hpp>
71 // C++ library includes
72 #include <sstream>
73 #include <memory>
74 #include <unistd.h> // for usleep()
75 // ROSaic includes
78 
89 namespace io_comm_rx
90 {
91 
93  const static uint32_t BAUDRATES[] = {1200, 2400, 4800, 9600, 19200, 38400, 57600,
94  115200, 230400, 460800, 500000, 576000, 921600,
95  1000000, 1152000, 1500000, 2000000, 2500000,
96  3000000, 3500000, 4000000};
97 
102  class Comm_IO
103  {
104  public:
105 
109  Comm_IO();
110 
114  virtual ~Comm_IO() = default;
115 
124  bool initializeSerial(std::string port, uint32_t baudrate = 115200, std::string flowcontrol = "None");
125 
132  bool initializeTCP(std::string host, std::string port);
133 
134 
139  void setManager(const boost::shared_ptr<Manager>& manager);
140 
145  void resetSerial(std::string port);
146 
148 
149  void send(std::string cmd);
150 
153 
154  private:
155 
157  std::string serial_port_;
162  uint32_t baudrate_;
163 
164  friend class CallbackHandlers;
165  friend class RxMessage;
166 
168  std::string host_;
170  std::string port_;
173  const static unsigned int SET_BAUDRATE_SLEEP_ = 500000;
174  };
175 }
176 
177 #endif // for COMMUNICATION_CORE_HPP
boost::shared_ptr< Manager > manager_
uint32_t baudrate_
Baudrate at the moment, unless InitializeSerial or ResetSerial fail.
Represents ensemble of (to be constructed) ROS messages, to be handled at once by this class...
static const unsigned int SET_BAUDRATE_SLEEP_
bool initializeSerial(std::string port, uint32_t baudrate=115200, std::string flowcontrol="None")
Initializes the serial port.
virtual ~Comm_IO()=default
Default destructor of the class Comm_IO.
Implements asynchronous operations for an I/O manager.
std::string serial_port_
Saves the port description.
std::string port_
Port over which TCP/IP connection is currently established.
void resetSerial(std::string port)
Reset the Serial I/O port, e.g. after a Rx reset.
bool initializeTCP(std::string host, std::string port)
Initializes the TCP I/O.
Comm_IO()
Default constructor of the class Comm_IO.
CallbackHandlers getHandlers() const
static const uint32_t BAUDRATES[]
Possible baudrates for the Rx.
void setManager(const boost::shared_ptr< Manager > &manager)
Set the I/O manager.
CallbackHandlers handlers_
Callback handlers for the inwards streaming messages.
void send(std::string cmd)
Handles callbacks when reading NMEA/SBF messages.
Can search buffer for messages, read/parse them, and so on.
Definition: rx_message.hpp:200
Handles communication with and configuration of the mosaic (and beyond) receiver(s) ...
std::string host_
Host currently connected to.


rosaic
Author(s): Tibor Dome
autogenerated on Wed Oct 14 2020 03:43:50