writeToSerial():
Only write to serial interface if no current command has been sent to DC already.
This commit is contained in:
		
							
								
								
									
										47
									
								
								src/com.cpp
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								src/com.cpp
									
									
									
									
									
								
							@@ -20,13 +20,48 @@ void T_com::writeToSerial(const QByteArray &data, uint16_t sendLength)
 | 
			
		||||
{
 | 
			
		||||
    sendBuffer=data;
 | 
			
		||||
    sendLen=sendLength;
 | 
			
		||||
    if (CatSerial->isOpen())
 | 
			
		||||
    {
 | 
			
		||||
        //qDebug() << "sending..." << sendBuffer;
 | 
			
		||||
        CatSerial->write(sendBuffer);
 | 
			
		||||
    } else
 | 
			
		||||
        qDebug() << "error sending, port is not open";
 | 
			
		||||
 | 
			
		||||
    if (readCmds.size() == 0) { // no other read command active
 | 
			
		||||
        if (CatSerial->isOpen())
 | 
			
		||||
        {
 | 
			
		||||
            if (CatSerial->error() != QSerialPort::NoError) {
 | 
			
		||||
                qCritical() << __func__ << "" << __LINE__ << "ERROR on serial line" << CatSerial->errorString();
 | 
			
		||||
                CatSerial->clearError();
 | 
			
		||||
                qCritical() << __func__ << "" << __LINE__ << "cleared error on serial line";
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!CatSerial->atEnd()) {
 | 
			
		||||
                qCritical() << QString("ERROR %1 bytes available on serial line before write").arg(CatSerial->bytesAvailable());
 | 
			
		||||
                qCritical() << CatSerial->readAll().toHex(':');
 | 
			
		||||
                CatSerial->clear();
 | 
			
		||||
                qCritical() << __func__ << "" << __LINE__ << "read all data from serial line";
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            QByteArray buffer(data);
 | 
			
		||||
 | 
			
		||||
            int bytesToWrite = buffer.size();
 | 
			
		||||
            while (bytesToWrite > 0 && !buffer.isEmpty()) {
 | 
			
		||||
                int bytesWritten = CatSerial->write(buffer);
 | 
			
		||||
                if (bytesWritten != -1 && CatSerial->waitForBytesWritten(1000)) {
 | 
			
		||||
                    bytesToWrite -= bytesWritten;
 | 
			
		||||
                    buffer = buffer.right(bytesWritten);
 | 
			
		||||
                } else {
 | 
			
		||||
                    qCritical() << __func__ << ":" << __LINE__
 | 
			
		||||
                                << QString("ERROR %1 for sending %2").arg(CatSerial->errorString()).arg(data.toHex(':').constData());
 | 
			
		||||
                    CatSerial->clearError();
 | 
			
		||||
                    qCritical() << __func__ << ":" << __LINE__ << "cleared error on serial line. returning ...";
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            readCmds.append(data.constData()[2]);
 | 
			
		||||
        } else {
 | 
			
		||||
            qCritical() << __func__ << ":" << __LINE__
 | 
			
		||||
                        << "ERROR sending" << data.toHex(':') << "port is not open";
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
       qCritical() << __func__ << "" << __LINE__ << "ERROR detected active read cmd" << readCmds[0];
 | 
			
		||||
       readCmds.clear();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user