Goby3 3.2.3
2025.05.13
Loading...
Searching...
No Matches
udp_multicast_driver.h
Go to the documentation of this file.
1// Copyright 2011-2023:
2// GobySoft, LLC (2013-)
3// Massachusetts Institute of Technology (2007-2014)
4// Community contributors (see AUTHORS file)
5// File authors:
6// Toby Schneider <toby@gobysoft.org>
7//
8//
9// This file is part of the Goby Underwater Autonomy Project Libraries
10// ("The Goby Libraries").
11//
12// The Goby Libraries are free software: you can redistribute them and/or modify
13// them under the terms of the GNU Lesser General Public License as published by
14// the Free Software Foundation, either version 2.1 of the License, or
15// (at your option) any later version.
16//
17// The Goby Libraries are distributed in the hope that they will be useful,
18// but WITHOUT ANY WARRANTY; without even the implied warranty of
19// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20// GNU Lesser General Public License for more details.
21//
22// You should have received a copy of the GNU Lesser General Public License
23// along with Goby. If not, see <http://www.gnu.org/licenses/>.
24
25#ifndef GOBY_ACOMMS_MODEMDRIVER_UDP_MULTICAST_DRIVER_H
26#define GOBY_ACOMMS_MODEMDRIVER_UDP_MULTICAST_DRIVER_H
27
28#include <array> // for array
29#include <boost/asio/ip/udp.hpp> // for udp, udp::...
30#include <cstddef> // for size_t
31#include <cstdint> // for uint32_t
32#include <map> // for map
33
34#include "goby/acomms/modemdriver/driver_base.h" // for ModemDrive...
35#include "goby/acomms/protobuf/driver_base.pb.h" // for DriverConfig
38
39namespace boost
40{
41namespace system
42{
43class error_code;
44} // namespace system
45} // namespace boost
46
47namespace goby
48{
49namespace acomms
50{
51namespace protobuf
52{
53class ModemTransmission;
54} // namespace protobuf
55
57{
58 public:
61
62 void startup(const protobuf::DriverConfig& cfg) override;
63 void shutdown() override;
64 void do_work() override;
66
68
69 private:
70 void start_send(const protobuf::ModemTransmission& m);
71 void send_complete(const boost::system::error_code& error, std::size_t bytes_transferred);
72 void start_receive();
73 void receive_complete(const boost::system::error_code& error, std::size_t bytes_transferred);
74 void receive_message(const protobuf::ModemTransmission& m);
75
76 const udp_multicast::protobuf::Config& multicast_driver_cfg() const
77 {
79 }
80
81 private:
82 protobuf::DriverConfig driver_cfg_;
83 boost::asio::io_context io_context_;
84 boost::asio::ip::udp::socket socket_{io_context_};
85 boost::asio::ip::udp::endpoint receiver_;
86 boost::asio::ip::udp::endpoint sender_;
87
88 // (16 bit length = 65535 - 8 byte UDP header - 20 byte IP
89 static constexpr size_t UDP_MAX_PACKET_SIZE = 65507;
90
91 std::array<char, UDP_MAX_PACKET_SIZE> receive_buffer_;
92 std::uint32_t next_frame_{0};
93
94 std::map<int, int> rate_to_bytes_;
95};
96} // namespace acomms
97} // namespace goby
98#endif
provides an abstract base class for acoustic modem drivers. This is subclassed by the various drivers...
Definition driver_base.h:59
void startup(const protobuf::DriverConfig &cfg) override
Starts the modem driver. Must be called before poll().
void report(protobuf::ModemReport *report) override
Returns report including modem availability and signal quality (if known)
void handle_initiate_transmission(const protobuf::ModemTransmission &m) override
Virtual initiate_transmission method. Typically connected to MACManager::signal_initiate_transmission...
void shutdown() override
Shuts down the modem driver.
void do_work() override
Allows the modem driver to do its work.
_proto_TypeTraits::Singular::ConstType GetExtension(const ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< DriverConfig, _proto_TypeTraits, _field_type, _is_packed > &id) const
extern ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< ::goby::acomms::protobuf::DriverConfig, ::PROTOBUF_NAMESPACE_ID::internal::MessageTypeTraits< ::goby::acomms::udp_multicast::protobuf::Config >, 11, false > config
boost::units::make_system< boost::units::angle::revolution_base_unit, boost::units::metric::minute_base_unit >::type system
Definition system.hpp:45
The global namespace for the Goby project.