plptools
Loading...
Searching...
No Matches
DataLink Class Reference

Thread-safe class responsible for managing the underlying serial device and data link framing. More...

#include <datalink.h>

Collaboration diagram for DataLink:

Public Member Functions

 DataLink (const char *fname, int baud, Link *_link, unsigned short verbose, const int cancellationFd)
 
 ~DataLink ()
 
void send (BufferStore &b, bool isEPOC)
 Send a buffer out to serial line. More...
 
int getSpeed ()
 
bool linkFailed ()
 
void reset ()
 

Private Member Functions

void addToCrc (unsigned char a, unsigned short *crc)
 
bool processInputData (std::vector< BufferStore > &receivedData)
 Reads the incoming data and processes data frames. More...
 
void sendReceivedData (std::vector< BufferStore > &receivedData)
 
void shutdown ()
 Store a flag that we're shutting down and signal any waiting send calls. More...
 
void internalReset (bool resetBaudRateIndex)
 

Private Attributes

pthread_t dataPumpThreadId_
 
unsigned int crc_table [256]
 
std::mutex serialMutex_
 
int fd
 
int serialStatus = -1
 
int baudRateIndex_ = 0
 
int baudRate_
 
bool lastFatal = false
 
std::mutex inputMutex_
 
bool esc = false
 
bool justStarted = true
 
BufferStore rcv
 
int startPkt = -1
 
int lastSYN = -1
 
unsigned short crcIn = 0
 
unsigned short inCRCstate
 
unsigned short receivedCRC
 
unsigned char * inBuffer
 
int inWrite = 0
 
int inRead = 0
 
std::mutex outputMutex_
 
bool isCancelled_ = false
 
unsigned char * outBuffer
 
int outWrite = 0
 
int outRead = 0
 
std::condition_variable outputCondition_
 
Link *const link_
 
const std::string devname
 
const int requestedBaudRate_
 Requested baud rate; -1 indicates automatic. More...
 
const int cancellationFd_
 Used to signal cancellation. More...
 
const short int verbose_
 

Friends

void * data_pump_thread (void *)
 

Detailed Description

Thread-safe class responsible for managing the underlying serial device and data link framing.

Definition at line 43 of file datalink.h.

Constructor & Destructor Documentation

◆ DataLink()

DataLink::DataLink ( const char *  fname,
int  baud,
Link _link,
unsigned short  verbose,
const int  cancellationFd 
)

Definition at line 218 of file datalink.cc.

◆ ~DataLink()

DataLink::~DataLink ( )

Definition at line 260 of file datalink.cc.

Member Function Documentation

◆ addToCrc()

void DataLink::addToCrc ( unsigned char  a,
unsigned short *  crc 
)
inlineprivate

Definition at line 70 of file datalink.h.

◆ getSpeed()

int DataLink::getSpeed ( )

Definition at line 333 of file datalink.cc.

◆ internalReset()

void DataLink::internalReset ( bool  resetBaudRateIndex)
private

Definition at line 291 of file datalink.cc.

◆ linkFailed()

bool DataLink::linkFailed ( )

Definition at line 534 of file datalink.cc.

◆ processInputData()

bool DataLink::processInputData ( std::vector< BufferStore > &  receivedData)
private

Reads the incoming data and processes data frames.

Returns
true if the link is stable and more data can be consumed; false otherwise.

Definition at line 407 of file datalink.cc.

◆ reset()

void DataLink::reset ( )

Definition at line 280 of file datalink.cc.

◆ send()

void DataLink::send ( BufferStore b,
bool  isEPOC 
)

Send a buffer out to serial line.

This blocks until there's enough space in the output buffer to write the whole message atomically (to ensure messages can't get interleaved), suspending the current thread until signaled by the data pump thread if there's insufficient space.

Drops messages on the floor when shutting down.

Parameters
bbuffer to send
isEPOCflag indicating if additional EPOC32 byte-stuffing should be used

Definition at line 338 of file datalink.cc.

