YDLIDAR SDK  V1.4.5
serial.h
1 #ifndef SERIAL_H
2 #define SERIAL_H
3 
4 #include <limits>
5 #include <vector>
6 #include <string>
7 #include <cstring>
8 #include <sstream>
9 #include "v8stdint.h"
10 
11 namespace serial {
12 
16 typedef enum {
17  fivebits = 5,
18  sixbits = 6,
19  sevenbits = 7,
20  eightbits = 8
21 } bytesize_t;
22 
26 typedef enum {
27  parity_none = 0,
28  parity_odd = 1,
29  parity_even = 2,
30  parity_mark = 3,
31  parity_space = 4
32 } parity_t;
33 
37 typedef enum {
38  stopbits_one = 1,
39  stopbits_two = 2,
40  stopbits_one_point_five
41 } stopbits_t;
42 
46 typedef enum {
47  flowcontrol_none = 0,
48  flowcontrol_software,
49  flowcontrol_hardware
51 
58 struct Timeout {
59 #ifdef max
60 # undef max
61 #endif
62  static uint32_t max() {
63  return std::numeric_limits<uint32_t>::max();
64  }
74  static Timeout simpleTimeout(uint32_t timeout) {
75  return Timeout(max(), timeout, 0, timeout, 0);
76  }
77 
92 
93  explicit Timeout(uint32_t inter_byte_timeout_ = 0,
94  uint32_t read_timeout_constant_ = 0,
95  uint32_t read_timeout_multiplier_ = 0,
96  uint32_t write_timeout_constant_ = 0,
97  uint32_t write_timeout_multiplier_ = 0)
98  : inter_byte_timeout(inter_byte_timeout_),
99  read_timeout_constant(read_timeout_constant_),
100  read_timeout_multiplier(read_timeout_multiplier_),
101  write_timeout_constant(write_timeout_constant_),
102  write_timeout_multiplier(write_timeout_multiplier_)
103  {}
104 };
105 
109 class Serial {
110  public:
142  explicit Serial(const std::string &port = "",
143  uint32_t baudrate = 9600,
144  Timeout timeout = Timeout(),
145  bytesize_t bytesize = eightbits,
146  parity_t parity = parity_none,
147  stopbits_t stopbits = stopbits_one,
148  flowcontrol_t flowcontrol = flowcontrol_none);
149 
151  virtual ~Serial();
152 
163  bool open();
164 
169  bool isOpen();
170 
172  void closePort();
173 
175  size_t available();
176 
181  bool waitReadable();
182 
187  void waitByteTimes(size_t count);
188 
189 
197  int waitfordata(size_t data_count, uint32_t timeout, size_t *returned_size);
198 
199 
206  virtual size_t writeData(const uint8_t *data, size_t size);
207 
208 
215  virtual size_t readData(uint8_t *data, size_t size);
216 
243  size_t read(uint8_t *buffer, size_t size);
244 
254  size_t read(std::vector<uint8_t> &buffer, size_t size = 1);
255 
265  size_t read(std::string &buffer, size_t size = 1);
266 
275  std::string read(size_t size = 1);
276 
288  size_t readline(std::string &buffer, size_t size = 65536, std::string eol = "\n");
289 
300  std::string readline(size_t size = 65536, std::string eol = "\n");
301 
314  std::vector<std::string> readlines(size_t size = 65536, std::string eol = "\n");
315 
331  size_t write(const uint8_t *data, size_t size);
332 
342  size_t write(const std::vector<uint8_t> &data);
343 
353  size_t write(const std::string &data);
354 
363  void setPort(const std::string &port);
364 
371  std::string getPort() const;
372 
409  void setTimeout(Timeout &timeout);
410 
414  uint32_t write_timeout_multiplier) {
415  Timeout timeout(inter_byte_timeout, read_timeout_constant,
416  read_timeout_multiplier, write_timeout_constant,
417  write_timeout_multiplier);
418  return setTimeout(timeout);
419  }
420 
428  Timeout getTimeout() const;
429 
441  bool setBaudrate(uint32_t baudrate);
442 
451  uint32_t getBaudrate() const;
452 
461  bool setBytesize(bytesize_t bytesize);
462 
469  bytesize_t getBytesize() const;
470 
478  bool setParity(parity_t parity);
479 
486  parity_t getParity() const;
487 
495  bool setStopbits(stopbits_t stopbits);
496 
503  stopbits_t getStopbits() const;
504 
513  bool setFlowcontrol(flowcontrol_t flowcontrol);
514 
521  flowcontrol_t getFlowcontrol() const;
522 
524  void flush();
525 
527  void flushInput();
528 
530  void flushOutput();
531 
533  void sendBreak(int duration);
534 
536  bool setBreak(bool level = true);
537 
539  bool setRTS(bool level = true);
540 
542  bool setDTR(bool level = true);
543 
557  bool waitForChange();
558 
560  bool getCTS();
561 
563  bool getDSR();
564 
566  bool getRI();
567 
569  bool getCD();
570 
572  int getByteTime();
573 
574 
575  private:
576  // Disable copy constructors
577  Serial(const Serial &);
578  Serial &operator=(const Serial &);
579 
580  // Pimpl idiom, d_pointer
581  class SerialImpl;
582  SerialImpl *pimpl_;
583 
584  // Scoped Lock Classes
585  class ScopedReadLock;
586  class ScopedWriteLock;
587 
588  // Read common function
589  size_t read_(uint8_t *buffer, size_t size);
590  // Write common function
591  size_t write_(const uint8_t *data, size_t length);
592 };
593 
594 
598 struct PortInfo {
599 
601  std::string port;
602 
604  std::string description;
605 
607  std::string hardware_id;
608 
610  std::string device_id;
611 
612 };
613 
614 /* Lists the serial ports available on the system
615 *
616 * Returns a vector of available serial ports, each represented
617 * by a serial::PortInfo data structure:
618 *
619 * \return vector of serial::PortInfo.
620 */
621 std::vector<PortInfo>
622 list_ports();
623 
624 } // namespace serial
625 
626 #endif
void setTimeout(uint32_t inter_byte_timeout, uint32_t read_timeout_constant, uint32_t read_timeout_multiplier, uint32_t write_timeout_constant, uint32_t write_timeout_multiplier)
Definition: serial.h:412
std::string hardware_id
Definition: serial.h:607
Definition: serial.cpp:44
parity_t
Definition: serial.h:26
bytesize_t
Definition: serial.h:16
std::string device_id
Definition: serial.h:610
Definition: serial.h:11
uint32_t read_timeout_multiplier
Definition: serial.h:85
uint32_t write_timeout_multiplier
Definition: serial.h:91
Definition: serial.h:58
std::string description
Definition: serial.h:604
Definition: serial.h:598
uint32_t read_timeout_constant
Definition: serial.h:81
uint32_t inter_byte_timeout
Definition: serial.h:79
std::string port
Definition: serial.h:601
stopbits_t
Definition: serial.h:37
Definition: serial.cpp:28
Definition: unix_serial.h:27
uint32_t write_timeout_constant
Definition: serial.h:87
Definition: serial.h:109
static Timeout simpleTimeout(uint32_t timeout)
Definition: serial.h:74
flowcontrol_t
Definition: serial.h:46