From: Jürgen Linder (juergen.linder_at_gmx.de)
Date: 24. Jul 2000
hallo zusammen,
ich will ein C-Programm fuer die serielle Schnittstelle schrieben.
Dafuer muss man (ich habe nachgelesen) die Terminal-Parameter selber
setzen.
Die serielle Schnittstelle soll folgende Parameter haben:
9600 Baud, Parity EVEN, 7 Datenbits, 1 Stopbit
Nun das Programm gekuerzt:
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <sys/ioctl.h>
int main (void)
{
int fd, ret, h3;
int modlines = 0;
char senden[20];
char empfang[200];
char hf[4];
struct termios terminal, terminal_alt, terminal_neu;
speed_t baudrate;
ret = 0;
if ((fd = open("/dev/ttyS0", O_RDWR)) < 0)
{
ret = 1;
}
else
{
if ((h3 = tcgetattr(fd, &terminal_alt)) < 0)
{
ret = 2;
}
else
{
terminal_neu = terminal_alt;
terminal_neu.c_iflag &= ~IMAXBEL;
terminal_neu.c_cflag &= ~CSTOPB;
termianl_neu.c_lflag &= ~(ECHO | ECHOE | ICANON);
terminal_neu.c_iflag &= IBPCHK;
terminal_neu.c_cflag &= ~CSIZE;
termianl_neu.c_cfalg |= CS7;
terminal_neu.c_cflag &= (CRTSCTS | PARENB | PARODD);
baudrate = B9600;
cfsetispeed(&terminal_neu, baudrate);
cfsetospeed(&terminal_neu, baudrate);
terminal_neu.c_cc[VMIN] = 0;
terminal_neu.c_cc[VTIME] = 600;
if ((h3 = tcsetattr(fd, TCSANOW, &terminal_neu)) < 0)
{
ret = 3;
}
else
{
if ((h3 = ioctl(fd, TIOCMGET)) < 0)
{
ret = 4;
}
else
{
modlines &= ~TIOCM_RTS;
if ((h3 = ioctl(fd, TIOCMSET)) < 0)
{
ret = 5;
}
else
{
strcpy (senden, "SX");
senden[2] = 13;
senden[3] = 10;
senden[4] = '\0';
h1 = strlen(senden);
if ((h3 = write(fd, senden, h1)) < 0)
{
ret = 6;
}
else
{
.........
}
}
}
}
}
}
}
nun mein Problem:
alle Terminal-atribute-funktionen, wie
tcgetattr, tcsetattr, cfsetispeed, cfsetospeed und ioctl bringen
Return_code = -1
der write bringt auch Return_Code -1, nur der open ist ok.
ich weiss nicht warum.
kann mir da jemand helfen ???
vielen Dank bis dann
und weiterhin viel Vergnügen mit Linux
wünscht
euer Jürgen
Dieses Archiv wurde generiert von hypermail 2.1.2 : 11. Mar 2002 CET