YDLIDAR SDK  V1.3.2
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 
161  bool open ();
162 
167  bool isOpen () const;
168 
170  void close ();
171 
173  size_t available ();
174 
179  bool waitReadable ();
180 
185  void waitByteTimes (size_t count);
186 
187 
188  int waitfordata(size_t data_count, uint32_t timeout, size_t * returned_size);
189 
216  size_t read (uint8_t *buffer, size_t size);
217 
227  size_t read (std::vector<uint8_t> &buffer, size_t size = 1);
228 
238  size_t read (std::string &buffer, size_t size = 1);
239 
248  std::string read (size_t size = 1);
249 
261  size_t readline (std::string &buffer, size_t size = 65536, std::string eol = "\n");
262 
273  std::string readline (size_t size = 65536, std::string eol = "\n");
274 
287  std::vector<std::string> readlines (size_t size = 65536, std::string eol = "\n");
288 
304  size_t write (const uint8_t *data, size_t size);
305 
315  size_t write (const std::vector<uint8_t> &data);
316 
326  size_t write (const std::string &data);
327 
336  void setPort (const std::string &port);
337 
344  std::string getPort () const;
345 
382  void setTimeout (Timeout &timeout);
383 
387  uint32_t write_timeout_multiplier)
388  {
389  Timeout timeout(inter_byte_timeout, read_timeout_constant,
390  read_timeout_multiplier, write_timeout_constant,
391  write_timeout_multiplier);
392  return setTimeout(timeout);
393  }
394 
402  Timeout getTimeout () const;
403 
415  bool setBaudrate (uint32_t baudrate);
416 
425  uint32_t getBaudrate () const;
426 
435  bool setBytesize (bytesize_t bytesize);
436 
443  bytesize_t getBytesize () const;
444 
452  bool setParity (parity_t parity);
453 
460  parity_t getParity () const;
461 
469  bool setStopbits (stopbits_t stopbits);
470 
477  stopbits_t getStopbits () const;
478 
487  bool setFlowcontrol (flowcontrol_t flowcontrol);
488 
495  flowcontrol_t getFlowcontrol () const;
496 
498  void flush ();
499 
501  void flushInput ();
502 
504  void flushOutput ();
505 
507  void sendBreak (int duration);
508 
510  bool setBreak (bool level = true);
511 
513  bool setRTS (bool level = true);
514 
516  bool setDTR (bool level = true);
517 
531  bool waitForChange ();
532 
534  bool getCTS ();
535 
537  bool getDSR ();
538 
540  bool getRI ();
541 
543  bool getCD ();
544 
546  uint32_t getByteTime();
547 
548  private:
549  // Disable copy constructors
550  Serial(const Serial&);
551  Serial& operator=(const Serial&);
552 
553  // Pimpl idiom, d_pointer
554  class SerialImpl;
555  SerialImpl *pimpl_;
556 
557  // Scoped Lock Classes
558  class ScopedReadLock;
559  class ScopedWriteLock;
560 
561  // Read common function
562  size_t read_ (uint8_t *buffer, size_t size);
563  // Write common function
564  size_t write_ (const uint8_t *data, size_t length);
565  };
566 
567 
571  struct PortInfo {
572 
574  std::string port;
575 
577  std::string description;
578 
580  std::string hardware_id;
581 
582  };
583 
584  /* Lists the serial ports available on the system
585  *
586  * Returns a vector of available serial ports, each represented
587  * by a serial::PortInfo data structure:
588  *
589  * \return vector of serial::PortInfo.
590  */
591  //std::vector<PortInfo> list_ports();
592 
593 } // namespace serial
594 
595 #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:385
std::string hardware_id
Definition: serial.h:580
Definition: serial.cpp:44
parity_t
Definition: serial.h:26
bytesize_t
Definition: serial.h:16
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:577
Definition: serial.h:571
uint32_t read_timeout_constant
Definition: serial.h:79
uint32_t inter_byte_timeout
Definition: serial.h:77
std::string port
Definition: serial.h:574
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