port.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef __PORT_H
00030 #define __PORT_H
00031
00032 #include <string>
00033 #include <map>
00034
00035 #if defined (WIN32)
00036 #if defined (FLEXIPORT_STATIC)
00037 #define FLEXIPORT_EXPORT
00038 #elif defined (flexiport_EXPORTS)
00039 #define FLEXIPORT_EXPORT __declspec (dllexport)
00040 #else
00041 #define FLEXIPORT_EXPORT __declspec (dllimport)
00042 #endif
00043 #else
00044 #define FLEXIPORT_EXPORT
00045 #endif
00046
00047 #include <flexiport/flexiport_types.h>
00048 #include <flexiport/timeout.h>
00049
00054 namespace flexiport
00055 {
00056
00081 class FLEXIPORT_EXPORT Port
00082 {
00083 public:
00084 virtual ~Port ();
00085
00086
00088 virtual void Open () = 0;
00089
00091 virtual void Close () = 0;
00092
00107 virtual ssize_t Read (void * const buffer, size_t count) = 0;
00108
00119 virtual ssize_t ReadFull (void * const buffer, size_t count) = 0;
00120
00127 virtual ssize_t ReadString (std::string &buffer);
00128
00146 virtual ssize_t ReadUntil (void * const buffer, size_t count, uint8_t terminator);
00147
00167 virtual ssize_t ReadStringUntil (std::string &buffer, char terminator);
00168
00197 virtual ssize_t ReadLine (char * const buffer, size_t count);
00198
00217 virtual ssize_t ReadLine (std::string &buffer) { return ReadStringUntil (buffer, '\n'); }
00218
00223 virtual ssize_t Skip (size_t count);
00224
00230 virtual ssize_t SkipUntil (uint8_t terminator, unsigned int count);
00231
00236 virtual ssize_t BytesAvailable () = 0;
00237
00245 virtual ssize_t BytesAvailableWait () = 0;
00246
00257 virtual ssize_t Write (const void * const buffer, size_t count) = 0;
00258
00266 virtual ssize_t WriteFull (const void * const buffer, size_t count);
00267
00278 virtual ssize_t WriteString (const char * const buffer);
00279 virtual ssize_t WriteString (const std::string &buffer)
00280 { return WriteString (buffer.c_str ()); }
00281
00283 virtual void Flush () = 0;
00284
00289 virtual void Drain () = 0;
00290
00292 virtual std::string GetStatus () const;
00293
00294
00296 std::string GetPortType () const { return _type; }
00298 void SetDebug (int debug) { _debug = debug; }
00300 int GetDebug () const { return _debug; }
00308 virtual void SetTimeout (Timeout timeout) = 0;
00310 virtual Timeout GetTimeout () const { return _timeout; }
00313 virtual bool IsBlocking () const { return (_timeout._sec != 0 ||
00314 _timeout._usec != 0); }
00316 virtual void SetCanRead (bool canRead) = 0;
00318 virtual bool CanRead () const { return _canRead; }
00320 virtual void SetCanWrite (bool canWrite) = 0;
00322 virtual bool CanWrite () const { return _canWrite; }
00324 virtual bool IsOpen () const = 0;
00325
00326 protected:
00327 std::string _type;
00328 unsigned int _debug;
00329 Timeout _timeout;
00330 bool _canRead;
00331 bool _canWrite;
00332 bool _alwaysOpen;
00333
00334
00335
00336 Port ();
00337
00338 Port (unsigned int debug, Timeout timeout, bool canRead, bool canWrite, bool alwaysOpen);
00339
00340 void ProcessOptions (const std::map<std::string, std::string> &options);
00341 virtual bool ProcessOption (const std::string &option, const std::string &value);
00342 virtual void CheckPort (bool read) = 0;
00343
00344 private:
00345
00346 Port (const Port&);
00347 void operator= (const Port&);
00348 };
00349
00350 }
00351
00354 #endif // __PORT_H
00355