Автор Тема: Проблем със сериен порт  (Прочетена 615 пъти)

ceco91

  • Напреднали
  • *****
  • Публикации: 22
    • Профил
Проблем със сериен порт
« -: Feb 01, 2012, 00:34 »
Здравейте,
Опитвам се да подкарам един Фискален апарат/Фискален принтер да работи под Linux като за целта съм написал едно приложение на C++. Та проблема ми е в четенето от серийния порт - не работи.
Код:
fd = open(path.c_str() , O_RDWR | O_NOCTTY | O_NDELAY);
if ( fd == -1 ){
throw Exception("open_port: Unable to open " + path + "!");
}
fcntl(fd, F_SETFL, FNDELAY);
struct termios options;
tcgetattr(fd, &options);
struct termios newkey;
    newkey.c_cflag = transferSpeed(speed) | CS8 |  CREAD | CLOCAL;
    newkey.c_iflag = 0;
    newkey.c_oflag = 0;
    newkey.c_lflag = 0;       //ICANON;
    newkey.c_cc[VMIN]=1;
    newkey.c_cc[VTIME]=10;
if( tcsetattr(fd, TCSANOW, &newkey) ) {
throw Exception("Can't setup communication parameters!\n");
}
tcflush(fd, TCIFLUSH);
tcflush(fd, TCOFLUSH);
rbytes = 0;
wbytes = 0;

Четенето го извършвам символ по символ.
Код:
char buf;
int bytes = read( this->fd, &buf, sizeof(char) );
Активен

shoshon

  • Напреднали
  • *****
  • Публикации: 497
    • Профил
Re: Проблем със сериен порт
« Отговор #1 -: Feb 01, 2012, 01:09 »
Не знам каква грешка ти дава, защото ни си показал никаква информация от дебъгване.
Все пак:

Цитат
int bytes = read( this->fd, &buf, sizeof(char) );

и ( от документацията )

Цитат
ssize_t read(int fildes, void *buf, size_t nbyte);

Хайде да открием разликите. Жокер:

Колко байта четеш?
Колко е размера на буфера?
« Последна редакция: Feb 01, 2012, 17:10 от shoshon »
Активен