YDLIDAR X2 SDK  V1.4.1
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
50  } flowcontrol_t;
51 
58  struct Timeout {
59 #ifdef max
60 # undef max
61 #endif
62  static uint32_t max() {return std::numeric_limits<uint32_t>::max();}
72  static Timeout simpleTimeout(uint32_t timeout) {
73  return Timeout(max(), timeout, 0, timeout, 0);
74  }
75 
90 
91  explicit Timeout (uint32_t inter_byte_timeout_=0,
92  uint32_t read_timeout_constant_=0,
93  uint32_t read_timeout_multiplier_=0,
94  uint32_t write_timeout_constant_=0,
95  uint32_t write_timeout_multiplier_=0)
96  : inter_byte_timeout(inter_byte_timeout_),
97  read_timeout_constant(read_timeout_constant_),
98  read_timeout_multiplier(read_timeout_multiplier_),
99  write_timeout_constant(write_timeout_constant_),
100  write_timeout_multiplier(write_timeout_multiplier_)
101  {}
102  };
103 
107  class Serial {
108  public:
140  explicit Serial (const std::string &port = "",
141  uint32_t baudrate = 9600,
142  Timeout timeout = Timeout(),
143  bytesize_t bytesize = eightbits,
144  parity_t parity = parity_none,
145  stopbits_t stopbits = stopbits_one,
146  flowcontrol_t flowcontrol = flowcontrol_none);
147 
149  virtual ~Serial ();
150 
151 
162  bool open ();
163 
168  bool isOpen ();
169 
171  void closePort ();
172 
174  size_t available ();
175 
180  bool waitReadable ();
181 
186  void waitByteTimes (size_t count);
187 
188 
196  int waitfordata(size_t data_count, uint32_t timeout, size_t * returned_size);
197 
198 
225  size_t read (uint8_t *buffer, size_t size);
226 
236  size_t read (std::vector<uint8_t> &buffer, size_t size = 1);
237 
247  size_t read (std::string &buffer, size_t size = 1);
248 
257  std::string read (size_t size = 1);
258 
270  size_t readline (std::string &buffer, size_t size = 65536, std::string eol = "\n");
271 
282  std::string readline (size_t size = 65536, std::string eol = "\n");
283 
296  std::vector<std::string> readlines (size_t size = 65536, std::string eol = "\n");
297 
313  size_t write (const uint8_t *data, size_t size);
314 
324  size_t write (const std::vector<uint8_t> &data);
325 
335  size_t write (const std::string &data);
336 
345  void setPort (const std::string &port);
346 
353  std::string getPort () const;
354 
391  void setTimeout (Timeout &timeout);
392 
396  uint32_t write_timeout_multiplier)
397  {
398  Timeout timeout(inter_byte_timeout, read_timeout_constant,
399  read_timeout_multiplier, write_timeout_constant,
400  write_timeout_multiplier);
401  return setTimeout(timeout);
402  }
403 
411  Timeout getTimeout () const;
412 
424  bool setBaudrate (uint32_t baudrate);
425 
434  uint32_t getBaudrate () const;
435 
444  bool setBytesize (bytesize_t bytesize);
445 
452  bytesize_t getBytesize () const;
453 
461  bool setParity (parity_t parity);
462 
469  parity_t getParity () const;
470 
478  bool setStopbits (stopbits_t stopbits);
479 
486  stopbits_t getStopbits () const;
487 
496  bool setFlowcontrol (flowcontrol_t flowcontrol);
497 
504  flowcontrol_t getFlowcontrol () const;
505 
507  void flush ();
508 
510  void flushInput ();
511 
513  void flushOutput ();
514 
516  void sendBreak (int duration);
517 
519  bool setBreak (bool level = true);
520 
522  bool setRTS (bool level = true);
523 
525  bool setDTR (bool level = true);
526 
540  bool waitForChange ();
541 
543  bool getCTS ();
544 
546  bool getDSR ();
547 
549  bool getRI ();
550 
552  bool getCD ();
553 
555  int getByteTime();
556 
557 
558  private:
559  // Disable copy constructors
560  Serial(const Serial&);
561  Serial& operator=(const Serial&);
562 
563  // Pimpl idiom, d_pointer
564  class SerialImpl;
565  SerialImpl *pimpl_;
566 
567  // Scoped Lock Classes
568  class ScopedReadLock;
569  class ScopedWriteLock;
570 
571  // Read common function
572  size_t read_ (uint8_t *buffer, size_t size);
573  // Write common function
574  size_t write_ (const uint8_t *data, size_t length);
575  };
576 
577 
581  struct PortInfo {
582 
584  std::string port;
585 
587  std::string description;
588 
590  std::string hardware_id;
591 
593  std::string device_id;
594 
595  };
596 
597  /* Lists the serial ports available on the system
598  *
599  * Returns a vector of available serial ports, each represented
600  * by a serial::PortInfo data structure:
601  *
602  * \return vector of serial::PortInfo.
603  */
604  std::vector<PortInfo>
605  list_ports();
606 
607 
608 } // namespace serial
609 
610 #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:394
std::string hardware_id
Definition: serial.h:590
Definition: serial.cpp:44
parity_t
Definition: serial.h:26
bytesize_t
Definition: serial.h:16
std::string device_id
Definition: serial.h:593
Definition: serial.h:11
uint32_t read_timeout_multiplier
Definition: serial.h:83
uint32_t write_timeout_multiplier
Definition: serial.h:89
Definition: serial.h:58
std::string description
Definition: serial.h:587
Definition: serial.h:581
uint32_t read_timeout_constant
Definition: serial.h:79
uint32_t inter_byte_timeout
Definition: serial.h:77
std::string port
Definition: serial.h:584
stopbits_t
Definition: serial.h:37
Definition: serial.cpp:28
Definition: unix_serial.h:27
uint32_t write_timeout_constant
Definition: serial.h:85
Definition: serial.h:107
static Timeout simpleTimeout(uint32_t timeout)
Definition: serial.h:72
flowcontrol_t
Definition: serial.h:46