LRAUV  revA
AcousticModem_Benthos_ATM900 Class Reference

Provides software interface to the Benthos ATM-900 Acoustic Modem. More...

#include <AcousticModem_Benthos_ATM900.h>

Inheritance diagram for AcousticModem_Benthos_ATM900:
Collaboration diagram for AcousticModem_Benthos_ATM900:

Public Member Functions

 AcousticModem_Benthos_ATM900 (const Module *module)
 
virtual ~AcousticModem_Benthos_ATM900 ()
 
virtual void run ()
 The actual "payload" of the component. More...
 
virtual RunState start ()
 Do what needs to be done to run Similar to initialize, in old init/run/uninit sequence. More...
 
virtual RunState starting ()
 Might follow a STOP...START sequence. More...
 
virtual RunState pause ()
 Pause for a short period (indicated by pauseTime) More...
 
virtual RunState paused ()
 Should eventually follow a PAUSE request: should set continueTime. More...
 
virtual RunState resume ()
 Resume from PAUSE. More...
 
virtual RunState resuming ()
 Might follow a PAUSE...RESUME sequence. More...
 
virtual RunState runnable ()
 Should eventually follow a START request or RESETTING. More...
 
virtual RunState resetting ()
 Might occur in case of Error. More...
 
virtual RunState stop ()
 Initial state – can be later followed by START. More...
 
virtual RunState stopping ()
 Might follow a STOP request. More...
 
virtual RunState stopped ()
 Initial state – can be later followed by START. More...
 
virtual void uninitialize ()
 Provide a space for uninitialization. More...
 
virtual ConfigURI getConfigURI (ConfigOption configOption) const
 Should return [myNamespace]::SIMULATE_HARDWARE, or [myNamespace]::POWER, etc. More...
 
- Public Member Functions inherited from SyncComponent
CycleOrder getCycleOrder (void)
 Getter function for controlThreadOrderPreference. More...
 
void setRepeating (bool repeating)
 
int getDivisor () const
 
int getModulo () const
 
bool isRepeater ()
 
bool isRepeating ()
 
- Public Member Functions inherited from Component
virtual ~Component ()
 Destructor cleans up readers_ and writers_. More...
 
void registerReader (DataReader *reader)
 
void unregisterReader (DataReader *reader)
 
void registerWriter (DataWriter *writer)
 
void unregisterWriter (DataWriter *writer)
 
void disableMetering (void)
 
FlexArray< DataReader * > & getReaderList (void)
 
FlexArray< DataWriter * > & getWriterList (void)
 
const ModulegetModule ()
 
virtual void initialize ()
 Provide a space for initialization before being run. More...
 
virtual void configure ()
 Read (or re-read!) configuration settings. More...
 
virtual void execute (void)
 
bool isActive () const
 Indicates if the component is active. More...
 
const CodedStrgetName (void) const
 Returns the name. More...
 
const TimestampgetTimeOfLastRun (void) const
 
ComponentState getState (void)
 Return the component's current state. More...
 
void setState (ComponentState state)
 
RunState getRunState (void)
 Return the component's run state. More...
 
bool isUsingRunState ()
 Return true if using runState. More...
 
void requestData (bool requestingData)
 Tell the component to start (or stop) sending data. More...
 
void requestStart ()
 Tell the component to start runnning. More...
 
void requestPause (const Timespan expectedPauseTime)
 Tell the component to pause runnning. More...
 
void requestResume ()
 Tell the component resume from pause. More...
 
void requestStop ()
 Tell the component to stop runnning. More...
 
virtual RunState satisfied ()
 Possible return value of a Behavior. More...
 
virtual RunState pausing ()
 Might follow a PAUSE request. More...
 
void setCriticalFailureReported (bool boolVal)
 
void setRecoveringFromCritical (bool boolVal)
 
void setFailureReported (bool boolVal)
 
bool isFailureUninitialized ()
 
void setFailureUninitialized (bool boolVal)
 
void setRetryTimeout (const Timespan &timeout)
 
virtual bool isCompleted (void)
 Query if this component is completed. More...
 
void setPeriod (const Timespan &period)
 Set the period of this component... used if it is periodic. More...
 
const TimespangetPeriod (void)
 Returns the component's period (regardless of whether it is periodic) More...
 
ComponentType getComponentType ()
 Getter function for ComponentType. More...
 
virtual bool isFailed (void) const
 
virtual FailureMode::FailType getFailureType (void) const
 
virtual bool getCriticalFailureReported (void) const
 
