Jump to content

    

при приеме через tty заменяется 0A на 0D0A.

На i.mx233 такая фигня происходит.

Понятно что что то не настроено в termios.

Крутил разные битики но без особого успеха. =(

 

Может кто сталкивался?

 

собственно, задача raw поток принимать и передавать.

 

код ниже...

 

int m_setparms(int fd, int baud)

{

int spd = 0;

int error;

 

struct termios tty;

 

error = tcgetattr(fd, &tty);

if (error == -1) {

return error;

}

 

 

switch (baud) {

case 0: spd = B0; break;

case 300: spd = B300; break;

case 600: spd = B600; break;

case 1200: spd = B1200; break;

case 2400: spd = B2400; break;

case 4800: spd = B4800; break;

case 9600: spd = B9600; break;

case 19200: spd = B19200; break;

case 38400: spd = B38400; break;

case 57600: spd = B57600; break;

case 115200: spd = B115200; break;

case 230400: spd = B230400; break;

case 460800: spd = B460800; break;

case 500000: spd = B500000; break;

case 576000: spd = B576000; break;

case 921600: spd = B921600; break;

case 1000000: spd = B1000000; break;

case 1152000: spd = B1152000; break;

case 1500000: spd = B1500000; break;

case 2000000: spd = B2000000; break;

case 2500000: spd = B2500000; break;

case 3000000: spd = B3000000; break;

case 3500000: spd = B3500000; break;

case 4000000: spd = B4000000; break;

}

 

if (spd != -1) {

cfsetospeed(&tty, (speed_t)spd);

cfsetispeed(&tty, (speed_t)spd);

}

 

tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;

 

/* Set into raw, no echo mode */

tty.c_iflag = IGNBRK;

tty.c_lflag = 0;

tty.c_oflag = 0;

tty.c_cflag |= CLOCAL | CREAD;

tty.c_cc[VMIN] = 0;

tty.c_cc[VTIME] = 0;

 

tty.c_iflag &= ~(IXON|IXOFF|IXANY);

 

tty.c_cflag &= ~(PARENB | PARODD);

tty.c_cflag &= ~CSTOPB;

 

error = tcsetattr(fd, TCSANOW, &tty);

 

return error;

}

Edited by Andy Sm.

Share this post


Link to post
Share on other sites
/* Set into raw, no echo mode */

 

Для этого есть более прямой путь - man cfmakeraw

Share this post


Link to post
Share on other sites

в общем не помогло... =(

 

new_port_settings.c_lflag = 0x0.

new_port_settings.c_iflag = 0x4.

new_port_settings.c_oflag = 0x0.

new_port_settings.c_cflag = 0x18b5.

 

это то что она ставит...

Share this post


Link to post
Share on other sites
в общем не помогло... =(

 

Вы уверены что замена на принимающей стороне происходит а не на передающей ? Можете еще зациклить чтобы сразу программа не выходила и посмотрите

stty -aF /dev/ttyXXXX

какие параметры на устройстве реально выставлены в читабельной форме

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this