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 #ifndef MITKSERIALCOMMUNICATION_H_HEADER_INCLUDED_
00020 #define MITKSERIALCOMMUNICATION_H_HEADER_INCLUDED_
00021
00022 #include <MitkIGTExports.h>
00023 #include "mitkCommon.h"
00024 #include <itkObject.h>
00025 #include <itkObjectFactory.h>
00026
00027 #ifdef WIN32
00028 #include <windows.h>
00029 #else // Posix
00030 #include <termios.h>
00031 #endif
00032
00033 namespace mitk
00034 {
00035
00050 class MitkIGT_EXPORT SerialCommunication : public itk::Object
00051 {
00052 public:
00053 mitkClassMacro(SerialCommunication, itk::Object);
00054 itkNewMacro(Self);
00055
00056 enum PortNumber
00057 {
00058 COM1 = 1,
00059 COM2 = 2,
00060 COM3 = 3,
00061 COM4 = 4,
00062 COM5 = 5,
00063 COM6 = 6,
00064 COM7 = 7,
00065 COM8 = 8,
00066 COM9 = 9
00067 };
00068
00069 enum BaudRate
00070 {
00071 BaudRate9600 = 9600,
00072 BaudRate14400 = 14400,
00073 BaudRate19200 = 19200,
00074 BaudRate38400 = 38400,
00075 BaudRate57600 = 57600,
00076 BaudRate115200 = 115200
00077 };
00078
00079 enum DataBits
00080 {
00081 DataBits8 = 8,
00082 DataBits7 = 7
00083 };
00084
00085 enum Parity
00086 {
00087 None = 'N',
00088 Odd = 'O',
00089 Even = 'E'
00090 };
00091
00092 enum StopBits
00093 {
00094 StopBits1 = 1,
00095 StopBits2 = 2
00096 };
00097
00098 enum HardwareHandshake
00099 {
00100 HardwareHandshakeOn = 1,
00101 HardwareHandshakeOff = 0
00102 };
00103
00109 int OpenConnection();
00114 void CloseConnection();
00115
00127 int Receive(std::string& answer, unsigned int numberOfBytes);
00134 int Send(const std::string& input);
00135
00139 void SendBreak(unsigned int ms = 400);
00140
00144 void ClearReceiveBuffer();
00145
00149 void ClearSendBuffer();
00150
00157 itkGetConstMacro(PortNumber, PortNumber);
00158
00170 itkSetMacro(PortNumber, PortNumber);
00171
00180 itkGetStringMacro(DeviceName);
00181
00190 itkSetStringMacro(DeviceName);
00191
00195 itkGetConstMacro(BaudRate, BaudRate);
00196
00200 itkSetMacro(BaudRate, BaudRate);
00201
00205 itkGetConstMacro(DataBits, DataBits);
00206
00210 itkSetMacro(DataBits, DataBits);
00211
00215 itkGetConstMacro(Parity, Parity);
00216
00220 itkSetMacro(Parity, Parity);
00221
00225 itkGetConstMacro(StopBits, StopBits);
00226
00230 itkSetMacro(StopBits, StopBits);
00231
00235 itkGetConstMacro(HardwareHandshake, HardwareHandshake);
00236
00240 itkSetMacro(HardwareHandshake, HardwareHandshake);
00241
00245 itkGetConstMacro(SendTimeout, unsigned int);
00246
00250 itkSetMacro(SendTimeout, unsigned int);
00251
00255 itkGetConstMacro(ReceiveTimeout, unsigned int);
00256
00264 itkSetMacro(ReceiveTimeout, unsigned int);
00265
00266 protected:
00267 SerialCommunication();
00268 virtual ~SerialCommunication();
00269
00273 int ApplyConfiguration();
00274
00275 std::string m_DeviceName;
00276 PortNumber m_PortNumber;
00277 BaudRate m_BaudRate;
00278 DataBits m_DataBits;
00279 Parity m_Parity;
00280 StopBits m_StopBits;
00281 HardwareHandshake m_HardwareHandshake;
00282 unsigned int m_ReceiveTimeout;
00283 unsigned int m_SendTimeout;
00284
00285 bool m_Connected;
00286
00287 #ifdef WIN32
00288 HANDLE m_ComPortHandle;
00289 DWORD m_PreviousMask;
00290 COMMTIMEOUTS m_PreviousTimeout;
00291 DCB m_PreviousDeviceControlBlock;
00292 #else
00293 int m_FileDescriptor;
00294 #endif
00295 };
00296
00297 }
00298 #endif