PDA

View Full Version : خواندن از پورت سریال در دستگاه کارت خوان



haniyeh.ghassami
سه شنبه 04 اسفند 1394, 08:45 صبح
سلام
من یک دستگاه کارت خوان RFID دارم
زمانیکه داده ها را میخواند به دو صورت است
یا یک جا می خواند ( که من همین را می خواهم)
یا اینکه ابتدا 8 تا از کدها را می خواند سپس 4 تای بعدش را
چه کنم که همه را یکجا بخواند؟


RFID MONITORING => '010B7528297E'
RFID MONITORING => '8700732AC51B'
RFID MONITORING => '010B7528'
RFID MONITORING => '297E'
RFID MONITORING => '8700732A'
RFID MONITORING => 'C51B'
RFID MONITORING => '010B7528'
RFID MONITORING => '297E'


و این هم قطعه کدم :

memset(buf2,'\0',MAXDATASIZE);
//------------------------------------------------
if ((numbytes = read(fd,buf2, 50)) == -1)
{
printf("Error in reading data");
}
else if (buf2[1] != '\0')
{
//buf2[numbytes] = '\0';
printf("RFID MONITORING => '%s'\n",buf2);
memset(buf2,'\0',MAXDATASIZE-1);
}

haniyeh.ghassami
شنبه 08 اسفند 1394, 10:58 صبح
میشه یکی کمک کنه
خوندن از پورت سریال کاری نداره
اما نمیدونم چرا داده ها را تکه تکه میفرسته
این کد تنظیماتم هست :



//================================================== ======================
int openport(void)
{ //*********************************************
// bayad search koni ta file mored nazar ro peyda koni bazi vaghtha usb0 bazi vaght ha 1
//**********************************************
cout<<"enter the port name:\n";
string portname="";
cin>>portname;

portname="/dev/"+portname;
fd=open(portname.c_str(),O_RDWR|O_NOCTTY|O_NDELAY) ;
if (fd==-1)
{
printf("open_port: unable to open port \n");
return -1;
}
else
{
printf("open_port: succesfully open port \n");
fcntl(fd,F_SETFL,0);
return 1;
}
}
//-------------------------------------
void closeport(void)
{
close(fd);
}
//-------------------------------------
void configport(void)
{
struct termios tty;
struct termios tty_old;
memset (&tty, 0, sizeof tty);

/* Error Handling */
if ( tcgetattr ( fd, &tty ) != 0 )
{
std::cout << "Error " << errno << " from tcgetattr: " << strerror(errno) << std::endl;
}

/* Save old tty parameters */
tty_old = tty;

/* Set Baud Rate */
cfsetospeed (&tty, (speed_t)B9600);
cfsetispeed (&tty, (speed_t)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_cc[VMIN] =1;// 0; // read doesn't block
tty.c_cc[VTIME] = 5;// 2 but befor it 5; // 0.5 seconds read timeout
tty.c_cflag |= CREAD | CLOCAL; // turn on READ & ignore ctrl lines

/* Make raw */
cfmakeraw(&tty);


/* Flush Port, then applies attributes */
tcflush( fd, TCIFLUSH );
if ( tcsetattr ( fd, TCSANOW, &tty ) != 0)
{
std::cout << "Error " << errno << " from tcsetattr" << std::endl;
}
}
//------------------------------------

haniyeh.ghassami
یک شنبه 09 اسفند 1394, 09:24 صبح
خودم راه حلش پیدا کردم
دو تا رید پشت سر هم با اسلیپ 1 ثانیه ای