virtual bool getFailureReported (void) const
 
virtual Timespan getRetryTimeout (void) const
 
virtual FailureMode::FailType setFailure (FailureMode::FailType failureType)
 
virtual int getFailCount (void) const
 
virtual bool isFailureMissionCritical ()
 
virtual int getAllowableFailures (void) const
 
virtual void setAllowableFailures (int fails)
 
LoggergetLogger (void)
 
virtual int incrementFailCount (void)
 
virtual void resetFailCount (void)
 
virtual int getSkippedRunsSinceFail (void) const
 
virtual int incrementSkippedRunsSinceFail (void)
 
virtual void logVoltage (float voltage, float averageVoltage)
 
virtual void logCurrent (float current, float averageCurrent)
 
const TimestampgetWriteTimestamp (void)
 
void setWriteTimestamp (const Timestamp &writeTimestamp)
 
BlobReadernewBlobReader (const BlobURI &blobURI)
 
BlobReadernewBlobReaderFromUniversal (const Str &componentName, const UniversalBlobURI &blobURI)
 
BlobWriternewBlobWriter (const BlobURI &blobURI, Logger::TimePrecisionType timePrecision=Logger::TIME_PRECISION_MILLIS)
 
ConfigReadernewConfigReader (const ConfigURI &configURI)
 
DataReadernewDataReader (const DataURI &dataURI)
 
DataReadernewDataReaderFromUniversal (const Str &componentName, const UniversalURI &universalURI)
 
DataWriternewDataWriter (const DataURI &dataURI, Logger::TimePrecisionType timePrecision=Logger::TIME_PRECISION_MILLIS)
 
UniversalBlobReadernewUniversalBlobReader (const UniversalBlobURI &universalURI)
 
UniversalBlobWriternewUniversalBlobWriter (const UniversalBlobURI &universalURI, const Unit &accuracyUnit=Units::NONE, const float accuracy=DataElement::NO_ACCURACY, Logger::TimePrecisionType timePrecision=Logger::TIME_PRECISION_MILLIS)
 
UniversalDataReadernewUniversalReader (const UniversalURI &universalURI)
 
UniversalDataWriternewUniversalWriter (const UniversalURI &universalURI, const Unit &accuracyUnit=Units::NONE, const float accuracy=DataElement::NO_ACCURACY, Logger::TimePrecisionType timePrecision=Logger::TIME_PRECISION_MILLIS)
 

Private Member Functions

 AcousticModem_Benthos_ATM900 (const AcousticModem_Benthos_ATM900 &old)
 
void readConfig ()
 
void logVoltageAndCurrent ()
 
bool isDataRequested ()
 
bool gotNewQuery (void)
 
Timestamp requestRange (const int remoteAddress, const int numPings)
 
int clearUserPrompt (void)
 
void readAndParseResponses (void)
 
void cleanResponse (void)
 
bool parseDebugRxMessage (void)
 
bool parseDebugTxMessage (void)
 
bool parseRangeMessage (void)
 
void publishData (void)
 

Private Attributes

ConfigReaderverbosityCfgReader_
 
ConfigReaderlocalAddressCfgReader_
 
DataReaderqueryAddressRequestedReader_
 
DataReadernumberOfPingsRequestedReader_
 
DataWriteracousticWakeupWriter_
 
UniversalDataWriterrxTimeWriter_
 
UniversalDataWritertxTimeWriter_
 
DataWriterrangeRequestReceivedWriter_
 
DataWriterremoteAddressWriter_
 
DataWriterlocalAddressWriter_
 
DataWriterrangeWriter_
 
bool debug_
 
int verbosity_
 
char deviceResponse_ [396]
 
LoadControl loadControl_
 
Timestamp startTime_
 
Timestamp powerOffTimeStart_
 
Timespan poTimeout_
 
Timespan powerDownTimeout_
 
UartStream uart_
 
int localAddressCfgSetting_
 
bool commandModeSent_
 
bool commandModeAcknowledged_
 
bool localAddressSettingSent_
 
bool localAddressSettingAcknowledged_
 
Timespan acousticResponseTimeout_
 
int remoteAddressRequested_
 
int numPingsRequested_
 
int numPingsReceived_
 
bool gotAcousticWakeup_
 
bool gotResponseNotReceived_
 
bool gotDebugRxMessage_
 
bool gotDebugTxMessage_
 
bool gotRangeRequestMessage_
 
bool gotRangeMessage_
 
int commRate_
 
