Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef SERIALDEVICE_H_
00009 #define SERIALDEVICE_H_
00010
00011 #include <telekyb_defines/telekyb_defines.hpp>
00012
00013 #include <telekyb_serial/SerialException.h>
00014
00015
00016 #include <fcntl.h>
00017 #include <termios.h>
00018
00019
00020 #include <iostream>
00021
00022
00023 #include <boost/thread/mutex.hpp>
00024
00025
00026
00027 #define DEFAULT_BUFFERSIZE 1024
00028 #define BUNDEF 0111111
00029
00030 namespace TELEKYB_NAMESPACE
00031 {
00032
00033
00034 class SerialDevice {
00035 protected:
00036 std::string deviceName;
00037
00038 int deviceFD;
00039 struct termios deviceAttr;
00040
00041
00042 mutable boost::mutex readMutex;
00043 boost::mutex writeMutex;
00044
00045 public:
00046 SerialDevice();
00047
00048 SerialDevice(const std::string& deviceName_, bool autoOpen = true, int oflag = O_RDWR | O_NOCTTY | O_NONBLOCK);
00049 virtual ~SerialDevice();
00050
00051
00052 void openDevice(int oflag = O_RDWR | O_NOCTTY | O_NONBLOCK);
00053 void closeDevice();
00054
00055 bool isOpen() const;
00056
00057
00058 bool readAvailable(timeval timeout) const;
00059
00060
00061 int readDevice(char* buffer, size_t size, std::string terminalChars = std::string("\r\n")) const;
00062
00063
00064 int writeDevice(const void* buffer, size_t size) throw(SerialException);
00065
00066
00067 friend std::ostream& operator<<(std::ostream& stream, const SerialDevice& device);
00068 friend std::string& operator<<(std::string& string, const SerialDevice& device);
00069
00070 friend std::istream& operator>>(std::istream& stream, SerialDevice& device);
00071 friend std::string& operator>>(std::string& string, SerialDevice& device);
00072
00073
00074
00075 bool setTermiosAttr(
00076 tcflag_t c_iflag,
00077 tcflag_t c_oflag,
00078 tcflag_t c_cflag,
00079 tcflag_t c_lflag,
00080 speed_t ispeed = BUNDEF, speed_t ospeed = BUNDEF, int optionalOptions = TCSAFLUSH );
00081 void printTermiosAttr() const;
00082
00083
00084 bool setTermiosAttrIFlag(tcflag_t c_iflag, int optionalOptions = TCSAFLUSH );
00085 bool setTermiosAttrOFlag(tcflag_t c_oflag, int optionalOptions = TCSAFLUSH );
00086 bool setTermiosAttrCFlag(tcflag_t c_cflag, int optionalOptions = TCSAFLUSH );
00087 bool setTermiosAttrLFlag(tcflag_t c_lflag, int optionalOptions = TCSAFLUSH );
00088 bool setTermiosAttrSpeed(speed_t ispeed, speed_t ospeed, int optionalOptions = TCSAFLUSH );
00089 };
00090
00091 }
00092
00093 #endif