LINUX.ORG.RU

Сообщения NOCaut

 

Не получается читать с порта

Форум — Development

Не получается прочитать дание из порта

//Чтения из порта


int ComPort::ReadPort(void* lp, int Size, bool ShowRead)
{
    int readbytes = 0;
        qDebug("%s","Start Read");
        do {
            //прочитать байты из порта в буфер программы
            readbytes = read(p_Port, lp, Size);
            if(readbytes > 0)
                if(ShowRead)
                    ShowReadData((char*)lp, (int)readbytes);
            qDebug()<<"Read:"<<readbytes;
           }
        while(readbytes > 0);

    qDebug()<<"Read good";
    return readbytes;
}

int ComPort::WritePort(char *buff, int Size)
{
    qDebug()<<"Write Thread Start!!!";
    int writebytes = write(p_Port, buff, Size);
    qDebug()<<"DATA were writed... (total "<<writebytes<<" bytes)";

   return 0;
}

int ComPort::OpenPort()
{
 p_Port = open(PortName.toAscii().data(), O_RDWR | O_NOCTTY | O_NONBLOCK);
    if (p_Port < 0)
        return -1;   

 // Настраиваем порт на асинхронную передачу
    // allow the process to receive SIGIO
    fcntl(p_Port, F_SETOWN, getpid());
    // Make the file descriptor asynchronous (the manual page says only
    // O_APPEND and O_NONBLOCK, will work with F_SETFL...)
    fcntl(p_Port, F_SETFL, FASYNC);

   if(!SetupConnection())
      return -3;
}

bool ComPort::SetupConnection()
{
        // заповняэмо структуру
        // linux.die.net/man/3/termios
        struct termios newtio;
//	newtio.c_cflag     = B19200 | CRTSCTS | CS8 |  CLOCAL | CREAD;
        newtio.c_cflag     = B19200 | CS8 |  CLOCAL | CREAD;
        newtio.c_iflag     = IGNPAR;  // input modes
        newtio.c_oflag     = 0;       // output modes
        newtio.c_lflag     = 0;       // local modes   --ICANON;
        newtio.c_cc[VMIN]  = 1;       // VMIN - minimum number of characters for noncanonical read(MIN)
        newtio.c_cc[VTIME] = TimeOut; // VTIME - inter-character timer unused

    // задаэмо нову структуру для порта
    if(tcsetattr(p_Port,TCSANOW,&newtio)<0)
        return false;

    //очищаэмо входну структуру в якый э данi, якы були отриманы,але не прочитанi
    tcflush(p_Port, TCIFLUSH);

    return true;
}


Запись проись происходит нормально пишет что записало 3 байта а считивать не получается (-1). Может кто увидет мою ошибку. Или подскажет исходник для примеру чужой. спасибо.

NOCaut
()

Чтение из COM порта, При чтении из порта зависает read()

Форум — Development

Каждому рано или поздно приходится программировать com порт. Вот и мой черед пришол. Я ужу умею: Откривать,закривать, писать. а читать не получается. програма зависает при read(). Я читал з /dev/tteS0 и /dev/tteS1. я ожидал что read() вернет 0 или чтото в етом роде но не зависнет.

NOCaut
()

RSS подписка на новые темы