libserial  0.6.0rc1
SerialStreamBuf.h
Go to the documentation of this file.
1 /*
2  * Time-stamp: <02-Nov-2008 14:52:35 pagey>
3  *
4  * $Id: SerialStreamBuf.h,v 1.9 2005-10-17 00:19:12 crayzeewulf Exp $
5  *
6  *
7  */
8 #ifndef _SerialStreamBuf_h_
9 #define _SerialStreamBuf_h_
10 
11 #include <termios.h>
12 #include <unistd.h>
13 #include <iosfwd>
14 #include <streambuf>
15 #include <string>
16 #include <SerialPort.h>
17 
18 extern "C++" {
19  namespace LibSerial {
38  class SerialStreamBuf : public std::streambuf {
39  public:
43 
45 
62  enum BaudRateEnum {
81 #ifdef __linux__
82  BAUD_460800 = SerialPort::BAUD_460800,
83 #endif
86  } ;
87 
97  enum CharSizeEnum {
104  } ;
105 
114  enum ParityEnum {
120  } ;
121 
136  } ;
138 
139  /* ------------------------------------------------------------
140  * Public Static Members
141  * ------------------------------------------------------------
142  */
153  static const BaudRateEnum DEFAULT_BAUD ;
154 
163 
170  static const short DEFAULT_NO_OF_STOP_BITS ;
171 
178  static const ParityEnum DEFAULT_PARITY ;
179 
187 
196  static const short DEFAULT_VMIN ;
197 
206  static const short DEFAULT_VTIME ;
207 
209 
210 
217  SerialStreamBuf() ;
218 
222  ~SerialStreamBuf() ;
224 
233  bool is_open() const ;
234 
282  SerialStreamBuf* open( const std::string filename,
283  std::ios_base::openmode mode =
284  std::ios_base::in | std::ios_base::out ) ;
285 
307 
312  int SetParametersToDefault() ;
313 
319  const BaudRateEnum SetBaudRate(const BaudRateEnum baudRate ) ;
320 
326  const BaudRateEnum BaudRate() const ;
327 
333  const CharSizeEnum SetCharSize(const CharSizeEnum charSize) ;
334 
339  const CharSizeEnum CharSize() const ;
340 
348  short SetNumOfStopBits(short numOfStopBits) ;
349 
355  short NumOfStopBits() const ;
356 
362  const ParityEnum SetParity(const ParityEnum parityType) ;
363 
369  const ParityEnum Parity() const ;
370 
374  const FlowControlEnum SetFlowControl(const FlowControlEnum flowControlType) ;
375 
379  const FlowControlEnum FlowControl() const ;
380 
385  const short SetVMin( short vtime ) ;
386 
391  const short VMin() const;
392 
397  const short SetVTime( short vtime ) ;
398 
403  const short VTime() const;
404 
406 
410 
412 
413  /* ------------------------------------------------------------
414  * Friends
415  * ------------------------------------------------------------
416  */
417  protected:
418  /* ------------------------------------------------------------
419  * Protected Data Members
420  * ------------------------------------------------------------
421  */
426  static const char CTRL_Q = 0x11 ;
427 
432  static const char CTRL_S = 0x13 ;
433  /* ------------------------------------------------------------
434  * Protected Methods
435  * ------------------------------------------------------------
436  */
450  virtual std::streambuf* setbuf( char_type*,
451  std::streamsize ) ;
452 
459  virtual std::streamsize xsgetn( char_type* s,
460  std::streamsize n ) ;
461 
471  virtual std::streamsize showmanyc();
472 
480  virtual int_type underflow() ;
481 
490  virtual int_type uflow() ;
491 
498  virtual int_type pbackfail(int_type c = traits_type::eof()) ;
499 
506  virtual std::streamsize xsputn( const char_type* s,
507  std::streamsize n ) ;
508 
514  virtual int_type overflow(int_type c) ;
515 
516  private:
517  /* ------------------------------------------------------------
518  * Private Data Members
519  * ------------------------------------------------------------
520  */
521  //
522  // The copy constructor and the assignment operator are
523  // declared private but never defined. This allows the
524  // compiler to catch attempts to copy instances of this
525  // class.
526  //
527  SerialStreamBuf( const SerialStreamBuf& ) ;
529 
537 
542 
547  /* ------------------------------------------------------------
548  * Private Methods
549  * ------------------------------------------------------------
550  */
558  int InitializeSerialPort() ;
559  } ; // class SerialStreamBuf
560 
561  inline
563  mPutbackChar(0),
564  mPutbackAvailable(false),
565  mFileDescriptor(-1)
566  {
567  setbuf(0, 0) ;
568  return ;
569  }
570 
571  inline
573  {
574  if( this->is_open() )
575  {
576  this->close() ;
577  }
578  return ;
579  }
580 
581  inline
582  bool
584  {
585  return (-1 != mFileDescriptor) ;
586  }
587 
588  inline
589  std::streambuf*
590  SerialStreamBuf::setbuf(char_type *, std::streamsize)
591  {
592  return std::streambuf::setbuf(0, 0) ;
593  }
594 
595  inline
598  {
599  //
600  // Return a null pointer if the serial port is not currently open.
601  //
602  if( this->is_open() == false ) {
603  return 0 ;
604  }
605  //
606  // Otherwise, close the serial port and set the file descriptor
607  // to an invalid value.
608  //
609  if( -1 == ::close(mFileDescriptor) ) {
610  //
611  // If the close failed then return a null pointer.
612  //
613  return 0 ;
614  } else {
615  //
616  // Set the file descriptor to an invalid value, -1.
617  //
618  mFileDescriptor = -1 ;
619  //
620  // On success, return "this" as required by the C++ standard.
621  //
622  return this ;
623  }
624  }
625 
626  inline
627  std::streambuf::int_type
629  {
630  int_type next_ch = underflow() ;
631  mPutbackAvailable = false ;
632  return next_ch ;
633  }
634 
635  } // namespace LibSerial
636 } // extern "C++"
637 #endif // #ifndef _SerialStreamBuf_h_
int InitializeSerialPort()
This routine is called by open() in order to initialize some parameters of the serial port and settin...
FlowControlEnum
The values of the flow control settings for a serial port.
static const short DEFAULT_VTIME
The default character buffer timing.
const short VTime() const
Get the current timeout value for non-canonical reads in deciseconds.
int mFileDescriptor
The file descriptor associated with the serial port.
static const ParityEnum DEFAULT_PARITY
The default parity setting.
const BaudRateEnum BaudRate() const
Return the current baud rate of the serial port.
const ParityEnum Parity() const
Get the current parity setting for the serial port.
static const short DEFAULT_VMIN
The default character buffer size.
CharSizeEnum
The allowed values of character sizes that can be used during the serial communication.
virtual std::streamsize xsputn(const char_type *s, std::streamsize n)
Writes upto n characters from the character sequence at s to the serial port associated with the buff...
~SerialStreamBuf()
The destructor.
virtual int_type uflow()
Reads and returns the next character from the associated serial port if one otherwise returns traits:...
const short VMin() const
Get the VMIN value for the device.
short SetNumOfStopBits(short numOfStopBits)
Set the number of stop bits used during serial communication.
virtual std::streamsize showmanyc()
Check, wether input is available on the port.
static const CharSizeEnum DEFAULT_CHAR_SIZE
The default value of the character size used during the serial communication.
const short SetVTime(short vtime)
Set character buffer timeout in 10ths of a second.
static const FlowControlEnum DEFAULT_FLOW_CONTROL
The default flow control setting.
static const char CTRL_Q
Character used to signal that I/O can start while using software flow control with the serial port...
bool mPutbackAvailable
True if a putback value is available in mPutbackChar.
const BaudRateEnum SetBaudRate(const BaudRateEnum baudRate)
If is_open() != true, return -1.
SerialStreamBuf * open(const std::string filename, std::ios_base::openmode mode=std::ios_base::in|std::ios_base::out)
If is_open() != false, returns a null pointer.
BaudRateEnum
The baud rates currently supported by the SUS-2 general terminal interface specification.
7 bit characters.
Definition: SerialPort.h:88
const ParityEnum SetParity(const ParityEnum parityType)
Set the parity for serial communication.
const CharSizeEnum SetCharSize(const CharSizeEnum charSize)
Set the character size to be used during serial communication.
bool is_open() const
Returns true if a previous call to open() succeeded (returned a non-null value) and there has been no...
ParityEnum
The allowed values of the parity associated with the serial port communications.
int SetParametersToDefault()
Initialize the serial communication parameters to their default values.
No parity i.e. parity checking disabled.
Definition: SerialPort.h:102
const short SetVMin(short vtime)
Set the minimum number of characters for non-canonical reads.
This is the streambuf subclass used by SerialStream.
5 bit characters.
Definition: SerialPort.h:86
char mPutbackChar
We use unbuffered I/O for the serial port.
const FlowControlEnum FlowControl() const
Return the current flow control setting.
8 bit characters.
Definition: SerialPort.h:89
6 bit characters.
Definition: SerialPort.h:87
virtual std::streamsize xsgetn(char_type *s, std::streamsize n)
Reads upto n characters from the serial port and returns them through the character array located at ...
SerialStreamBuf & operator=(const SerialStreamBuf &)
SerialStreamBuf * close()
If is_open() == false, returns a null pointer.
virtual int_type underflow()
Reads and returns the next character from the associated serial port if one otherwise returns traits:...
short NumOfStopBits() const
Get the number of stop bits being used during serial communication.
static const short DEFAULT_NO_OF_STOP_BITS
The default number of stop bits used.
static const BaudRateEnum DEFAULT_BAUD
The default value of the baud rate of the serial port.
const CharSizeEnum CharSize() const
Return the character size currently being used for serial communication.
virtual std::streambuf * setbuf(char_type *, std::streamsize)
Performs an operation that is defined separately for each class derived from streambuf.
virtual int_type pbackfail(int_type c=traits_type::eof())
This function is called when a putback of a character fails.
static const char CTRL_S
Character used to signal that I/O should stop while using software flow control with the serial port...
const FlowControlEnum SetFlowControl(const FlowControlEnum flowControlType)
Use the specified flow control.
virtual int_type overflow(int_type c)
Writes the specified character to the associated serial port.
SerialStreamBuf()
The default constructor.