Commit dff0a10c8d3b33cabd334c1566cd5abfd0ddb8e4
0 parents
Implementation of a serial port library.
Showing
22 changed files
with
2060 additions
and
0 deletions
.dep.inc
0 → 100644
.gitignore
0 → 100644
Exception.hpp
0 → 100644
1 | +++ a/Exception.hpp | |
1 | +#pragma once | |
2 | + | |
3 | +// System includes | |
4 | +#include <iostream> | |
5 | +#include <sstream> | |
6 | +#include <stdexcept> | |
7 | +#include <string> | |
8 | + | |
9 | + | |
10 | +class Exception : public std::runtime_error | |
11 | +{ | |
12 | +public: | |
13 | + Exception(const char *file, int line, const std::string &arg) | |
14 | + : std::runtime_error(arg) | |
15 | + { | |
16 | + msg_ = std::string(file) + ":" + std::to_string(line) + ": " + arg; | |
17 | + } | |
18 | + | |
19 | + ~Exception() throw() {} | |
20 | + | |
21 | + const char *what() const throw() override | |
22 | + { | |
23 | + return msg_.c_str(); | |
24 | + } | |
25 | + | |
26 | +private: | |
27 | + std::string msg_; | |
28 | +}; | |
29 | + | |
30 | +#define THROW_EXCEPT(arg) throw Exception(__FILE__, __LINE__, arg); | ... | ... |
Makefile
0 → 100644
1 | +++ a/Makefile | |
1 | +# | |
2 | +# There exist several targets which are by default empty and which can be | |
3 | +# used for execution of your targets. These targets are usually executed | |
4 | +# before and after some main targets. They are: | |
5 | +# | |
6 | +# .build-pre: called before 'build' target | |
7 | +# .build-post: called after 'build' target | |
8 | +# .clean-pre: called before 'clean' target | |
9 | +# .clean-post: called after 'clean' target | |
10 | +# .clobber-pre: called before 'clobber' target | |
11 | +# .clobber-post: called after 'clobber' target | |
12 | +# .all-pre: called before 'all' target | |
13 | +# .all-post: called after 'all' target | |
14 | +# .help-pre: called before 'help' target | |
15 | +# .help-post: called after 'help' target | |
16 | +# | |
17 | +# Targets beginning with '.' are not intended to be called on their own. | |
18 | +# | |
19 | +# Main targets can be executed directly, and they are: | |
20 | +# | |
21 | +# build build a specific configuration | |
22 | +# clean remove built files from a configuration | |
23 | +# clobber remove all built files | |
24 | +# all build all configurations | |
25 | +# help print help mesage | |
26 | +# | |
27 | +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and | |
28 | +# .help-impl are implemented in nbproject/makefile-impl.mk. | |
29 | +# | |
30 | +# Available make variables: | |
31 | +# | |
32 | +# CND_BASEDIR base directory for relative paths | |
33 | +# CND_DISTDIR default top distribution directory (build artifacts) | |
34 | +# CND_BUILDDIR default top build directory (object files, ...) | |
35 | +# CONF name of current configuration | |
36 | +# CND_PLATFORM_${CONF} platform name (current configuration) | |
37 | +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) | |
38 | +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) | |
39 | +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) | |
40 | +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) | |
41 | +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) | |
42 | +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) | |
43 | +# | |
44 | +# NOCDDL | |
45 | + | |
46 | + | |
47 | +# Environment | |
48 | +MKDIR=mkdir | |
49 | +CP=cp | |
50 | +CCADMIN=CCadmin | |
51 | + | |
52 | + | |
53 | +# build | |
54 | +build: .build-post | |
55 | + | |
56 | +.build-pre: | |
57 | +# Add your pre 'build' code here... | |
58 | + | |
59 | +.build-post: .build-impl | |
60 | +# Add your post 'build' code here... | |
61 | + | |
62 | + | |
63 | +# clean | |
64 | +clean: .clean-post | |
65 | + | |
66 | +.clean-pre: | |
67 | +# Add your pre 'clean' code here... | |
68 | + | |
69 | +.clean-post: .clean-impl | |
70 | +# Add your post 'clean' code here... | |
71 | + | |
72 | + | |
73 | +# clobber | |
74 | +clobber: .clobber-post | |
75 | + | |
76 | +.clobber-pre: | |
77 | +# Add your pre 'clobber' code here... | |
78 | + | |
79 | +.clobber-post: .clobber-impl | |
80 | +# Add your post 'clobber' code here... | |
81 | + | |
82 | + | |
83 | +# all | |
84 | +all: .all-post | |
85 | + | |
86 | +.all-pre: | |
87 | +# Add your pre 'all' code here... | |
88 | + | |
89 | +.all-post: .all-impl | |
90 | +# Add your post 'all' code here... | |
91 | + | |
92 | + | |
93 | +# build tests | |
94 | +build-tests: .build-tests-post | |
95 | + | |
96 | +.build-tests-pre: | |
97 | +# Add your pre 'build-tests' code here... | |
98 | + | |
99 | +.build-tests-post: .build-tests-impl | |
100 | +# Add your post 'build-tests' code here... | |
101 | + | |
102 | + | |
103 | +# run tests | |
104 | +test: .test-post | |
105 | + | |
106 | +.test-pre: build-tests | |
107 | +# Add your pre 'test' code here... | |
108 | + | |
109 | +.test-post: .test-impl | |
110 | +# Add your post 'test' code here... | |
111 | + | |
112 | + | |
113 | +# help | |
114 | +help: .help-post | |
115 | + | |
116 | +.help-pre: | |
117 | +# Add your pre 'help' code here... | |
118 | + | |
119 | +.help-post: .help-impl | |
120 | +# Add your post 'help' code here... | |
121 | + | |
122 | + | |
123 | + | |
124 | +# include project implementation makefile | |
125 | +include nbproject/Makefile-impl.mk | |
126 | + | |
127 | +# include project make variables | |
128 | +include nbproject/Makefile-variables.mk | ... | ... |
SerialPort.cpp
0 → 100644
1 | +++ a/SerialPort.cpp | |
1 | +// System includes | |
2 | +#include <iostream> | |
3 | +#include <sstream> | |
4 | +#include <stdio.h> // Standard input/output definitions | |
5 | +#include <string.h> // String function definitions | |
6 | +#include <unistd.h> // UNIX standard function definitions | |
7 | +#include <fcntl.h> // File control definitions | |
8 | +#include <errno.h> // Error number definitions | |
9 | +// #include <termios.h> // POSIX terminal control definitions (struct termios) | |
10 | +#include <system_error> // For throwing std::system_error | |
11 | +#include <sys/ioctl.h> // Used for TCGETS2, which is required for custom baud rates | |
12 | +#include <cassert> | |
13 | +// #include <asm/termios.h> // Terminal control definitions (struct termios) | |
14 | +#include <asm/ioctls.h> | |
15 | +#include <asm/termbits.h> | |
16 | +#include <algorithm> | |
17 | +#include <iterator> | |
18 | + | |
19 | +// User includes | |
20 | +#include "Exception.hpp" | |
21 | +#include "SerialPort.hpp" | |
22 | + | |
23 | +#define BOTHER 0010000 | |
24 | + | |
25 | +SerialPort::SerialPort() | |
26 | +{ | |
27 | + echo_ = false; | |
28 | + timeout_ms_ = defaultTimeout_ms_; | |
29 | + baudRateType_ = BaudRateType::STANDARD; | |
30 | + baudRateStandard_ = defaultBaudRate_; | |
31 | + readBufferSize_B_ = defaultReadBufferSize_B_; | |
32 | + readBuffer_.reserve(readBufferSize_B_); | |
33 | + state_ = State::CLOSED; | |
34 | +} | |
35 | + | |
36 | +SerialPort::SerialPort(const std::string& device, BaudRate baudRate) | |
37 | + : SerialPort() | |
38 | +{ | |
39 | + device_ = device; | |
40 | + baudRateType_ = BaudRateType::STANDARD; | |
41 | + baudRateStandard_ = baudRate; | |
42 | +} | |
43 | + | |
44 | +SerialPort::SerialPort(const std::string& device, speed_t baudRate) | |
45 | + : SerialPort() | |
46 | +{ | |
47 | + device_ = device; | |
48 | + baudRateType_ = BaudRateType::CUSTOM; | |
49 | + baudRateCustom_ = baudRate; | |
50 | +} | |
51 | + | |
52 | +SerialPort::SerialPort( | |
53 | + const std::string& device, | |
54 | + BaudRate baudRate, | |
55 | + NumDataBits numDataBits, | |
56 | + Parity parity, | |
57 | + NumStopBits numStopBits) | |
58 | + : SerialPort() | |
59 | +{ | |
60 | + device_ = device; | |
61 | + baudRateType_ = BaudRateType::STANDARD; | |
62 | + baudRateStandard_ = baudRate; | |
63 | + numDataBits_ = numDataBits; | |
64 | + parity_ = parity; | |
65 | + numStopBits_ = numStopBits; | |
66 | +} | |
67 | + | |
68 | +SerialPort::~SerialPort() | |
69 | +{ | |
70 | + try | |
71 | + { | |
72 | + Close(); | |
73 | + } | |
74 | + catch(...) | |
75 | + { | |
76 | + // We can't do anything about this! | |
77 | + // But we don't want to throw within destructor, so swallow | |
78 | + } | |
79 | +} | |
80 | + | |
81 | +void SerialPort::SetDevice(const std::string& device) | |
82 | +{ | |
83 | + device_ = device; | |
84 | + if(state_ == State::OPEN) | |
85 | + ConfigureTermios(); | |
86 | +} | |
87 | + | |
88 | +void SerialPort::SetBaudRate(BaudRate baudRate) | |
89 | +{ | |
90 | + baudRateType_ = BaudRateType::STANDARD; | |
91 | + baudRateStandard_ = baudRate; | |
92 | + if(state_ == State::OPEN) | |
93 | + ConfigureTermios(); | |
94 | +} | |
95 | + | |
96 | +void SerialPort::SetBaudRate(speed_t baudRate) | |
97 | +{ | |
98 | + baudRateType_ = BaudRateType::CUSTOM; | |
99 | + baudRateCustom_ = baudRate; | |
100 | + if(state_ == State::OPEN) | |
101 | + ConfigureTermios(); | |
102 | +} | |
103 | + | |
104 | +void SerialPort::SetNumDataBits(NumDataBits numDataBits) | |
105 | +{ | |
106 | + numDataBits_ = numDataBits; | |
107 | + if(state_ == State::OPEN) | |
108 | + ConfigureTermios(); | |
109 | +} | |
110 | + | |
111 | +void SerialPort::SetParity(Parity parity) | |
112 | +{ | |
113 | + parity_ = parity; | |
114 | + if(state_ == State::OPEN) | |
115 | + ConfigureTermios(); | |
116 | +} | |
117 | + | |
118 | +void SerialPort::SetNumStopBits(NumStopBits numStopBits) | |
119 | +{ | |
120 | + numStopBits_ = numStopBits; | |
121 | + if(state_ == State::OPEN) | |
122 | + ConfigureTermios(); | |
123 | +} | |
124 | + | |
125 | +void SerialPort::Open() | |
126 | +{ | |
127 | + if(device_.empty()) | |
128 | + { | |
129 | + THROW_EXCEPT("Attempted to open file when file path has not been assigned to."); | |
130 | + } | |
131 | + | |
132 | + // Attempt to open file | |
133 | + //this->fileDesc = open(this->filePath, O_RDWR | O_NOCTTY | O_NDELAY); | |
134 | + | |
135 | + // O_RDONLY for read-only, O_WRONLY for write only, O_RDWR for both read/write access | |
136 | + // 3rd, optional parameter is mode_t mode | |
137 | + fileDesc_ = open(device_.c_str(), O_RDWR); | |
138 | + | |
139 | + // Check status | |
140 | + if(fileDesc_ == -1) | |
141 | + { | |
142 | + THROW_EXCEPT("Could not open device " + device_ + ". Is the device name correct and do you have read/write permission?"); | |
143 | + } | |
144 | + | |
145 | + ConfigureTermios(); | |
146 | + | |
147 | + // std::cout << "COM port opened successfully." << std::endl; | |
148 | + state_ = State::OPEN; | |
149 | +} | |
150 | + | |
151 | +void SerialPort::SetEcho(bool value) | |
152 | +{ | |
153 | + echo_ = value; | |
154 | + ConfigureTermios(); | |
155 | +} | |
156 | + | |
157 | +void SerialPort::ConfigureTermios() | |
158 | +{ | |
159 | + // std::cout << "Configuring COM port \"" << device_ << "\"." << std::endl; | |
160 | + //================== CONFIGURE ==================// | |
161 | + | |
162 | + // termios tty = GetTermios(); | |
163 | + termios2 tty = GetTermios2(); | |
164 | + | |
165 | + //================= (.c_cflag) ===============// | |
166 | + | |
167 | + // Set num. data bits | |
168 | + // See https://man7.org/linux/man-pages/man3/tcflush.3.html | |
169 | + tty.c_cflag &= ~CSIZE; // CSIZE is a mask for the number of bits per character | |
170 | + switch(numDataBits_) | |
171 | + { | |
172 | + case NumDataBits::FIVE: | |
173 | + tty.c_cflag |= CS5; | |
174 | + break; | |
175 | + case NumDataBits::SIX: | |
176 | + tty.c_cflag |= CS6; | |
177 | + break; | |
178 | + case NumDataBits::SEVEN: | |
179 | + tty.c_cflag |= CS7; | |
180 | + break; | |
181 | + case NumDataBits::EIGHT: | |
182 | + tty.c_cflag |= CS8; | |
183 | + break; | |
184 | + default: | |
185 | + THROW_EXCEPT("numDataBits_ value not supported!"); | |
186 | + } | |
187 | + | |
188 | + // Set parity | |
189 | + // See https://man7.org/linux/man-pages/man3/tcflush.3.html | |
190 | + switch(parity_) | |
191 | + { | |
192 | + case Parity::NONE: | |
193 | + tty.c_cflag &= ~PARENB; | |
194 | + break; | |
195 | + case Parity::EVEN: | |
196 | + tty.c_cflag |= PARENB; | |
197 | + tty.c_cflag &= ~PARODD; // Clearing PARODD makes the parity even | |
198 | + break; | |
199 | + case Parity::ODD: | |
200 | + tty.c_cflag |= PARENB; | |
201 | + tty.c_cflag |= PARODD; | |
202 | + break; | |
203 | + default: | |
204 | + THROW_EXCEPT("parity_ value not supported!"); | |
205 | + | |
206 | + } | |
207 | + | |
208 | + // Set num. stop bits | |
209 | + switch(numStopBits_) | |
210 | + { | |
211 | + case NumStopBits::ONE: | |
212 | + tty.c_cflag &= ~CSTOPB; | |
213 | + break; | |
214 | + case NumStopBits::TWO: | |
215 | + tty.c_cflag |= CSTOPB; | |
216 | + break; | |
217 | + default: | |
218 | + THROW_EXCEPT("numStopBits_ value not supported!"); | |
219 | + } | |
220 | + | |
221 | + tty.c_cflag &= ~CRTSCTS; // Disable hadrware flow control (RTS/CTS) | |
222 | + tty.c_cflag |= CREAD | CLOCAL; // Turn on READ & ignore ctrl lines (CLOCAL = 1) | |
223 | + | |
224 | + | |
225 | +//===================== BAUD RATE =================// | |
226 | + | |
227 | + // We used to use cfsetispeed() and cfsetospeed() with the B... macros, but this didn't allow | |
228 | + // us to set custom baud rates. So now to support both standard and custom baud rates lets | |
229 | + // just make everything "custom". This giant switch statement could be replaced with a map/lookup | |
230 | + // in the future | |
231 | + if (baudRateType_ == BaudRateType::STANDARD) | |
232 | + { | |
233 | + tty.c_cflag &= ~CBAUD; | |
234 | + tty.c_cflag |= CBAUDEX; | |
235 | + switch(baudRateStandard_) | |
236 | + { | |
237 | + case BaudRate::B_0: | |
238 | + // cfsetispeed(&tty, B0); | |
239 | + // cfsetospeed(&tty, B0); | |
240 | + tty.c_ispeed = 0; | |
241 | + tty.c_ospeed = 0; | |
242 | + break; | |
243 | + case BaudRate::B_50: | |
244 | + // cfsetispeed(&tty, B50); | |
245 | + // cfsetospeed(&tty, B50); | |
246 | + tty.c_ispeed = 50; | |
247 | + tty.c_ospeed = 50; | |
248 | + break; | |
249 | + case BaudRate::B_75: | |
250 | + // cfsetispeed(&tty, B75); | |
251 | + // cfsetospeed(&tty, B75); | |
252 | + tty.c_ispeed = 75; | |
253 | + tty.c_ospeed = 75; | |
254 | + break; | |
255 | + case BaudRate::B_110: | |
256 | + // cfsetispeed(&tty, B110); | |
257 | + // cfsetospeed(&tty, B110); | |
258 | + tty.c_ispeed = 110; | |
259 | + tty.c_ospeed = 110; | |
260 | + break; | |
261 | + case BaudRate::B_134: | |
262 | + // cfsetispeed(&tty, B134); | |
263 | + // cfsetospeed(&tty, B134); | |
264 | + tty.c_ispeed = 134; | |
265 | + tty.c_ospeed = 134; | |
266 | + break; | |
267 | + case BaudRate::B_150: | |
268 | + // cfsetispeed(&tty, B150); | |
269 | + // cfsetospeed(&tty, B150); | |
270 | + tty.c_ispeed = 150; | |
271 | + tty.c_ospeed = 150; | |
272 | + break; | |
273 | + case BaudRate::B_200: | |
274 | + // cfsetispeed(&tty, B200); | |
275 | + // cfsetospeed(&tty, B200); | |
276 | + tty.c_ispeed = 200; | |
277 | + tty.c_ospeed = 200; | |
278 | + break; | |
279 | + case BaudRate::B_300: | |
280 | + // cfsetispeed(&tty, B300); | |
281 | + // cfsetospeed(&tty, B300); | |
282 | + tty.c_ispeed = 300; | |
283 | + tty.c_ospeed = 300; | |
284 | + break; | |
285 | + case BaudRate::B_600: | |
286 | + // cfsetispeed(&tty, B600); | |
287 | + // cfsetospeed(&tty, B600); | |
288 | + tty.c_ispeed = 600; | |
289 | + tty.c_ospeed = 600; | |
290 | + break; | |
291 | + case BaudRate::B_1200: | |
292 | + // cfsetispeed(&tty, B1200); | |
293 | + // cfsetospeed(&tty, B1200); | |
294 | + tty.c_ispeed = 1200; | |
295 | + tty.c_ospeed = 1200; | |
296 | + break; | |
297 | + case BaudRate::B_1800: | |
298 | + // cfsetispeed(&tty, B1800); | |
299 | + // cfsetospeed(&tty, B1800); | |
300 | + tty.c_ispeed = 1800; | |
301 | + tty.c_ospeed = 1800; | |
302 | + break; | |
303 | + case BaudRate::B_2400: | |
304 | + // cfsetispeed(&tty, B2400); | |
305 | + // cfsetospeed(&tty, B2400); | |
306 | + tty.c_ispeed = 2400; | |
307 | + tty.c_ospeed = 2400; | |
308 | + break; | |
309 | + case BaudRate::B_4800: | |
310 | + // cfsetispeed(&tty, B4800); | |
311 | + // cfsetospeed(&tty, B4800); | |
312 | + tty.c_ispeed = 4800; | |
313 | + tty.c_ospeed = 4800; | |
314 | + break; | |
315 | + case BaudRate::B_9600: | |
316 | + // cfsetispeed(&tty, B9600); | |
317 | + // cfsetospeed(&tty, B9600); | |
318 | + tty.c_ispeed = 9600; | |
319 | + tty.c_ospeed = 9600; | |
320 | + break; | |
321 | + case BaudRate::B_19200: | |
322 | + // cfsetispeed(&tty, B19200); | |
323 | + // cfsetospeed(&tty, B19200); | |
324 | + tty.c_ispeed = 19200; | |
325 | + tty.c_ospeed = 19200; | |
326 | + break; | |
327 | + case BaudRate::B_38400: | |
328 | + // cfsetispeed(&tty, B38400); | |
329 | + // cfsetospeed(&tty, B38400); | |
330 | + tty.c_ispeed = 38400; | |
331 | + tty.c_ospeed = 38400; | |
332 | + break; | |
333 | + case BaudRate::B_57600: | |
334 | + // cfsetispeed(&tty, B57600); | |
335 | + // cfsetospeed(&tty, B57600); | |
336 | + tty.c_ispeed = 57600; | |
337 | + tty.c_ospeed = 57600; | |
338 | + break; | |
339 | + case BaudRate::B_115200: | |
340 | + // cfsetispeed(&tty, B115200); | |
341 | + // cfsetospeed(&tty, B115200); | |
342 | + tty.c_ispeed = 115200; | |
343 | + tty.c_ospeed = 115200; | |
344 | + break; | |
345 | + case BaudRate::B_230400: | |
346 | + // cfsetispeed(&tty, B230400); | |
347 | + // cfsetospeed(&tty, B230400); | |
348 | + tty.c_ispeed = 230400; | |
349 | + tty.c_ospeed = 230400; | |
350 | + break; | |
351 | + case BaudRate::B_460800: | |
352 | + // cfsetispeed(&tty, B460800); | |
353 | + // cfsetospeed(&tty, B460800); | |
354 | + tty.c_ispeed = 460800; | |
355 | + tty.c_ospeed = 460800; | |
356 | + break; | |
357 | + default: | |
358 | + throw std::runtime_error(std::string() + "baudRate passed to " + __PRETTY_FUNCTION__ + " unrecognized."); | |
359 | + } | |
360 | + } | |
361 | + // This does no different than STANDARD atm, but let's keep | |
362 | + // them separate for now.... | |
363 | + else if (baudRateType_ == BaudRateType::CUSTOM) | |
364 | + { | |
365 | + tty.c_cflag &= ~CBAUD; | |
366 | + tty.c_cflag |= CBAUDEX; | |
367 | + // tty.c_cflag |= BOTHER; | |
368 | + tty.c_ispeed = baudRateCustom_; | |
369 | + tty.c_ospeed = baudRateCustom_; | |
370 | + | |
371 | + | |
372 | + // #include <linux/serial.h> | |
373 | + // // configure port to use custom speed instead of 38400 | |
374 | + // struct serial_struct ss; | |
375 | + // ioctl(fileDesc_, TIOCGSERIAL, &ss); | |
376 | + // ss.flags = (ss.flags & ~ASYNC_SPD_MASK) | ASYNC_SPD_CUST; | |
377 | + // ss.custom_divisor = (ss.baud_base + (baudRateCustom_ / 2)) / baudRateCustom_; | |
378 | + // int closestSpeed = ss.baud_base / ss.custom_divisor; | |
379 | + | |
380 | + // if (closestSpeed < baudRateCustom_ * 98 / 100 || closestSpeed > baudRateCustom_ * 102 / 100) { | |
381 | + // printf("Cannot set serial port speed to %d. Closest possible is %d\n", baudRateCustom_, closestSpeed); | |
382 | + // } | |
383 | + | |
384 | + // ioctl(fileDesc_, TIOCSSERIAL, &ss); | |
385 | + | |
386 | + // cfsetispeed(&tty, B38400); | |
387 | + // cfsetospeed(&tty, B38400); | |
388 | + } | |
389 | + else | |
390 | + { | |
391 | + // Should never get here, bug in this libraries code! | |
392 | + assert(false); | |
393 | + } | |
394 | + | |
395 | + //===================== (.c_oflag) =================// | |
396 | + | |
397 | + tty.c_oflag = 0; // No remapping, no delays | |
398 | + tty.c_oflag &= ~OPOST; // Make raw | |
399 | + | |
400 | + //================= CONTROL CHARACTERS (.c_cc[]) ==================// | |
401 | + | |
402 | + // c_cc[VTIME] sets the inter-character timer, in units of 0.1s. | |
403 | + // Only meaningful when port is set to non-canonical mode | |
404 | + // VMIN = 0, VTIME = 0: No blocking, return immediately with what is available | |
405 | + // VMIN > 0, VTIME = 0: read() waits for VMIN bytes, could block indefinitely | |
406 | + // VMIN = 0, VTIME > 0: Block until any amount of data is available, OR timeout occurs | |
407 | + // VMIN > 0, VTIME > 0: Block until either VMIN characters have been received, or VTIME | |
408 | + // after first character has elapsed | |
409 | + // c_cc[WMIN] sets the number of characters to block (wait) for when read() is called. | |
410 | + // Set to 0 if you don't want read to block. Only meaningful when port set to non-canonical mode | |
411 | + | |
412 | + if(timeout_ms_ == -1) | |
413 | + { | |
414 | + // Always wait for at least one byte, this could | |
415 | + // block indefinitely | |
416 | + tty.c_cc[VTIME] = 0; | |
417 | + tty.c_cc[VMIN] = 1; | |
418 | + } | |
419 | + else if(timeout_ms_ == 0) | |
420 | + { | |
421 | + // Setting both to 0 will give a non-blocking read | |
422 | + tty.c_cc[VTIME] = 0; | |
423 | + tty.c_cc[VMIN] = 0; | |
424 | + } | |
425 | + else if(timeout_ms_ > 0) | |
426 | + { | |
427 | + tty.c_cc[VTIME] = (cc_t)(timeout_ms_/100); // 0.5 seconds read timeout | |
428 | + tty.c_cc[VMIN] = 0; | |
429 | + } | |
430 | + | |
431 | + //======================== (.c_iflag) ====================// | |
432 | + | |
433 | + tty.c_iflag &= ~(IXON | IXOFF | IXANY); // Turn off s/w flow ctrl | |
434 | + tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL); | |
435 | + | |
436 | + //=========================== LOCAL MODES (c_lflag) =======================// | |
437 | + | |
438 | + // Canonical input is when read waits for EOL or EOF characters before returning. In non-canonical mode, the rate at which | |
439 | + // read() returns is instead controlled by c_cc[VMIN] and c_cc[VTIME] | |
440 | + tty.c_lflag &= ~ICANON; // Turn off canonical input, which is suitable for pass-through | |
441 | + // Configure echo depending on echo_ boolean | |
442 | + if(echo_) | |
443 | + { | |
444 | + tty.c_lflag |= ECHO; | |
445 | + } | |
446 | + else | |
447 | + { | |
448 | + tty.c_lflag &= ~(ECHO); | |
449 | + } | |
450 | + tty.c_lflag &= ~ECHOE; // Turn off echo erase (echo erase only relevant if canonical input is active) | |
451 | + tty.c_lflag &= ~ECHONL; // | |
452 | + tty.c_lflag &= ~ISIG; // Disables recognition of INTR (interrupt), QUIT and SUSP (suspend) characters | |
453 | + | |
454 | + | |
455 | + // Try and use raw function call | |
456 | + //cfmakeraw(&tty); | |
457 | + | |
458 | + // this->SetTermios(tty); | |
459 | + this->SetTermios2(tty); | |
460 | + | |
461 | + /* | |
462 | + // Flush port, then apply attributes | |
463 | + tcflush(this->fileDesc, TCIFLUSH); | |
464 | + | |
465 | + if(tcsetattr(this->fileDesc, TCSANOW, &tty) != 0) | |
466 | + { | |
467 | + // Error occurred | |
468 | + this->sp->PrintError(SmartPrint::Ss() << "Could not apply terminal attributes for \"" << this->filePath << "\" - " << strerror(errno)); | |
469 | + return; | |
470 | + }*/ | |
471 | +} | |
472 | + | |
473 | +void SerialPort::Write(const std::string& data) | |
474 | +{ | |
475 | + | |
476 | + if(state_ != State::OPEN) | |
477 | + THROW_EXCEPT(std::string() + __PRETTY_FUNCTION__ + " called but state != OPEN. Please call Open() first."); | |
478 | + | |
479 | + if(fileDesc_ < 0) | |
480 | + { | |
481 | + THROW_EXCEPT(std::string() + __PRETTY_FUNCTION__ + " called but file descriptor < 0, indicating file has not been opened."); | |
482 | + } | |
483 | + | |
484 | + int writeResult = write(fileDesc_, data.c_str(), data.size()); | |
485 | + | |
486 | + // Check status | |
487 | + if (writeResult == -1) | |
488 | + { | |
489 | + throw std::system_error(EFAULT, std::system_category()); | |
490 | + } | |
491 | +} | |
492 | + | |
493 | +void SerialPort::WriteBinary( const std::vector<uint8_t>& data ) | |
494 | +{ | |
495 | + | |
496 | + if(state_ != State::OPEN) | |
497 | + THROW_EXCEPT(std::string() + __PRETTY_FUNCTION__ + " called but state != OPEN. Please call Open() first."); | |
498 | + | |
499 | + if(fileDesc_ < 0) | |
500 | + { | |
501 | + THROW_EXCEPT(std::string() + __PRETTY_FUNCTION__ + " called but file descriptor < 0, indicating file has not been opened."); | |
502 | + } | |
503 | + | |
504 | + int writeResult = write(fileDesc_, data.data(), data.size()); | |
505 | + | |
506 | + // Check status | |
507 | + if (writeResult == -1) | |
508 | + { | |
509 | + throw std::system_error(EFAULT, std::system_category()); | |
510 | + } | |
511 | + } | |
512 | + | |
513 | +void SerialPort::Read(std::string& data) | |
514 | +{ | |
515 | + data.clear(); | |
516 | + | |
517 | + if(fileDesc_ == 0) | |
518 | + { | |
519 | + //this->sp->PrintError(SmartPrint::Ss() << "Read() was called but file descriptor (fileDesc) was 0, indicating file has not been opened."); | |
520 | + //return false; | |
521 | + THROW_EXCEPT("Read() was called but file descriptor (fileDesc) was 0, indicating file has not been opened."); | |
522 | + } | |
523 | + | |
524 | + // Allocate memory for read buffer | |
525 | + // char buf [256]; | |
526 | + // memset (&buf, '\0', sizeof buf); | |
527 | + | |
528 | + // Read from file | |
529 | + // We provide the underlying raw array from the readBuffer_ vector to this C api. | |
530 | + // This will work because we do not delete/resize the vector while this method | |
531 | + // is called | |
532 | + ssize_t n = read( fileDesc_, &readBuffer_[0], readBufferSize_B_ ); | |
533 | + | |
534 | + // Error Handling | |
535 | + if( n < 0 ) | |
536 | + { | |
537 | + // Read was unsuccessful | |
538 | + throw std::system_error(EFAULT, std::system_category()); | |
539 | + } | |
540 | + | |
541 | + if( n > 0 ) | |
542 | + { | |
543 | + // buf[n] = '\0'; | |
544 | + // printf("%s\r\n", buf); | |
545 | + // data.append(buf); | |
546 | + data = std::string( &readBuffer_[0], n ); | |
547 | + //std::cout << *str << " and size of string =" << str->size() << "\r\n"; | |
548 | + } | |
549 | +} | |
550 | + | |
551 | +void SerialPort::ReadBinary(std::vector<uint8_t>& data) | |
552 | +{ | |
553 | + data.clear(); | |
554 | + | |
555 | + if( fileDesc_ == 0 ) | |
556 | + { | |
557 | + THROW_EXCEPT("Read() was called but file descriptor (fileDesc) was 0, indicating file has not been opened."); | |
558 | + } | |
559 | + | |
560 | + // Read from file | |
561 | + // We provide the underlying raw array from the readBuffer_ vector to this C api. | |
562 | + // This will work because we do not delete/resize the vector while this method | |
563 | + // is called | |
564 | + ssize_t n = read(fileDesc_, &readBuffer_[0], readBufferSize_B_); | |
565 | + | |
566 | + // Error Handling | |
567 | + if( n < 0 ) | |
568 | + { | |
569 | + // Read was unsuccessful | |
570 | + throw std::system_error(EFAULT, std::system_category()); | |
571 | + } | |
572 | + | |
573 | + if( n > 0 ) | |
574 | + { | |
575 | + copy(readBuffer_.begin(), readBuffer_.begin() + n, back_inserter(data)); | |
576 | + } | |
577 | +} | |
578 | + | |
579 | + // termios SerialPort::GetTermios() { | |
580 | +// if(fileDesc_ == -1) | |
581 | +// throw std::runtime_error("GetTermios() called but file descriptor was not valid."); | |
582 | + | |
583 | + // struct termios tty; | |
584 | + // memset(&tty, 0, sizeof(tty)); | |
585 | + | |
586 | + // // Get current settings (will be stored in termios structure) | |
587 | + // if(tcgetattr(fileDesc_, &tty) != 0) | |
588 | + // { | |
589 | + // // Error occurred | |
590 | + // std::cout << "Could not get terminal attributes for \"" << device_ << "\" - " << strerror(errno) << std::endl; | |
591 | + // throw std::system_error(EFAULT, std::system_category()); | |
592 | + // //return false; | |
593 | + // } | |
594 | + | |
595 | + // return tty; | |
596 | + // } | |
597 | + | |
598 | + // void SerialPort::SetTermios(termios myTermios) | |
599 | + // { | |
600 | + // // Flush port, then apply attributes | |
601 | + // tcflush(fileDesc_, TCIFLUSH); | |
602 | + | |
603 | + // if(tcsetattr(fileDesc_, TCSANOW, &myTermios) != 0) | |
604 | + // { | |
605 | + // // Error occurred | |
606 | + // std::cout << "Could not apply terminal attributes for \"" << device_ << "\" - " << strerror(errno) << std::endl; | |
607 | + // throw std::system_error(EFAULT, std::system_category()); | |
608 | + | |
609 | + // } | |
610 | + | |
611 | + // // Successful! | |
612 | + // } | |
613 | + | |
614 | +termios2 SerialPort::GetTermios2() | |
615 | +{ | |
616 | + struct termios2 term2; | |
617 | + | |
618 | + ioctl(fileDesc_, TCGETS2, &term2); | |
619 | + | |
620 | + return term2; | |
621 | + | |
622 | + // term2.c_cflag &= ~CBAUD; /* Remove current BAUD rate */ | |
623 | + // term2.c_cflag |= BOTHER; /* Allow custom BAUD rate using int input */ | |
624 | + // term2.c_ispeed = speed; /* Set the input BAUD rate */ | |
625 | + // term2.c_ospeed = speed; /* Set the output BAUD rate */ | |
626 | + | |
627 | + // ioctl(fd, TCSETS2, &term2); | |
628 | +} | |
629 | + | |
630 | +void SerialPort::SetTermios2(termios2 tty) | |
631 | +{ | |
632 | + ioctl(fileDesc_, TCSETS2, &tty); | |
633 | +} | |
634 | + | |
635 | +void SerialPort::Close() | |
636 | +{ | |
637 | + if(fileDesc_ != -1) | |
638 | + { | |
639 | + auto retVal = close(fileDesc_); | |
640 | + if(retVal != 0) | |
641 | + THROW_EXCEPT("Tried to close serial port " + device_ + ", but close() failed."); | |
642 | + | |
643 | + fileDesc_ = -1; | |
644 | + } | |
645 | + | |
646 | + state_ = State::CLOSED; | |
647 | +} | |
648 | + | |
649 | +void SerialPort::SetTimeout(int32_t timeout_ms) | |
650 | +{ | |
651 | + if(timeout_ms < -1) | |
652 | + THROW_EXCEPT(std::string() + "timeout_ms provided to " + __PRETTY_FUNCTION__ + " was < -1, which is invalid."); | |
653 | + | |
654 | + if(timeout_ms > 25500) | |
655 | + THROW_EXCEPT(std::string() + "timeout_ms provided to " + __PRETTY_FUNCTION__ + " was > 25500, which is invalid."); | |
656 | + | |
657 | + if(state_ == State::OPEN) | |
658 | + THROW_EXCEPT(std::string() + __PRETTY_FUNCTION__ + " called while state == OPEN."); | |
659 | + | |
660 | + timeout_ms_ = timeout_ms; | |
661 | +} | |
662 | + | |
663 | +int32_t SerialPort::Available() | |
664 | +{ | |
665 | + if(state_ != State::OPEN) | |
666 | + THROW_EXCEPT(std::string() + __PRETTY_FUNCTION__ + " called but state != OPEN. Please call Open() first."); | |
667 | + | |
668 | + int32_t ret = 0; | |
669 | + ioctl(fileDesc_, FIONREAD, &ret); | |
670 | + return ret; | |
671 | + | |
672 | +} | |
673 | + | |
674 | +State SerialPort::GetState() | |
675 | +{ | |
676 | + return state_; | |
677 | +} | ... | ... |
SerialPort.hpp
0 → 100644
1 | +++ a/SerialPort.hpp | |
1 | +#pragma once | |
2 | + | |
3 | +// System headers | |
4 | +#include <string> | |
5 | +#include <fstream> // For file I/O (reading/writing to COM port) | |
6 | +#include <sstream> | |
7 | +// #include <termios.h> // POSIX terminal control definitions (struct termios) | |
8 | +// #include <asm/termios.h> // Terminal control definitions (struct termios) | |
9 | +#include <vector> | |
10 | +#include <asm/ioctls.h> | |
11 | +#include <asm/termbits.h> | |
12 | + | |
13 | +// User headers | |
14 | +#include "Exception.hpp" | |
15 | + | |
16 | +/// \brief Represents the baud rate "types" that can be used with the serial port. STANDARD represents all | |
17 | +/// the standard baud rates as provided by UNIX, CUSTOM represents a baud rate defined by an arbitray integer. | |
18 | +enum class BaudRateType | |
19 | +{ | |
20 | + STANDARD, | |
21 | + CUSTOM, | |
22 | +}; | |
23 | + | |
24 | +/// \brief Strongly-typed enumeration of baud rates for use with the SerialPort class | |
25 | +/// \details Specifies all the same baud rates as UNIX, as well as B_CUSTOM to specify your | |
26 | +/// own. See https://linux.die.net/man/3/cfsetispeed for list of supported UNIX baud rates. | |
27 | +enum class BaudRate | |
28 | +{ | |
29 | + B_0, | |
30 | + B_50, | |
31 | + B_75, | |
32 | + B_110, | |
33 | + B_134, | |
34 | + B_150, | |
35 | + B_200, | |
36 | + B_300, | |
37 | + B_600, | |
38 | + B_1200, | |
39 | + B_1800, | |
40 | + B_2400, | |
41 | + B_4800, | |
42 | + B_9600, | |
43 | + B_19200, | |
44 | + B_38400, | |
45 | + B_57600, | |
46 | + B_115200, | |
47 | + B_230400, | |
48 | + B_460800, | |
49 | + B_CUSTOM, // Placeholder | |
50 | +}; | |
51 | + | |
52 | +/// \brief Enumeration of all the valid num. of data bits. Must align with the options | |
53 | +/// provided in termbits.h, i.e. CS5, CS6, CS7 and CS8. | |
54 | +enum class NumDataBits | |
55 | +{ | |
56 | + FIVE, | |
57 | + SIX, | |
58 | + SEVEN, | |
59 | + EIGHT, | |
60 | +}; | |
61 | + | |
62 | +enum class Parity | |
63 | +{ | |
64 | + NONE, | |
65 | + EVEN, | |
66 | + ODD, | |
67 | +}; | |
68 | + | |
69 | +enum class NumStopBits | |
70 | +{ | |
71 | + ONE, | |
72 | + TWO, | |
73 | +}; | |
74 | + | |
75 | +/// \brief Represents the state of the serial port. | |
76 | +enum class State | |
77 | +{ | |
78 | + CLOSED, | |
79 | + OPEN, | |
80 | +}; | |
81 | + | |
82 | +/// \brief SerialPort object is used to perform rx/tx serial communication. | |
83 | +class SerialPort | |
84 | +{ | |
85 | +public: | |
86 | + /// \brief Default constructor. You must specify at least the device before calling Open(). | |
87 | + SerialPort(); | |
88 | + | |
89 | + /// \brief Constructor that sets up serial port with the basic (required) parameters. | |
90 | + SerialPort(const std::string &device, BaudRate baudRate); | |
91 | + | |
92 | + /// \brief Constructor that sets up serial port and allows the user to specify all the common parameters. | |
93 | + SerialPort(const std::string &device, BaudRate baudRate, NumDataBits numDataBits, Parity parity, NumStopBits numStopBits); | |
94 | + | |
95 | + /// \brief Constructor that sets up serial port with the basic parameters, and a custom baud rate. | |
96 | + SerialPort(const std::string &device, speed_t baudRate); | |
97 | + | |
98 | + /// \brief Destructor. Closes serial port if still open. | |
99 | + virtual ~SerialPort(); | |
100 | + | |
101 | + /// \brief Sets the device to use for serial port communications. | |
102 | + /// \details Method can be called when serial port is in any state. | |
103 | + void SetDevice(const std::string &device); | |
104 | + | |
105 | + /// \brief Call this to set a standard baud rate. | |
106 | + void SetBaudRate(BaudRate baudRate); | |
107 | + | |
108 | + /// \brief Call this to set a custom baud rate. | |
109 | + void SetBaudRate(speed_t baudRate); | |
110 | + | |
111 | + /// \brief Call this to set the num. of data bits. | |
112 | + void SetNumDataBits(NumDataBits numDataBits); | |
113 | + | |
114 | + /// \brief Call this to set the parity. | |
115 | + void SetParity(Parity parity); | |
116 | + | |
117 | + void SetNumStopBits(NumStopBits numStopBits); | |
118 | + | |
119 | + /// \brief Sets the read timeout (in milliseconds)/blocking mode. | |
120 | + /// \details Only call when state != OPEN. This method manupulates VMIN and VTIME. | |
121 | + /// \param timeout_ms Set to -1 to infinite timeout, 0 to return immediately with any data (non | |
122 | + /// blocking, or >0 to wait for data for a specified number of milliseconds). Timeout will | |
123 | + /// be rounded to the nearest 100ms (a Linux API restriction). Maximum value limited to | |
124 | + /// 25500ms (another Linux API restriction). | |
125 | + void SetTimeout(int32_t timeout_ms); | |
126 | + | |
127 | + /// \brief Enables/disables echo. | |
128 | + /// \param value Pass in true to enable echo, false to disable echo. | |
129 | + void SetEcho(bool value); | |
130 | + | |
131 | + /// \brief Opens the COM port for use. | |
132 | + /// \throws CppLinuxSerial::Exception if device cannot be opened. | |
133 | + /// \note Must call this before you can configure the COM port. | |
134 | + void Open(); | |
135 | + | |
136 | + /// \brief Closes the COM port. | |
137 | + void Close(); | |
138 | + | |
139 | + /// \brief Sends a text message over the com port. | |
140 | + /// \param data The data that will be written to the COM port. | |
141 | + /// \throws CppLinuxSerial::Exception if state != OPEN. | |
142 | + void Write(const std::string& data); | |
143 | + | |
144 | + /// \brief Sends a binary message over the com port. | |
145 | + /// \param data The data that will be written to the COM port. | |
146 | + /// \throws CppLinuxSerial::Exception if state != OPEN. | |
147 | + void WriteBinary(const std::vector<uint8_t>& data); | |
148 | + | |
149 | + /// \brief Use to read text from the COM port. | |
150 | + /// \param data The object the read characters from the COM port will be saved to. | |
151 | + /// \param wait_ms The amount of time to wait for data. Set to 0 for non-blocking mode. Set to -1 | |
152 | + /// to wait indefinitely for new data. | |
153 | + /// \throws CppLinuxSerial::Exception if state != OPEN. | |
154 | + void Read(std::string& data); | |
155 | + | |
156 | + /// \brief Use to read binary data from the COM port. | |
157 | + /// \param data The object the read uint8_t bytes from the COM port will be saved to. | |
158 | + /// \param wait_ms The amount of time to wait for data. Set to 0 for non-blocking mode. Set to -1 | |
159 | + /// to wait indefinitely for new data. | |
160 | + /// \throws CppLinuxSerial::Exception if state != OPEN. | |
161 | + void ReadBinary(std::vector<uint8_t>& data); | |
162 | + | |
163 | + /// \brief Use to get number of bytes available in receive buffer. | |
164 | + /// \returns The number of bytes available in the receive buffer (ready to be read). | |
165 | + /// \throws CppLinuxSerial::Exception if state != OPEN. | |
166 | + int32_t Available(); | |
167 | + | |
168 | + /// \brief Use to get the state of the serial port | |
169 | + /// \returns The state of the serial port | |
170 | + State GetState(); | |
171 | + | |
172 | +private: | |
173 | + | |
174 | + /// \brief Configures the tty device as a serial port. | |
175 | + /// \warning Device must be open (valid file descriptor) when this is called. | |
176 | + void ConfigureTermios(); | |
177 | + | |
178 | + // void SetTermios(termios myTermios); | |
179 | + | |
180 | + /// \brief Returns a populated termios2 structure for the serial port pointed to by the file descriptor. | |
181 | + termios2 GetTermios2(); | |
182 | + | |
183 | + /// \brief Assigns the provided tty settings to the serial port pointed to by the file descriptor. | |
184 | + void SetTermios2(termios2 tty); | |
185 | + | |
186 | + /// \brief Keeps track of the serial port's state. | |
187 | + State state_; | |
188 | + | |
189 | + /// \brief The file path to the serial port device (e.g. "/dev/ttyUSB0"). | |
190 | + std::string device_; | |
191 | + | |
192 | + /// \brief The type of baud rate that the user has specified. | |
193 | + BaudRateType baudRateType_; | |
194 | + | |
195 | + /// \brief The current baud rate if baudRateType_ == STANDARD. | |
196 | + BaudRate baudRateStandard_; | |
197 | + | |
198 | + /// \brief The current baud rate if baudRateType_ == CUSTOM. | |
199 | + speed_t baudRateCustom_; | |
200 | + | |
201 | + /// \brief The num. of data bits. Defaults to 8 (most common). | |
202 | + NumDataBits numDataBits_ = NumDataBits::EIGHT; | |
203 | + | |
204 | + /// \brief The parity. Defaults to none (most common). | |
205 | + Parity parity_ = Parity::NONE; | |
206 | + | |
207 | + /// \brief The num. of stop bits. Defaults to 1 (most common). | |
208 | + NumStopBits numStopBits_ = NumStopBits::ONE; | |
209 | + | |
210 | + /// \brief The file descriptor for the open file. This gets written to when Open() is called. | |
211 | + int fileDesc_; | |
212 | + | |
213 | + bool echo_; | |
214 | + | |
215 | + int32_t timeout_ms_; | |
216 | + | |
217 | + std::vector<char> readBuffer_; | |
218 | + unsigned char readBufferSize_B_; | |
219 | + | |
220 | + static constexpr BaudRate defaultBaudRate_ = BaudRate::B_57600; | |
221 | + static constexpr int32_t defaultTimeout_ms_ = -1; | |
222 | + static constexpr unsigned char defaultReadBufferSize_B_ = 255; | |
223 | +}; | ... | ... |
main.cpp
0 → 100644
1 | +++ a/main.cpp | |
1 | +#include "SerialPort.hpp" | |
2 | + | |
3 | +#include <iostream> | |
4 | +#include <string> | |
5 | +#include <vector> | |
6 | + | |
7 | +int main(int argc, char** argv) | |
8 | +{ | |
9 | + SerialPort oPort; | |
10 | + | |
11 | + oPort.SetDevice( "/dev/ttyUSB0" ); | |
12 | + oPort.SetNumDataBits(NumDataBits::EIGHT); | |
13 | + oPort.SetParity(Parity::NONE); | |
14 | + oPort.SetNumStopBits(NumStopBits::ONE); | |
15 | + oPort.SetBaudRate( BaudRate::B_2400 ); | |
16 | + | |
17 | + oPort.Open(); | |
18 | + | |
19 | + // Create data package. | |
20 | + std::vector<uint8_t> data_binair; | |
21 | + std::string data_string; | |
22 | + | |
23 | + for( uint8_t nCount = 0; nCount < 255; nCount++ ) | |
24 | + { | |
25 | + data_binair.push_back( nCount ); | |
26 | + data_string += std::to_string(nCount); | |
27 | + } | |
28 | + while( 1 ) | |
29 | + { | |
30 | + oPort.WriteBinary( data_binair ); | |
31 | + oPort.Write( data_string ); | |
32 | + } | |
33 | + | |
34 | + return 0; | |
35 | +} | |
36 | + | ... | ... |
nbproject/Makefile-Debug.mk
0 → 100644
1 | +++ a/nbproject/Makefile-Debug.mk | |
1 | +# | |
2 | +# Generated Makefile - do not edit! | |
3 | +# | |
4 | +# Edit the Makefile in the project folder instead (../Makefile). Each target | |
5 | +# has a -pre and a -post target defined where you can add customized code. | |
6 | +# | |
7 | +# This makefile implements configuration specific macros and targets. | |
8 | + | |
9 | + | |
10 | +# Environment | |
11 | +MKDIR=mkdir | |
12 | +CP=cp | |
13 | +GREP=grep | |
14 | +NM=nm | |
15 | +CCADMIN=CCadmin | |
16 | +RANLIB=ranlib | |
17 | +CC=gcc | |
18 | +CCC=g++ | |
19 | +CXX=g++ | |
20 | +FC=gfortran | |
21 | +AS=as | |
22 | + | |
23 | +# Macros | |
24 | +CND_PLATFORM=GNU-Linux | |
25 | +CND_DLIB_EXT=so | |
26 | +CND_CONF=Debug | |
27 | +CND_DISTDIR=dist | |
28 | +CND_BUILDDIR=build | |
29 | + | |
30 | +# Include project Makefile | |
31 | +include Makefile | |
32 | + | |
33 | +# Object Directory | |
34 | +OBJECTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM} | |
35 | + | |
36 | +# Object Files | |
37 | +OBJECTFILES= \ | |
38 | + ${OBJECTDIR}/SerialPort.o \ | |
39 | + ${OBJECTDIR}/main.o | |
40 | + | |
41 | + | |
42 | +# C Compiler Flags | |
43 | +CFLAGS= | |
44 | + | |
45 | +# CC Compiler Flags | |
46 | +CCFLAGS=-m64 | |
47 | +CXXFLAGS=-m64 | |
48 | + | |
49 | +# Fortran Compiler Flags | |
50 | +FFLAGS= | |
51 | + | |
52 | +# Assembler Flags | |
53 | +ASFLAGS= | |
54 | + | |
55 | +# Link Libraries and Options | |
56 | +LDLIBSOPTIONS= | |
57 | + | |
58 | +# Build Targets | |
59 | +.build-conf: ${BUILD_SUBPROJECTS} | |
60 | + "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/serialport | |
61 | + | |
62 | +${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/serialport: ${OBJECTFILES} | |
63 | + ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM} | |
64 | + ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/serialport ${OBJECTFILES} ${LDLIBSOPTIONS} | |
65 | + | |
66 | +${OBJECTDIR}/SerialPort.o: SerialPort.cpp | |
67 | + ${MKDIR} -p ${OBJECTDIR} | |
68 | + ${RM} "$@.d" | |
69 | + $(COMPILE.cc) -g -std=c++14 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/SerialPort.o SerialPort.cpp | |
70 | + | |
71 | +${OBJECTDIR}/main.o: main.cpp | |
72 | + ${MKDIR} -p ${OBJECTDIR} | |
73 | + ${RM} "$@.d" | |
74 | + $(COMPILE.cc) -g -std=c++14 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/main.o main.cpp | |
75 | + | |
76 | +# Subprojects | |
77 | +.build-subprojects: | |
78 | + | |
79 | +# Clean Targets | |
80 | +.clean-conf: ${CLEAN_SUBPROJECTS} | |
81 | + ${RM} -r ${CND_BUILDDIR}/${CND_CONF} | |
82 | + | |
83 | +# Subprojects | |
84 | +.clean-subprojects: | |
85 | + | |
86 | +# Enable dependency checking | |
87 | +.dep.inc: .depcheck-impl | |
88 | + | |
89 | +include .dep.inc | ... | ... |
nbproject/Makefile-Release.mk
0 → 100644
1 | +++ a/nbproject/Makefile-Release.mk | |
1 | +# | |
2 | +# Generated Makefile - do not edit! | |
3 | +# | |
4 | +# Edit the Makefile in the project folder instead (../Makefile). Each target | |
5 | +# has a -pre and a -post target defined where you can add customized code. | |
6 | +# | |
7 | +# This makefile implements configuration specific macros and targets. | |
8 | + | |
9 | + | |
10 | +# Environment | |
11 | +MKDIR=mkdir | |
12 | +CP=cp | |
13 | +GREP=grep | |
14 | +NM=nm | |
15 | +CCADMIN=CCadmin | |
16 | +RANLIB=ranlib | |
17 | +CC=gcc | |
18 | +CCC=g++ | |
19 | +CXX=g++ | |
20 | +FC=gfortran | |
21 | +AS=as | |
22 | + | |
23 | +# Macros | |
24 | +CND_PLATFORM=GNU-Linux | |
25 | +CND_DLIB_EXT=so | |
26 | +CND_CONF=Release | |
27 | +CND_DISTDIR=dist | |
28 | +CND_BUILDDIR=build | |
29 | + | |
30 | +# Include project Makefile | |
31 | +include Makefile | |
32 | + | |
33 | +# Object Directory | |
34 | +OBJECTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM} | |
35 | + | |
36 | +# Object Files | |
37 | +OBJECTFILES= \ | |
38 | + ${OBJECTDIR}/SerialPort.o \ | |
39 | + ${OBJECTDIR}/main.o | |
40 | + | |
41 | + | |
42 | +# C Compiler Flags | |
43 | +CFLAGS= | |
44 | + | |
45 | +# CC Compiler Flags | |
46 | +CCFLAGS= | |
47 | +CXXFLAGS= | |
48 | + | |
49 | +# Fortran Compiler Flags | |
50 | +FFLAGS= | |
51 | + | |
52 | +# Assembler Flags | |
53 | +ASFLAGS= | |
54 | + | |
55 | +# Link Libraries and Options | |
56 | +LDLIBSOPTIONS= | |
57 | + | |
58 | +# Build Targets | |
59 | +.build-conf: ${BUILD_SUBPROJECTS} | |
60 | + "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/serialport | |
61 | + | |
62 | +${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/serialport: ${OBJECTFILES} | |
63 | + ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM} | |
64 | + ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/serialport ${OBJECTFILES} ${LDLIBSOPTIONS} | |
65 | + | |
66 | +${OBJECTDIR}/SerialPort.o: SerialPort.cpp | |
67 | + ${MKDIR} -p ${OBJECTDIR} | |
68 | + ${RM} "$@.d" | |
69 | + $(COMPILE.cc) -O2 -std=c++14 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/SerialPort.o SerialPort.cpp | |
70 | + | |
71 | +${OBJECTDIR}/main.o: main.cpp | |
72 | + ${MKDIR} -p ${OBJECTDIR} | |
73 | + ${RM} "$@.d" | |
74 | + $(COMPILE.cc) -O2 -std=c++14 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/main.o main.cpp | |
75 | + | |
76 | +# Subprojects | |
77 | +.build-subprojects: | |
78 | + | |
79 | +# Clean Targets | |
80 | +.clean-conf: ${CLEAN_SUBPROJECTS} | |
81 | + ${RM} -r ${CND_BUILDDIR}/${CND_CONF} | |
82 | + | |
83 | +# Subprojects | |
84 | +.clean-subprojects: | |
85 | + | |
86 | +# Enable dependency checking | |
87 | +.dep.inc: .depcheck-impl | |
88 | + | |
89 | +include .dep.inc | ... | ... |
nbproject/Makefile-impl.mk
0 → 100644
1 | +++ a/nbproject/Makefile-impl.mk | |
1 | +# | |
2 | +# Generated Makefile - do not edit! | |
3 | +# | |
4 | +# Edit the Makefile in the project folder instead (../Makefile). Each target | |
5 | +# has a pre- and a post- target defined where you can add customization code. | |
6 | +# | |
7 | +# This makefile implements macros and targets common to all configurations. | |
8 | +# | |
9 | +# NOCDDL | |
10 | + | |
11 | + | |
12 | +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB | |
13 | +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro | |
14 | +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf | |
15 | +# and .clean-reqprojects-conf unless SUB has the value 'no' | |
16 | +SUB_no=NO | |
17 | +SUBPROJECTS=${SUB_${SUB}} | |
18 | +BUILD_SUBPROJECTS_=.build-subprojects | |
19 | +BUILD_SUBPROJECTS_NO= | |
20 | +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} | |
21 | +CLEAN_SUBPROJECTS_=.clean-subprojects | |
22 | +CLEAN_SUBPROJECTS_NO= | |
23 | +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} | |
24 | + | |
25 | + | |
26 | +# Project Name | |
27 | +PROJECTNAME=serialport | |
28 | + | |
29 | +# Active Configuration | |
30 | +DEFAULTCONF=Debug | |
31 | +CONF=${DEFAULTCONF} | |
32 | + | |
33 | +# All Configurations | |
34 | +ALLCONFS=Debug Release | |
35 | + | |
36 | + | |
37 | +# build | |
38 | +.build-impl: .build-pre .validate-impl .depcheck-impl | |
39 | + @#echo "=> Running $@... Configuration=$(CONF)" | |
40 | + "${MAKE}" -f nbproject/Makefile-${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .build-conf | |
41 | + | |
42 | + | |
43 | +# clean | |
44 | +.clean-impl: .clean-pre .validate-impl .depcheck-impl | |
45 | + @#echo "=> Running $@... Configuration=$(CONF)" | |
46 | + "${MAKE}" -f nbproject/Makefile-${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .clean-conf | |
47 | + | |
48 | + | |
49 | +# clobber | |
50 | +.clobber-impl: .clobber-pre .depcheck-impl | |
51 | + @#echo "=> Running $@..." | |
52 | + for CONF in ${ALLCONFS}; \ | |
53 | + do \ | |
54 | + "${MAKE}" -f nbproject/Makefile-$${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .clean-conf; \ | |
55 | + done | |
56 | + | |
57 | +# all | |
58 | +.all-impl: .all-pre .depcheck-impl | |
59 | + @#echo "=> Running $@..." | |
60 | + for CONF in ${ALLCONFS}; \ | |
61 | + do \ | |
62 | + "${MAKE}" -f nbproject/Makefile-$${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .build-conf; \ | |
63 | + done | |
64 | + | |
65 | +# build tests | |
66 | +.build-tests-impl: .build-impl .build-tests-pre | |
67 | + @#echo "=> Running $@... Configuration=$(CONF)" | |
68 | + "${MAKE}" -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-tests-conf | |
69 | + | |
70 | +# run tests | |
71 | +.test-impl: .build-tests-impl .test-pre | |
72 | + @#echo "=> Running $@... Configuration=$(CONF)" | |
73 | + "${MAKE}" -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .test-conf | |
74 | + | |
75 | +# dependency checking support | |
76 | +.depcheck-impl: | |
77 | + @echo "# This code depends on make tool being used" >.dep.inc | |
78 | + @if [ -n "${MAKE_VERSION}" ]; then \ | |
79 | + echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES} \$${TESTOBJECTFILES}))" >>.dep.inc; \ | |
80 | + echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ | |
81 | + echo "include \$${DEPFILES}" >>.dep.inc; \ | |
82 | + echo "endif" >>.dep.inc; \ | |
83 | + else \ | |
84 | + echo ".KEEP_STATE:" >>.dep.inc; \ | |
85 | + echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ | |
86 | + fi | |
87 | + | |
88 | +# configuration validation | |
89 | +.validate-impl: | |
90 | + @if [ ! -f nbproject/Makefile-${CONF}.mk ]; \ | |
91 | + then \ | |
92 | + echo ""; \ | |
93 | + echo "Error: can not find the makefile for configuration '${CONF}' in project ${PROJECTNAME}"; \ | |
94 | + echo "See 'make help' for details."; \ | |
95 | + echo "Current directory: " `pwd`; \ | |
96 | + echo ""; \ | |
97 | + fi | |
98 | + @if [ ! -f nbproject/Makefile-${CONF}.mk ]; \ | |
99 | + then \ | |
100 | + exit 1; \ | |
101 | + fi | |
102 | + | |
103 | + | |
104 | +# help | |
105 | +.help-impl: .help-pre | |
106 | + @echo "This makefile supports the following configurations:" | |
107 | + @echo " ${ALLCONFS}" | |
108 | + @echo "" | |
109 | + @echo "and the following targets:" | |
110 | + @echo " build (default target)" | |
111 | + @echo " clean" | |
112 | + @echo " clobber" | |
113 | + @echo " all" | |
114 | + @echo " help" | |
115 | + @echo "" | |
116 | + @echo "Makefile Usage:" | |
117 | + @echo " make [CONF=<CONFIGURATION>] [SUB=no] build" | |
118 | + @echo " make [CONF=<CONFIGURATION>] [SUB=no] clean" | |
119 | + @echo " make [SUB=no] clobber" | |
120 | + @echo " make [SUB=no] all" | |
121 | + @echo " make help" | |
122 | + @echo "" | |
123 | + @echo "Target 'build' will build a specific configuration and, unless 'SUB=no'," | |
124 | + @echo " also build subprojects." | |
125 | + @echo "Target 'clean' will clean a specific configuration and, unless 'SUB=no'," | |
126 | + @echo " also clean subprojects." | |
127 | + @echo "Target 'clobber' will remove all built files from all configurations and," | |
128 | + @echo " unless 'SUB=no', also from subprojects." | |
129 | + @echo "Target 'all' will will build all configurations and, unless 'SUB=no'," | |
130 | + @echo " also build subprojects." | |
131 | + @echo "Target 'help' prints this message." | |
132 | + @echo "" | |
133 | + | ... | ... |
nbproject/Makefile-variables.mk
0 → 100644
1 | +++ a/nbproject/Makefile-variables.mk | |
1 | +# | |
2 | +# Generated - do not edit! | |
3 | +# | |
4 | +# NOCDDL | |
5 | +# | |
6 | +CND_BASEDIR=`pwd` | |
7 | +CND_BUILDDIR=build | |
8 | +CND_DISTDIR=dist | |
9 | +# Debug configuration | |
10 | +CND_PLATFORM_Debug=GNU-Linux | |
11 | +CND_ARTIFACT_DIR_Debug=dist/Debug/GNU-Linux | |
12 | +CND_ARTIFACT_NAME_Debug=serialport | |
13 | +CND_ARTIFACT_PATH_Debug=dist/Debug/GNU-Linux/serialport | |
14 | +CND_PACKAGE_DIR_Debug=dist/Debug/GNU-Linux/package | |
15 | +CND_PACKAGE_NAME_Debug=serialport.tar | |
16 | +CND_PACKAGE_PATH_Debug=dist/Debug/GNU-Linux/package/serialport.tar | |
17 | +# Release configuration | |
18 | +CND_PLATFORM_Release=GNU-Linux | |
19 | +CND_ARTIFACT_DIR_Release=dist/Release/GNU-Linux | |
20 | +CND_ARTIFACT_NAME_Release=serialport | |
21 | +CND_ARTIFACT_PATH_Release=dist/Release/GNU-Linux/serialport | |
22 | +CND_PACKAGE_DIR_Release=dist/Release/GNU-Linux/package | |
23 | +CND_PACKAGE_NAME_Release=serialport.tar | |
24 | +CND_PACKAGE_PATH_Release=dist/Release/GNU-Linux/package/serialport.tar | |
25 | +# | |
26 | +# include compiler specific variables | |
27 | +# | |
28 | +# dmake command | |
29 | +ROOT:sh = test -f nbproject/private/Makefile-variables.mk || \ | |
30 | + (mkdir -p nbproject/private && touch nbproject/private/Makefile-variables.mk) | |
31 | +# | |
32 | +# gmake command | |
33 | +.PHONY: $(shell test -f nbproject/private/Makefile-variables.mk || (mkdir -p nbproject/private && touch nbproject/private/Makefile-variables.mk)) | |
34 | +# | |
35 | +include nbproject/private/Makefile-variables.mk | ... | ... |
nbproject/Package-Debug.bash
0 → 100644
1 | +++ a/nbproject/Package-Debug.bash | |
1 | +#!/bin/bash -x | |
2 | + | |
3 | +# | |
4 | +# Generated - do not edit! | |
5 | +# | |
6 | + | |
7 | +# Macros | |
8 | +TOP=`pwd` | |
9 | +CND_PLATFORM=GNU-Linux | |
10 | +CND_CONF=Debug | |
11 | +CND_DISTDIR=dist | |
12 | +CND_BUILDDIR=build | |
13 | +CND_DLIB_EXT=so | |
14 | +NBTMPDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tmp-packaging | |
15 | +TMPDIRNAME=tmp-packaging | |
16 | +OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/serialport | |
17 | +OUTPUT_BASENAME=serialport | |
18 | +PACKAGE_TOP_DIR=serialport/ | |
19 | + | |
20 | +# Functions | |
21 | +function checkReturnCode | |
22 | +{ | |
23 | + rc=$? | |
24 | + if [ $rc != 0 ] | |
25 | + then | |
26 | + exit $rc | |
27 | + fi | |
28 | +} | |
29 | +function makeDirectory | |
30 | +# $1 directory path | |
31 | +# $2 permission (optional) | |
32 | +{ | |
33 | + mkdir -p "$1" | |
34 | + checkReturnCode | |
35 | + if [ "$2" != "" ] | |
36 | + then | |
37 | + chmod $2 "$1" | |
38 | + checkReturnCode | |
39 | + fi | |
40 | +} | |
41 | +function copyFileToTmpDir | |
42 | +# $1 from-file path | |
43 | +# $2 to-file path | |
44 | +# $3 permission | |
45 | +{ | |
46 | + cp "$1" "$2" | |
47 | + checkReturnCode | |
48 | + if [ "$3" != "" ] | |
49 | + then | |
50 | + chmod $3 "$2" | |
51 | + checkReturnCode | |
52 | + fi | |
53 | +} | |
54 | + | |
55 | +# Setup | |
56 | +cd "${TOP}" | |
57 | +mkdir -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package | |
58 | +rm -rf ${NBTMPDIR} | |
59 | +mkdir -p ${NBTMPDIR} | |
60 | + | |
61 | +# Copy files and create directories and links | |
62 | +cd "${TOP}" | |
63 | +makeDirectory "${NBTMPDIR}/serialport/bin" | |
64 | +copyFileToTmpDir "${OUTPUT_PATH}" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 | |
65 | + | |
66 | + | |
67 | +# Generate tar file | |
68 | +cd "${TOP}" | |
69 | +rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/serialport.tar | |
70 | +cd ${NBTMPDIR} | |
71 | +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/serialport.tar * | |
72 | +checkReturnCode | |
73 | + | |
74 | +# Cleanup | |
75 | +cd "${TOP}" | |
76 | +rm -rf ${NBTMPDIR} | ... | ... |
nbproject/Package-Release.bash
0 → 100644
1 | +++ a/nbproject/Package-Release.bash | |
1 | +#!/bin/bash -x | |
2 | + | |
3 | +# | |
4 | +# Generated - do not edit! | |
5 | +# | |
6 | + | |
7 | +# Macros | |
8 | +TOP=`pwd` | |
9 | +CND_PLATFORM=GNU-Linux | |
10 | +CND_CONF=Release | |
11 | +CND_DISTDIR=dist | |
12 | +CND_BUILDDIR=build | |
13 | +CND_DLIB_EXT=so | |
14 | +NBTMPDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tmp-packaging | |
15 | +TMPDIRNAME=tmp-packaging | |
16 | +OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/serialport | |
17 | +OUTPUT_BASENAME=serialport | |
18 | +PACKAGE_TOP_DIR=serialport/ | |
19 | + | |
20 | +# Functions | |
21 | +function checkReturnCode | |
22 | +{ | |
23 | + rc=$? | |
24 | + if [ $rc != 0 ] | |
25 | + then | |
26 | + exit $rc | |
27 | + fi | |
28 | +} | |
29 | +function makeDirectory | |
30 | +# $1 directory path | |
31 | +# $2 permission (optional) | |
32 | +{ | |
33 | + mkdir -p "$1" | |
34 | + checkReturnCode | |
35 | + if [ "$2" != "" ] | |
36 | + then | |
37 | + chmod $2 "$1" | |
38 | + checkReturnCode | |
39 | + fi | |
40 | +} | |
41 | +function copyFileToTmpDir | |
42 | +# $1 from-file path | |
43 | +# $2 to-file path | |
44 | +# $3 permission | |
45 | +{ | |
46 | + cp "$1" "$2" | |
47 | + checkReturnCode | |
48 | + if [ "$3" != "" ] | |
49 | + then | |
50 | + chmod $3 "$2" | |
51 | + checkReturnCode | |
52 | + fi | |
53 | +} | |
54 | + | |
55 | +# Setup | |
56 | +cd "${TOP}" | |
57 | +mkdir -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package | |
58 | +rm -rf ${NBTMPDIR} | |
59 | +mkdir -p ${NBTMPDIR} | |
60 | + | |
61 | +# Copy files and create directories and links | |
62 | +cd "${TOP}" | |
63 | +makeDirectory "${NBTMPDIR}/serialport/bin" | |
64 | +copyFileToTmpDir "${OUTPUT_PATH}" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 | |
65 | + | |
66 | + | |
67 | +# Generate tar file | |
68 | +cd "${TOP}" | |
69 | +rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/serialport.tar | |
70 | +cd ${NBTMPDIR} | |
71 | +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/serialport.tar * | |
72 | +checkReturnCode | |
73 | + | |
74 | +# Cleanup | |
75 | +cd "${TOP}" | |
76 | +rm -rf ${NBTMPDIR} | ... | ... |
nbproject/configurations.xml
0 → 100644
1 | +++ a/nbproject/configurations.xml | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<configurationDescriptor version="100"> | |
3 | + <logicalFolder name="root" displayName="root" projectFiles="true" kind="ROOT"> | |
4 | + <logicalFolder name="HeaderFiles" | |
5 | + displayName="Header Files" | |
6 | + projectFiles="true"> | |
7 | + <itemPath>Exception.hpp</itemPath> | |
8 | + <itemPath>SerialPort.hpp</itemPath> | |
9 | + </logicalFolder> | |
10 | + <logicalFolder name="ResourceFiles" | |
11 | + displayName="Resource Files" | |
12 | + projectFiles="true"> | |
13 | + </logicalFolder> | |
14 | + <logicalFolder name="SourceFiles" | |
15 | + displayName="Source Files" | |
16 | + projectFiles="true"> | |
17 | + <itemPath>SerialPort.cpp</itemPath> | |
18 | + <itemPath>main.cpp</itemPath> | |
19 | + </logicalFolder> | |
20 | + <logicalFolder name="TestFiles" | |
21 | + displayName="Test Files" | |
22 | + projectFiles="false" | |
23 | + kind="TEST_LOGICAL_FOLDER"> | |
24 | + </logicalFolder> | |
25 | + <logicalFolder name="ExternalFiles" | |
26 | + displayName="Important Files" | |
27 | + projectFiles="false" | |
28 | + kind="IMPORTANT_FILES_FOLDER"> | |
29 | + <itemPath>Makefile</itemPath> | |
30 | + </logicalFolder> | |
31 | + </logicalFolder> | |
32 | + <projectmakefile>Makefile</projectmakefile> | |
33 | + <confs> | |
34 | + <conf name="Debug" type="1"> | |
35 | + <toolsSet> | |
36 | + <compilerSet>default</compilerSet> | |
37 | + <dependencyChecking>true</dependencyChecking> | |
38 | + <rebuildPropChanged>false</rebuildPropChanged> | |
39 | + </toolsSet> | |
40 | + <compileType> | |
41 | + <ccTool> | |
42 | + <architecture>2</architecture> | |
43 | + <standard>11</standard> | |
44 | + </ccTool> | |
45 | + </compileType> | |
46 | + <item path="Exception.hpp" ex="false" tool="3" flavor2="0"> | |
47 | + </item> | |
48 | + <item path="SerialPort.cpp" ex="false" tool="1" flavor2="0"> | |
49 | + </item> | |
50 | + <item path="SerialPort.hpp" ex="false" tool="3" flavor2="0"> | |
51 | + </item> | |
52 | + <item path="main.cpp" ex="false" tool="1" flavor2="0"> | |
53 | + </item> | |
54 | + </conf> | |
55 | + <conf name="Release" type="1"> | |
56 | + <toolsSet> | |
57 | + <compilerSet>default</compilerSet> | |
58 | + <dependencyChecking>true</dependencyChecking> | |
59 | + <rebuildPropChanged>false</rebuildPropChanged> | |
60 | + </toolsSet> | |
61 | + <compileType> | |
62 | + <cTool> | |
63 | + <developmentMode>5</developmentMode> | |
64 | + </cTool> | |
65 | + <ccTool> | |
66 | + <developmentMode>5</developmentMode> | |
67 | + <standard>11</standard> | |
68 | + </ccTool> | |
69 | + <fortranCompilerTool> | |
70 | + <developmentMode>5</developmentMode> | |
71 | + </fortranCompilerTool> | |
72 | + <asmTool> | |
73 | + <developmentMode>5</developmentMode> | |
74 | + </asmTool> | |
75 | + </compileType> | |
76 | + <item path="Exception.hpp" ex="false" tool="3" flavor2="0"> | |
77 | + </item> | |
78 | + <item path="SerialPort.cpp" ex="false" tool="1" flavor2="0"> | |
79 | + </item> | |
80 | + <item path="SerialPort.hpp" ex="false" tool="3" flavor2="0"> | |
81 | + </item> | |
82 | + <item path="main.cpp" ex="false" tool="1" flavor2="0"> | |
83 | + </item> | |
84 | + </conf> | |
85 | + </confs> | |
86 | +</configurationDescriptor> | ... | ... |
nbproject/private/Makefile-variables.mk
0 → 100644
nbproject/private/c_standard_headers_indexer.c
0 → 100644
1 | +++ a/nbproject/private/c_standard_headers_indexer.c | |
1 | +/* | |
2 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | |
3 | + * | |
4 | + * Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. | |
5 | + * | |
6 | + * Oracle and Java are registered trademarks of Oracle and/or its affiliates. | |
7 | + * Other names may be trademarks of their respective owners. | |
8 | + * | |
9 | + * The contents of this file are subject to the terms of either the GNU | |
10 | + * General Public License Version 2 only ("GPL") or the Common | |
11 | + * Development and Distribution License("CDDL") (collectively, the | |
12 | + * "License"). You may not use this file except in compliance with the | |
13 | + * License. You can obtain a copy of the License at | |
14 | + * http://www.netbeans.org/cddl-gplv2.html | |
15 | + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the | |
16 | + * specific language governing permissions and limitations under the | |
17 | + * License. When distributing the software, include this License Header | |
18 | + * Notice in each file and include the License file at | |
19 | + * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this | |
20 | + * particular file as subject to the "Classpath" exception as provided | |
21 | + * by Oracle in the GPL Version 2 section of the License file that | |
22 | + * accompanied this code. If applicable, add the following below the | |
23 | + * License Header, with the fields enclosed by brackets [] replaced by | |
24 | + * your own identifying information: | |
25 | + * "Portions Copyrighted [year] [name of copyright owner]" | |
26 | + * | |
27 | + * If you wish your version of this file to be governed by only the CDDL | |
28 | + * or only the GPL Version 2, indicate your decision by adding | |
29 | + * "[Contributor] elects to include this software in this distribution | |
30 | + * under the [CDDL or GPL Version 2] license." If you do not indicate a | |
31 | + * single choice of license, a recipient has the option to distribute | |
32 | + * your version of this file under either the CDDL, the GPL Version 2 or | |
33 | + * to extend the choice of license to its licensees as provided above. | |
34 | + * However, if you add GPL Version 2 code and therefore, elected the GPL | |
35 | + * Version 2 license, then the option applies only if the new code is | |
36 | + * made subject to such option by the copyright holder. | |
37 | + * | |
38 | + * Contributor(s): | |
39 | + */ | |
40 | + | |
41 | +// List of standard headers was taken in http://en.cppreference.com/w/c/header | |
42 | + | |
43 | +#include <assert.h> // Conditionally compiled macro that compares its argument to zero | |
44 | +#include <ctype.h> // Functions to determine the type contained in character data | |
45 | +#include <errno.h> // Macros reporting error conditions | |
46 | +#include <float.h> // Limits of float types | |
47 | +#include <limits.h> // Sizes of basic types | |
48 | +#include <locale.h> // Localization utilities | |
49 | +#include <math.h> // Common mathematics functions | |
50 | +#include <setjmp.h> // Nonlocal jumps | |
51 | +#include <signal.h> // Signal handling | |
52 | +#include <stdarg.h> // Variable arguments | |
53 | +#include <stddef.h> // Common macro definitions | |
54 | +#include <stdio.h> // Input/output | |
55 | +#include <string.h> // String handling | |
56 | +#include <stdlib.h> // General utilities: memory management, program utilities, string conversions, random numbers | |
57 | +#include <time.h> // Time/date utilities | |
58 | +#include <iso646.h> // (since C95) Alternative operator spellings | |
59 | +#include <wchar.h> // (since C95) Extended multibyte and wide character utilities | |
60 | +#include <wctype.h> // (since C95) Wide character classification and mapping utilities | |
61 | +#ifdef _STDC_C99 | |
62 | +#include <complex.h> // (since C99) Complex number arithmetic | |
63 | +#include <fenv.h> // (since C99) Floating-point environment | |
64 | +#include <inttypes.h> // (since C99) Format conversion of integer types | |
65 | +#include <stdbool.h> // (since C99) Boolean type | |
66 | +#include <stdint.h> // (since C99) Fixed-width integer types | |
67 | +#include <tgmath.h> // (since C99) Type-generic math (macros wrapping math.h and complex.h) | |
68 | +#endif | |
69 | +#ifdef _STDC_C11 | |
70 | +#include <stdalign.h> // (since C11) alignas and alignof convenience macros | |
71 | +#include <stdatomic.h> // (since C11) Atomic types | |
72 | +#include <stdnoreturn.h> // (since C11) noreturn convenience macros | |
73 | +#include <threads.h> // (since C11) Thread library | |
74 | +#include <uchar.h> // (since C11) UTF-16 and UTF-32 character utilities | |
75 | +#endif | ... | ... |
nbproject/private/configurations.xml
0 → 100644
1 | +++ a/nbproject/private/configurations.xml | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<configurationDescriptor version="100"> | |
3 | + <projectmakefile>Makefile</projectmakefile> | |
4 | + <confs> | |
5 | + <conf name="Debug" type="1"> | |
6 | + <toolsSet> | |
7 | + <developmentServer>localhost</developmentServer> | |
8 | + <platform>2</platform> | |
9 | + </toolsSet> | |
10 | + <dbx_gdbdebugger version="1"> | |
11 | + <gdb_pathmaps> | |
12 | + </gdb_pathmaps> | |
13 | + <gdb_interceptlist> | |
14 | + <gdbinterceptoptions gdb_all="false" gdb_unhandled="true" gdb_unexpected="true"/> | |
15 | + </gdb_interceptlist> | |
16 | + <gdb_options> | |
17 | + <DebugOptions> | |
18 | + </DebugOptions> | |
19 | + </gdb_options> | |
20 | + <gdb_buildfirst gdb_buildfirst_overriden="false" gdb_buildfirst_old="false"/> | |
21 | + </dbx_gdbdebugger> | |
22 | + <nativedebugger version="1"> | |
23 | + <engine>gdb</engine> | |
24 | + </nativedebugger> | |
25 | + <runprofile version="9"> | |
26 | + <runcommandpicklist> | |
27 | + <runcommandpicklistitem>"${OUTPUT_PATH}"</runcommandpicklistitem> | |
28 | + </runcommandpicklist> | |
29 | + <runcommand>"${OUTPUT_PATH}"</runcommand> | |
30 | + <rundir></rundir> | |
31 | + <buildfirst>true</buildfirst> | |
32 | + <terminal-type>0</terminal-type> | |
33 | + <remove-instrumentation>0</remove-instrumentation> | |
34 | + <environment> | |
35 | + </environment> | |
36 | + </runprofile> | |
37 | + </conf> | |
38 | + <conf name="Release" type="1"> | |
39 | + <toolsSet> | |
40 | + <developmentServer>localhost</developmentServer> | |
41 | + <platform>2</platform> | |
42 | + </toolsSet> | |
43 | + <dbx_gdbdebugger version="1"> | |
44 | + <gdb_pathmaps> | |
45 | + </gdb_pathmaps> | |
46 | + <gdb_interceptlist> | |
47 | + <gdbinterceptoptions gdb_all="false" gdb_unhandled="true" gdb_unexpected="true"/> | |
48 | + </gdb_interceptlist> | |
49 | + <gdb_options> | |
50 | + <DebugOptions> | |
51 | + </DebugOptions> | |
52 | + </gdb_options> | |
53 | + <gdb_buildfirst gdb_buildfirst_overriden="false" gdb_buildfirst_old="false"/> | |
54 | + </dbx_gdbdebugger> | |
55 | + <nativedebugger version="1"> | |
56 | + <engine>gdb</engine> | |
57 | + </nativedebugger> | |
58 | + <runprofile version="9"> | |
59 | + <runcommandpicklist> | |
60 | + <runcommandpicklistitem>"${OUTPUT_PATH}"</runcommandpicklistitem> | |
61 | + </runcommandpicklist> | |
62 | + <runcommand>"${OUTPUT_PATH}"</runcommand> | |
63 | + <rundir></rundir> | |
64 | + <buildfirst>true</buildfirst> | |
65 | + <terminal-type>0</terminal-type> | |
66 | + <remove-instrumentation>0</remove-instrumentation> | |
67 | + <environment> | |
68 | + </environment> | |
69 | + </runprofile> | |
70 | + </conf> | |
71 | + </confs> | |
72 | +</configurationDescriptor> | ... | ... |
nbproject/private/cpp_standard_headers_indexer.cpp
0 → 100644
1 | +++ a/nbproject/private/cpp_standard_headers_indexer.cpp | |
1 | +/* | |
2 | + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | |
3 | + * | |
4 | + * Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. | |
5 | + * | |
6 | + * Oracle and Java are registered trademarks of Oracle and/or its affiliates. | |
7 | + * Other names may be trademarks of their respective owners. | |
8 | + * | |
9 | + * The contents of this file are subject to the terms of either the GNU | |
10 | + * General Public License Version 2 only ("GPL") or the Common | |
11 | + * Development and Distribution License("CDDL") (collectively, the | |
12 | + * "License"). You may not use this file except in compliance with the | |
13 | + * License. You can obtain a copy of the License at | |
14 | + * http://www.netbeans.org/cddl-gplv2.html | |
15 | + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the | |
16 | + * specific language governing permissions and limitations under the | |
17 | + * License. When distributing the software, include this License Header | |
18 | + * Notice in each file and include the License file at | |
19 | + * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this | |
20 | + * particular file as subject to the "Classpath" exception as provided | |
21 | + * by Oracle in the GPL Version 2 section of the License file that | |
22 | + * accompanied this code. If applicable, add the following below the | |
23 | + * License Header, with the fields enclosed by brackets [] replaced by | |
24 | + * your own identifying information: | |
25 | + * "Portions Copyrighted [year] [name of copyright owner]" | |
26 | + * | |
27 | + * If you wish your version of this file to be governed by only the CDDL | |
28 | + * or only the GPL Version 2, indicate your decision by adding | |
29 | + * "[Contributor] elects to include this software in this distribution | |
30 | + * under the [CDDL or GPL Version 2] license." If you do not indicate a | |
31 | + * single choice of license, a recipient has the option to distribute | |
32 | + * your version of this file under either the CDDL, the GPL Version 2 or | |
33 | + * to extend the choice of license to its licensees as provided above. | |
34 | + * However, if you add GPL Version 2 code and therefore, elected the GPL | |
35 | + * Version 2 license, then the option applies only if the new code is | |
36 | + * made subject to such option by the copyright holder. | |
37 | + * | |
38 | + * Contributor(s): | |
39 | + */ | |
40 | + | |
41 | +// List of standard headers was taken in http://en.cppreference.com/w/cpp/header | |
42 | + | |
43 | +#include <cstdlib> // General purpose utilities: program control, dynamic memory allocation, random numbers, sort and search | |
44 | +#include <csignal> // Functions and macro constants for signal management | |
45 | +#include <csetjmp> // Macro (and function) that saves (and jumps) to an execution context | |
46 | +#include <cstdarg> // Handling of variable length argument lists | |
47 | +#include <typeinfo> // Runtime type information utilities | |
48 | +#include <bitset> // std::bitset class template | |
49 | +#include <functional> // Function objects, designed for use with the standard algorithms | |
50 | +#include <utility> // Various utility components | |
51 | +#include <ctime> // C-style time/date utilites | |
52 | +#include <cstddef> // typedefs for types such as size_t, NULL and others | |
53 | +#include <new> // Low-level memory management utilities | |
54 | +#include <memory> // Higher level memory management utilities | |
55 | +#include <climits> // limits of integral types | |
56 | +#include <cfloat> // limits of float types | |
57 | +#include <limits> // standardized way to query properties of arithmetic types | |
58 | +#include <exception> // Exception handling utilities | |
59 | +#include <stdexcept> // Standard exception objects | |
60 | +#include <cassert> // Conditionally compiled macro that compares its argument to zero | |
61 | +#include <cerrno> // Macro containing the last error number | |
62 | +#include <cctype> // functions to determine the type contained in character data | |
63 | +#include <cwctype> // functions for determining the type of wide character data | |
64 | +#include <cstring> // various narrow character string handling functions | |
65 | +#include <cwchar> // various wide and multibyte string handling functions | |
66 | +#include <string> // std::basic_string class template | |
67 | +#include <vector> // std::vector container | |
68 | +#include <deque> // std::deque container | |
69 | +#include <list> // std::list container | |
70 | +#include <set> // std::set and std::multiset associative containers | |
71 | +#include <map> // std::map and std::multimap associative containers | |
72 | +#include <stack> // std::stack container adaptor | |
73 | +#include <queue> // std::queue and std::priority_queue container adaptors | |
74 | +#include <algorithm> // Algorithms that operate on containers | |
75 | +#include <iterator> // Container iterators | |
76 | +#include <cmath> // Common mathematics functions | |
77 | +#include <complex> // Complex number type | |
78 | +#include <valarray> // Class for representing and manipulating arrays of values | |
79 | +#include <numeric> // Numeric operations on values in containers | |
80 | +#include <iosfwd> // forward declarations of all classes in the input/output library | |
81 | +#include <ios> // std::ios_base class, std::basic_ios class template and several typedefs | |
82 | +#include <istream> // std::basic_istream class template and several typedefs | |
83 | +#include <ostream> // std::basic_ostream, std::basic_iostream class templates and several typedefs | |
84 | +#include <iostream> // several standard stream objects | |
85 | +#include <fstream> // std::basic_fstream, std::basic_ifstream, std::basic_ofstream class templates and several typedefs | |
86 | +#include <sstream> // std::basic_stringstream, std::basic_istringstream, std::basic_ostringstream class templates and several typedefs | |
87 | +#include <strstream> // std::strstream, std::istrstream, std::ostrstream(deprecated) | |
88 | +#include <iomanip> // Helper functions to control the format or input and output | |
89 | +#include <streambuf> // std::basic_streambuf class template | |
90 | +#include <cstdio> // C-style input-output functions | |
91 | +#include <locale> // Localization utilities | |
92 | +#include <clocale> // C localization utilities | |
93 | +#include <ciso646> // empty header. The macros that appear in iso646.h in C are keywords in C++ | |
94 | +#if __cplusplus >= 201103L | |
95 | +#include <typeindex> // (since C++11) std::type_index | |
96 | +#include <type_traits> // (since C++11) Compile-time type information | |
97 | +#include <chrono> // (since C++11) C++ time utilites | |
98 | +#include <initializer_list> // (since C++11) std::initializer_list class template | |
99 | +#include <tuple> // (since C++11) std::tuple class template | |
100 | +#include <scoped_allocator> // (since C++11) Nested allocator class | |
101 | +#include <cstdint> // (since C++11) fixed-size types and limits of other types | |
102 | +#include <cinttypes> // (since C++11) formatting macros , intmax_t and uintmax_t math and conversions | |
103 | +#include <system_error> // (since C++11) defines std::error_code, a platform-dependent error code | |
104 | +#include <cuchar> // (since C++11) C-style Unicode character conversion functions | |
105 | +#include <array> // (since C++11) std::array container | |
106 | +#include <forward_list> // (since C++11) std::forward_list container | |
107 | +#include <unordered_set> // (since C++11) std::unordered_set and std::unordered_multiset unordered associative containers | |
108 | +#include <unordered_map> // (since C++11) std::unordered_map and std::unordered_multimap unordered associative containers | |
109 | +#include <random> // (since C++11) Random number generators and distributions | |
110 | +#include <ratio> // (since C++11) Compile-time rational arithmetic | |
111 | +#include <cfenv> // (since C++11) Floating-point environment access functions | |
112 | +#include <codecvt> // (since C++11) Unicode conversion facilities | |
113 | +#include <regex> // (since C++11) Classes, algorithms and iterators to support regular expression processing | |
114 | +#include <atomic> // (since C++11) Atomic operations library | |
115 | +#include <ccomplex> // (since C++11)(deprecated in C++17) simply includes the header <complex> | |
116 | +#include <ctgmath> // (since C++11)(deprecated in C++17) simply includes the headers <ccomplex> (until C++17)<complex> (since C++17) and <cmath>: the overloads equivalent to the contents of the C header tgmath.h are already provided by those headers | |
117 | +#include <cstdalign> // (since C++11)(deprecated in C++17) defines one compatibility macro constant | |
118 | +#include <cstdbool> // (since C++11)(deprecated in C++17) defines one compatibility macro constant | |
119 | +#include <thread> // (since C++11) std::thread class and supporting functions | |
120 | +#include <mutex> // (since C++11) mutual exclusion primitives | |
121 | +#include <future> // (since C++11) primitives for asynchronous computations | |
122 | +#include <condition_variable> // (since C++11) thread waiting conditions | |
123 | +#endif | |
124 | +#if __cplusplus >= 201300L | |
125 | +#include <shared_mutex> // (since C++14) shared mutual exclusion primitives | |
126 | +#endif | |
127 | +#if __cplusplus >= 201500L | |
128 | +#include <any> // (since C++17) std::any class template | |
129 | +#include <optional> // (since C++17) std::optional class template | |
130 | +#include <variant> // (since C++17) std::variant class template | |
131 | +#include <memory_resource> // (since C++17) Polymorphic allocators and memory resources | |
132 | +#include <string_view> // (since C++17) std::basic_string_view class template | |
133 | +#include <execution> // (since C++17) Predefined execution policies for parallel versions of the algorithms | |
134 | +#include <filesystem> // (since C++17) std::path class and supporting functions | |
135 | +#endif | ... | ... |
nbproject/private/launcher.properties
0 → 100644
1 | +++ a/nbproject/private/launcher.properties | |
1 | +# Launchers File syntax: | |
2 | +# | |
3 | +# [Must-have property line] | |
4 | +# launcher1.runCommand=<Run Command> | |
5 | +# [Optional extra properties] | |
6 | +# launcher1.displayName=<Display Name, runCommand by default> | |
7 | +# launcher1.hide=<true if lancher is not visible in menu, false by default> | |
8 | +# launcher1.buildCommand=<Build Command, Build Command specified in project properties by default> | |
9 | +# launcher1.runDir=<Run Directory, ${PROJECT_DIR} by default> | |
10 | +# launcher1.runInOwnTab=<false if launcher reuse common "Run" output tab, true by default> | |
11 | +# launcher1.symbolFiles=<Symbol Files loaded by debugger, ${OUTPUT_PATH} by default> | |
12 | +# launcher1.env.<Environment variable KEY>=<Environment variable VALUE> | |
13 | +# (If this value is quoted with ` it is handled as a native command which execution result will become the value) | |
14 | +# [Common launcher properties] | |
15 | +# common.runDir=<Run Directory> | |
16 | +# (This value is overwritten by a launcher specific runDir value if the latter exists) | |
17 | +# common.env.<Environment variable KEY>=<Environment variable VALUE> | |
18 | +# (Environment variables from common launcher are merged with launcher specific variables) | |
19 | +# common.symbolFiles=<Symbol Files loaded by debugger> | |
20 | +# (This value is overwritten by a launcher specific symbolFiles value if the latter exists) | |
21 | +# | |
22 | +# In runDir, symbolFiles and env fields you can use these macroses: | |
23 | +# ${PROJECT_DIR} - project directory absolute path | |
24 | +# ${OUTPUT_PATH} - linker output path (relative to project directory path) | |
25 | +# ${OUTPUT_BASENAME}- linker output filename | |
26 | +# ${TESTDIR} - test files directory (relative to project directory path) | |
27 | +# ${OBJECTDIR} - object files directory (relative to project directory path) | |
28 | +# ${CND_DISTDIR} - distribution directory (relative to project directory path) | |
29 | +# ${CND_BUILDDIR} - build directory (relative to project directory path) | |
30 | +# ${CND_PLATFORM} - platform name | |
31 | +# ${CND_CONF} - configuration name | |
32 | +# ${CND_DLIB_EXT} - dynamic library extension | |
33 | +# | |
34 | +# All the project launchers must be listed in the file! | |
35 | +# | |
36 | +# launcher1.runCommand=... | |
37 | +# launcher2.runCommand=... | |
38 | +# ... | |
39 | +# common.runDir=... | |
40 | +# common.env.KEY=VALUE | |
41 | + | |
42 | +# launcher1.runCommand=<type your run command here> | |
0 | 43 | \ No newline at end of file | ... | ... |
nbproject/private/private.xml
0 → 100644
1 | +++ a/nbproject/private/private.xml | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<project-private xmlns="http://www.netbeans.org/ns/project-private/1"> | |
3 | + <data xmlns="http://www.netbeans.org/ns/make-project-private/1"> | |
4 | + <activeConfTypeElem>1</activeConfTypeElem> | |
5 | + <activeConfIndexElem>0</activeConfIndexElem> | |
6 | + </data> | |
7 | + <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/> | |
8 | + <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2"> | |
9 | + <group> | |
10 | + <file>file:/home/pgroen/projects/serialport/Exception.hpp</file> | |
11 | + <file>file:/home/pgroen/projects/serialport/SerialPort.cpp</file> | |
12 | + <file>file:/home/pgroen/projects/serialport/main.cpp</file> | |
13 | + </group> | |
14 | + </open-files> | |
15 | +</project-private> | ... | ... |
nbproject/project.properties
0 → 100644
nbproject/project.xml
0 → 100644
1 | +++ a/nbproject/project.xml | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<project xmlns="http://www.netbeans.org/ns/project/1"> | |
3 | + <type>org.netbeans.modules.cnd.makeproject</type> | |
4 | + <configuration> | |
5 | + <data xmlns="http://www.netbeans.org/ns/make-project/1"> | |
6 | + <name>SerPortTest</name> | |
7 | + <c-extensions/> | |
8 | + <cpp-extensions>cpp</cpp-extensions> | |
9 | + <header-extensions>hpp</header-extensions> | |
10 | + <sourceEncoding>UTF-8</sourceEncoding> | |
11 | + <make-dep-projects/> | |
12 | + <sourceRootList/> | |
13 | + <confList> | |
14 | + <confElem> | |
15 | + <name>Debug</name> | |
16 | + <type>1</type> | |
17 | + </confElem> | |
18 | + <confElem> | |
19 | + <name>Release</name> | |
20 | + <type>1</type> | |
21 | + </confElem> | |
22 | + </confList> | |
23 | + <formatting> | |
24 | + <project-formatting-style>false</project-formatting-style> | |
25 | + </formatting> | |
26 | + </data> | |
27 | + </configuration> | |
28 | +</project> | ... | ... |