Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
iv::comms::serial::SerialPort Class Reference

Class that provides a serial port interface. More...

#include <SerialPort.hpp>

Collaboration diagram for iv::comms::serial::SerialPort:
[legend]

Public Member Functions

 SerialPort ()=delete
 
 SerialPort (const iv::model::comms::serial::PortSettings &settings)
 
 SerialPort (const std::string &portName, iv::model::comms::serial::eBaudRate baudRate, iv::model::comms::serial::eDataBits dataBits, iv::model::comms::serial::eParity parity, iv::model::comms::serial::eStopBits stopBits, iv::model::comms::serial::eFlowControl flowControl, const iv::comms::serial::Timeout &timeout)
 
 SerialPort (const SerialPort &other)=delete
 
 SerialPort (SerialPort &&other) noexcept=delete
 
 ~SerialPort ()
 
SerialPortoperator= (const SerialPort &other)=delete
 
SerialPortoperator= (SerialPort &&other) noexcept=delete
 
uint64_t available () const
 
void close ()
 
void open ()
 
iv::comms::serial::size_t read (uint8_t *buffer, iv::comms::serial::size_t size) const
 
iv::comms::serial::size_t read (std::vector< uint8_t > &buffer, iv::comms::serial::size_t size=1) const
 
iv::comms::serial::size_t read (std::string &buffer, iv::comms::serial::size_t size=1) const
 
std::string read (iv::comms::serial::size_t size=1) const
 
size_t readLine (std::string &buffer, iv::comms::serial::size_t size=65536, const std::string &eol="\n") const
 
std::string readLine (iv::comms::serial::size_t size=65536, const std::string &eol="\n") const
 
std::vector< std::string > readLines (iv::comms::serial::size_t size=65536, const std::string &eol="\n") const
 
iv::comms::serial::size_t write (const uint8_t *data, iv::comms::serial::size_t size) const
 
iv::comms::serial::size_t write (const std::vector< uint8_t > &data) const
 
iv::comms::serial::size_t write (const std::vector< std::byte > &data) const
 
iv::comms::serial::size_t write (const std::string &data) const
 
bool waitReadable (uint32_t timeout) const
 Block until there is serial data to read or read_timeout_constant number of milliseconds have elapsed. The return value is true when the function exits with the port in a readable state, false otherwise (due to timeout or select interruption).
 
void waitByteTimes (iv::comms::serial::size_t count) const
 Block for a period of time corresponding to the transmission time of count characters at present serial settings. This may be used in conjunction with waitReadable to read larger blocks of data from the port.
 
void flush () const
 
void flushInput () const
 
void flushOutput () const
 
void sendBreak (uint32_t duration) const
 
void setPort (const std::string &port)
 
void setBaudRate (iv::model::comms::serial::eBaudRate baudRate)
 
void setByteSize (iv::model::comms::serial::eDataBits byteSize)
 
void setParity (iv::model::comms::serial::eParity parity)
 
void setStopBits (iv::model::comms::serial::eStopBits stopBits)
 
void setFlowControl (iv::model::comms::serial::eFlowControl flowControl)
 
void setTimeout (const iv::comms::serial::Timeout &timeout)
 
void setTimeout (uint32_t interByteTimeout, uint32_t readTimeoutConstant, uint32_t readTimeoutMultiplier, uint32_t writeTimeoutConstant, uint32_t writeTimeoutMultiplier)
 
void setBreak (bool level=true) const
 
void setRTS (bool level=true) const
 
void setDTR (bool level=true) const
 
bool waitForChange () const
 
std::string getPort () const
 
iv::model::comms::serial::eBaudRate getBaudRate () const
 
iv::model::comms::serial::eDataBits getByteSize () const
 
iv::model::comms::serial::eParity getParity () const
 
iv::model::comms::serial::eStopBits getStopBits () const
 
iv::model::comms::serial::eFlowControl getFlowControl () const
 
iv::comms::serial::Timeout getTimeout () const
 
bool getCTS () const
 
bool getDSR () const
 
bool getRI () const
 
bool getCD () const
 
bool isOpen () const
 

Private Member Functions

iv::comms::serial::size_t _read (uint8_t *buffer, iv::comms::serial::size_t size) const
 
iv::comms::serial::size_t _write (const uint8_t *data, iv::comms::serial::size_t size) const
 
void reconfigurePort () const
 
void readLock ()
 
void readUnlock ()
 
void writeLock ()
 
void writeUnlock ()
 

Static Private Member Functions

static timespec timespecFromMs (const uint32_t &millis)
 

Private Attributes

std::string m_port
 
int32_t m_fd
 
bool m_isOpen
 
bool m_xOnXOff
 
bool m_rtsCts
 
iv::comms::serial::Timeout m_timeout
 
iv::model::comms::serial::PortSettings m_settings
 
uint32_t byteTimeNs
 
std::mutex m_readMutex
 
std::mutex m_writeMutex
 

Detailed Description

Class that provides a serial port interface.

Constructor & Destructor Documentation

◆ SerialPort() [1/5]

iv::comms::serial::SerialPort::SerialPort ( )
delete

◆ SerialPort() [2/5]

