telegram_handler.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 #pragma once
60 
61 // C++ includes
62 #include <condition_variable>
63 
64 // ROSaic includes
68 
75 namespace io {
76  class Semaphore
77  {
78  public:
79  Semaphore() : block_(true) {}
80 
81  void notify()
82  {
83  std::unique_lock<std::mutex> lock(mtx_);
84  block_ = false;
85  cv_.notify_one();
86  }
87 
88  void wait()
89  {
90  std::unique_lock<std::mutex> lock(mtx_);
91  while (block_)
92  {
93  cv_.wait(lock);
94  }
95  block_ = true;
96  }
97 
98  private:
99  std::mutex mtx_;
100  std::condition_variable cv_;
101  bool block_;
102  };
103 
110  {
111 
112  public:
114 
116  {
119  }
120 
122  {
125  }
126 
130  void handleTelegram(const std::shared_ptr<Telegram>& telegram);
131 
133  void resetWaitforMainCd() { mainConnectionDescriptor_ = std::string(); }
134 
136  [[nodiscard]] std::string getMainCd()
137  {
138  cdSemaphore_.wait();
140  }
141 
144 
147 
148  private:
149  void handleSbf(const std::shared_ptr<Telegram>& telegram);
150  void handleNmea(const std::shared_ptr<Telegram>& telegram);
151  void handleResponse(const std::shared_ptr<Telegram>& telegram);
152  void handleError(const std::shared_ptr<Telegram>& telegram);
153  void handleCd(const std::shared_ptr<Telegram>& telegram);
156 
159 
163  std::string mainConnectionDescriptor_ = std::string();
164  };
165 
166 } // namespace io
io::Semaphore::block_
bool block_
Definition: telegram_handler.hpp:101
io::TelegramHandler::resetWaitforMainCd
void resetWaitforMainCd()
Returns the connection descriptor.
Definition: telegram_handler.hpp:133
io::TelegramHandler::handleNmea
void handleNmea(const std::shared_ptr< Telegram > &telegram)
Definition: telegram_handler.cpp:110
io::TelegramHandler::getMainCd
std::string getMainCd()
Returns the connection descriptor.
Definition: telegram_handler.hpp:136
io::TelegramHandler::node_
ROSaicNodeBase * node_
Pointer to Node.
Definition: telegram_handler.hpp:155
io::TelegramHandler::clearSemaphores
void clearSemaphores()
Definition: telegram_handler.hpp:121
telegram.hpp
io::TelegramHandler::handleResponse
void handleResponse(const std::shared_ptr< Telegram > &telegram)
Definition: telegram_handler.cpp:115
ROSaicNodeBase
This class is the base class for abstraction.
Definition: typedefs.hpp:184
io::TelegramHandler::mainConnectionDescriptor_
std::string mainConnectionDescriptor_
Definition: telegram_handler.hpp:163
io::Semaphore::mtx_
std::mutex mtx_
Definition: telegram_handler.hpp:99
io::Semaphore::wait
void wait()
Definition: telegram_handler.hpp:88
io::TelegramHandler::~TelegramHandler
~TelegramHandler()
Definition: telegram_handler.hpp:115
io
Definition: async_manager.hpp:83
message_handler.hpp
io::MessageHandler
Can search buffer for messages, read/parse them, and so on.
Definition: message_handler.hpp:138
io::Semaphore
Definition: telegram_handler.hpp:76
io::TelegramHandler::capabilitiesSemaphore_
Semaphore capabilitiesSemaphore_
Definition: telegram_handler.hpp:162
io::TelegramHandler::messageHandler_
MessageHandler messageHandler_
MessageHandler parser.
Definition: telegram_handler.hpp:158
typedefs.hpp
io::Semaphore::notify
void notify()
Definition: telegram_handler.hpp:81
io::TelegramHandler::TelegramHandler
TelegramHandler(ROSaicNodeBase *node)
Definition: telegram_handler.hpp:113
io::TelegramHandler::handleSbf
void handleSbf(const std::shared_ptr< Telegram > &telegram)
Definition: telegram_handler.cpp:105
io::Semaphore::cv_
std::condition_variable cv_
Definition: telegram_handler.hpp:100
io::TelegramHandler::handleError
void handleError(const std::shared_ptr< Telegram > &telegram)
io::TelegramHandler::waitForCapabilities
void waitForCapabilities()
Waits for capabilities.
Definition: telegram_handler.hpp:146
io::TelegramHandler::handleCd
void handleCd(const std::shared_ptr< Telegram > &telegram)
Definition: telegram_handler.cpp:146
io::TelegramHandler
Represents ensemble of (to be constructed) ROS messages, to be handled at once by this class.
Definition: telegram_handler.hpp:109
io::Semaphore::Semaphore
Semaphore()
Definition: telegram_handler.hpp:79
io::TelegramHandler::cdSemaphore_
Semaphore cdSemaphore_
Definition: telegram_handler.hpp:160
io::TelegramHandler::waitForResponse
void waitForResponse()
Waits for response.
Definition: telegram_handler.hpp:143
io::TelegramHandler::responseSemaphore_
Semaphore responseSemaphore_
Definition: telegram_handler.hpp:161
io::TelegramHandler::handleTelegram
void handleTelegram(const std::shared_ptr< Telegram > &telegram)
Called every time a telegram is received.
Definition: telegram_handler.cpp:41


septentrio_gnss_driver
Author(s): Tibor Dome
autogenerated on Wed Nov 22 2023 04:04:27