Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
SerialPort.hpp
Go to the documentation of this file.
1#ifndef IV_SRC_COMMS_SERIAL_SERIALPORT_HPP_
2#define IV_SRC_COMMS_SERIAL_SERIALPORT_HPP_
3
5
6#include <mutex>
7#include <vector>
8
9namespace iv::comms::serial
10{
11
12using size_t = uint64_t;
13
18{
19public:
20 SerialPort() = delete;
21 explicit SerialPort(const iv::model::comms::serial::PortSettings &settings);
22 SerialPort(const std::string &portName, iv::model::comms::serial::eBaudRate baudRate,
25 const iv::comms::serial::Timeout &timeout);
26 SerialPort(const SerialPort &other) = delete;
27 SerialPort(SerialPort &&other) noexcept = delete;
29
30 SerialPort &operator=(const SerialPort &other) = delete;
31 SerialPort &operator=(SerialPort &&other) noexcept = delete;
32
36 [[nodiscard]] uint64_t available() const;
37 void close();
38 void open();
39
40 iv::comms::serial::size_t read(uint8_t *buffer, iv::comms::serial::size_t size) const;
41 iv::comms::serial::size_t read(std::vector<uint8_t> &buffer, iv::comms::serial::size_t size = 1) const;
42 iv::comms::serial::size_t read(std::string &buffer, iv::comms::serial::size_t size = 1) const;
43 [[nodiscard]] std::string read(iv::comms::serial::size_t size = 1) const;
44 size_t readLine(std::string &buffer, iv::comms::serial::size_t size = 65536, const std::string &eol = "\n") const;
45 [[nodiscard]] std::string readLine(iv::comms::serial::size_t size = 65536, const std::string &eol = "\n") const;
46 [[nodiscard]] std::vector<std::string> readLines(iv::comms::serial::size_t size = 65536,
47 const std::string &eol = "\n") const;
48
49 iv::comms::serial::size_t write(const uint8_t *data, iv::comms::serial::size_t size) const;
50 [[nodiscard]] iv::comms::serial::size_t write(const std::vector<uint8_t> &data) const;
51 [[nodiscard]] iv::comms::serial::size_t write(const std::vector<std::byte> &data) const;
52 [[nodiscard]] iv::comms::serial::size_t write(const std::string &data) const;
53
59 [[nodiscard]] bool waitReadable(uint32_t timeout) const;
60
66
70 void flush() const;
71
75 void flushInput() const;
76
80 void flushOutput() const;
81
85 void sendBreak(uint32_t duration) const;
86
91 void setPort(const std::string &port);
97 void setTimeout(const iv::comms::serial::Timeout &timeout);
98 void setTimeout(uint32_t interByteTimeout, uint32_t readTimeoutConstant, uint32_t readTimeoutMultiplier,
99 uint32_t writeTimeoutConstant, uint32_t writeTimeoutMultiplier);
103 void setBreak(bool level = true) const;
104
108 void setRTS(bool level = true) const;
109
113 void setDTR(bool level = true) const;
114
125 [[nodiscard]] bool waitForChange() const;
126 [[nodiscard]] std::string getPort() const;
129 [[nodiscard]] iv::model::comms::serial::eParity getParity() const;
132 [[nodiscard]] iv::comms::serial::Timeout getTimeout() const;
133 [[nodiscard]] bool getCTS() const;
134 [[nodiscard]] bool getDSR() const;
135 [[nodiscard]] bool getRI() const;
136 [[nodiscard]] bool getCD() const;
137 [[nodiscard]] bool isOpen() const;
138
139private:
140 iv::comms::serial::size_t _read(uint8_t *buffer, iv::comms::serial::size_t size) const;
141 iv::comms::serial::size_t _write(const uint8_t *data, iv::comms::serial::size_t size) const;
142
143 void reconfigurePort() const;
144 static timespec timespecFromMs(const uint32_t &millis);
145 void readLock();
146 void readUnlock();
147 void writeLock();
148 void writeUnlock();
149
150 std::string m_port;
151 int32_t m_fd;
152
156
159
160 uint32_t byteTimeNs;// Nanoseconds to transmit/receive a single byte
161
162 std::mutex m_readMutex;
163 std::mutex m_writeMutex;
164};
165
166}// namespace iv::comms::serial
167
168#endif//IV_SRC_COMMS_SERIAL_SERIALPORT_HPP_
Class that provides a serial port interface.
Definition SerialPort.hpp:18
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 seri...
Definition SerialPort.cpp:340
size_t readLine(std::string &buffer, iv::comms::serial::size_t size=65536, const std::string &eol="\n") const
Definition SerialPort.cpp:182
bool getCTS() const
Definition SerialPort.cpp:626
bool isOpen() const
Definition SerialPort.cpp:710
SerialPort(const SerialPort &other)=delete
iv::comms::serial::Timeout m_timeout
Definition SerialPort.hpp:157
iv::comms::serial::size_t read(uint8_t *buffer, iv::comms::serial::size_t size) const
Definition SerialPort.cpp:127
uint64_t available() const
Definition SerialPort.cpp:54
iv::comms::serial::size_t _read(uint8_t *buffer, iv::comms::serial::size_t size) const
Definition SerialPort.cpp:715
iv::comms::serial::Timeout getTimeout() const
Definition SerialPort.cpp:621
std::mutex m_readMutex
Definition SerialPort.hpp:162
void setByteSize(iv::model::comms::serial::eDataBits byteSize)
Definition SerialPort.cpp:413
void setParity(iv::model::comms::serial::eParity parity)
Definition SerialPort.cpp:423
void setPort(const std::string &port)
Definition SerialPort.cpp:386
void setTimeout(const iv::comms::serial::Timeout &timeout)
Definition SerialPort.cpp:453
void writeLock()
Definition SerialPort.cpp:1236
std::mutex m_writeMutex
Definition SerialPort.hpp:163
iv::model::comms::serial::PortSettings m_settings
Definition SerialPort.hpp:158
std::vector< std::string > readLines(iv::comms::serial::size_t size=65536, const std::string &eol="\n") const
Definition SerialPort.cpp:231
void close()
Definition SerialPort.cpp:71
void flush() const
Definition SerialPort.cpp:346
void sendBreak(uint32_t duration) const
Definition SerialPort.cpp:376
iv::model::comms::serial::eDataBits getByteSize() const
Definition SerialPort.cpp:601
bool waitReadable(uint32_t timeout) const
Block until there is serial data to read or read_timeout_constant number of milliseconds have elapsed...
Definition SerialPort.cpp:302
bool m_xOnXOff
Definition SerialPort.hpp:154
bool getRI() const
Definition SerialPort.cpp:668
void setBreak(bool level=true) const
Definition SerialPort.cpp:466
SerialPort & operator=(const SerialPort &other)=delete
iv::model::comms::serial::eStopBits getStopBits() const
Definition SerialPort.cpp:611
bool m_isOpen
Definition SerialPort.hpp:153
void setRTS(bool level=true) const
Definition SerialPort.cpp:493
void setDTR(bool level=true) const
Definition SerialPort.cpp:522
static timespec timespecFromMs(const uint32_t &millis)
Definition SerialPort.cpp:1210
bool m_rtsCts
Definition SerialPort.hpp:155
iv::model::comms::serial::eBaudRate getBaudRate() const
Definition SerialPort.cpp:596
iv::model::comms::serial::eFlowControl getFlowControl() const
Definition SerialPort.cpp:616
std::string getPort() const
Definition SerialPort.cpp:591
iv::comms::serial::size_t write(const uint8_t *data, iv::comms::serial::size_t size) const
Definition SerialPort.cpp:282
void readLock()
Definition SerialPort.cpp:1220
void readUnlock()
Definition SerialPort.cpp:1228
void flushOutput() const
Definition SerialPort.cpp:366
bool getCD() const
Definition SerialPort.cpp:689
void writeUnlock()
Definition SerialPort.cpp:1244
uint32_t byteTimeNs
Definition SerialPort.hpp:160
iv::comms::serial::size_t _write(const uint8_t *data, iv::comms::serial::size_t size) const
Definition SerialPort.cpp:814
void setFlowControl(iv::model::comms::serial::eFlowControl flowControl)
Definition SerialPort.cpp:443
iv::model::comms::serial::eParity getParity() const
Definition SerialPort.cpp:606
std::string m_port
Definition SerialPort.hpp:150
void open()
Definition SerialPort.cpp:91
SerialPort & operator=(SerialPort &&other) noexcept=delete
void flushInput() const
Definition SerialPort.cpp:356
void setBaudRate(iv::model::comms::serial::eBaudRate baudRate)
Definition SerialPort.cpp:403
void reconfigurePort() const
Definition SerialPort.cpp:936
int32_t m_fd
Definition SerialPort.hpp:151
bool waitForChange() const
Definition SerialPort.cpp:551
void setStopBits(iv::model::comms::serial::eStopBits stopBits)
Definition SerialPort.cpp:433
bool getDSR() const
Definition SerialPort.cpp:647
~SerialPort()
Definition SerialPort.cpp:48
SerialPort(SerialPort &&other) noexcept=delete
Definition enums.hpp:11
uint64_t size_t
Definition SerialPort.hpp:12
eFlowControl
Definition SerialPortSettings.hpp:83
eBaudRate
Definition SerialPortSettings.hpp:13
eParity
Definition SerialPortSettings.hpp:64
eStopBits
Definition SerialPortSettings.hpp:75
eDataBits
Definition SerialPortSettings.hpp:54
Definition structs.hpp:17
Definition SerialPortSettings.hpp:92