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
00030
00031
00032 #ifndef SerialConnectionH
00033 #define SerialConnectionH
00034
00035 #include <zeusbase/System/Interfaces/IInputStream.hpp>
00036 #include <zeusbase/System/Interfaces/IOutputStream.hpp>
00037 #include <zeusbase/System/ZObject.h>
00038
00039 #if defined(ENABLE_LINUX_BINDING)
00040 #include <termios.h>
00041
00042
00043 #define MS_CTS_ON 0x0010
00044 #define MS_DSR_ON 0x0020
00045 #define MS_RING_ON 0x0040
00046 #define MS_RLSD_ON 0x0080
00047 #endif
00048
00049
00050 BEGIN_NAMESPACE_Zeus
00051
00052
00056
00057 zeusbase_class TSerialConnection : public TZObject, public IInputStream, public IOutputStream
00058 {
00059 public:
00060
00063
00064 enum EBaudRate
00065 {
00066 etBR_0 = 0,
00067 etBR_50 = 50,
00068 etBR_75 = 75,
00069 etBR_110 = 110,
00070 etBR_134 = 134,
00071 etBR_150 = 500,
00072 etBR_200 = 200,
00073 etBR_300 = 300,
00074 etBR_600 = 600,
00075 etBR_1200 = 1200,
00076 etBR_1800 = 1800,
00077 etBR_2400 = 2400,
00078 etBR_4800 = 4800,
00079 etBR_9600 = 9600,
00080 etBR_14400 = 14400,
00081 etBR_19200 = 19200,
00082 etBR_38400 = 38400,
00083 etBR_56000 = 56000,
00084 etBR_57600 = 57600,
00085 etBR_76800 = 76800,
00086 etBR_115200 = 115200,
00087 etBR_128000 = 128000,
00088 etBR_256000 = 256000
00089 };
00090
00091
00094
00095 enum EParity
00096 {
00097 etNone = 0,
00098 etOdd = 1,
00099 etEven = 2,
00100 etMark = 3,
00101 etSpace = 4
00102 };
00103
00104
00107
00108 enum EStopBits
00109 {
00110 etOne = 0,
00111 etOneHalf = 1,
00112 etTwo = 2
00113 };
00114
00115
00118
00119 enum EModemStatus
00120 {
00121 etCTS = MS_CTS_ON,
00122 etDSR = MS_DSR_ON,
00123 etRING = MS_RING_ON,
00124 etRLSD = MS_RLSD_ON
00125 };
00126
00127 TSerialConnection(Uint uiPort);
00128
00129 virtual Retval connect(Uint* pdwLastError = NULL);
00130 virtual Retval disconnect();
00131
00132
00133 Uint8 getByteSize() const;
00134 Uint getPort() const;
00135 EBaudRate getBaudrate() const;
00136 EParity getParity() const;
00137 EStopBits getStopBits() const;
00138
00139 bool isBlockable() const;
00140 bool isConnected() const;
00141 bool hasHardwareFlowControl() const;
00142 bool hasSoftwareFlowControl() const;
00143
00144 void setBlockable(bool bMode);
00145 void setByteSize(Uint8 ucValue);
00146 void setBaudrate(EBaudRate eValue);
00147 void setHardwareFlowControl(bool bValue);
00148 void setSoftwareFlowControl(bool bValue);
00149 void setParity(EParity eValue);
00150 void setStopBits(EStopBits eValue);
00151
00152 Retval getModemStatus(Uint& ruiModemStatus);
00153 Retval getModemStatusBit(EModemStatus eModemStatus, bool& rbBit);
00154
00155
00156 virtual bool MQUALIFIER available() const { return isConnected(); }
00157 virtual bool MQUALIFIER isEndReached() const { return !isConnected(); }
00158 virtual Retval MQUALIFIER read(char* pBuffer, Int iBufferSize, Int& rValidSize) const;
00159 virtual Int MQUALIFIER readItem() const;
00160 virtual Int8 MQUALIFIER readInt8(BOOL_ERRORRETVAL(pError)) const;
00161 virtual Int16 MQUALIFIER readInt16(BOOL_ERRORRETVAL(pError)) const;
00162 virtual Int32 MQUALIFIER readInt32(BOOL_ERRORRETVAL(pError)) const;
00163 virtual Int64 MQUALIFIER readInt64(BOOL_ERRORRETVAL(pError)) const;
00164 virtual Uint8 MQUALIFIER readUint8(BOOL_ERRORRETVAL(pError)) const;
00165 virtual Uint16 MQUALIFIER readUint16(BOOL_ERRORRETVAL(pError)) const;
00166 virtual Uint32 MQUALIFIER readUint32(BOOL_ERRORRETVAL(pError)) const;
00167 virtual Uint64 MQUALIFIER readUint64(BOOL_ERRORRETVAL(pError)) const;
00168 virtual Float64 MQUALIFIER readFloat64(BOOL_ERRORRETVAL(pError)) const;
00169 virtual Float32 MQUALIFIER readFloat32(BOOL_ERRORRETVAL(pError)) const;
00170 virtual bool MQUALIFIER readBool(BOOL_ERRORRETVAL(pError)) const;
00171 virtual Retval MQUALIFIER readArray(IByteArray& rData) const;
00172 virtual Retval MQUALIFIER readString(IString& rstrData) const;
00173 virtual void MQUALIFIER close() { disconnect(); }
00174 virtual void MQUALIFIER reset();
00175 virtual bool MQUALIFIER skip(Int iBytes = 1);
00176
00177
00178 virtual Retval MQUALIFIER write(const char* pBuffer, Int iBufferSize);
00179 virtual Retval MQUALIFIER writeInt8(Int8 cData);
00180 virtual Retval MQUALIFIER writeInt16(Int16 sData);
00181 virtual Retval MQUALIFIER writeInt32(Int32 lData);
00182 virtual Retval MQUALIFIER writeInt64(const Int64& rldData);
00183 virtual Retval MQUALIFIER writeUint8(Uint8 ucData);
00184 virtual Retval MQUALIFIER writeUint16(Uint16 usData);
00185 virtual Retval MQUALIFIER writeUint32(Uint32 ulData);
00186 virtual Retval MQUALIFIER writeUint64(const Uint64& ruldData);
00187 virtual Retval MQUALIFIER writeFloat32(Float32 fData);
00188 virtual Retval MQUALIFIER writeFloat64(const Float64& rdData);
00189 virtual Retval MQUALIFIER writeBool(bool bData);
00190 virtual Retval MQUALIFIER writeArray(const IByteArray& rData);
00191 virtual Retval MQUALIFIER writeString(const IString& rData);
00192 virtual void MQUALIFIER flush() {}
00193
00194
00195 MEMORY_MANAGER_DECL
00196
00197 protected:
00198 virtual ~TSerialConnection();
00199
00200 private:
00202 Uint m_uiPort;
00204 bool m_bBlockable;
00206 EBaudRate m_eBaudRate;
00208 EParity m_eParity;
00210 EStopBits m_eStopBits;
00212 bool m_bEnableHWFlowControl;
00214 bool m_bEnableSWFlowControl;
00216 Uint8 m_ucByteSize;
00218 bool m_bUseDefaultSettings;
00219
00220 #if defined(ENABLE_WIN32_BINDING)
00221
00222 HANDLE m_hConnection;
00223 #elif defined(ENABLE_LINUX_BINDING)
00224
00225 int m_iConnection;
00227 struct termios m_OldTIO;
00228
00229 static EBaudRate getBaudrate_internal(struct termios& rOptions);
00230 static void setBaudrate_internal(struct termios& rOptions, EBaudRate eBaudRate);
00231 static void setByteSize_internal(struct termios& rOptions, Uint ucByteSize);
00232 static void setParity_internal(struct termios& rOptions, EParity eParity);
00233 static void setStopBits_internal(struct termios& rOptions, EStopBits eStopBits);
00234
00235 #endif
00236 };
00237
00238
00239
00242
00243 inline Uint8 TSerialConnection::getByteSize() const
00244 {
00245 return m_ucByteSize;
00246 }
00247
00248
00251
00252 inline Uint TSerialConnection::getPort() const
00253 {
00254 return m_uiPort;
00255 }
00256
00257
00260
00261 inline TSerialConnection::EBaudRate TSerialConnection::getBaudrate() const
00262 {
00263 return m_eBaudRate;
00264 }
00265
00266
00269
00270 inline TSerialConnection::EParity TSerialConnection::getParity() const
00271 {
00272 return m_eParity;
00273 }
00274
00275
00278
00279 inline TSerialConnection::EStopBits TSerialConnection::getStopBits() const
00280 {
00281 return m_eStopBits;
00282 }
00283
00284
00287
00288 inline bool TSerialConnection::hasHardwareFlowControl() const
00289 {
00290 return m_bEnableHWFlowControl;
00291 }
00292
00293
00296
00297 inline bool TSerialConnection::hasSoftwareFlowControl() const
00298 {
00299 return m_bEnableSWFlowControl;
00300 }
00301
00302
00307
00308 inline bool TSerialConnection::isBlockable() const
00309 {
00310 return m_bBlockable;
00311 }
00312
00313
00316
00317 inline bool TSerialConnection::isConnected() const
00318 {
00319 #if defined(ENABLE_WIN32_BINDING)
00320 return (m_hConnection != NULL);
00321 #elif defined(ENABLE_LINUX_BINDING)
00322 return (m_iConnection != -1);
00323 #endif
00324 }
00325
00326
00329
00330 inline void TSerialConnection::setByteSize(Uint8 ucValue)
00331 {
00332 m_ucByteSize = ucValue;
00333 m_bUseDefaultSettings = false;
00334 }
00335
00336
00339
00340 inline void TSerialConnection::setBaudrate(EBaudRate eValue)
00341 {
00342 m_eBaudRate = eValue;
00343 m_bUseDefaultSettings = false;
00344 }
00345
00346
00349
00350 inline void TSerialConnection::setHardwareFlowControl(bool bValue)
00351 {
00352 m_bEnableHWFlowControl = bValue;
00353 m_bUseDefaultSettings = false;
00354 }
00355
00356
00359
00360 inline void TSerialConnection::setSoftwareFlowControl(bool bValue)
00361 {
00362 m_bEnableSWFlowControl = bValue;
00363 m_bUseDefaultSettings = false;
00364 }
00365
00366
00369
00370 inline void TSerialConnection::setParity(EParity eValue)
00371 {
00372 m_eParity = eValue;
00373 m_bUseDefaultSettings = false;
00374 }
00375
00376
00379
00380 inline void TSerialConnection::setStopBits(EStopBits eValue)
00381 {
00382 m_eStopBits = eValue;
00383 m_bUseDefaultSettings = false;
00384 }
00385
00386
00389
00390 inline Uint8 MQUALIFIER TSerialConnection::readUint8(bool* pError) const
00391 {
00392 return static_cast<Uint8>(readInt8(pError));
00393 }
00394
00395
00398
00399 inline Uint16 MQUALIFIER TSerialConnection::readUint16(bool* pError) const
00400 {
00401 return static_cast<Uint16>(readInt16(pError));
00402 }
00403
00404
00407
00408 inline Uint32 MQUALIFIER TSerialConnection::readUint32(bool* pError) const
00409 {
00410 return static_cast<Uint32>(readInt32(pError));
00411 }
00412
00413
00416
00417 inline Uint64 MQUALIFIER TSerialConnection::readUint64(bool* pError) const
00418 {
00419 return static_cast<Uint64>(readInt64(pError));
00420 }
00421
00422
00425
00426 inline bool MQUALIFIER TSerialConnection::readBool(bool* pError) const
00427 {
00428 return (readInt8(pError) != 0 );
00429 }
00430
00431
00434
00435 inline Retval MQUALIFIER TSerialConnection::writeUint8(Uint8 ucData)
00436 {
00437 return writeInt8(static_cast<Int8>(ucData));
00438 }
00439
00440
00443
00444 inline Retval MQUALIFIER TSerialConnection::writeUint16(Uint16 usData)
00445 {
00446 return writeInt16(static_cast<Int16>(usData));
00447 }
00448
00449
00452
00453 inline Retval MQUALIFIER TSerialConnection::writeUint32(Uint32 ulData)
00454 {
00455 return writeInt32(static_cast<Int32>(ulData));
00456 }
00457
00458
00461
00462 inline Retval MQUALIFIER TSerialConnection::writeUint64(const Uint64& ruldData)
00463 {
00464 return writeInt64(static_cast<Int64>(ruldData));
00465 }
00466
00467
00470
00471 inline Retval MQUALIFIER TSerialConnection::writeBool(bool bData)
00472 {
00473 return writeInt8(static_cast<Int8>(bData));
00474 }
00475
00476 END_NAMESPACE_Zeus
00477
00478 #endif