hi i write a code for reading serial port in qt 5.1.1 and my code work great in linux but not in windows xp/7, i send a packet to my device and wait for response sync like below code
if(m_serial.waitForReadyRead(readTimeout))
{
if(header.length() == 3)
{
int len = header.at(2);
if (len <= 0)
{
emit errorhappend("Timeout get header, happend in get header");
}
packet = m_serial.read(len + 1);
int pos = 0;
if(packet.length() == len + 1)
{
packet.prepend(header);
return packet;
}
while (m_serial.waitForReadyRead(readTimeout)) {
pos = packet.length();
packet += m_serial.read(len + 1 - pos);
if(packet.length() == len + 1)
{
packet.prepend(header);
return packet;
}
}
emit errorhappend("Timeout get responce, happend in get packet ("
+ "," +
}
else
emit errorhappend("Timeout get responce, cant get header");
}
QByteArray packet;
if(m_serial.waitForReadyRead(readTimeout))
{
QByteArray header = m_serial.read(3);
if(header.length() == 3)
{
int len = header.at(2);
if (len <= 0)
{
emit errorhappend("Timeout get header, happend in get header");
return QByteArray();
}
packet = m_serial.read(len + 1);
int pos = 0;
if(packet.length() == len + 1)
{
packet.prepend(header);
return packet;
}
while (m_serial.waitForReadyRead(readTimeout)) {
pos = packet.length();
packet += m_serial.read(len + 1 - pos);
if(packet.length() == len + 1)
{
packet.prepend(header);
return packet;
}
}
emit errorhappend("Timeout get responce, happend in get packet ("
+ QString::number(packet.length())
+ "," +
QString::number(pos) + "," + QString::number(len) + ")");
}
else
emit errorhappend("Timeout get responce, cant get header");
}
return QByteArray();
To copy to clipboard, switch view to plain text mode
if i get errorstring() of serial port after first waitforreadyread condition and i get "Unknown Error" in windows
serial port seems open correctly and write correctly too this is my write code
if(!m_serial.isOpen())
return false;
m_serial.write(writeBlocks(blockNo, bcount, data, devAddr));
if(m_serial.waitForBytesWritten(writeTimeout))
{
StatusCodes status = Error_Other;
bool val = responceNormal(&status);
if(status == Normal && val)
return true;
else
{
emit errorhappend("Previously error happend in Write function, Status(" + statusName(status) + ")");
}
}
else
emit timeout("Write, write data time out");
return false;
if(!m_serial.isOpen())
return false;
m_serial.write(writeBlocks(blockNo, bcount, data, devAddr));
if(m_serial.waitForBytesWritten(writeTimeout))
{
StatusCodes status = Error_Other;
bool val = responceNormal(&status);
if(status == Normal && val)
return true;
else
{
emit errorhappend("Previously error happend in Write function, Status(" + statusName(status) + ")");
}
}
else
emit timeout("Write, write data time out");
return false;
To copy to clipboard, switch view to plain text mode
Bookmarks