iv::comms::serial::SerialPort::SerialPort ( const iv::model::comms::serial::PortSettings & settings)
explicit

◆ SerialPort() [3/5]

iv::comms::serial::SerialPort::SerialPort ( const std::string & portName,
iv::model::comms::serial::eBaudRate baudRate,
iv::model::comms::serial::eDataBits dataBits,
iv::model::comms::serial::eParity parity,
iv::model::comms::serial::eStopBits stopBits,
iv::model::comms::serial::eFlowControl flowControl,
const iv::comms::serial::Timeout & timeout )

◆ SerialPort() [4/5]

iv::comms::serial::SerialPort::SerialPort ( const SerialPort & other)
delete

◆ SerialPort() [5/5]

iv::comms::serial::SerialPort::SerialPort ( SerialPort && other)
deletenoexcept

◆ ~SerialPort()

iv::comms::serial::SerialPort::~SerialPort ( )

Member Function Documentation

◆ _read()

iv::comms::serial::size_t iv::comms::serial::SerialPort::_read ( uint8_t * buffer,
iv::comms::serial::size_t size ) const
private

◆ _write()

iv::comms::serial::size_t iv::comms::serial::SerialPort::_write ( const uint8_t * data,
iv::comms::serial::size_t size ) const
private

Error

Timeout

Port ready to write

◆ available()

uint64_t iv::comms::serial::SerialPort::available ( ) const
nodiscard
Returns
The number of characters in the buffer.

◆ close()

void iv::comms::serial::SerialPort::close ( )

◆ flush()

void iv::comms::serial::SerialPort::flush ( ) const

Flush the input and output buffers

◆ flushInput()

void iv::comms::serial::SerialPort::flushInput ( ) const

Flush only the input buffer

◆ flushOutput()

void iv::comms::serial::SerialPort::flushOutput ( ) const

Flush only the output buffer

◆ getBaudRate()

iv::model::comms::serial::eBaudRate iv::comms::serial::SerialPort::getBaudRate ( ) const
nodiscard

◆ getByteSize()

iv::model::comms::serial::eDataBits iv::comms::serial::SerialPort::getByteSize ( ) const
nodiscard

◆ getCD()

bool iv::comms::serial::SerialPort::getCD ( ) const
nodiscard

◆ getCTS()

bool iv::comms::serial::SerialPort::getCTS ( ) const
nodiscard

◆ getDSR()

bool iv::comms::serial::SerialPort::getDSR ( ) const
nodiscard

◆ getFlowControl()

iv::model::comms::serial::eFlowControl iv::comms::serial::SerialPort::getFlowControl ( ) const
nodiscard

◆ getParity()

iv::model::comms::serial::eParity iv::comms::serial::SerialPort::getParity ( ) const
nodiscard

◆ getPort()

std::string iv::comms::serial::SerialPort::getPort ( ) const
nodiscard

◆ getRI()

bool iv::comms::serial::SerialPort::getRI ( ) const
nodiscard

◆ getStopBits()

iv::model::comms::serial::eStopBits iv::comms::serial::SerialPort::getStopBits ( ) const
nodiscard

◆ getTimeout()

iv::comms::serial::Timeout iv::comms::serial::SerialPort::getTimeout ( ) const
nodiscard

◆ isOpen()

bool iv::comms::serial::SerialPort::isOpen ( ) const
nodiscard

◆ open()

void iv::comms::serial::SerialPort::open ( )

◆ operator=() [1/2]

SerialPort & iv::comms::serial::SerialPort::operator= ( const SerialPort & other)
delete

◆ operator=() [2/2]

SerialPort & iv::comms::serial::SerialPort::operator= ( SerialPort && other)
deletenoexcept

◆ read() [1/4]

std::string iv::comms::serial::SerialPort::read ( iv::comms::serial::size_t size = 1) const
nodiscard

◆ read() [2/4]

iv::comms::serial::size_t iv::comms::serial::SerialPort::read ( std::string & buffer,
iv::comms::serial::size_t size = 1 ) const

◆ read() [3/4]

iv::comms::serial::size_t iv::comms::serial::SerialPort::read ( std::vector< uint8_t > & buffer,
iv::comms::serial::size_t size = 1 ) const

◆ read() [4/4]

iv::comms::serial::size_t iv::comms::serial::SerialPort::read ( uint8_t * buffer,
iv::comms::serial::size_t size ) const

◆ readLine() [1/2]

std::string iv::comms::serial::SerialPort::readLine ( iv::comms::serial::size_t size = 65536,
const std::string & eol = "\n" ) const
nodiscard

◆ readLine() [2/2]

size_t iv::comms::serial::SerialPort::readLine ( std::string & buffer,
iv::comms::serial::size_t size = 65536,
const std::string & eol = "\n" ) const

◆ readLines()

std::vector< std::string > iv::comms::serial::SerialPort::readLines ( iv::comms::serial::size_t size = 65536,
const std::string & eol = "\n" ) const
nodiscard

◆ readLock()

void iv::comms::serial::SerialPort::readLock ( )
private

◆ readUnlock()

void iv::comms::serial::SerialPort::readUnlock ( )
private

◆ reconfigurePort()

void iv::comms::serial::SerialPort::reconfigurePort ( ) const
private

◆ sendBreak()

void iv::comms::serial::SerialPort::sendBreak ( uint32_t duration) const

Sends the RS-232 break signal.

◆ setBaudRate()

void iv::comms::serial::SerialPort::setBaudRate ( iv::model::comms::serial::eBaudRate baudRate)

◆ setBreak()

void iv::comms::serial::SerialPort::setBreak ( bool level = true) const

Set the break condition to a given level. Defaults to true.

◆ setByteSize()

void iv::comms::serial::SerialPort::setByteSize ( iv::model::comms::serial::eDataBits byteSize)

◆ setDTR()

void iv::comms::serial::SerialPort::setDTR ( bool level = true) const

Set the DTR handshaking line to the given level. Defaults to true.

◆ setFlowControl()

void iv::comms::serial::SerialPort::setFlowControl ( iv::model::comms::serial::eFlowControl flowControl)

◆ setParity()

void iv::comms::serial::SerialPort::setParity ( iv::model::comms::serial::eParity parity)

◆ setPort()

void iv::comms::serial::SerialPort::setPort ( const std::string & port)

Sets the serial port identifier

Parameters
portA const std::string reference containing the address of the serial port

◆ setRTS()

void iv::comms::serial::SerialPort::setRTS ( bool level = true) const

Set the RTS handshaking line to the given level. Defaults to true.

◆ setStopBits()

void iv::comms::serial::SerialPort::setStopBits ( iv::model::comms::serial::eStopBits stopBits)

◆ setTimeout() [1/2]

void iv::comms::serial::SerialPort::setTimeout ( const iv::comms::serial::Timeout & timeout)

◆ setTimeout() [2/2]

void iv::comms::serial::SerialPort::setTimeout ( uint32_t interByteTimeout,
uint32_t readTimeoutConstant,
uint32_t readTimeoutMultiplier,
uint32_t writeTimeoutConstant,
uint32_t writeTimeoutMultiplier )

◆ timespecFromMs()

timespec iv::comms::serial::SerialPort::timespecFromMs ( const uint32_t & millis)
staticprivate

◆ waitByteTimes()

void iv::comms::serial::SerialPort::waitByteTimes ( iv::comms::serial::size_t count) const

Block for a period of time corresponding to the transmission time of count characters at present serial settings. This may be used in conjunction with waitReadable to read larger blocks of data from the port.

Parameters
count

◆ waitForChange()

bool iv::comms::serial::SerialPort::waitForChange ( ) const
nodiscard

Blocks until CTS, DSR, RI, CD changes or something interrupts it.

Can throw an exception if an error occurs while waiting. You can check the status of CTS, DSR, RI, and CD once this returns. Uses TIOCMIWAIT via ioctl if available (mostly only on Linux) with a resolution of less than +-1ms and as good as +-0.2ms. Otherwise a polling method is used which can give +-2ms.

Returns
Returns true if one of the lines changed, false if something else occurred.

◆ waitReadable()

bool iv::comms::serial::SerialPort::waitReadable ( uint32_t timeout) const
nodiscard

Block until there is serial data to read or read_timeout_constant number of milliseconds have elapsed. The return value is true when the function exits with the port in a readable state, false otherwise (due to timeout or select interruption).

◆ write() [1/4]

iv::comms::serial::size_t iv::comms::serial::SerialPort::write ( const std::string & data) const
nodiscard

◆ write() [2/4]

iv::comms::serial::size_t iv::comms::serial::SerialPort::write ( const std::vector< std::byte > & data) const
nodiscard

◆ write() [3/4]

iv::comms::serial::size_t iv::comms::serial::SerialPort::write ( const std::vector< uint8_t > & data) const
nodiscard

◆ write() [4/4]

iv::comms::serial::size_t iv::comms::serial::SerialPort::write ( const uint8_t * data,
iv::comms::serial::size_t size ) const

◆ writeLock()

void iv::comms::serial::SerialPort::writeLock ( )
private

◆ writeUnlock()

void iv::comms::serial::SerialPort::writeUnlock ( )
private

Member Data Documentation

◆ byteTimeNs

uint32_t iv::comms::serial::SerialPort::byteTimeNs
private

◆ m_fd

int32_t iv::comms::serial::SerialPort::m_fd
private

◆ m_isOpen

bool iv::comms::serial::SerialPort::m_isOpen
private

◆ m_port

std::string iv::comms::serial::SerialPort::m_port
private

◆ m_readMutex

std::mutex iv::comms::serial::SerialPort::m_readMutex
private

◆ m_rtsCts

bool iv::comms::serial::SerialPort::m_rtsCts
private

◆ m_settings

iv::model::comms::serial::PortSettings iv::comms::serial::SerialPort::m_settings
private

◆ m_timeout

iv::comms::serial::Timeout iv::comms::serial::SerialPort::m_timeout
private

◆ m_writeMutex

std::mutex iv::comms::serial::SerialPort::m_writeMutex
private

◆ m_xOnXOff

bool iv::comms::serial::SerialPort::m_xOnXOff
private

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