Не получается читать с порта
Не получается прочитать дание из порта
//Чтения из порта
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). Может кто увидет мою ошибку. Или подскажет исходник для примеру чужой. спасибо.