README.md
CppLinuxSerial
Linux serial port library written in C++.
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
Make sure you have
cmakeinstalled.Clone the git repo onto your local storage.
Change into root repo directory:
$ cd CppLinuxSerialCreate a new build directory and change into it:
$ mkdir build $ cd buildRun cmake on the parent directory to generate makefile:
$ cmake ..Run make on the generated makefile to generate the static library
libCppLinuxSerial.aand an unit test executable:$ makeTo install the headers on your system:
$ sudo make installTo run the unit tests (NOTE: because this uses virtual serial ports via
stty, this only works on Linux!):$ make run_unit_testsIf 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
- 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 allowSerialPort::Read()to return. CallSerialPort::SetTimeout(0)before the serial port is open to set a non-blocking mode.
Changelog
See CHANGELOG.md.