Goby3
3.1.5a
2024.05.23
|
provides an abstract base class for acoustic modem drivers. This is subclassed by the various drivers for different manufacturers' modems. More...
#include <goby/acomms/modem_driver.h>
Public Member Functions | |
Control | |
virtual void | startup (const protobuf::DriverConfig &cfg)=0 |
Starts the modem driver. Must be called before poll(). More... | |
virtual void | update_cfg (const protobuf::DriverConfig &cfg) |
Update configuration while running (not required to be implemented) More... | |
virtual void | shutdown ()=0 |
Shuts down the modem driver. More... | |
virtual void | do_work ()=0 |
Allows the modem driver to do its work. More... | |
MAC Slots | |
virtual void | handle_initiate_transmission (const protobuf::ModemTransmission &m)=0 |
Virtual initiate_transmission method. Typically connected to MACManager::signal_initiate_transmission() using bind(). More... | |
Protected Member Functions | |
Constructors/Destructor | |
ModemDriverBase () | |
Constructor. More... | |
MAC / Queue Signals | |
boost::signals2::signal< void(const protobuf::ModemTransmission &message)> | signal_receive |
Called when a binary data transmission is received from the modem. More... | |
boost::signals2::signal< void(const protobuf::ModemTransmission &message)> | signal_transmit_result |
Called when a transmission is completed. More... | |
boost::signals2::signal< void(protobuf::ModemTransmission *msg)> | signal_data_request |
Called when the modem or modem driver needs data to send. The returned data should be stored in ModemTransmission::frame. More... | |
boost::signals2::signal< void(protobuf::ModemTransmission *msg_request)> | signal_modify_transmission |
Called before the modem driver begins processing a transmission. This allows a third party to modify the parameters of the transmission (such as destination or rate) on the fly. More... | |
boost::signals2::signal< void(const protobuf::ModemRaw &msg)> | signal_raw_incoming |
Called after any message is received from the modem by the driver. Used by the MACManager for auto-discovery of vehicles. Also useful for higher level analysis and debugging of the transactions between the driver and the modem. More... | |
boost::signals2::signal< void(const protobuf::ModemRaw &msg)> | signal_raw_outgoing |
Called after any message is sent from the driver to the modem. Useful for higher level analysis and debugging of the transactions between the driver and the modem. More... | |
virtual | ~ModemDriverBase () |
Public Destructor. More... | |
Informational | |
virtual void | report (protobuf::ModemReport *report) |
Returns report including modem availability and signal quality (if known) More... | |
int | driver_order () |
Integer for the order in which this driver was started (first driver started is 1, second driver is 2, etc.) More... | |
static std::string | driver_name (const protobuf::DriverConfig &cfg) |
Unique driver name (e.g. UDP_MULTICAST::1 or my_driver_name::2) More... | |
Write/read from the line-based interface to the modem | |
static std::atomic< int > | count_ |
void | modem_write (const std::string &out) |
write a line to the serial port. More... | |
bool | modem_read (std::string *in) |
read a line from the serial port, including end-of-line character(s) More... | |
void | modem_start (const protobuf::DriverConfig &cfg, bool modem_connection_expected=true) |
start the physical connection to the modem (serial port, TCP, etc.). must be called before ModemDriverBase::modem_read() or ModemDriverBase::modem_write() More... | |
void | modem_close () |
closes the serial port. Use modem_start to reopen the port. More... | |
const std::string & | glog_out_group () const |
const std::string & | glog_in_group () const |
util::LineBasedInterface & | modem () |
use for direct access to the modem More... | |
provides an abstract base class for acoustic modem drivers. This is subclassed by the various drivers for different manufacturers' modems.
Definition at line 58 of file driver_base.h.
|
virtual |
Public Destructor.
|
protected |
Constructor.
|
pure virtual |
Allows the modem driver to do its work.
Should be called regularly to perform the work of the driver as the driver does not run in its own thread. This allows us to guarantee that no signals are called except inside this method. Does not block.
Implemented in goby::acomms::MMDriver, goby::acomms::IridiumShoreDriver, goby::acomms::UDPDriver, goby::acomms::UDPMulticastDriver, goby::acomms::BenthosATM900Driver, goby::acomms::PopotoDriver, goby::moos::BluefinCommsDriver, goby::acomms::IridiumDriver, goby::moos::UFldDriver, goby::acomms::ABCDriver, and goby::acomms::StoreServerDriver.
|
static |
Unique driver name (e.g. UDP_MULTICAST::1 or my_driver_name::2)
The name has two parts separated by "::". The first part is the driver_type enum without the "DRIVER_" prefix or the result of goby_driver_name() function (for plugin drivers). The second part is the modem id.
|
inline |
Integer for the order in which this driver was started (first driver started is 1, second driver is 2, etc.)
Definition at line 136 of file driver_base.h.
|
inlineprotected |
Definition at line 178 of file driver_base.h.
|
inlineprotected |
Definition at line 177 of file driver_base.h.
|
pure virtual |
Virtual initiate_transmission method. Typically connected to MACManager::signal_initiate_transmission() using bind().
m | ModemTransmission (defined in acomms_modem_message.proto) containing the details of the transmission to be started. This may contain data frames. If not, data will be requested when the driver calls the data request signal (ModemDriverBase::signal_data_request) |
Implemented in goby::acomms::MMDriver, goby::acomms::IridiumShoreDriver, goby::acomms::UDPDriver, goby::acomms::UDPMulticastDriver, goby::acomms::BenthosATM900Driver, goby::acomms::PopotoDriver, goby::acomms::IridiumDriver, goby::acomms::ABCDriver, goby::acomms::StoreServerDriver, goby::moos::BluefinCommsDriver, and goby::moos::UFldDriver.
|
inlineprotected |
use for direct access to the modem
Definition at line 181 of file driver_base.h.
|
protected |
closes the serial port. Use modem_start to reopen the port.
|
protected |
read a line from the serial port, including end-of-line character(s)
in | pointer to string to store line |
|
protected |
start the physical connection to the modem (serial port, TCP, etc.). must be called before ModemDriverBase::modem_read() or ModemDriverBase::modem_write()
cfg | Configuration including the parameters for the physical connection. (protobuf::DriverConfig is defined in acomms_driver_base.proto). |
ModemDriverException | Problem opening the physical connection. |
|
protected |
write a line to the serial port.
out | reference to string to write. Must already include any end-of-line character(s). |
|
virtual |
Returns report including modem availability and signal quality (if known)
Reimplemented in goby::acomms::UDPDriver, goby::acomms::UDPMulticastDriver, and goby::acomms::IridiumDriver.
|
pure virtual |
Shuts down the modem driver.
Implemented in goby::acomms::IridiumShoreDriver, goby::acomms::MMDriver, goby::acomms::UDPDriver, goby::acomms::UDPMulticastDriver, goby::acomms::BenthosATM900Driver, goby::acomms::PopotoDriver, goby::moos::BluefinCommsDriver, goby::acomms::IridiumDriver, goby::moos::UFldDriver, goby::acomms::ABCDriver, and goby::acomms::StoreServerDriver.
|
pure virtual |
Starts the modem driver. Must be called before poll().
cfg | Startup configuration for the driver and modem. DriverConfig is defined in acomms_driver_base.proto. Derived classes can define extensions (see https://developers.google.com/protocol-buffers/docs/proto) to DriverConfig to handle modem specific configuration. |
Implemented in goby::acomms::IridiumShoreDriver, goby::acomms::MMDriver, goby::acomms::UDPDriver, goby::acomms::UDPMulticastDriver, goby::acomms::BenthosATM900Driver, goby::acomms::PopotoDriver, goby::acomms::IridiumDriver, goby::acomms::ABCDriver, goby::acomms::StoreServerDriver, goby::moos::BluefinCommsDriver, and goby::moos::UFldDriver.
|
virtual |
Update configuration while running (not required to be implemented)
Reimplemented in goby::acomms::MMDriver.
|
staticprotected |
Definition at line 185 of file driver_base.h.
boost::signals2::signal<void(protobuf::ModemTransmission* msg)> goby::acomms::ModemDriverBase::signal_data_request |
Called when the modem or modem driver needs data to send. The returned data should be stored in ModemTransmission::frame.
You should connect one or more slots (a function or member function) to this signal to handle data requests. Use the goby::acomms::connect family of functions to do this. This signal will only be called during a call to poll. ModemTransmission is defined in acomms_modem_message.proto.
Definition at line 107 of file driver_base.h.
boost::signals2::signal<void(protobuf::ModemTransmission* msg_request)> goby::acomms::ModemDriverBase::signal_modify_transmission |
Called before the modem driver begins processing a transmission. This allows a third party to modify the parameters of the transmission (such as destination or rate) on the fly.
You may connect one or more slots (a function or member function) to this signal to handle data requests. Use the goby::acomms::connect family of functions to do this. This signal will only be called during a call to poll. ModemTransmission is defined in acomms_modem_message.proto.
Definition at line 113 of file driver_base.h.
boost::signals2::signal<void(const protobuf::ModemRaw& msg)> goby::acomms::ModemDriverBase::signal_raw_incoming |
Called after any message is received from the modem by the driver. Used by the MACManager for auto-discovery of vehicles. Also useful for higher level analysis and debugging of the transactions between the driver and the modem.
If desired, you should connect one or more slots (a function or member function) to this signal to listen on incoming transactions. Use the goby::acomms::connect family of functions to do this. This signal will only be called during a call to poll. ModemRaw is defined in acomms_modem_message.proto.
Definition at line 118 of file driver_base.h.
boost::signals2::signal<void(const protobuf::ModemRaw& msg)> goby::acomms::ModemDriverBase::signal_raw_outgoing |
Called after any message is sent from the driver to the modem. Useful for higher level analysis and debugging of the transactions between the driver and the modem.
If desired, you should connect one or more slots (a function or member function) to this signal to listen on outgoing transactions. Use the goby::acomms::connect family of functions to do this. This signal will only be called during a call to poll. ModemRaw is defined in acomms_modem_message.proto.
Definition at line 123 of file driver_base.h.
boost::signals2::signal<void(const protobuf::ModemTransmission& message)> goby::acomms::ModemDriverBase::signal_receive |
Called when a binary data transmission is received from the modem.
You should connect one or more slots (a function or member function) to this signal to receive incoming messages. Use the goby::acomms::connect family of functions to do this. This signal will only be called during a call to poll. ModemDataTransmission is defined in acomms_modem_message.proto.
Definition at line 96 of file driver_base.h.
boost::signals2::signal<void(const protobuf::ModemTransmission& message)> goby::acomms::ModemDriverBase::signal_transmit_result |
Called when a transmission is completed.
You should connect one or more slots (a function or member function) to this signal to receive incoming messages. Use the goby::acomms::connect family of functions to do this. This signal will only be called during a call to poll. ModemDataTransmission is defined in acomms_modem_message.proto.
Definition at line 102 of file driver_base.h.