Bayonne2 / Common C++ 2 Framework: serial.h Source File

Bayonne2 / Common C++ 2 Framework
serial.h
Go to the documentation of this file.
1 // Copyright (C) 1999-2005 Open Source Telecom Corporation.
2 // Copyright (C) 2006-2010 David Sugar, Tycho Softworks.
3 //
4 // This program is free software; you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation; either version 2 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 //
18 // As a special exception, you may use this file as part of a free software
19 // library without restriction. Specifically, if other files instantiate
20 // templates or use macros or inline functions from this file, or you compile
21 // this file and link it with other files to produce an executable, this
22 // file does not by itself cause the resulting executable to be covered by
23 // the GNU General Public License. This exception does not however
24 // invalidate any other reasons why the executable file might be covered by
25 // the GNU General Public License.
26 //
27 // This exception applies only to the code released under the name GNU
28 // Common C++. If you copy code from other releases into a copy of GNU
29 // Common C++, as the General Public License permits, the exception does
30 // not apply to the code that you add in this way. To avoid misleading
31 // anyone as to the status of such modified files, you must delete
32 // this exception notice from them.
33 //
34 // If you write modifications of your own for GNU Common C++, it is your choice
35 // whether to permit this exception to apply to your modifications.
36 // If you do not wish that, delete this exception notice.
37 //
38 
44 #ifndef CCXX_SERIAL_H_
45 #define CCXX_SERIAL_H_
46 
47 #ifndef CCXX_MISSING_H_
48 #include <cc++/missing.h>
49 #endif
50 
51 #ifndef CCXX_THREAD_H_
52 #include <cc++/thread.h>
53 #endif
54 
55 #ifndef CCXX_EXCEPTION_H_
56 #include <cc++/exception.h>
57 #endif
58 
59 #ifndef WIN32
60  typedef int HANDLE;
61  #define INVALID_HANDLE_VALUE (-1)
62 #endif
63 
64 #ifdef CCXX_NAMESPACES
65 namespace ost {
66 #endif
67 
98  class __EXPORT Serial
99 {
100 public:
101   enum Error {
102   errSuccess = 0,
103   errOpenNoTty,
104   errOpenFailed,
105   errSpeedInvalid,
106   errFlowInvalid,
107   errParityInvalid,
108   errCharsizeInvalid,
109   errStopbitsInvalid,
110   errOptionInvalid,
111   errResourceFailure,
112   errOutput,
113   errInput,
114   errTimeout,
115   errExtended
116  };
117   typedef enum Error Error;
118 
119   enum Flow {
120   flowNone,
121   flowSoft,
122   flowHard,
123   flowBoth
124  };
125   typedef enum Flow Flow;
126 
127   enum Parity {
128   parityNone,
129   parityOdd,
130   parityEven
131  };
132   typedef enum Parity Parity;
133 
134   enum Pending {
135   pendingInput,
136   pendingOutput,
137   pendingError
138  };
139   typedef enum Pending Pending;
140 
141 private:
142   Error errid;
143   char *errstr;
144 
145  struct {
146   bool thrown: 1;
147   bool linebuf: 1;
148  } flags;
149 
150   void * original;
151   void * current;
152 
156  void initSerial(void);
157 
158 protected:
159 
160   HANDLE dev;
161 
162   int bufsize;
163 
169  void open(const char *fname);
170 
175  void close(void);
176 
184  virtual int aRead(char * Data, const int Length);
185 
192  virtual int aWrite(const char * Data, const int Length);
193 
201  Error error(Error error, char *errstr = NULL);
202 
209   inline void error(char *err)
210  {error(errExtended, err);};
211 
212 
219   inline void setError(bool enable)
220  {flags.thrown = !enable;};
221 
232  int setPacketInput(int size, unsigned char btimer = 0);
233 
243  int setLineInput(char newline = 13, char nl1 = 0);
244 
248  void restore(void);
249 
253  void flushInput(void);
254 
258  void flushOutput(void);
259 
263  void waitOutput(void);
264 
269  void endSerial(void);
270 
276  void initConfig(void);
277 
282   Serial()
283  {initSerial();};
284 
291  Serial(const char *name);
292 
293 
294 public:
295 
302  virtual ~Serial();
303 
308  Serial &operator=(const Serial &from);
309 
316  Error setSpeed(unsigned long speed);
317 
324  Error setCharBits(int bits);
325 
332  Error setParity(Parity parity);
333 
340  Error setStopBits(int bits);
341 
348  Error setFlowControl(Flow flow);
349 
355  void toggleDTR(timeout_t millisec);
356 
360  void sendBreak(void);
361 
368   inline Error getErrorNumber(void)
369  {return errid;};
370 
377   inline char *getErrorString(void)
378  {return errstr;};
379 
387   inline int getBufferSize(void)
388  {return bufsize;};
389 
399  virtual bool isPending(Pending pend, timeout_t timeout = TIMEOUT_INF);
400 };
401 
423  class __EXPORT TTYStream : protected std::streambuf, public Serial, public std::iostream
424 {
425 private:
426  int doallocate();
427 
428  friend TTYStream& crlf(TTYStream&);
429  friend TTYStream& lfcr(TTYStream&);
430 
431 protected:
432   char *gbuf, *pbuf;
433   timeout_t timeout;
434 
439  TTYStream();
440 
445  void allocate(void);
446 
451  void endStream(void);
452 
459  int underflow(void);
460 
469  int uflow(void);
470 
478  int overflow(int ch);
479 
480 public:
487  TTYStream(const char *filename, timeout_t to = 0);
488 
492  virtual ~TTYStream();
493 
499   inline void setTimeout(timeout_t to)
500  {timeout = to;};
501 
509  void interactive(bool flag);
510 
517  int sync(void);
518 
530  bool isPending(Pending pend, timeout_t timeout = TIMEOUT_INF);
531 };
532 
542  class __EXPORT ttystream : public TTYStream
543 {
544 public:
548  ttystream();
549 
557  ttystream(const char *name);
558 
564  void open(const char *name);
565 
569  void close(void);
570 
574   inline bool operator!()
575  {return (dev < 0);};
576 };
577 
588  class __EXPORT TTYSession : public Thread, public TTYStream
589 {
590 public:
598  TTYSession(const char *name, int pri = 0, int stack = 0);
599 
600  virtual ~TTYSession();
601 };
602 
603 #ifndef WIN32
604 
605 // Not support this right now.......
606 //
607  class __EXPORT SerialPort;
608  class __EXPORT SerialService;
609 
631  class __EXPORT SerialPort: public Serial, public TimerPort
632 {
633 private:
634   SerialPort *next, *prev;
635   SerialService *service;
636 #ifdef USE_POLL
637  struct pollfd *ufd;
638 #endif
639   bool detect_pending;
640   bool detect_output;
641   bool detect_disconnect;
642 
643   friend class SerialService;
644 
645 protected:
652  SerialPort(SerialService *svc, const char *name);
653 
658  virtual ~SerialPort();
659 
664  void setDetectPending( bool );
665 
669   inline bool getDetectPending( void ) const
670 { return detect_pending; }
671 
676  void setDetectOutput( bool );
677 
681   inline bool getDetectOutput( void ) const
682 { return detect_output; }
683 
688  virtual void expired(void);
689 
695  virtual void pending(void);
696 
701  virtual void disconnect(void);
702 
712   inline int output(void *buf, int len)
713  {return aWrite((char *)buf, len);};
714 
718  virtual void output(void);
719 
729   inline int input(void *buf, int len)
730  {return aRead((char *)buf, len);};
731 public:
739  void setTimer(timeout_t timeout = 0);
740 
746  void incTimer(timeout_t timeout);
747 };
748 
771  class __EXPORT SerialService : public Thread, private Mutex
772 {
773 private:
774   fd_set connect;
775   int iosync[2];
776   int hiwater;
777   int count;
778   SerialPort *first, *last;
779 
785  void attach(SerialPort *port);
786 
792  void detach(SerialPort *port);
793 
797  void run(void);
798 
799   friend class SerialPort;
800 
801 protected:
808  virtual void onUpdate(unsigned char flag);
809 
814  virtual void onEvent(void);
815 
822  virtual void onCallback(SerialPort *port);
823 
824 public:
834  void update(unsigned char flag = 0xff);
835 
844  SerialService(int pri = 0, size_t stack = 0, const char *id = NULL);
845 
849  virtual ~SerialService();
850 
857   inline int getCount(void)
858  {return count;};
859 };
860 
861 #endif
862 
863 
864 
865 #ifdef COMMON_STD_EXCEPTION
866 class __EXPORT SerException : public IOException
867 {
868 public:
869  SerException(const String &str) : IOException(str) {};
870 };
871 #endif
872 
873 #ifdef CCXX_NAMESPACES
874 }
875 #endif
876 
877 #endif
878 
Serial::Flow
Flow
Definition: serial.h:119
SerialService::connect
fd_set connect
Definition: serial.h:774
Serial::errid
Error errid
Definition: serial.h:142
HANDLE
int HANDLE
Definition: serial.h:60
SerialService::last
SerialPort * last
Definition: serial.h:778
TTYSession
The TTYSession aggragates a TTYStream and a Common C++ Thread which is assumed to be the execution co...
Definition: serial.h:588
error
__EXPORT AppLog & error(AppLog &sl)
Manipulator for error level.
Definition: applog.h:541
ttystream::operator!
bool operator!()
Test to see if stream is opened.
Definition: serial.h:574
SerialPort::detect_pending
bool detect_pending
Definition: serial.h:639
SerialService::count
int count
Definition: serial.h:777
SerialService::getCount
int getCount(void)
Get current reference count.
Definition: serial.h:857
Serial::errstr
char * errstr
Definition: serial.h:143
Serial::Serial
Serial()
This allows later ttystream class to open and close a serial device.
Definition: serial.h:282
missing.h
substitute functions which may be missing in target platform libc.
TIMEOUT_INF
#define TIMEOUT_INF
Definition: thread.h:115
Mutex
The Mutex class is used to protect a section of code so that at any given time only a single thread c...
Definition: thread.h:186
SerialPort::input
int input(void *buf, int len)
Receive "input" for pending data from the serial port.
Definition: serial.h:729
String
This is a generic and portable string class.
Definition: string.h:77
SerialPort::output
int output(void *buf, int len)
Transmit "send" data to the serial port.
Definition: serial.h:712
exception.h
GNU Common C++ exception model base classes.
timeout_t
unsigned long timeout_t
Definition: thread.h:74
TTYStream
TTY streams are used to represent serial connections that are fully "streamable" objects using C++ st...
Definition: serial.h:423
SerialPort::getDetectPending
bool getDetectPending(void) const
Get the current state of the DetectPending flag.
Definition: serial.h:669
thread.h
Synchronization and threading services.
SerialService
The SerialService is a thead service object that is meant to service attached serial ports...
Definition: serial.h:771
SerialPort::detect_output
bool detect_output
Definition: serial.h:640
TTYStream::pbuf
char * pbuf
Definition: serial.h:432
Serial::getErrorNumber
Error getErrorNumber(void)
Often used by a "catch" to fetch the last error of a thrown serial.
Definition: serial.h:368
Serial::getErrorString
char * getErrorString(void)
Often used by a "catch" to fetch the user set error string of a thrown serial.
Definition: serial.h:377
Serial::dev
HANDLE dev
Definition: serial.h:160
Serial::Parity
Parity
Definition: serial.h:127
Serial::original
void * original
Definition: serial.h:150
SerialService
class __EXPORT SerialService
Definition: serial.h:608
Serial::bufsize
int bufsize
Definition: serial.h:162
SerialPort::getDetectOutput
bool getDetectOutput(void) const
Get the current state of the DetectOutput flag.
Definition: serial.h:681
__EXPORT
#define __EXPORT
Definition: audio2.h:51
TTYStream::timeout
timeout_t timeout
Definition: serial.h:433
Serial::getBufferSize
int getBufferSize(void)
Get the "buffer" size for buffered operations.
Definition: serial.h:387
Serial
The Serial class is used as the base for all serial I/O services under APE.
Definition: serial.h:98
SerialPort::prev
SerialPort * prev
Definition: serial.h:634
Serial::error
void error(char *err)
This service is used to thow application defined serial errors where the application specific error c...
Definition: serial.h:209
Thread
Every thread of execution in an application is created by instantiating an object of a class derived ...
Definition: thread.h:1093
SerialService::hiwater
int hiwater
Definition: serial.h:776
Serial::setError
void setError(bool enable)
This method is used to turn the error handler on or off for "throwing" execptions by manipulating the...
Definition: serial.h:219
SerialPort::detect_disconnect
bool detect_disconnect
Definition: serial.h:641
TimerPort
Timer ports are used to provide synchronized timing events when managed under a "service thread" such...
Definition: thread.h:1759
Serial::Error
Error
Definition: serial.h:101
ttystream
A more natural C++ "ttystream" class for use by non-threaded applications.
Definition: serial.h:542
Serial::Pending
Pending
Definition: serial.h:134
Serial::current
void * current
Definition: serial.h:151
TTYStream::setTimeout
void setTimeout(timeout_t to)
Set the timeout control.
Definition: serial.h:499
SerialPort
The serial port is an internal class which is attached to and then serviced by a specified SerialServ...
Definition: serial.h:631
SerialPort::service
SerialService * service
Definition: serial.h:635
SerialPort
class __EXPORT SerialPort
Definition: serial.h:607

Generated on Dec 21, 2017 for commoncpp2-1.8.1, ccrtp-1.7.2, libzrtpcpp-2.3.4, ccscript3-1.1.7, ccaudio2-1.0.0 and bayonne2-2.3.2 (after installation in /usr/local/) by   doxygen 1.8.6

AltStyle によって変換されたページ (->オリジナル) /