Всем доброго времени суток.
Столкнулся с проблемой: нужна коммуникация через СОМ-порт.
Одна сторона всегда принимающая, другая - передающая. Ранее для передачи использовалось Win32-приложение. Реализовать получение данных в Linux получилось быстро. Все работало.
Попытался переписать передающую программу так же под Linux, но вместо нужных данных стала приходить всякая чушь. Похоже, что неправильно конфигурирую порт на выводе. Может кто что подскажет?
Работает все примерно по такой схеме:
Принимающая сторона:
-----------------------------------------------------------------
struct termios old_cfg;
struct termios new_cfg;
int fd = open(SERIAL_DEVICE, (O_RDWR | O_NOCTTY | O_NONBLOCK));
if (fd < 0)
return RES_ERR;
new_cfg.c_cflag = B115200 | CRTSCTS | CS8 | CLOCAL | CREAD;
new_cfg.c_iflag = IGNPAR;
new_cfg.c_oflag = 0;
new_cfg.c_lflag = 0;
new_cfg.c_cc[VTIME] = 0;
new_cfg.c_cc[VMIN] = 1;
tcgetattr(fd, &old_cfg);
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &new_cfg);
for ( ; ; )
{
char c;
if (read(fd, &c, 1) < 1)
continue;
if (c == 0xFF)
break;
printf("%c", c);
}
tcsetattr(fd, TCSANOW, &old_cfg);
close(fd);
-----------------------------------------------------------------
Передающая сторона:
-----------------------------------------------------------------
struct termios old_cfg;
struct termios new_cfg;
int fd = open(SERIAL_DEVICE, (O_RDWR | O_NOCTTY | O_NONBLOCK));
if (fd < 0)
return RES_ERR;
new_cfg.c_cflag = B115200 | CS8 | CLOCAL;
new_cfg.c_iflag = IGNPAR;
new_cfg.c_oflag = 0;
new_cfg.c_lflag = 0;
new_cfg.c_cc[VTIME] = 0;
new_cfg.c_cc[VMIN] = 1;
tcgetattr(fd, &old_cfg);
tcflush(fd, TCOFLUSH);
tcsetattr(fd, TCSANOW, &new_cfg);
write(fd, buffer, buf_size);
tcsetattr(fd, TCSANOW, &old_cfg);
close(fd);
-----------------------------------------------------------------
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Serial Ports (2012)
- Форум Com-port настройка (2023)
- Форум Как узнать сколько байт пришло на /dev/ttyS0 ? (2003)
- Форум программно настроить последовательный порт (2010)
- Форум tcsetattr повторный вызов (2011)
- Форум [C] Com Port (2007)
- Форум Не получается читать с порта (2013)
- Форум [ttyUSB0] вызов read() (2010)
- Форум Работа с COM-портом : resourse temporarily unavailable (2007)
- Форум pty и каноничный режим (2011)