double range_
 
Timestamp dataTimestamp_
 
Timestamp transmitPingTime_
 
Timestamp receivePingTime_
 
Timestamp modemTransmitPingTime_
 
Timestamp modemReceivePingTime_
 
double modemTransmitPingEpochSeconds_
 
double modemReceivePingEpochSeconds_
 
int remoteAddress_
 
int localAddress_
 

Additional Inherited Members

- Public Types inherited from Component
enum  ComponentState {
  BLOCK_CONTINUOUS, BLOCK_PERIODIC, BLOCK_NORMAL, BLOCK_COMPLETED,
  BLOCK_UNKNOWN
}
 In this model, the component has basically two states: wanting to run, and completed (no longer needing to run). More...
 
enum  ComponentType { COMPONENT_ASYNC, COMPONENT_CONFIG, COMPONENT_BEHAVIOR, COMPONENT_SYNC }
 Components can indicate how they want to be handled by their type. More...
 
enum  RunState {
  NO_RUN_STATE = 0, START, STARTING, RUNNABLE,
  SATISFIED, PAUSE, PAUSING, PAUSED,
  RESUME, RESUMING, RESETTING, STOP,
  STOPPING, STOPPED
}
 
- Static Public Attributes inherited from SyncComponent
static const int CYCLE_INCREMENT
 
static const int CYCLE_REPEAT_OFFSET
 
static const CycleOrder CYCLE_STARTER
 
static const CycleOrder CYCLE_SIMULATOR
 
static const CycleOrder CYCLE_SENSOR
 
static const CycleOrder CYCLE_DERIVATION
 
static const CycleOrder CYCLE_ESTIMATION
 
static const CycleOrder CYCLE_NAVIGATION
 
static const CycleOrder CYCLE_MISSION_MANAGER
 
static const CycleOrder CYCLE_MISSION
 
static const CycleOrder CYCLE_CONTROL
 
static const CycleOrder CYCLE_SERVO
 
static const CycleOrder CYCLE_TEST
 
static const CycleOrder CYCLE_REPORTER
 
static const CycleOrder CYCLE_LOGGER
 
- Protected Types inherited from Component
enum  ConfigOption { CONFIG_SIMULATE_HARDWARE, CONFIG_POWER, CONFIG_FREQUENCY, CONFIG_LATENCY }
 
- Protected Member Functions inherited from SyncSensorComponent
 SyncSensorComponent (const Str &name, const Module *module, int divisor=1, int modulo=0)
 
- Protected Member Functions inherited from SyncComponent
void setRepeater (bool repeater)
 
- Protected Member Functions inherited from Component
virtual ConfigURI getConfigURI (ConfigOption configOption, ElementURI forElement) const
 Should return [myNamespace]::POWER_[forElement], [myNamespace]::LATENCY_[forElement], etc. More...
 
virtual void setDurationOfLastRun (const Timespan &span)
 
virtual void setTimeOfRun (const Timestamp &time)
 
virtual void setTimeOfLastRun (const Timestamp &time)
 
virtual void setDt (const Timespan &dt)
 
virtual bool setEnabled (bool enabled=true)
 
void setRunState (const RunState runState)
 
const Timespan getPauseTime () const
 
virtual void setFailureMissionCritical (bool failureMissionCritical)
 
bool simulateHardware ()
 
- Protected Attributes inherited from Component
Logger logger_
 
Syslog::Severity debugLevel_
 
ComponentState state_
 Keep track of whether the component has "completed" or should be run again. More...
 
Timespan desiredPeriod_
 
CodedStrname_
 Store the component's name (used for logging purposes) More...
 
Timestamp timeOfRun_
 
Timestamp timeOfLastRun_
 
Timespan durationOfLastRun_
 
Timespan dt_
 
Timespan retryTimeout_
 
bool enabled_
 
bool failureReported_
 Indicates if the failure has been reported – cuts down on syslog. More...
 
bool criticalFailureReported_
 Indicates if a "Critical" failure has been reported – cuts down on syslog. More...
 
bool recoveringFromCritical_
 Indicates that a component had a previous critical failure that has been cleared temporarily awaiting final word from the component itself. More...
 
bool failureUninitialized_
 Indicates if the failure has resulted in an uninitialize call. More...
 
int failCount_
 Number of failures logged by PCaller. More...
 
bool failureMissionCritical_
 If true (default), complete failure ends mission. More...
 
int allowableFailures_
 Number of failures allowed to occur. More...
 
