comment lire /dev/ttyUSB0 périphérique sous Linux?

J'ai connecté une clé USB RFID dans le port série et l'utiliser pour lire des étiquettes RFID. J'ai donc besoin de lire les données de l'appareil et du processus de la sortie.
Je suis l'obtention de données sur l'écran de commande de ligne de commande de Linux mais je n'ai pas pu prendre de la valeur à partir de l'écran et ne peut pas passer à ma demande.
Est-il un autre moyen de lire à partir de /dev/ttyUSB0?
J'ai utilisé le code ci-dessous mais il montre qu'actuellement, la ressource n'est pas disponible (même si j'ai donné des permissions chmod)

#include <stdio.h>      //standard input /output functions
#include <stdlib.h>
#include <string.h>     //string function definitions
#include <unistd.h>     //UNIX standard function definitions
#include <fcntl.h>      //File control definitions
#include <errno.h>      //Error number definitions
#include <termios.h>    //POSIX terminal control definitions
int main()
{
/* Open File Descriptor */
int USB = open( "/dev/ttyUSB0", O_RDWR| O_NONBLOCK | O_NDELAY );
/* Error Handling */
if ( USB < 0 )
{
//cout << "Error " << errno << " opening " << "/dev/ttyUSB0" << ": " << strerror (errno) << endl;
perror("USB ");
}
/* *** Configure Port *** */
struct termios tty;
memset (&tty, 0, sizeof tty);
/* Error Handling */
if ( tcgetattr ( USB, &tty ) != 0 )
{
//cout << "Error " << errno << " from tcgetattr: " << strerror(errno) << endl;
perror("tcgerattr ");
}
/* Set Baud Rate */
cfsetospeed (&tty, B9600);
cfsetispeed (&tty, B9600);
/* Setting other Port Stuff */
tty.c_cflag     &=  ~PARENB;        //Make 8n1
tty.c_cflag     &=  ~CSTOPB;
tty.c_cflag     &=  ~CSIZE;
tty.c_cflag     |=  CS8;
tty.c_cflag     &=  ~CRTSCTS;       //no flow control
tty.c_lflag     =   0;          //no signaling chars, no echo, no canonical processing
tty.c_oflag     =   0;                  //no remapping, no delays
tty.c_cc[VMIN]      =   0;                  //read doesn't block
tty.c_cc[VTIME]     =   5;                  //0.5 seconds read timeout
tty.c_cflag     |=  CREAD | CLOCAL;     //turn on READ & ignore ctrl lines
tty.c_iflag     &=  ~(IXON | IXOFF | IXANY);//turn off s/w flow ctrl
tty.c_lflag     &=  ~(ICANON | ECHO | ECHOE | ISIG); //make raw
tty.c_oflag     &=  ~OPOST;              //make raw
/* Flush Port, then applies attributes */
tcflush( USB, TCIFLUSH );
if ( tcsetattr ( USB, TCSANOW, &tty ) != 0)
{
//cout << "Error " << errno << " from tcsetattr" << endl;
}
/* *** WRITE *** */
unsigned char cmd[] = {'I', 'N', 'I', 'T', ' ', '\r', '\0'};
//int n_written = write( USB, cmd, sizeof(cmd) -1 );
/* Allocate memory for read buffer */
char buf [256];
memset (&buf, '\0', sizeof buf);
/* *** READ *** */
int n = read( USB, &buf , sizeof buf );
/* Error Handling */
if (n < 0)
{
//cout << "Error reading: " << strerror(errno) << endl;
perror("read error ");
}
/* Print what I read... */
//cout << "Read: " << buf << endl;
printf("%s",buf);;
close(USB);
}
  • Si l'écran de commande est toujours en cours d'exécution, puis c'est le dispositif de maintien ouvert, prévenir d'autres programmes d'y accéder, - appareils de série sont généralement 'un seul utilisateur à la fois"
  • Ne vous obtenez le message d'erreur à l'ouverture ou à la fonction de lecture?
  • j'ai complètement fermé écran et j'ai essayé après le redémarrage également. Toujours montrant sa même.
  • Je suis d'erreur à la fonction de lecture
  • Quel est le contenu de la variable errno directement après la lecture d'appel? (printf("%i", errno);)
InformationsquelleAutor asprin | 2013-10-09