The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Программирование RS232"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Программирование RS232"  
Сообщение от redd on 06-Апр-06, 19:07 
хочу научиться работать с ком. портом
решил сделать прогу на C ну и по работе пригодится
чтобы с клавы в /dev/ttyS0 (шлейф TX<->RX) в консоль ( тоесть если все ОК то по две буквы будет значит порт живой)
прочитал вот здесь http://www.opennet.ru/docs/RUS/serial_guide/#basics
как писать и читать понял но как все ето вместе то собрать не въеду
не подскажите ссылку на исходник наверняка есть уже где нить
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Программирование RS232"  
Сообщение от redd on 06-Апр-06, 22:47 
ну хотябы как перенаправить с клавы в /dev/cuad0

while ()
{
fd = open ("/dev/cuad0",O_RDWR);
dup2(fd,1);
close (fd);
}

так что то не пашет

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Программирование RS232"  
Сообщение от Doka (ok) on 07-Апр-06, 07:20 
>ну хотябы как перенаправить с клавы в /dev/cuad0
>
>while ()
>{
>fd = open ("/dev/cuad0",O_RDWR);
>dup2(fd,1);
>close (fd);
>}
>
>так что то не пашет

ls | tee /dev/cua0
а так ?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Программирование RS232"  
Сообщение от redd on 07-Апр-06, 07:28 
да мне из С нужно вот в чем прикол то
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Программирование RS232"  
Сообщение от bf_ email(ok) on 07-Апр-06, 15:44 
>да мне из С нужно вот в чем прикол то


man termios

Там всё достаточно просто.

ps. Единственный момент, что я смутно помню - там в bits/termios.h в восмеричной системе константы прописаны( могу ошибаться ) - это если враппер писать =)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "Программирование RS232"  
Сообщение от Doka (ok) on 07-Апр-06, 21:29 
>да мне из С нужно вот в чем прикол то
так посмотри как tee делает dup

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

6. "Программирование RS232"  
Сообщение от nixsys on 18-Апр-06, 18:05 
int set_up_comms( char *device, int baud_i, char *parity, int stopb )
{
int ttyfd;
struct termios settings;
int char_interval_timeout;
speed_t baud_rate;

#if QNX4 | QNX6
if(( ttyfd = open( device,(O_RDWR | O_NOCTTY  | O_NONBLOCK | O_BINARY) ) ) < 0 )
{
printf("ERROR: set_up_comms: %s\n",strerror(errno));
return(-1);
}
#else
if(( ttyfd = open( device,(O_RDWR | O_NOCTTY  | O_NONBLOCK) ) ) < 0 )
//if(( ttyfd = open( device,(O_RDWR | O_NOCTTY  & ~O_NONBLOCK) ) ) < 0 )
{
printf("ERROR: set_up_comms: device=%s: %s\n",device, strerror(errno));
return(-1);
}
#endif

tcgetattr(ttyfd,&settings);
cfmakeraw(&settings);

#if DEBUG
fprintf( stderr, "opening %s\n", device );
#endif

switch( baud_i )
{
case 110:
baud_rate = B110;
char_interval_timeout = TO_B110;
break;
case 300:
baud_rate = B300;
char_interval_timeout = TO_B300;
break;
case 600:
baud_rate = B600;
char_interval_timeout = TO_B600;
break;
case 1200:
baud_rate = B1200;
char_interval_timeout = TO_B1200;
break;
case 2400:
baud_rate = B2400;
char_interval_timeout = TO_B2400;
break;
case 4800:
baud_rate = B4800;
char_interval_timeout = TO_B4800;
break;
case 9600: case 0:
baud_rate = B9600; //baud_rate = B9600;
char_interval_timeout = TO_B9600;
//char_interval_timeout = 9600;
break;
case 19200:
baud_rate = B19200;
char_interval_timeout = TO_B19200;
break;
case 38400:
baud_rate = B38400;
char_interval_timeout = TO_B38400;
break;
case 57600:
baud_rate = B57600;
char_interval_timeout = TO_B57600;
break;
case 115200:
baud_rate = B115200;
char_interval_timeout = TO_B115200;
break;
default:
baud_rate = B9600;
char_interval_timeout = TO_B9600;
fprintf(stderr, "Unknown baud rate %d for %s.", baud_i, device);
}

cfsetispeed( &settings, baud_rate );/* Set the baud rate */
cfsetospeed( &settings, baud_rate );

#if DEBUG
fprintf( stderr, "%s open\n", device );
#endif

settings.c_lflag &= ~ICANON;//raw mode

settings.c_cflag &= ~HUPCL;
settings.c_cflag &= ~CLOCAL;

#if QNX4 | QNX6
settings.c_cflag &= ~IHFLOW;
settings.c_cflag &= ~OHFLOW;
//---Off Flow Control Flags
settings.c_qflag &= ~(TC_PROTECT_HFLOW|TC_PROTECT_SFLOW|TC_WAIT_SFLOW|TC_ECHOI);
//---Set Flag -ohpaged
tcflow(ttyfd, TCOONHW);
#endif
settings.c_cc[VMIN] = 1;
settings.c_cc[VTIME] = 0;

settings.c_cflag &=~ CSIZE;
settings.c_cflag |= CS8;

if(stopb==1)
{ settings.c_cflag &=~ CSTOPB; }//one STOP BIT
else
{ settings.c_cflag |= CSTOPB; }//two STOP BIT

if( strncmp( parity, "none", 4 ) == 0 )
{
settings.c_cflag &=~ PARENB;
settings.c_cflag &=~ PARODD;
}
else
if( strncmp( parity, "even", 4 ) == 0 )
{
settings.c_iflag |= (INPCK);
settings.c_iflag &= ~(IGNPAR | ISTRIP | PARMRK);

settings.c_cflag |= PARENB;
settings.c_cflag &=~ PARODD;
}
else
{
settings.c_iflag |= (INPCK);
settings.c_iflag &= ~(IGNPAR | ISTRIP | PARMRK);

settings.c_cflag |= PARENB;
settings.c_cflag |= PARODD;
}

if( tcsetattr( ttyfd, TCSANOW, &settings ) < 0 )
{
fprintf( stderr, "tcsetattr failed: %s\n",strerror(errno));
}

//tcflush(ttyfd, TCIOFLUSH);

dtr_off(ttyfd);

close(ttyfd);
#if QNX4 | QNX6
    if(( ttyfd = open( device,(O_RDWR | O_NOCTTY  | O_NONBLOCK | O_BINARY) ) ) < 0 )
{
printf("ERROR: set_up_comms: %s\n",strerror(errno));
return(-1);
}
#else
    if(( ttyfd = open( device,(O_RDWR | O_NOCTTY  | O_NONBLOCK) ) ) < 0 )
//if(( ttyfd = open( device,(O_RDWR | O_NOCTTY  & ~O_NONBLOCK) ) ) < 0 )
{
printf("ERROR: set_up_comms: device=%s: %s\n",device, strerror(errno));
return(-1);
}
#endif

return( ttyfd );
}


Если у тебя будет время напиши статью плиз...

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

7. "Программирование RS232"  
Сообщение от Nick (??) on 19-Апр-06, 14:49 
http://linuxportal.ru/forums/index.php/m/64935/
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру