LINUX.ORG.RU

Сообщения NOCaut

 

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

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

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


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()

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

NOCaut
()

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