00001
00028
00029
00030 #ifndef TCP_SERIAL_H_
00031 #define TCP_SERIAL_H_
00032
00033
00034
00035
00036
00037 #if SDH_USE_VCC
00038 # include <sys/timeb.h>
00039 # include <time.h>
00040 # include <winsock.h>
00041 #else
00042 # include <sys/time.h>
00043 #endif
00044 #include <string>
00045
00046
00047
00048
00049
00050 #include "sdhexception.h"
00051 #include "serialbase.h"
00052 #include "basisdef.h"
00053
00054 #include "sdhlibrary_settings.h"
00055
00056
00057
00058
00059
00060 NAMESPACE_SDH_START
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00075 class VCC_EXPORT cTCPSerialException: public cSerialBaseException
00076 {
00077 public:
00078 cTCPSerialException( cMsg const & _msg )
00079 : cSerialBaseException( "cTCPSerialException", _msg )
00080 {}
00081 };
00082
00083
00084
00088 class VCC_EXPORT cTCPSerial : public cSerialBase
00089 {
00090
00091 protected:
00092
00093 std::string tcp_adr;
00094
00096 int tcp_port;
00097
00099 #if SDH_USE_VCC
00100 SOCKET fd;
00101 #else
00102 int fd;
00103 static const int INVALID_SOCKET = -1;
00104 #endif
00105 private:
00107 struct timeval timeout_timeval;
00109 long timeout_us;
00110
00111 public:
00112 static double const TIMEOUT_WAIT_FOR_EVER_S;
00113 static double const TIMEOUT_RETURN_IMMEDITELY_S;
00114 static long const TIMEOUT_WAIT_FOR_EVER_US;
00115 static long const TIMEOUT_RETURN_IMMEDITELY_US;
00116
00126 cTCPSerial( char const* _tcp_adr, int _tcp_port, double _timeout )
00127 throw (cTCPSerialException*);
00128
00132 void Open( void )
00133 throw (cTCPSerialException*);
00134
00136 bool IsOpen( void )
00137 throw();
00138
00140 void Close( void )
00141 throw (cTCPSerialException*);
00142
00144
00152 int write( char const *ptr, int len=0 )
00153 throw (cTCPSerialException*);
00154
00163 ssize_t Read( void *data, ssize_t size, long timeout_us, bool return_on_less_data )
00164 throw (cTCPSerialException*);
00165
00167 void SetTimeout( double _timeout )
00168 throw (cSerialBaseException*);
00169
00173 virtual tErrorCode GetErrorNumber()
00174 {
00175 #if SDH_USE_VCC
00176 return WSAGetLastError();
00177 #else
00178 return errno;
00179 #endif
00180 }
00181 };
00182
00183
00184 NAMESPACE_SDH_END
00185
00186 #endif
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199