000
28.06.2007, 11:58 Uhr
RedEagle
|
Hi Ich möchte eigentlich nur ein paar zeichen von einem PC zu nem andreren schichen (per nullmodem)
Unter Windows habe ich die rs232 so initialisiert:
C++: |
HANDLE init() { HANDLE h_com = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0 , NULL); DCB dcb; COMMTIMEOUTS cto;
GetCommState(h_com, &dcb);
dcb.BaudRate = 115200; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; SetCommState(h_com, &dcb);
GetCommTimeouts(h_com,&cto);
cto.ReadTotalTimeoutConstant=0; cto.ReadTotalTimeoutMultiplier=0;
SetCommTimeouts(h_com,&cto); return h_com; }
|
Wie bringe ich das jetzt unter linux zum laufen?? Folgenden code habe ich jetzt zusammengefummelt. Allerdings gibt es bereits bei den open ein problem (-1 wird zurückgegeben)
C++: |
int open_port(void) { int fd; /* File descriptor for the port */
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if(fd == -1) //port konnte nicht geöffnet werden { perror("open_port: Unable to open /dev/ttyS0 - "); return -1; } fcntl(fd, F_SETFL, 0); struct termios options; // Get the current options for the port... tcgetattr(fd, &options);
// Set the baud rates to 19200... cfsetispeed(&options, B115200); cfsetospeed(&options, B115200);
// Enable the receiver and set local mode... options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~CSIZE; /* Mask the character size bits */ options.c_cflag |= CS8; /* Select 8 data bits */ options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8;
// Set the new options for the port... tcsetattr(fd, TCSANOW, &options); return (fd); }
|
Was ich genau passiert: Ein PC sendet dauernd zeichen (mit 115200baud, keine parität). Diese möchte ich empfangen. dabei kann es sein, das der PC bereits am senden ist, oder noch nicht angefangen hat. Ich selber möchte (erstmal) nicht senden, nur empfangen. Verbunden sind die PCs mit einem nullmodem. -- MFG RedEagle Dieser Post wurde am 28.06.2007 um 11:59 Uhr von RedEagle editiert. |