Portál AbcLinuxu, 13. května 2025 20:44

Dotaz: sériový port

26.6.2006 12:52 kutom | skóre: 1
sériový port
Přečteno: 267×
Odpovědět | Admin
Potřeboval bych poradit se sériovým portem a jeho obsluhout v C. Mám zkušební program, který posílá modemu AT a čeká na OK. Všechno to funguje, ale jakmile odpojím modem od pc, tak ten program dojde až puts("1") a pak se kousne a vyzkočím z něj pomocí ctrl+c. Když to close dám pryč, tak proběhnou oba řádky puts, ale kousne se pak taky a nejde už ani killnout. Musím zavřít terminál a přihlásit se znovu. Potřebuju aby normálně ten program skončil. Už nevím co s tím. Ta funkce modem() jenom pošle AT a čeká na OK. Když se při odpojeném modemu nedočká, tak po 1s timeoutu pokračuje.
int main(void) {
    int fd, ret;
    struct termios options;

    fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
    fcntl(fd, F_SETFL, 0);
    
    tcgetattr(fd, &options);
    cfsetispeed(&options, B9600);
    cfsetospeed(&options, B9600);
    options.c_cflag &= ~PARENB;
    options.c_cflag &= ~CSTOPB;
    options.c_cflag &= ~CSIZE;
    options.c_cflag |= CS8;
    options.c_cflag |= (CLOCAL | CREAD);
    options.c_cflag |= CRTSCTS;
    options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
    options.c_oflag &= ~OPOST;
    options.c_cc[VMIN]  = 0;
    options.c_cc[VTIME] = 10;
    tcsetattr(fd, TCSANOW, &options);

    ret=modem(fd);

    puts("1");
    close(fd);
    puts("2");
    
    return(ret);
}
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.6.2006 13:04 kutom | skóre: 1
Rozbalit Rozbalit vše Re: sériový port
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak jsem vypozoroval, že to má souvislost s write(fd,...) v té funkci modem. Když ho dám pryč, tak to skončí normálně. Asi to souvisí s vysílacím bufferem, že není připojené nic, co by ho vyprázdnilo. Ale co s tím?
26.6.2006 13:33 kutom | skóre: 1
Rozbalit Rozbalit vše Re: sériový port
Tak už jsem to vyřešil. Chyba je to options.c_cflag |= CRTSCTS; taky mi to mohlo dojít dřív :-)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.