вторник, 3 декабря 2013 г.

Работа с COM портом в Linux

Инициализация COM порта

COM порт в Linux представляет собой файл устройства. Типичное расположение такого файла
\dev\ttySx для обычного COM порта или \dev\ttyUSBx для
USB-RS переходника, где x = 0,1,2...
Встречаются также \dev\ttyOSx и др.
Для начала работы COM порт необходимо открыть:
int F_ID = -1;
open("\dev\ttyUSB0", O_RDWR | O_NOCTTY);
if(F_ID == -1)
{
    std::cout << strerror(errno) << std::endl;
}
Если F_ID отличается от -1, значит COM порт открыт успешно
и можно переходить к его настройке.
Чтение текущих настроек:
struct termios options; /*структура для установки порта*/
tcgetattr(F_ID, &options); /*читает пораметры порта*/
Установка скорости:
cfsetispeed(&options, B57600); /*установка скорости порта*/
cfsetospeed(&options, B57600); /*установка скорости порта*/
Установка таймаутов чтения:
options.c_cc[VTIME]    = 20; /*Время ожидания байта 20*0.1 = 2 секунды */
options.c_cc[VMIN]     = 0; /*минимальное число байт для чтения*/
Установка других полезных (необходимых) параметров:
options.c_cflag &= ~PARENB; /*бит четности не используется*/
options.c_cflag &= ~CSTOPB; /*1 стоп бит */
options.c_cflag &= ~CSIZE;  /*Размер байта*/
options.c_cflag |= CS8;  /*8 бит*/
    
options.c_lflag = 0;
options.c_oflag &= ~OPOST; /*Обязательно отключить постобработку*/
 
options.c_iflag = 0;
options.c_iflag &= ~ (INLCR | IGNCR | ICRNL);
Сохранение параметров:
tcsetattr(F_ID, TCSANOW, &options);

Чтение и отправка данных

Прочитать данные из COM порта: