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, bool noDSRCheck, unsigned short verbose, const int cancellationFd)
 
 ~DataLink ()
 
void send (BufferStore &b, bool isEPOC)
 Send a buffer out to serial line.
 
int getSpeed ()
 
bool linkFailed ()
 
void reset ()
 

Private Member Functions

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

Private Attributes

pthread_t dataPumpThreadId_
 
unsigned int crc_table [256]
 
std::mutex serialMutex_
 
int serialFd_ = -1
 
int serialStatus = -1
 
int baudRateIndex_ = 0
 
int baudRate_
 
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
 
bool noDSRCheck_ = false
 
std::condition_variable outputCondition_
 
Link *const link_
 
const std::string devname
 
const int requestedBaudRate_
 Requested baud rate; -1 indicates automatic.
 
const int cancellationFd_
 Used to signal cancellation.
 
const short int verbose_
 
int outputDataReadyPipe_ [2] = { -1, -1 }
 

Friends

void * data_pump_thread (void *arg)
 

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,
bool noDSRCheck,
unsigned short verbose,
const int cancellationFd )

Definition at line 219 of file datalink.cc.

◆ ~DataLink()

DataLink::~DataLink ( )

Definition at line 256 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 348 of file datalink.cc.

◆ internalReset()

void DataLink::internalReset ( bool resetBaudRateIndex)
private

Definition at line 310 of file datalink.cc.

◆ linkFailed()

bool DataLink::linkFailed ( )

Definition at line 549 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 422 of file datalink.cc.

◆ reset()

void DataLink::reset ( )

Definition at line 299 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 353 of file datalink.cc.

◆ sendReceivedData()

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

Definition at line 543 of file datalink.cc.

◆ serialOpen()

void DataLink::serialOpen ( )
private

Open the serial port.

Callers must hold the serial lock, and the port must be closed.

Definition at line 281 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 303 of file datalink.cc.

◆ signalPumpThread()

void DataLink::signalPumpThread ( )
private

Definition at line 343 of file datalink.cc.

Friends And Related Symbol Documentation

◆ data_pump_thread

void * data_pump_thread ( void * arg)
friend

Definition at line 77 of file datalink.cc.

Member Data Documentation

◆ baudRate_

int DataLink::baudRate_
private

Definition at line 119 of file datalink.h.

◆ baudRateIndex_

int DataLink::baudRateIndex_ = 0
private

Definition at line 118 of file datalink.h.

◆ cancellationFd_

const int DataLink::cancellationFd_
private

Used to signal cancellation.

Should never be read.

Definition at line 161 of file datalink.h.

◆ crc_table

unsigned int DataLink::crc_table[256]
private

Definition at line 101 of file datalink.h.

◆ crcIn

unsigned short DataLink::crcIn = 0
private

Definition at line 129 of file datalink.h.

◆ dataPumpThreadId_

pthread_t DataLink::dataPumpThreadId_
private

Definition at line 99 of file datalink.h.

◆ devname

const std::string DataLink::devname
private

Definition at line 149 of file datalink.h.

◆ esc

bool DataLink::esc = false
private

Definition at line 124 of file datalink.h.

◆ inBuffer

unsigned char* DataLink::inBuffer
private

Definition at line 132 of file datalink.h.

◆ inCRCstate

unsigned short DataLink::inCRCstate
private

Definition at line 130 of file datalink.h.

◆ inputMutex_

std::mutex DataLink::inputMutex_
private

Definition at line 123 of file datalink.h.

◆ inRead

int DataLink::inRead = 0
private

Definition at line 132 of file datalink.h.

◆ inWrite

int DataLink::inWrite = 0
private

Definition at line 132 of file datalink.h.

◆ isCancelled_

bool DataLink::isCancelled_ = false
private

Definition at line 137 of file datalink.h.

◆ justStarted

bool DataLink::justStarted = true
private

Definition at line 125 of file datalink.h.

◆ lastSYN

int DataLink::lastSYN = -1
private

Definition at line 128 of file datalink.h.

◆ link_

Link* const DataLink::link_
private

Definition at line 147 of file datalink.h.

◆ noDSRCheck_

bool DataLink::noDSRCheck_ = false
private

Definition at line 139 of file datalink.h.

◆ outBuffer

unsigned char* DataLink::outBuffer
private

Definition at line 138 of file datalink.h.

◆ outputCondition_

std::condition_variable DataLink::outputCondition_
private

Definition at line 143 of file datalink.h.

◆ outputDataReadyPipe_

int DataLink::outputDataReadyPipe_[2] = { -1, -1 }
private

Definition at line 164 of file datalink.h.

◆ outputMutex_

std::mutex DataLink::outputMutex_
private

Definition at line 136 of file datalink.h.

◆ outRead

int DataLink::outRead = 0
private

Definition at line 138 of file datalink.h.

◆ outWrite

int DataLink::outWrite = 0
private

Definition at line 138 of file datalink.h.

◆ rcv

BufferStore DataLink::rcv
private

Definition at line 126 of file datalink.h.

◆ receivedCRC

unsigned short DataLink::receivedCRC
private

Definition at line 131 of file datalink.h.

◆ requestedBaudRate_

const int DataLink::requestedBaudRate_
private

Requested baud rate; -1 indicates automatic.

Definition at line 154 of file datalink.h.

◆ serialFd_

int DataLink::serialFd_ = -1
private

Definition at line 116 of file datalink.h.

◆ serialMutex_

std::mutex DataLink::serialMutex_
private

Definition at line 115 of file datalink.h.

◆ serialStatus

int DataLink::serialStatus = -1
private

Definition at line 117 of file datalink.h.

◆ startPkt

int DataLink::startPkt = -1
private

Definition at line 127 of file datalink.h.

◆ verbose_

const short int DataLink::verbose_
private

Definition at line 162 of file datalink.h.


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