Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
sawyer::Transport Class Reference

#include <Transport.h>

Public Types

enum  counterTypes {
  GARBLE_BYTES, INVALID_MSG, IGNORED_ACK, QUEUE_FULL,
  NUM_COUNTERS
}
 

Public Member Functions

int close ()
 
void configure (const char *device, int retries)
 
void flush (std::list< Message * > *queue=0)
 
void flush (enum MessageTypes type, std::list< Message * > *queue=0)
 
MessagegetAck ()
 
unsigned long getCounter (enum counterTypes counter)
 
roch_driver::RawData getdata ()
 
bool isConfigured ()
 
void poll ()
 
MessagepopNext ()
 
MessagepopNext (enum MessageTypes type)
 
void printCounters (std::ostream &stream=std::cout)
 
void send (Message *m)
 
MessagesendRequest (Message *m)
 
MessagewaitNext (double timeout=0.0)
 
MessagewaitNext (enum MessageTypes type, double timeout=0.0)
 

Static Public Member Functions

static Transportinstance ()
 

Public Attributes

int counter_number
 

Static Public Attributes

static const char * counter_names [NUM_COUNTERS]
 

Protected Member Functions

 Transport ()
 
 ~Transport ()
 

Private Member Functions

int closeComm ()
 
void enqueueMessage (Message *msg)
 
int openComm (const char *device)
 
void resetCounters ()
 
MessagerxMessage ()
 

Private Attributes

bool configured
 
unsigned long counters [NUM_COUNTERS]
 
int retries
 
roch_driver rochDriver
 
std::list< Message * > rx_queue
 
void * serial
 

Static Private Attributes

static const size_t MAX_QUEUE_LEN = 10000
 
static const int RETRY_DELAY_MS = 200
 

Detailed Description

Definition at line 89 of file Transport.h.

Member Enumeration Documentation

Enumerator
GARBLE_BYTES 
INVALID_MSG 
IGNORED_ACK 
QUEUE_FULL 
NUM_COUNTERS 

Definition at line 92 of file Transport.h.

Constructor & Destructor Documentation

sawyer::Transport::Transport ( )
protected

Constructs an unconfigured transport instance.

Definition at line 138 of file Transport.cpp.

sawyer::Transport::~Transport ( )
protected

Definition at line 149 of file Transport.cpp.

Member Function Documentation

int sawyer::Transport::close ( )

Close this Transport.

Returns
Zero on success, nonzero otherwise
Postcondition
Tranport will be unconfigured, regardless of success/failure.

Definition at line 192 of file Transport.cpp.

int sawyer::Transport::closeComm ( )
private

Closes the associated serial port

Definition at line 227 of file Transport.cpp.

void sawyer::Transport::configure ( const char *  device,
int  retries 
)

Configure this Transport for communication. If this Transport is already configured, it will be closed and reconfigured. The RX buffer and Message queue will be flushed. Counters will be reset.

Parameters
deviceThe device to communicate over. (Currently, must be serial)
retriesNumber of times to resend an unacknowledged message.
Exceptions
TransportExceptionif configuration fails
Postcondition
Transport becomes configured.

Definition at line 164 of file Transport.cpp.

void sawyer::Transport::enqueueMessage ( Message msg)
private

Add a Message to the Message queue. Checks Message validity, and drops invalid messages. Trims queue down to size if it gets too big.

Parameters
msgThe message to enqueue.

Definition at line 350 of file Transport.cpp.

void sawyer::Transport::flush ( std::list< Message * > *  queue = 0)
void sawyer::Transport::flush ( enum MessageTypes  type,
std::list< Message * > *  queue = 0 
)
Message * sawyer::Transport::getAck ( )

Read data until an ack message is found. Any data messages received by this function will be queued.

Returns
The next ack message, if one is read. Null if no ack message has been read yet.

Definition at line 315 of file Transport.cpp.

unsigned long sawyer::Transport::getCounter ( enum counterTypes  counter)
inline

Definition at line 162 of file Transport.h.

roch_driver::RawData sawyer::Transport::getdata ( )
inline

Definition at line 103 of file Transport.h.

Transport & sawyer::Transport::instance ( )
static

Transport singleton instance accessor.

Returns
The Transport singleton instance.

Definition at line 129 of file Transport.cpp.

bool sawyer::Transport::isConfigured ( )
inline

Definition at line 138 of file Transport.h.

int sawyer::Transport::openComm ( const char *  device)
private

Opens a serial port with the default configuration (115200 bps, 8-N-1), using the device specified in the constructor

