24 #ifndef GOBY_ACOMMS_MODEMDRIVER_IRIDIUM_SHORE_DRIVER_H
25 #define GOBY_ACOMMS_MODEMDRIVER_IRIDIUM_SHORE_DRIVER_H
32 #include <boost/asio/io_service.hpp>
33 #include <boost/bimap.hpp>
34 #include <boost/circular_buffer.hpp>
47 class RUDICSConnection;
57 class DirectIPMOHeader;
58 class DirectIPMOPayload;
59 class DirectIPMOPreHeader;
68 void startup(
const protobuf::DriverConfig& cfg)
override;
79 typedef unsigned ModemId;
81 void receive(
const protobuf::ModemTransmission&
msg);
82 void send(
const protobuf::ModemTransmission&
msg);
84 void decode_mo(iridium::protobuf::DirectIPMOPreHeader* pre_header,
85 iridium::protobuf::DirectIPMOHeader* header,
86 iridium::protobuf::DirectIPMOPayload* body,
const std::string& data);
88 void receive_sbd_mo();
89 void receive_sbd_mo_data(
const std::string& data, protobuf::ModemTransmission* modem_msg);
91 void send_sbd_mt(
const std::string& bytes,
const std::string& imei);
93 void rudics_send(
const std::string& data, ModemId
id);
94 void rudics_disconnect(
const std::shared_ptr<RUDICSConnection>& connection);
95 void rudics_line(
const std::string& line,
const std::shared_ptr<RUDICSConnection>& connection);
96 void rudics_connect(
const std::shared_ptr<RUDICSConnection>& connection);
98 const iridium::protobuf::Config& iridium_driver_cfg()
const
103 const iridium::protobuf::ShoreConfig& iridium_shore_driver_cfg()
const
109 void startup_sbd_directip(
const protobuf::DriverConfig& cfg);
110 void receive_sbd_mo_directip();
111 void send_sbd_mt_directip(
const std::string& bytes,
const std::string& imei);
114 void startup_sbd_rockblock(
const protobuf::DriverConfig& cfg);
115 void receive_sbd_mo_rockblock();
116 void send_sbd_mt_rockblock(
const std::string& bytes,
const std::string& imei);
119 protobuf::DriverConfig driver_cfg_;
121 protobuf::ModemTransmission rudics_mac_msg_;
123 std::uint32_t next_frame_{0};
129 DATA_BUFFER_CAPACITY = 30
131 RemoteNode() : data_out(DATA_BUFFER_CAPACITY) {}
133 std::shared_ptr<OnCallBase> on_call;
134 boost::circular_buffer<protobuf::ModemTransmission> data_out;
137 std::map<ModemId, RemoteNode> remote_;
139 std::unique_ptr<boost::asio::io_service> rudics_io_;
140 std::unique_ptr<RUDICSServer> rudics_server_;
141 std::unique_ptr<boost::asio::io_service> sbd_io_;
142 std::unique_ptr<directip::SBDServer> directip_mo_sbd_server_;
145 boost::bimap<ModemId, std::shared_ptr<RUDICSConnection>> clients_;
147 using IMEI = std::string;
148 std::map<ModemId, IMEI> modem_id_to_imei_;
150 struct RockblockHTTPMessage
152 enum class MessageState
158 MessageState state{MessageState::HEADER};
159 std::map<std::string, std::string> header;
163 std::unique_ptr<RockblockHTTPMessage> rb_msg_;
void startup(const protobuf::DriverConfig &cfg) override
Starts the modem driver. Must be called before poll().
~IridiumShoreDriver() override
void do_work() override
Allows the modem driver to do its work.
void process_transmission(protobuf::ModemTransmission msg)
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.
provides an abstract base class for acoustic modem drivers. This is subclassed by the various drivers...
extern ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< ::goby::acomms::protobuf::DriverConfig, ::PROTOBUF_NAMESPACE_ID::internal::MessageTypeTraits< ::goby::acomms::iridium::protobuf::ShoreConfig >, 11, false > shore_config
extern ::PROTOBUF_NAMESPACE_ID::internal::ExtensionIdentifier< ::goby::acomms::protobuf::DriverConfig, ::PROTOBUF_NAMESPACE_ID::internal::MessageTypeTraits< ::goby::acomms::iridium::protobuf::Config >, 11, false > config
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