Forum: Compiler & IDEs RFID-Reader an RS232


von Christian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

ich habe hier vor mir einen RFID-Reader liegen der per USB mit dem PC 
(OPENSuse 11.1) verbunden ist, allerdings ist das dann ein virtueller 
COM-Port. Zum testen und auslesen der Daten haben ich ein C-Programm 
geschrieben. Es sind viele Ausgaben drin um die Konfiguration zu 
überprüfen und um erstmal zu sehen ob es auch klappt. Hier mal der 
Quelltext:

/*
 * File:   main.c
 * Author: Christian
 *
 * Created on 15. Juni 2009, 16:27
 */

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <termios.h>


void ausgabe_konfiguration(struct termios config) {
    printf("c_iflag: %d\n", config.c_iflag);
    printf("c_oflag: %d\n", config.c_oflag);
    printf("c_cflag: %d\n", config.c_cflag);
    printf("c_lflag: %d\n", config.c_lflag);
    printf("c_line: %d\n", config.c_line);
    printf("c_ispeed: %d\n", config.c_ispeed);
    printf("c_ospeed: %d\n", config.c_ospeed);
    printf("c_cc[VMIN]: %d\n\n", config.c_cc[VMIN]);
}

void konfiguration_setzen(struct termios *new_config) {
    if(new_config->c_cflag == PARENB) {
        new_config->c_cflag = new_config->c_cflag & ~(PARENB);
    }
    new_config->c_cflag = new_config->c_cflag & ~(CSIZE);
    new_config->c_cflag = new_config->c_cflag | CS8;
    if(new_config->c_cflag == CRTSCTS) {
        new_config->c_cflag = new_config->c_cflag & ~(CRTSCTS);
    }
    if(new_config->c_cflag == CSTOPB) {
        new_config->c_cflag = new_config->c_cflag & ~(CSTOPB);
    }
    new_config->c_cflag = new_config->c_cflag | CREAD;
};

/*
 *
 */
int main(int argc, char** argv) {

    int port, bytes;
    char buffer[1];
    port = open("/dev/ttyUSB0", O_RDWR);
    printf("Port: %d\n", port);
    if ( port == -1 )
    {
      // FEHLER: Port konnte nicht geöffnet werden!
        printf("FEHLER: Port konnte nicht geöffnet werden\n");
    } else {

        struct termios old_config; //original Konfiguration des 
RFID-Readers
        struct termios new_config; //selbst erstellte Konfiguration

        // int tcgetattr ( int fd, struct termios *termios_p );
        // Konfiguration auslesen
        if ( tcgetattr( port, &old_config ) == -1 )
        {
          // error
            printf("Fehler beim lesen der config\n");
        } else {
            new_config = old_config; //original Konfiguration sichern
            printf("Ausgabe alte Konfiguratio\n");
            ausgabe_konfiguration(old_config);
            printf("Ausgabe kopierte Konfiguratio\n");
            ausgabe_konfiguration(new_config);

            konfiguration_setzen(&new_config);

            cfsetispeed(&new_config, B4800);
            cfsetospeed(&new_config, B4800);

            printf("Ausgabe neue Konfiguratio\n");
            ausgabe_konfiguration(new_config);

            if ( tcsetattr( port, TCSANOW, &new_config ) == -1 ) {
                printf("Fehler beim lesen der neuen Konfiguration\n");
            } else {
                bytes = read(port, buffer, sizeof(buffer));
                printf("%d", bytes);
                int i=0;
                for(i; i<bytes; i++) {
                    printf("%d", buffer[i]);
                }
            }
        }

        //original Konfiguration zurÌcksetzen
        if(tcsetattr(port, TCSANOW, &old_config) == -1) {
            // Fehler beim setzern der original Konfiguration
            printf("Fehler beim setzen der original Konfiguration\n");
        }

    }
    close(port);

    return (EXIT_SUCCESS);
}

Dieser Quelltext liefert mir die Ausgabe in der angehängten Datei. Mein 
Problem ist das das Programm ab der read-Zeile nichts mehr macht das es 
auf Eingaben wartet die nicht kommen. Als Einstellungen braucht der 
Reader 4800Baud 8N1. Vom System wird der Reader erkannt und Treiber 
werden auch geladen. Hat jemand vlt. eine Idee ob und was nicht stimmen 
kann?

Ciao
Chris

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.