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 }