25 #ifndef GOBY_ACOMMS_MODEMDRIVER_UDP_DRIVER_H
26 #define GOBY_ACOMMS_MODEMDRIVER_UDP_DRIVER_H
35 #include <boost/asio/ip/udp.hpp>
55 class ModemTransmission;
64 void startup(
const protobuf::DriverConfig& cfg)
override;
72 void start_send(
const protobuf::ModemTransmission&
msg);
73 void send_complete(
const boost::system::error_code& error, std::size_t bytes_transferred);
75 void receive_complete(
const boost::system::error_code& error, std::size_t bytes_transferred);
76 void receive_message(
const protobuf::ModemTransmission& m);
79 protobuf::DriverConfig driver_cfg_;
81 std::unique_ptr<boost::asio::ip::udp::socket> socket_;
83 std::multimap<int, boost::asio::ip::udp::endpoint> receivers_;
84 boost::asio::ip::udp::endpoint sender_;
87 static constexpr
size_t UDP_MAX_PACKET_SIZE = 65507;
89 std::array<char, UDP_MAX_PACKET_SIZE> receive_buffer_;
92 std::set<unsigned> application_ack_ids_;
94 std::uint32_t next_frame_{0};
provides an abstract base class for acoustic modem drivers. This is subclassed by the various drivers...
void startup(const protobuf::DriverConfig &cfg) override
Starts the modem driver. Must be called before poll().
void do_work() override
Allows the modem driver to do its work.
void handle_initiate_transmission(const protobuf::ModemTransmission &m) override
Virtual initiate_transmission method. Typically connected to MACManager::signal_initiate_transmission...
void report(protobuf::ModemReport *report) override
Returns report including modem availability and signal quality (if known)
void shutdown() override
Shuts down the modem driver.
boost::units::make_system< boost::units::angle::revolution_base_unit, boost::units::metric::minute_base_unit >::type system
The global namespace for the Goby project.
extern ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< ::google::protobuf::MessageOptions, ::PROTOBUF_NAMESPACE_ID::internal::MessageTypeTraits< ::goby::GobyMessageOptions >, 11, false > msg