RFID-Reader an RS232

Gast #1300689
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
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.