Skip to content

opalcompany/CppLinuxSerial

 
 

Repository files navigation

CppLinuxSerial

Linux serial port library written in C++.

Build Status

Description

Library for communicating with COM ports on a Linux system.

  • Simple API
  • Supports custom baud rates
  • cmake based build system

Installation

Linux, MacOS, Windows

  1. Make sure you have cmake installed.

  2. Clone the git repo onto your local storage.

  3. Change into root repo directory:

    $ cd CppLinuxSerial
    
  4. Create a new build directory and change into it:

    $ mkdir build
    $ cd build
  5. Run cmake on the parent directory to generate makefile:

    $ cmake ..
  6. Run make on the generated makefile to generate the static library libCppLinuxSerial.a and an unit test executable:

    $ make
  7. To install the headers on your system:

    $ sudo make install
  8. To run the unit tests (NOTE: because this uses virtual serial ports via stty, this only works on Linux!):

    $ make run_unit_tests

    If you get errors such as Could not open device /dev/ttyS10. Is the device name correct and do you have read/write permission?" thrown in the test fixture's constructor., it is probably an issue with either creating the virtual serial ports or permissions to access them.

Examples

#include <CppLinuxSerial/SerialPort.hpp>

using namespace mn::CppLinuxSerial;

int main() {
	// Create serial port object and open serial port
	SerialPort serialPort("/dev/ttyUSB0", BaudRate::B_57600);
	// Use SerialPort serialPort("/dev/ttyACM0", 13000); instead if you want to provide a custom baud rate
	serialPort.SetTimeout(-1); // Block when reading until any data is received
	serialPort.Open();

	// Write some ASCII datae
	serialPort.Write("Hello");

	// Read some data back (will block until at least 1 byte is received due to the SetTimeout(-1) call above)
	std::string readData;
	serialPort.Read(readData);

	// Close the serial port
	serialPort.Close();
}

If the above code was in a file called main.cpp and you had installed CppLinuxSerial following the instructions above, on a Linux system you should be able to compile the example application with:

g++ main.cpp -lCppLinuxSerial

For more examples, see the files in test/.

Issues

See GitHub Issues.

FAQ

  1. My code stalls when calling functions like SerialPort::Read(). This is probably because the library is set up to do a blocking read, and not enough characters have been received to allow SerialPort::Read() to return. Call SerialPort::SetTimeout(0) before the serial port is open to set a non-blocking mode.

Changelog

See CHANGELOG.md.

About

Serial port library written in C++.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Shell 48.9%
  • C++ 45.0%
  • CMake 6.1%