28 #ifndef GOBY_ACOMMS_MODEMDRIVER_UDP_DRIVER_H
29 #define GOBY_ACOMMS_MODEMDRIVER_UDP_DRIVER_H
38 #include <boost/asio/ip/udp.hpp>
40 #include "goby/acomms/modemdriver/driver_base.h"
41 #include "goby/acomms/protobuf/driver_base.pb.h"
42 #include "goby/util/asio_compat.h"
65 class ModemTransmission;
75 class UDPDriver :
public goby::acomms::ModemDriverBase
81 void startup(
const goby::acomms::protobuf::DriverConfig& cfg)
override;
89 void update_remote(
const jaiabot::udp::protobuf::Config::EndPoint& remote,
90 bool clear_existing =
false);
92 void start_send(
const goby::acomms::protobuf::ModemTransmission&
msg);
93 void send_complete(
const boost::system::error_code& error, std::size_t bytes_transferred);
95 void receive_complete(
const boost::system::error_code& error, std::size_t bytes_transferred);
96 void receive_message(
const goby::acomms::protobuf::ModemTransmission& m);
98 const jaiabot::udp::protobuf::Config& config_extension()
104 void update_active_hub(
int hub_id, goby::acomms::protobuf::ModemTransmission*
msg);
105 void set_active_hub_peer(
int hub_id);
108 goby::acomms::protobuf::DriverConfig driver_cfg_;
109 boost::asio::io_context io_context_;
110 std::unique_ptr<boost::asio::ip::udp::socket> socket_;
112 std::multimap<int, boost::asio::ip::udp::endpoint> receivers_;
113 boost::asio::ip::udp::endpoint sender_;
116 static constexpr
size_t UDP_MAX_PACKET_SIZE = 65507;
118 std::array<char, UDP_MAX_PACKET_SIZE> receive_buffer_;
121 std::set<unsigned> application_ack_ids_;
123 std::uint32_t next_frame_{0};
125 bool have_active_hub_{
false};
126 int active_hub_id_{-1};
127 int hub_wifi_base_modem_id_{-1};
128 int hub_wifi_modem_id_{-1};
130 std::map<int, jaiabot::udp::protobuf::Config::EndPoint> hub_endpoints_;
void report(goby::acomms::protobuf::ModemReport *report) override
void startup(const goby::acomms::protobuf::DriverConfig &cfg) override
void handle_initiate_transmission(const goby::acomms::protobuf::ModemTransmission &m) override
extern ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< ::google::protobuf::MessageOptions, ::PROTOBUF_NAMESPACE_ID::internal::MessageTypeTraits< ::jaia::MessageOptions >, 11, false > msg
extern ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< ::goby::acomms::protobuf::DriverConfig, ::PROTOBUF_NAMESPACE_ID::internal::MessageTypeTraits< ::jaiabot::udp::protobuf::Config >, 11, false > config
const char * goby_driver_name()
goby::acomms::ModemDriverBase * goby_make_driver()