int skippedRunsSinceFail_
 Number of skipped runs since failureMode_ set by failCount_. More...
 
FailureMode::FailType failureType_
 Failed status. If failCount_ > 0, then this may be reset. More...
 
Timestamp timeOfFailure_
 Time of last failure. Relevant only if failed=true. More...
 
Timestamp writeTimestamp_
 Time of last write. More...
 
FlexArray< DataReader * > readers_
 
FlexArray< DataWriter * > writers_
 
const Modulemodule_
 
Timespan pauseTime_
 
bool meteringEnabled_
 If true, metering is enabled. More...
 
DataWriterdurationOfLastRunWriter_
 Writer for durationOfLastRun. More...
 
DataWritervoltageWriter_
 
DataWriteravgVoltageWriter_
 
DataWritercurrentWriter_
 
DataWriteravgCurrentWriter_
 
bool persistentPause_
 True if data is persistent while component is paused. More...
 

Detailed Description

Provides software interface to the Benthos ATM-900 Acoustic Modem.

AcousticModem_Benthos_ATM900.h should only be included by AcousticModem_Benthos_ATM900.cpp Other classes should include AcousticModem_Benthos_ATM900IF.h

Constructor & Destructor Documentation

AcousticModem_Benthos_ATM900::~AcousticModem_Benthos_ATM900 ( )
virtual
AcousticModem_Benthos_ATM900::AcousticModem_Benthos_ATM900 ( const AcousticModem_Benthos_ATM900 old)
private

Member Function Documentation

void AcousticModem_Benthos_ATM900::cleanResponse ( void  )
private
int AcousticModem_Benthos_ATM900::clearUserPrompt ( void  )
private
ConfigURI AcousticModem_Benthos_ATM900::getConfigURI ( ConfigOption  configOption) const
virtual

Should return [myNamespace]::SIMULATE_HARDWARE, or [myNamespace]::POWER, etc.

Reimplemented from Component.

References Component::CONFIG_SIMULATE_HARDWARE, and ConfigURI::NO_CONFIG_URI.

bool AcousticModem_Benthos_ATM900::isDataRequested ( )
private

Referenced by paused(), runnable(), and stopped().

bool AcousticModem_Benthos_ATM900::parseRangeMessage ( void  )
private
Component::RunState AcousticModem_Benthos_ATM900::pause ( )
virtual

Pause for a short period (indicated by pauseTime)

Pause.

Reimplemented from Component.

References debug_, Syslog::INFO, Component::logger_, Component::PAUSED, and Logger::syslog().

Component::RunState AcousticModem_Benthos_ATM900::paused ( )
virtual

Should eventually follow a PAUSE request: should set continueTime.

Reimplemented from Component.

References UartStream::dataAvailable(), debug_, Syslog::INFO, isDataRequested(), Component::logger_, Component::PAUSED, Component::RESUME, Logger::syslog(), and uart_.

void AcousticModem_Benthos_ATM900::readConfig ( void  )
private
Timestamp AcousticModem_Benthos_ATM900::requestRange ( const int  remoteAddress,
const int  numPings = 1 
)
private
virtual RunState AcousticModem_Benthos_ATM900::resetting ( )
inlinevirtual

Might occur in case of Error.

Reimplemented from Component.

References stop().

Component::RunState AcousticModem_Benthos_ATM900::resume ( )
virtual
Component::RunState AcousticModem_Benthos_ATM900::resuming ( )
virtual

Might follow a PAUSE...RESUME sequence.

Reimplemented from Component.

References Syslog::DEBUG, debug_, Syslog::INFO, Component::logger_, Component::RUNNABLE, Component::simulateHardware(), and Logger::syslog().

void AcousticModem_Benthos_ATM900::run ( void  )
virtual

The actual "payload" of the component.

Reimplemented from Component.

Component::RunState AcousticModem_Benthos_ATM900::stop ( )
virtual

Initial state – can be later followed by START.

Reimplemented from Component.

References debug_, Syslog::INFO, Component::logger_, Timestamp::Now(), startTime_, Component::STOPPING, Logger::syslog(), and uninitialize().

Referenced by logVoltageAndCurrent(), resetting(), and stopped().

void AcousticModem_Benthos_ATM900::uninitialize ( void  )
virtual

Member Data Documentation

Timespan AcousticModem_Benthos_ATM900::acousticResponseTimeout_
private

Referenced by gotNewQuery(), and runnable().