Definition at line 208 of file Transport.cpp.

void sawyer::Transport::poll ( )

Public function which makes sure buffered messages are still being read into the internal buffer. A compromise between forcing a thread-based implementation and blocking on results. This could be placed into a separate thread, but will need to be wrapped for thread safety

Definition at line 379 of file Transport.cpp.

Message * sawyer::Transport::popNext ( )

Removes the oldest Message from the Message queue and returns it. All data waiting in the input buffer will be read and queued.

Returns
The oldest message in the queue. This Message is removed from the queue. It is dynamically allocated; the caller is responsible for freeing it. Null if no Messages are currently queued.

Definition at line 558 of file Transport.cpp.

Message * sawyer::Transport::popNext ( enum MessageTypes  type)

Finds the oldest message of a specific type in the Message queue, removes it, and returns it. Older messages of the wrong type will be left in the queue. All data waiting in the input buffer will be read and queued.

Returns
The oldest message of the correct type in the queue. This Message is removed from the queue. It is dynamically allocated; the caller is responsible for freeing it. Null if no Messages are currently queued.

Definition at line 581 of file Transport.cpp.

void sawyer::Transport::printCounters ( std::ostream &  stream = std::cout)

Prints a nice list of counter values

Definition at line 741 of file Transport.cpp.

void sawyer::Transport::resetCounters ( )
private

Wipes out counters

Definition at line 767 of file Transport.cpp.

Message * sawyer::Transport::rxMessage ( )
private

Non-blocking message receive function. !!! Absolutely not reentrant !!! !!! Keeps internal static state !!!

Returns
A pointer to a dynamically allocated message, if one has been received this call. Null if no complete message has been received. Bad data are silently eaten.

Definition at line 242 of file Transport.cpp.

void sawyer::Transport::send ( Message m)

Send a message. Waits for the firmware to acknowlge and resends the packet a few timew if not acknowledged.

Parameters
mThe message to send
Exceptions
Transport::Exceptionif never acknowledged.

Definition at line 408 of file Transport.cpp.

Message * sawyer::Transport::sendRequest ( Message m)

Send a Request message. Waits for the firmware to acknowlge and resends the packet a few timew if not acknowledged.

Parameters
mThe message to send
Exceptions
Transport::Exceptionif never acknowledged.
Returns
Data Message

Definition at line 485 of file Transport.cpp.

Message * sawyer::Transport::waitNext ( double  timeout = 0.0)

Fetch a message, blocking if there are no messages currently available.

Parameters
timeoutMaximum time to block, in seconds. Actual resolution is system dependent A timeout of 0.0 indicates no timeout.
Returns
A message. Null if the timeout elapses.

Definition at line 607 of file Transport.cpp.

Message * sawyer::Transport::waitNext ( enum MessageTypes  type,
double  timeout = 0.0 
)

Fetch a particular type of message, blocking if one isn't available.

Parameters
typeThe type of message to fetch
timeoutMaximum time to block, in seconds. Actual resolution is system dependent A timeout of 0.0 indicates no timeout.
Returns
A message of the requested type. Nul if the timeout elapses.

Definition at line 639 of file Transport.cpp.

Member Data Documentation

bool sawyer::Transport::configured
private

Definition at line 105 of file Transport.h.

const char * sawyer::Transport::counter_names
static
Initial value:
= {
"Garbled bytes",
"Invalid messages",
"Ignored acknowledgment",
"Message queue overflow"
}

Definition at line 100 of file Transport.h.

int sawyer::Transport::counter_number

Definition at line 101 of file Transport.h.

unsigned long sawyer::Transport::counters[NUM_COUNTERS]
private

Definition at line 114 of file Transport.h.

const size_t sawyer::Transport::MAX_QUEUE_LEN = 10000
staticprivate

Definition at line 112 of file Transport.h.

int sawyer::Transport::retries
private

Definition at line 107 of file Transport.h.

const int sawyer::Transport::RETRY_DELAY_MS = 200
staticprivate

Definition at line 109 of file Transport.h.

roch_driver sawyer::Transport::rochDriver
private

Definition at line 108 of file Transport.h.

std::list<Message *> sawyer::Transport::rx_queue
private

Definition at line 111 of file Transport.h.

void* sawyer::Transport::serial
private

Definition at line 106 of file Transport.h.


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


roch_base
Author(s): Mike Purvis , Paul Bovbel , Chen
autogenerated on Mon Jun 10 2019 14:41:14