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 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 #include "serialIO.h"
00056 
00057 SerialIO::SerialIO() :
00058          _fd(-1)
00059 {
00060 }
00061 
00062 SerialIO::~SerialIO()
00063 {
00064         closePort();
00065 }
00066 
00067 
00068 int SerialIO::openPort(std::string devicestring, int baudrate)
00069 {
00070         if(_fd != -1) return _fd;
00071 
00072         _fd = open(devicestring.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
00073         if(_fd != -1)
00074         {
00075                 speed_t baud = getBaudFromInt(baudrate);
00076                 fcntl(_fd, F_SETFL, 0);
00077                 tcgetattr(_fd, &port_settings);
00078                 port_settings.c_cflag &= ~PARENB;
00079                 port_settings.c_cflag &= ~CSTOPB;
00080                 port_settings.c_cflag &= ~CSIZE;
00081                 port_settings.c_cflag = baud | CS8 | CLOCAL | CREAD;
00082                 port_settings.c_iflag = IGNPAR;
00083                 tcsetattr(_fd, TCSANOW, &port_settings);
00084         }
00085         return _fd;
00086 }
00087 
00088 
00089 int SerialIO::sendData(std::string value)
00090 {
00091         int wrote = -1;
00092         if(_fd != -1)
00093                 wrote = write(_fd, value.c_str(), value.length());
00094         return wrote;
00095 }
00096 
00097 
00098 int SerialIO::readData(std::string &value, size_t nBytes)
00099 {
00100         char buffer[32];
00101         size_t rec = -1;
00102         rec = read(_fd, buffer, nBytes);
00103         value = std::string(buffer);
00104         return rec;
00105 }
00106 
00107 
00108 bool SerialIO::isOpen()
00109 {
00110         return (_fd != -1);
00111 }
00112 
00113 
00114 void SerialIO::closePort()
00115 {
00116         if(_fd != -1)
00117                 close(_fd);
00118 }
00119 
00120 
00121 speed_t SerialIO::getBaudFromInt(int baud)
00122 {
00123         speed_t ret;
00124         switch(baud)
00125         {
00126                 case 0:         ret=B0;         break;
00127                 case 50:        ret=B50;        break;
00128                 case 75:        ret=B75;        break;
00129                 case 110:       ret=B110;       break;
00130                 case 134:       ret=B134;       break;
00131                 case 150:       ret=B150;       break;
00132                 case 200:       ret=B200;       break;
00133                 case 300:       ret=B300;       break;
00134                 case 1200:      ret=B1200;      break;
00135                 case 1800:      ret=B1800;      break;
00136                 case 2400:      ret=B2400;      break;
00137                 case 4800:      ret=B4800;      break;
00138                 case 9600:      ret=B9600;      break;
00139                 case 19200: ret=B19200; break;
00140                 case 38400: ret=B38400; break;
00141                 case 57600: ret=B57600; break;
00142                 case 115200: ret=B115200; break;
00143                 case 230400: ret=B230400; break;
00144                 default:
00145                         ret=B230400;
00146                         break;
00147         }
00148         return ret;
00149 }