X-Git-Url: https://oss.titaniummirror.com/gitweb/?p=tinyos-2.x.git;a=blobdiff_plain;f=tools%2Fplatforms%2Fmsp430%2Fcppbsl%2Fsrc%2FSerial.cc;h=1f06989c01ec30202886e585184e72401ba512eb;hp=119323033990563b77443abddf2053929966c863;hb=e9bfab607e051bae6afb47b44892ce37541d1b44;hpb=adf1de6c009d13b7b52e68535c63b28f59c97400 diff --git a/tools/platforms/msp430/cppbsl/src/Serial.cc b/tools/platforms/msp430/cppbsl/src/Serial.cc index 11932303..1f06989c 100644 --- a/tools/platforms/msp430/cppbsl/src/Serial.cc +++ b/tools/platforms/msp430/cppbsl/src/Serial.cc @@ -33,6 +33,13 @@ */ #include #include +#include "../config.h" +#ifdef HAVE_LINUX_VERSION_H +#include +#else +#define LINUX_VERSION_CODE 1 +#define KERNEL_VERSION 3 +#endif #include "Serial.h" @@ -83,6 +90,7 @@ int serial_connect(int* err, const char* dev, int* readFD, int* writeFD, termios return -1; } /* prepare attributes */ +#if defined(HAVE_LINUX_VERSION_H) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) r = tcgetattr(*writeFD, &my_tios); if(r == -1) { *err = errno; @@ -127,7 +135,30 @@ int serial_connect(int* err, const char* dev, int* readFD, int* writeFD, termios close(*writeFD); return -1; } - +#else + r = tcgetattr(*writeFD, &my_tios); + if(r == -1) { + *err = errno; + close(*readFD); + close(*writeFD); + return -1; + } + *pt = my_tios; + cfmakeraw(&my_tios); + my_tios.c_iflag |= IGNBRK | INPCK; + my_tios.c_cflag |= (CS8 | CLOCAL | CREAD | PARENB); + cfsetispeed(&my_tios, B9600); + cfsetospeed(&my_tios, B9600); + r = tcsetattr(*readFD, TCSANOW, &my_tios); + if(r == -1) { + *err = errno; + r = tcsetattr(*writeFD, TCSANOW, pt); + close(*readFD); + close(*writeFD); + return -1; + } +#endif + // clear buffers r = tcflush(*writeFD, TCIOFLUSH); if(r == -1) { @@ -344,8 +375,10 @@ int BaseSerial::txrx(int *err, frame_t *txframe, frame_t *rxframe) { } int BaseSerial::highSpeed(int *err) { + int r; +#if defined(HAVE_LINUX_VERSION_H) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) struct serial_struct serinfo; - int r = ioctl(serialWriteFD, TIOCGSERIAL, &serinfo); + r = ioctl(serialWriteFD, TIOCGSERIAL, &serinfo); if(r == -1) { *err = errno; return -1; @@ -355,6 +388,19 @@ int BaseSerial::highSpeed(int *err) { serinfo.flags &= ~ASYNC_SPD_MASK; serinfo.flags |= ASYNC_SPD_CUST; r = ioctl(serialWriteFD, TIOCSSERIAL, &serinfo); +#else + struct termios my_tios; + r = tcgetattr(serialWriteFD, &my_tios); + cfsetispeed(&my_tios, B38400); + cfsetospeed(&my_tios, B38400); + r = tcsetattr(serialReadFD, TCSANOW, &my_tios); + if(r == -1) { + *err = errno; + } + else { + r = tcsetattr(serialWriteFD, TCSANOW, &my_tios); + } +#endif if(r == -1) { *err = errno; return -1;