LINUX.ORG.RU

[C] Com Port

 


0

0

#include <iostream>

#include <sys/types.h>
#include <sys/stat.h>

#include <termios.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

using namespace std;

int main()
{
int fd;
char c;
struct termios oldtio,newtio;

fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);

tcgetattr(fd,&oldtio);
newtio.c_cflag = B9600 | CRTSCTS | CS8 | CLOCAL | CREAD;//|IGNPAR | IGNBRK;
newtio.c_cc[VMIN]=1;
newtio.c_cc[VTIME]=0;
tcsetattr(fd,TCSANOW,&newtio);
//init
unsigned char buf[3]={ 16, 49, 32 };
write(fd,&buf[0],1);
write(fd,&buf[1],1);
write(fd,&buf[2],1);

int m=0;
int l=0;
while (l==0)
{
read(fd,&c,1);
if (c==0x01) l=1;
if (c==0x06) printf("DOWN\n");
if (c==0x04) printf("SELECT\n");
if (c==0x03) printf("BACK\n");
if (c==0x05) printf("UP\n");
}


//off
unsigned char buf1[3]={ 16, 0, 32 };
write(fd,&buf1[0],1);
write(fd,&buf1[1],1);
write(fd,&buf1[2],1);

tcsetattr(fd,TCSANOW,&oldtio); /* restore old modem setings */
close(fd);
return 0;
}

Первый запуск программы отрабатывается идеально. Но на втором запуске write не работает - либо не дает ожидаемого результата(первый), либо подвисает(второй). Что это может быть или что я забыл? О_о
После второго запуска программы wi

★★★★★

>newtio.c_cflag = B9600

а почему так, разве нужно не
так делать:
peed_t posix_speed = B9600;
cfsetispeed(&newio, posix_speed);
cfsetospeed(&newio, posix_speed);

и почему модифицируется не oldio, а новая структура,
в которой возможно не все поля иницилизированны разумными константами?

и кто будет проверять результат возвращаемый функциями?

fghj ★★★★★
()
Ответ на: комментарий от fghj

И заоодно: вы на каком языке пишете? C или C++?

krum
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.