Class CSerialPort

Inheritance Relationships

Base Type

  • public mrpt::io::CStream

Class Documentation

class CSerialPort : public mrpt::io::CStream

A communications serial port implementing the interface mrpt::io::CStream. On communication errors (eg. the given port number does not exist, timeouts,…), most of the methods will raise an exception of the class std::exception

The serial port to open is passed in the constructor in the form of a string description, which is platform dependent.

In Windows they are numbered “COM1”-“COM4” and “\.\COMXXX” for numbers above. It is recommended to always use the prefix “\." despite the actual port number.

In Linux the name must refer to the device, for example: “ttyUSB0”,”ttyS0”. If the name string does not start with “/” (an absolute path), the constructor will assume the prefix “/dev/”.

History:

  • 1/DEC/2005: (JLBC) First version

  • 20/DEC/2006: (JLBC) Integration into the MRPT framework

  • 12/DEC/2007: (JLBC) Added support for Linux.

  • 22/AUG/2017: (JLBC) Moved to new module mrpt-comms

Todo:

Add the internal buffer to the Windows implementation also

Public Functions

CSerialPort(const std::string &portName, bool openNow = true)

Constructor

Parameters:
  • portName – The serial port to open. See comments at the begining of this page.

  • openNow – Whether to try to open the port now. If not selected, the port should be open later with “open()”.

CSerialPort() = default

Default constructor: it does not open any port - later you must call “setSerialPortName” and then “open”

~CSerialPort() override

Destructor

void setSerialPortName(const std::string &COM_name)

Sets the serial port to open (it is an error to try to change this while open yet).

See also

open, close

void open()

Open the port. If is already open results in no action.

Throws:

std::exception – On communication errors

void open(const std::string &COM_name)

Open the given serial port. If it is already open and the name does not match, an exception is raised.

Throws:

std::exception – On communication errors or a different serial port already open.

void close()

Close the port. If is already closed, results in no action.

bool isOpen() const

Returns if port has been correctly open.

void purgeBuffers()

Purge tx and rx buffers.

Throws:

std::exception – On communication errors

void setConfig(int baudRate, int parity = 0, int bits = 8, int nStopBits = 1, bool enableFlowControl = false)

Changes the configuration of the port.

Parameters:
  • parity – 0:No parity, 1:Odd, 2:Even (WINDOWS ONLY: 3:Mark, 4:Space)

  • baudRate – The desired baud rate Accepted values: 50 - 230400

  • bits – Bits per word (typ. 8) Accepted values: 5,6,7,8.

  • nStopBits – Stop bits (typ. 1) Accepted values: 1,2

  • enableFlowControl – Whether to enable the hardware flow control (RTS/CTS) (default=no)

Throws:

std::exception – On communication errors

void setTimeouts(int ReadIntervalTimeout, int ReadTotalTimeoutMultiplier, int ReadTotalTimeoutConstant, int WriteTotalTimeoutMultiplier, int WriteTotalTimeoutConstant)

Changes the timeouts of the port, in milliseconds.

Throws:

std::exception – On communication errors

virtual size_t Read(void *Buffer, size_t Count) override

Implements the virtual method responsible for reading from the stream - Unlike CStream::ReadBuffer, this method will not raise an exception on zero bytes read, as long as there is not any fatal error in the communications.

Throws:

std::exception – On communication errors

std::string ReadString(const int total_timeout_ms = -1, bool *out_timeout = nullptr, const char *eol_chars = "\r\n")

Reads one text line from the serial port in POSIX “canonical mode”. This method reads from the serial port until one of the characters in eol are found.

Parameters:
  • eol_chars – A line reception is finished when one of these characters is found. Default: LF (10), CR (13).

  • total_timeout_ms – If >0, the maximum number of milliseconds to wait.

  • out_timeout – If provided, will hold true on return if a timeout ocurred, false on a valid read.

Throws:

std::exception – On communication errors

Returns:

The read string, without the final

virtual size_t Write(const void *Buffer, size_t Count) override
uint64_t Seek(int64_t off, CStream::TSeekOrigin o = sFromBeginning) override

not applicable in a serial port

virtual uint64_t getTotalBytesCount() const override

not applicable in a serial port

virtual uint64_t getPosition() const override

not applicable in a serial port

Protected Attributes

std::string m_serialName

The complete name of the serial port device (i.e. “\.\COM10”,”/dev/ttyS2”,…)

int m_baudRate = {0}
int m_totalTimeout_ms = {0}
int m_interBytesTimeout_ms = {0}
mrpt::system::CTicTac m_timer
int hCOM = {-1}

The file handle (-1: Not open)