◆ sendReceivedData()

void DataLink::sendReceivedData ( std::vector< BufferStore > &  receivedData)
private

Definition at line 528 of file datalink.cc.

◆ shutdown()

void DataLink::shutdown ( )
private

Store a flag that we're shutting down and signal any waiting send calls.

Definition at line 284 of file datalink.cc.

Friends And Related Function Documentation

◆ data_pump_thread

void * data_pump_thread ( void *  )
friend

Definition at line 84 of file datalink.cc.

Member Data Documentation

◆ baudRate_

int DataLink::baudRate_
private

Definition at line 110 of file datalink.h.

◆ baudRateIndex_

int DataLink::baudRateIndex_ = 0
private

Definition at line 109 of file datalink.h.

◆ cancellationFd_

const int DataLink::cancellationFd_
private

Used to signal cancellation.

Should never be read.

Definition at line 152 of file datalink.h.

◆ crc_table

unsigned int DataLink::crc_table[256]
private

Definition at line 92 of file datalink.h.

◆ crcIn

unsigned short DataLink::crcIn = 0
private

Definition at line 121 of file datalink.h.

◆ dataPumpThreadId_

pthread_t DataLink::dataPumpThreadId_
private

Definition at line 90 of file datalink.h.

◆ devname

const std::string DataLink::devname
private

Definition at line 140 of file datalink.h.

◆ esc

bool DataLink::esc = false
private

Definition at line 116 of file datalink.h.

◆ fd

int DataLink::fd
private

Definition at line 107 of file datalink.h.

◆ inBuffer

unsigned char* DataLink::inBuffer
private

Definition at line 124 of file datalink.h.

◆ inCRCstate

unsigned short DataLink::inCRCstate
private

Definition at line 122 of file datalink.h.

◆ inputMutex_

std::mutex DataLink::inputMutex_
private

Definition at line 115 of file datalink.h.

◆ inRead

int DataLink::inRead = 0
private

Definition at line 124 of file datalink.h.

◆ inWrite

int DataLink::inWrite = 0
private

Definition at line 124 of file datalink.h.

◆ isCancelled_

bool DataLink::isCancelled_ = false
private

Definition at line 129 of file datalink.h.

◆ justStarted

bool DataLink::justStarted = true
private

Definition at line 117 of file datalink.h.

◆ lastFatal

bool DataLink::lastFatal = false
private

Definition at line 111 of file datalink.h.

◆ lastSYN

int DataLink::lastSYN = -1
private

Definition at line 120 of file datalink.h.

◆ link_

Link* const DataLink::link_
private

Definition at line 138 of file datalink.h.

◆ outBuffer

unsigned char* DataLink::outBuffer
private

Definition at line 130 of file datalink.h.

◆ outputCondition_

std::condition_variable DataLink::outputCondition_
private

Definition at line 134 of file datalink.h.

◆ outputMutex_

std::mutex DataLink::outputMutex_
private

Definition at line 128 of file datalink.h.

◆ outRead

int DataLink::outRead = 0
private

Definition at line 130 of file datalink.h.

◆ outWrite

int DataLink::outWrite = 0
private

Definition at line 130 of file datalink.h.

◆ rcv

BufferStore DataLink::rcv
private

Definition at line 118 of file datalink.h.

◆ receivedCRC

unsigned short DataLink::receivedCRC
private

Definition at line 123 of file datalink.h.

◆ requestedBaudRate_

const int DataLink::requestedBaudRate_
private

Requested baud rate; -1 indicates automatic.

Definition at line 145 of file datalink.h.

◆ serialMutex_

std::mutex DataLink::serialMutex_
private

Definition at line 106 of file datalink.h.

◆ serialStatus

int DataLink::serialStatus = -1
private

Definition at line 108 of file datalink.h.

◆ startPkt

int DataLink::startPkt = -1
private

Definition at line 119 of file datalink.h.

◆ verbose_

const short int DataLink::verbose_
private

Definition at line 153 of file datalink.h.


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