ttyS0 und ttyUSB0 in C ansteuern



  • Hi,

    ich versuche von C aus einen PIC-Controller über die Serielle anzusteuern. Über ttyS0 funktioniert die Kommunikation. Über den USB-Seriell Adapter wird zwar die Verbindung nach außen fehlerlos aufgebaut, aber das Lesen funktioniert nicht. Von der Shell aus und über minicom funktioniert die Verbindung in beide Richtungen (mit ttyS0 und auch mit ttyUSB0) aber nicht vom C-Code aus. Auch das Entfernen von brltty hat nichts gebracht. Ich denke, es kann nur in den termios Einstellungen etwas faul sein. Hat jemand von euch eine Idee oder einen Tipp?

    Hier der Abschnitt mit den termios Einstellungen:

    struct termios oldtio,newtio;
    
    extern "C" HANDLE SioOpen(char *name, unsigned int baudrate)
    {
    BOOL RetStat;
    HANDLE ComHandle;
    DWORD winrate;
    
    //Open COM port as a file
    printf("Opening %s\n",name);
    ComHandle = open(name, O_RDWR) | O_NOCTTY);
    
    	if (ComHandle < 0)
    		{
            printf("%s failed to open\n",name);
            perror(name); 
        	}
    
        switch (baudrate) {
    		case 9600: 	winrate = B9600; break;
    		case 19200: 	winrate = B19200; break;
    		case 38400: 	winrate = B38400; break;
    		case 57600: 	winrate = B57600; break;
    		case 115200: 	winrate = B115200; break;
        	default:		printf("Baud rate not supported - using default of 19200\n");
        					winrate = B19200;
        	}
        //printf("tcgetattr(ComHandle,&oldtio)\n");
    
        tcgetattr(ComHandle,&oldtio); // save current port settings
    
        bzero(&newtio, sizeof(newtio));
    
        newtio.c_cflag = winrate | CS8 | CLOCAL | CREAD;
        newtio.c_iflag = IGNPAR;
        newtio.c_oflag = 0;
    
        // set input mode (non-canonical, no echo,...)
        newtio.c_lflag = 0;
    
        // Wait block for 100ms, then timeout
        newtio.c_cc[VTIME]    = 1;   // inter-character timer unused 
        newtio.c_cc[VMIN]     = 0;   // blocking read until 1 chars received 
    
        //tcflush(ComHandle, TCIFLUSH);
        tcflush(ComHandle, TCIOFLUSH);
        //printf("tcsetattr(ComHandle,TCSANOW,&newtio)\n");
        RetStat = tcsetattr(ComHandle,TCSANOW,&newtio);
    
    	if (RetStat < 0)
        	{
        	printf("Failed to set COMM configuration\n");
            //break;
            }
    //printf("Setup complete, returning file handle.\n"); 
    return(ComHandle);
    }
    

Log in to reply