So.....minicom zeigt das vom Atmel gesendete Zeichen. Das ist ja schonmal vielversprechend!
readAtmel() leider immer noch 0.
Habe den fehlenden Code natürlich eingefügt...aber leider immer noch nix.
***edit
hab das TIMEOUT mal erhöht und um eine Null erweitert und siehe da...es kommt was zurück vom Port.
Jetzt aber erstmal ins Bett...
***edit
konnte es dann doch nicht erwarten \/
Danke dir für deine Hilfe!!!
Jetzt kann ich alles über USB steuern, Daten empfangen und das dicke Kabel für LPT1 kann weg.
Hier der funktionierende Code
Das TIMEOUT konnte ich wieder runtersetzen, da ich beim Atmel den Loop hab schneller laufen lassen.Code:#include <errno.h> #include <fcntl.h> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <termios.h> #include <unistd.h> #include <sys/types.h> #include <sys/ioctl.h> #include <sys/stat.h> #include <sys/time.h> #include <linux/serial.h> #define READ_TIMEOUT 100000 #define _POSIX #define USB_DEVICE "/dev/ttyUSB0" int dev_fd = 0; /* openAtmel */ int openAtmelPort(char *dev_name) { if ((dev_fd = open(dev_name, O_RDWR | O_NOCTTY, 0)) < 0) { return (-1); } //============ DIESE ZEILEN HIER SETZEN DIE PORT SETTINGS ======================== struct termios ctio; tcgetattr(dev_fd, &ctio); /* save current port settings */ ctio.c_iflag = IXON | IGNPAR; // TODO: IXON oder IXOFF ?!?? < < < < ctio.c_oflag = 0; // | SW flow control | Parity 0 | 8 Databits | 1 StopBit ctio.c_cflag = CREAD | CLOCAL | 0 | CS8 | 1; ctio.c_lflag = 0; ctio.c_cc[VTIME] = 0; /* inter-character timer unused */ ctio.c_cc[VMIN] = 0; /* blocking read until 0 chars received */ cfsetispeed(&ctio, (speed_t) B9600); cfsetospeed(&ctio, (speed_t) B9600); tcflush(dev_fd, TCIFLUSH); tcsetattr(dev_fd, TCSANOW, &ctio); return (dev_fd); //========================================================================== return (dev_fd); } /* closeAtmel */ int closeAtmelPort() { return close(dev_fd); } /* writeAtmel */ int writeAtmelPort(char *c) { int n = write(dev_fd, c, 1); if (n < 0) { // error printf("write() of n bytes failed -> %d", n); } return n; } /* readAtmel */ int readAtmelPort(unsigned char *buf, int nChars) { int amountRead = 0, bytes_read = 0; struct timeval t; fd_set set; int err; while(nChars > 0) { t.tv_sec = 0; t.tv_usec = READ_TIMEOUT; FD_ZERO(&set); FD_SET(dev_fd, &set); err = select(dev_fd + 1, &set, NULL, NULL, &t); if(err == 0) return 0; amountRead = read(dev_fd, buf, nChars); if(amountRead < 0 && errno != EWOULDBLOCK) return -1; else if(amountRead > 0) { bytes_read += amountRead; nChars -= amountRead; buf += amountRead; } } return bytes_read; } int main() { unsigned char *buffer; int result; char *myChar[1]; myChar[0]="w"; result = openAtmelPort(USB_DEVICE); printf("openAtmelPort: %d\n", result); result = readAtmelPort(buffer, 2); printf("readAtmelPort: %d\n", result); printf("in: %d\n", buffer[0]); printf("out: %s\n", myChar[0]); result = writeAtmelPort(myChar[0]); printf("writeAtmelPort: %d\n", result); closeAtmelPort(); return (0); }







Zitieren
Lesezeichen