ComPort.h
00001
00002 #ifndef _COMPORT_H_
00003 #define _COMPORT_H_
00004
00005 #include <termios.h>
00006 #include <fcntl.h>
00007 #include <sys/ioctl.h>
00008 #include <string>
00009
00010 class ComPort
00011 {
00012 public:
00013 enum Speed
00014 {
00015 ComSpeed0=B0,
00016 ComSpeed50=B50,
00017 ComSpeed75=B75,
00018 ComSpeed110=B110,
00019 ComSpeed134=B134,
00020 ComSpeed150=B150,
00021 ComSpeed200=B200,
00022 ComSpeed300=B300,
00023 ComSpeed600=B600,
00024 ComSpeed1200=B1200,
00025 ComSpeed1800=B1800,
00026 ComSpeed2400=B2400,
00027 ComSpeed4800=B4800,
00028 ComSpeed9600=B9600,
00029 ComSpeed19200=B19200,
00030 ComSpeed38400=B38400,
00031 ComSpeed57600=B57600,
00032 ComSpeed115200=B115200,
00033 ComSpeed230400=B230400,
00034 ComSpeed460800=B460800,
00035 ComSpeed500000=B500000,
00036 ComSpeed576000=B576000,
00037 ComSpeed921600=B921600,
00038 ComSpeed1000000=B1000000,
00039 ComSpeed1152000=B1152000,
00040 ComSpeed1500000=B1500000,
00041 ComSpeed2000000=B2000000,
00042 ComSpeed2500000=B2500000,
00043 ComSpeed3000000=B3000000,
00044 ComSpeed3500000=B3500000,
00045 ComSpeed4000000=B4000000
00046 };
00047 enum Parity
00048 {
00049 Odd,
00050 Even,
00051 Space,
00052 Mark,
00053 NoParity
00054 };
00055 enum CharacterSize
00056 {
00057 CSize5=CS5,
00058 CSize6=CS6,
00059 CSize7=CS7,
00060 CSize8=CS8
00061 };
00062 enum StopBits
00063 {
00064 OneBit=1,
00065 OneAndHalfBits=2,
00066 TwoBits=3
00067 };
00068
00069 ComPort( const std::string comDevice, bool nocreate=false );
00070 virtual ~ComPort();
00071
00072 inline std::string getDevice(){ return dev; }
00073
00074 void setSpeed( Speed s );
00075 void setSpeed( std::string speed );
00076 inline Speed getSpeed(){ return speed; }
00077
00078 static Speed getSpeed( const std::string s );
00079 static std::string getSpeed( Speed s );
00080
00081 void setParity(Parity);
00082 void setCharacterSize(CharacterSize);
00083 void setStopBits(StopBits sBit);
00084
00085 virtual void setTimeout( int msec );
00086 inline int getTimeout(){ return uTimeout/1000; }
00087 void setWaiting( bool waiting );
00088
00089 virtual unsigned char receiveByte();
00090 virtual void sendByte(unsigned char x);
00091
00092 virtual int receiveBlock(unsigned char*msg,int len);
00093 virtual int sendBlock(unsigned char*msg,int len);
00094
00095 void setBlocking(bool blocking);
00096
00097 virtual void cleanupChannel();
00098 virtual void reopen();
00099
00100 protected:
00101 void openPort();
00102
00103 static const int BufSize=8192;
00104 unsigned char buf[BufSize];
00105 int curSym;
00106 int bufLength;
00107 int fd;
00108 int uTimeout;
00109 bool waiting;
00110 Speed speed;
00111 std::string dev;
00112
00113 virtual unsigned char m_receiveByte( bool wait );
00114
00115 private:
00116 struct termios oldTermios;
00117 };
00118
00119 #endif // _COMPORT_H_
00120