DataWriter* AcousticModem_Benthos_ATM900::acousticWakeupWriter_
private
bool AcousticModem_Benthos_ATM900::commandModeAcknowledged_
private

Referenced by start(), and starting().

bool AcousticModem_Benthos_ATM900::commandModeSent_
private

Referenced by start(), and starting().

int AcousticModem_Benthos_ATM900::commRate_
private

Referenced by start(), and starting().

Timestamp AcousticModem_Benthos_ATM900::dataTimestamp_
private
bool AcousticModem_Benthos_ATM900::debug_
private
char AcousticModem_Benthos_ATM900::deviceResponse_[396]
private
bool AcousticModem_Benthos_ATM900::gotAcousticWakeup_
private
bool AcousticModem_Benthos_ATM900::gotDebugRxMessage_
private
bool AcousticModem_Benthos_ATM900::gotDebugTxMessage_
private
bool AcousticModem_Benthos_ATM900::gotRangeMessage_
private
bool AcousticModem_Benthos_ATM900::gotRangeRequestMessage_
private
bool AcousticModem_Benthos_ATM900::gotResponseNotReceived_
private

Referenced by readAndParseResponses(), and runnable().

LoadControl AcousticModem_Benthos_ATM900::loadControl_
private
int AcousticModem_Benthos_ATM900::localAddress_
private
ConfigReader* AcousticModem_Benthos_ATM900::localAddressCfgReader_
private
int AcousticModem_Benthos_ATM900::localAddressCfgSetting_
private

Referenced by readConfig(), and starting().

bool AcousticModem_Benthos_ATM900::localAddressSettingAcknowledged_
private

Referenced by start(), and starting().

bool AcousticModem_Benthos_ATM900::localAddressSettingSent_
private

Referenced by start(), and starting().

DataWriter* AcousticModem_Benthos_ATM900::localAddressWriter_
private
double AcousticModem_Benthos_ATM900::modemReceivePingEpochSeconds_
private

Referenced by parseDebugRxMessage(), and publishData().

Timestamp AcousticModem_Benthos_ATM900::modemReceivePingTime_
private

Referenced by parseDebugRxMessage().

double AcousticModem_Benthos_ATM900::modemTransmitPingEpochSeconds_
private

Referenced by parseDebugTxMessage(), and publishData().

Timestamp AcousticModem_Benthos_ATM900::modemTransmitPingTime_
private
DataReader* AcousticModem_Benthos_ATM900::numberOfPingsRequestedReader_
private
int AcousticModem_Benthos_ATM900::numPingsReceived_
private

Referenced by gotNewQuery(), and runnable().

int AcousticModem_Benthos_ATM900::numPingsRequested_
private

Referenced by gotNewQuery(), and runnable().

Timespan AcousticModem_Benthos_ATM900::poTimeout_
private

Referenced by starting().

Timespan AcousticModem_Benthos_ATM900::powerDownTimeout_
private

Referenced by start().

Timestamp AcousticModem_Benthos_ATM900::powerOffTimeStart_
private

Referenced by start(), and uninitialize().

DataReader* AcousticModem_Benthos_ATM900::queryAddressRequestedReader_
private
double AcousticModem_Benthos_ATM900::range_
private
DataWriter* AcousticModem_Benthos_ATM900::rangeRequestReceivedWriter_
private
DataWriter* AcousticModem_Benthos_ATM900::rangeWriter_
private
Timestamp AcousticModem_Benthos_ATM900::receivePingTime_
private
int AcousticModem_Benthos_ATM900::remoteAddress_
private

Referenced by parseRangeMessage(), and publishData().

int AcousticModem_Benthos_ATM900::remoteAddressRequested_
private

Referenced by gotNewQuery(), and runnable().

DataWriter* AcousticModem_Benthos_ATM900::remoteAddressWriter_
private
UniversalDataWriter* AcousticModem_Benthos_ATM900::rxTimeWriter_
private
Timestamp AcousticModem_Benthos_ATM900::startTime_
private

Referenced by resume(), start(), starting(), and stop().

Timestamp AcousticModem_Benthos_ATM900::transmitPingTime_
private

Referenced by gotNewQuery(), and runnable().

UniversalDataWriter* AcousticModem_Benthos_ATM900::txTimeWriter_
private
UartStream AcousticModem_Benthos_ATM900::uart_
private
int AcousticModem_Benthos_ATM900::verbosity_
private
ConfigReader* AcousticModem_Benthos_ATM900::verbosityCfgReader_
private

The documentation for this class was generated from the following files: