serial.h
Go to the documentation of this file.
1 
36 #ifndef SERIAL_H
37 #define SERIAL_H
38 
39 #include <limits>
40 #include <vector>
41 #include <string>
42 #include <cstring>
43 #include <sstream>
44 #include <exception>
45 #include <stdexcept>
46 #include <serial/v8stdint.h>
47 
48 #define THROW(exceptionClass, message) throw exceptionClass(__FILE__, \
49 __LINE__, (message) )
50 
51 namespace serial {
52 
56 typedef enum {
57  fivebits = 5,
58  sixbits = 6,
59  sevenbits = 7,
61 } bytesize_t;
62 
66 typedef enum {
72 } parity_t;
73 
77 typedef enum {
81 } stopbits_t;
82 
86 typedef enum {
91 
98 struct Timeout {
99 #ifdef max
100 # undef max
101 #endif
102  static uint32_t max() {return std::numeric_limits<uint32_t>::max();}
112  static Timeout simpleTimeout(uint32_t timeout) {
113  return Timeout(max(), timeout, 0, timeout, 0);
114  }
115 
130 
131  explicit Timeout (uint32_t inter_byte_timeout_=0,
132  uint32_t read_timeout_constant_=0,
133  uint32_t read_timeout_multiplier_=0,
134  uint32_t write_timeout_constant_=0,
135  uint32_t write_timeout_multiplier_=0)
136  : inter_byte_timeout(inter_byte_timeout_),
137  read_timeout_constant(read_timeout_constant_),
138  read_timeout_multiplier(read_timeout_multiplier_),
139  write_timeout_constant(write_timeout_constant_),
140  write_timeout_multiplier(write_timeout_multiplier_)
141  {}
142 };
143 
147 class Serial {
148 public:
180  Serial (const std::string &port = "",
181  uint32_t baudrate = 9600,
182  Timeout timeout = Timeout(),
183  bytesize_t bytesize = eightbits,
184  parity_t parity = parity_none,
185  stopbits_t stopbits = stopbits_one,
186  flowcontrol_t flowcontrol = flowcontrol_none);
187 
189  virtual ~Serial ();
190 
204  void
205  open ();
206 
211  bool
212  isOpen () const;
213 
215  void
216  close ();
217 
219  size_t
220  available ();
221 
226  bool
227  waitReadable ();
228 
233  void
234  waitByteTimes (size_t count);
235 
264  size_t
265  read (uint8_t *buffer, size_t size);
266 
278  size_t
279  read (std::vector<uint8_t> &buffer, size_t size = 1);
280 
292  size_t
293  read (std::string &buffer, size_t size = 1);
294 
305  std::string
306  read (size_t size = 1);
307 
321  size_t
322  readline (std::string &buffer, size_t size = 65536, std::string eol = "\n");
323 
336  std::string
337  readline (size_t size = 65536, std::string eol = "\n");
338 
353  std::vector<std::string>
354  readlines (size_t size = 65536, std::string eol = "\n");
355 
371  size_t
372  write (const uint8_t *data, size_t size);
373 
386  size_t
387  write (const std::vector<uint8_t> &data);
388 
401  size_t
402  write (const std::string &data);
403 
412  void
413  setPort (const std::string &port);
414 
421  std::string
422  getPort () const;
423 
460  void
462 
464  void
465  setTimeout (uint32_t inter_byte_timeout, uint32_t read_timeout_constant,
466  uint32_t read_timeout_multiplier, uint32_t write_timeout_constant,
467  uint32_t write_timeout_multiplier)
468  {
469  Timeout timeout(inter_byte_timeout, read_timeout_constant,
470  read_timeout_multiplier, write_timeout_constant,
471  write_timeout_multiplier);
472  return setTimeout(timeout);
473  }
474 
482  Timeout
483  getTimeout () const;
484 
497  void
498  setBaudrate (uint32_t baudrate);
499 
508  uint32_t
509  getBaudrate () const;
510 
519  void
520  setBytesize (bytesize_t bytesize);
521 
528  bytesize_t
529  getBytesize () const;
530 
538  void
539  setParity (parity_t parity);
540 
547  parity_t
548  getParity () const;
549 
557  void
558  setStopbits (stopbits_t stopbits);
559 
566  stopbits_t
567  getStopbits () const;
568 
577  void
578  setFlowcontrol (flowcontrol_t flowcontrol);
579 
587  getFlowcontrol () const;
588 
590  void
591  flush ();
592 
594  void
595  flushInput ();
596 
598  void
599  flushOutput ();
600 
602  void
603  sendBreak (int duration);
604 
606  void
607  setBreak (bool level = true);
608 
610  void
611  setRTS (bool level = true);
612 
614  void
615  setDTR (bool level = true);
616 
631  bool
632  waitForChange ();
633 
635  bool
636  getCTS ();
637 
639  bool
640  getDSR ();
641 
643  bool
644  getRI ();
645 
647  bool
648  getCD ();
649 
650 private:
651  // Disable copy constructors
652  Serial(const Serial&);
653  Serial& operator=(const Serial&);
654 
655  // Pimpl idiom, d_pointer
656  class SerialImpl;
658 
659  // Scoped Lock Classes
660  class ScopedReadLock;
661  class ScopedWriteLock;
662 
663  // Read common function
664  size_t
665  read_ (uint8_t *buffer, size_t size);
666  // Write common function
667  size_t
668  write_ (const uint8_t *data, size_t length);
669 
670 };
671 
672 class SerialException : public std::exception
673 {
674  // Disable copy constructors
676  std::string e_what_;
677 public:
678  SerialException (const char *description) {
679  std::stringstream ss;
680  ss << "SerialException " << description << " failed.";
681  e_what_ = ss.str();
682  }
683  SerialException (const SerialException& other) : e_what_(other.e_what_) {}
684  virtual ~SerialException() throw() {}
685  virtual const char* what () const throw () {
686  return e_what_.c_str();
687  }
688 };
689 
690 class IOException : public std::exception
691 {
692  // Disable copy constructors
694  std::string file_;
695  int line_;
696  std::string e_what_;
697  int errno_;
698 public:
699  explicit IOException (std::string file, int line, int errnum)
700  : file_(file), line_(line), errno_(errnum) {
701  std::stringstream ss;
702 #if defined(_WIN32) && !defined(__MINGW32__)
703  char error_str [1024];
704  strerror_s(error_str, 1024, errnum);
705 #else
706  char * error_str = strerror(errnum);
707 #endif
708  ss << "IO Exception (" << errno_ << "): " << error_str;
709  ss << ", file " << file_ << ", line " << line_ << ".";
710  e_what_ = ss.str();
711  }
712  explicit IOException (std::string file, int line, const char * description)
713  : file_(file), line_(line), errno_(0) {
714  std::stringstream ss;
715  ss << "IO Exception: " << description;
716  ss << ", file " << file_ << ", line " << line_ << ".";
717  e_what_ = ss.str();
718  }
719  virtual ~IOException() throw() {}
720  IOException (const IOException& other) : line_(other.line_), e_what_(other.e_what_), errno_(other.errno_) {}
721 
722  int getErrorNumber () const { return errno_; }
723 
724  virtual const char* what () const throw () {
725  return e_what_.c_str();
726  }
727 };
728 
729 class PortNotOpenedException : public std::exception
730 {
731  // Disable copy constructors
733  std::string e_what_;
734 public:
735  PortNotOpenedException (const char * description) {
736  std::stringstream ss;
737  ss << "PortNotOpenedException " << description << " failed.";
738  e_what_ = ss.str();
739  }
741  virtual ~PortNotOpenedException() throw() {}
742  virtual const char* what () const throw () {
743  return e_what_.c_str();
744  }
745 };
746 
750 struct PortInfo {
751 
753  std::string port;
754 
756  std::string description;
757 
759  std::string hardware_id;
760 
761 };
762 
763 /* Lists the serial ports available on the system
764  *
765  * Returns a vector of available serial ports, each represented
766  * by a serial::PortInfo data structure:
767  *
768  * \return vector of serial::PortInfo.
769  */
770 std::vector<PortInfo>
771 list_ports();
772 
773 } // namespace serial
774 
775 #endif
serial::Serial::setBaudrate
void setBaudrate(uint32_t baudrate)
Definition: serial.cc:311
serial::parity_t
parity_t
Definition: serial.h:66
serial::PortInfo::description
std::string description
Definition: serial.h:756
serial::parity_mark
@ parity_mark
Definition: serial.h:70
serial::Serial::flushInput
void flushInput()
Definition: serial.cc:377
serial::IOException::IOException
IOException(std::string file, int line, const char *description)
Definition: serial.h:712
serial::Serial::setTimeout
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:465
serial::IOException::file_
std::string file_
Definition: serial.h:694
serial::IOException::IOException
IOException(std::string file, int line, int errnum)
Definition: serial.h:699
serial::IOException::errno_
int errno_
Definition: serial.h:697
serial::IOException::operator=
IOException & operator=(const IOException &)
serial::Timeout::max
static uint32_t max()
Definition: serial.h:102
serial::Serial::setParity
void setParity(parity_t parity)
Definition: serial.cc:335
serial
Definition: unix.h:47
serial::PortInfo::port
std::string port
Definition: serial.h:753
serial::Serial::setTimeout
void setTimeout(Timeout &timeout)
Definition: serial.cc:300
serial::IOException::getErrorNumber
int getErrorNumber() const
Definition: serial.h:722
serial::PortNotOpenedException::PortNotOpenedException
PortNotOpenedException(const PortNotOpenedException &other)
Definition: serial.h:740
serial::Serial::getDSR
bool getDSR()
Definition: serial.cc:419
serial::Timeout::read_timeout_multiplier
uint32_t read_timeout_multiplier
Definition: serial.h:123
serial::Timeout::write_timeout_constant
uint32_t write_timeout_constant
Definition: serial.h:125
serial::Serial::close
void close()
Definition: serial.cc:87
serial::Serial::getParity
parity_t getParity() const
Definition: serial.cc:341
serial::SerialException::e_what_
std::string e_what_
Definition: serial.h:676
serial::SerialException::operator=
SerialException & operator=(const SerialException &)
serial::SerialException::SerialException
SerialException(const SerialException &other)
Definition: serial.h:683
serial::IOException::what
virtual const char * what() const
Definition: serial.h:724
serial::Serial::getPort
std::string getPort() const
Definition: serial.cc:294
serial::list_ports
std::vector< PortInfo > list_ports()
serial::stopbits_one
@ stopbits_one
Definition: serial.h:78
serial::Serial::setRTS
void setRTS(bool level=true)
Definition: serial.cc:399
serial::Serial::setBytesize
void setBytesize(bytesize_t bytesize)
Definition: serial.cc:323
serial::Serial::flush
void flush()
Definition: serial.cc:370
serial::PortInfo
Definition: serial.h:750
serial::flowcontrol_software
@ flowcontrol_software
Definition: serial.h:88
serial::parity_even
@ parity_even
Definition: serial.h:69
serial::Serial::waitReadable
bool waitReadable()
Definition: serial.cc:105
serial::Timeout::write_timeout_multiplier
uint32_t write_timeout_multiplier
Definition: serial.h:129
serial::Serial::ScopedReadLock
Definition: serial.cc:35
serial::IOException::IOException
IOException(const IOException &other)
Definition: serial.h:720
serial::PortNotOpenedException::what
virtual const char * what() const
Definition: serial.h:742
serial::IOException
Definition: serial.h:690
serial::Serial::read_
size_t read_(uint8_t *buffer, size_t size)
Definition: serial.cc:118
serial::PortNotOpenedException::e_what_
std::string e_what_
Definition: serial.h:733
serial::Serial::getStopbits
stopbits_t getStopbits() const
Definition: serial.cc:353
serial::Serial::Serial
Serial(const std::string &port="", uint32_t baudrate=9600, Timeout timeout=Timeout(), bytesize_t bytesize=eightbits, parity_t parity=parity_none, stopbits_t stopbits=stopbits_one, flowcontrol_t flowcontrol=flowcontrol_none)
serial::Serial::write_
size_t write_(const uint8_t *data, size_t length)
Definition: serial.cc:277
serial::bytesize_t
bytesize_t
Definition: serial.h:56
serial::Serial::getRI
bool getRI()
Definition: serial.cc:424
v8stdint.h
serial::Serial::flushOutput
void flushOutput()
Definition: serial.cc:383
python_serial_test.timeout
timeout
Definition: python_serial_test.py:10
serial::SerialException::what
virtual const char * what() const
Definition: serial.h:685
serial::Timeout::simpleTimeout
static Timeout simpleTimeout(uint32_t timeout)
Definition: serial.h:112
serial::Serial::getCD
bool getCD()
Definition: serial.cc:429
serial::PortNotOpenedException::~PortNotOpenedException
virtual ~PortNotOpenedException()
Definition: serial.h:741
serial::Serial::SerialImpl
Definition: unix.h:66
serial::Timeout::inter_byte_timeout
uint32_t inter_byte_timeout
Definition: serial.h:117
serial::Serial::setPort
void setPort(const std::string &port)
Definition: serial.cc:283
serial::Serial::readline
size_t readline(std::string &buffer, size_t size=65536, std::string eol="\n")
serial::Serial
Definition: serial.h:147
serial::Serial::readlines
std::vector< std::string > readlines(size_t size=65536, std::string eol="\n")
Definition: serial.cc:213
serial::Timeout::read_timeout_constant
uint32_t read_timeout_constant
Definition: serial.h:119
serial::parity_odd
@ parity_odd
Definition: serial.h:68
serial::Serial::setFlowcontrol
void setFlowcontrol(flowcontrol_t flowcontrol)
Definition: serial.cc:359
serial::IOException::line_
int line_
Definition: serial.h:695
serial::Serial::getBaudrate
uint32_t getBaudrate() const
Definition: serial.cc:317
serial::Serial::~Serial
virtual ~Serial()
Definition: serial.cc:75
serial::Serial::getCTS
bool getCTS()
Definition: serial.cc:414
serial::Serial::open
void open()
Definition: serial.cc:81
serial::Serial::sendBreak
void sendBreak(int duration)
Definition: serial.cc:389
serial::Serial::getFlowcontrol
flowcontrol_t getFlowcontrol() const
Definition: serial.cc:365
serial::flowcontrol_t
flowcontrol_t
Definition: serial.h:86
serial::sevenbits
@ sevenbits
Definition: serial.h:59
serial::PortInfo::hardware_id
std::string hardware_id
Definition: serial.h:759
serial::Serial::setStopbits
void setStopbits(stopbits_t stopbits)
Definition: serial.cc:347
serial::Serial::ScopedWriteLock
Definition: serial.cc:51
serial::Serial::available
size_t available()
Definition: serial.cc:99
serial::Serial::isOpen
bool isOpen() const
Definition: serial.cc:93
serial::stopbits_one_point_five
@ stopbits_one_point_five
Definition: serial.h:80
serial::SerialException::~SerialException
virtual ~SerialException()
Definition: serial.h:684
serial::parity_space
@ parity_space
Definition: serial.h:71
serial::stopbits_t
stopbits_t
Definition: serial.h:77
serial::PortNotOpenedException::operator=
const PortNotOpenedException & operator=(PortNotOpenedException)
serial::flowcontrol_none
@ flowcontrol_none
Definition: serial.h:87
serial::Serial::getTimeout
Timeout getTimeout() const
Definition: serial.cc:306
serial::Serial::setDTR
void setDTR(bool level=true)
Definition: serial.cc:404
serial::Serial::getBytesize
bytesize_t getBytesize() const
Definition: serial.cc:329
serial::flowcontrol_hardware
@ flowcontrol_hardware
Definition: serial.h:89
serial::Serial::waitByteTimes
void waitByteTimes(size_t count)
Definition: serial.cc:112
serial::IOException::~IOException
virtual ~IOException()
Definition: serial.h:719
serial::IOException::e_what_
std::string e_what_
Definition: serial.h:696
serial::fivebits
@ fivebits
Definition: serial.h:57
serial::Serial::pimpl_
SerialImpl * pimpl_
Definition: serial.h:656
serial::SerialException
Definition: serial.h:672
serial::parity_none
@ parity_none
Definition: serial.h:67
serial::stopbits_two
@ stopbits_two
Definition: serial.h:79
serial::Serial::waitForChange
bool waitForChange()
Definition: serial.cc:409
serial::SerialException::SerialException
SerialException(const char *description)
Definition: serial.h:678
serial::Serial::setBreak
void setBreak(bool level=true)
Definition: serial.cc:394
serial::PortNotOpenedException
Definition: serial.h:729
serial::PortNotOpenedException::PortNotOpenedException
PortNotOpenedException(const char *description)
Definition: serial.h:735
serial::Serial::write
size_t write(const uint8_t *data, size_t size)
Definition: serial.cc:270
serial::sixbits
@ sixbits
Definition: serial.h:58
serial::Serial::read
size_t read(uint8_t *buffer, size_t size)
Definition: serial.cc:124
serial::Timeout::Timeout
Timeout(uint32_t inter_byte_timeout_=0, uint32_t read_timeout_constant_=0, uint32_t read_timeout_multiplier_=0, uint32_t write_timeout_constant_=0, uint32_t write_timeout_multiplier_=0)
Definition: serial.h:131
serial::Serial::operator=
Serial & operator=(const Serial &)
serial::Timeout
Definition: serial.h:98
serial::eightbits
@ eightbits
Definition: serial.h:60


serial
Author(s): William Woodall , John Harrison
autogenerated on Wed Mar 9 2022 03:10:03