Minor changes for YModemReceive with timers and signals
This commit is contained in:
@@ -14,21 +14,22 @@ using namespace boost;
|
||||
#define WRITE_TIME_OUT (100)
|
||||
|
||||
YmodemFileReceive::YmodemFileReceive() :
|
||||
io(), readTimer(io), writeTimer(io)
|
||||
{
|
||||
setTimeDivide(499);
|
||||
setTimeMax(5);
|
||||
setErrorMax(999);
|
||||
|
||||
//connect(readTimer, SIGNAL(timeout()), this, SLOT(readTimeOut()));
|
||||
//connect(writeTimer, SIGNAL(timeout()), this, SLOT(writeTimeOut()));
|
||||
readTimer.async_wait(readTimeOut);
|
||||
writeTimer.async_wait(writeTimeOut);
|
||||
}
|
||||
|
||||
YmodemFileReceive::~YmodemFileReceive()
|
||||
{
|
||||
delete file;
|
||||
delete readTimer;
|
||||
delete writeTimer;
|
||||
delete serialPort;
|
||||
// delete file;
|
||||
// delete readTimer;
|
||||
// delete writeTimer;
|
||||
// delete serialPort;
|
||||
}
|
||||
|
||||
void YmodemFileReceive::setFilePath(const string &path)
|
||||
@@ -51,13 +52,13 @@ bool YmodemFileReceive::startReceive()
|
||||
progress = 0;
|
||||
status = StatusEstablish;
|
||||
|
||||
serialPort->setTimeout(posix_time::seconds(10));
|
||||
serialPort->setTimeout(posix_time::seconds(0));
|
||||
return true;
|
||||
}
|
||||
|
||||
void YmodemFileReceive::stopReceive()
|
||||
{
|
||||
file->close();
|
||||
file.close();
|
||||
abort();
|
||||
status = StatusAbort;
|
||||
}
|
||||
@@ -72,26 +73,27 @@ Ymodem::Status YmodemFileReceive::getReceiveStatus()
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
void YmodemFileReceive::readTimeOut()
|
||||
|
||||
void YmodemFileReceive::readTimeOut(const boost::system::error_code& e)
|
||||
{
|
||||
readTimer->stop();
|
||||
readTimer.cancel();
|
||||
|
||||
receive();
|
||||
|
||||
if((status == StatusEstablish) || (status == StatusTransmit))
|
||||
{
|
||||
readTimer->start(READ_TIME_OUT);
|
||||
readTimer.expires_from_now(boost::posix_time::millisec(READ_TIME_OUT));
|
||||
readTimer.async_wait(readTimeOut);
|
||||
}
|
||||
}
|
||||
|
||||
void YmodemFileReceive::writeTimeOut()
|
||||
void YmodemFileReceive::writeTimeOut(const boost::system::error_code& e)
|
||||
{
|
||||
writeTimer->stop();
|
||||
writeTimer.cancel();
|
||||
serialPort->close();
|
||||
receiveStatus(status);
|
||||
}
|
||||
*/
|
||||
|
||||
Ymodem::Code YmodemFileReceive::callback(Status status, uint8_t *buff, uint32_t *len)
|
||||
{
|
||||
switch(status)
|
||||
@@ -136,7 +138,8 @@ Ymodem::Code YmodemFileReceive::callback(Status status, uint8_t *buff, uint32_t
|
||||
{
|
||||
YmodemFileReceive::status = StatusError;
|
||||
|
||||
writeTimer->start(WRITE_TIME_OUT);
|
||||
writeTimer.expires_from_now(boost::posix_time::millisec(WRITE_TIME_OUT));
|
||||
writeTimer.async_wait(writeTimeOut);
|
||||
|
||||
return CodeCan;
|
||||
}
|
||||
@@ -145,7 +148,8 @@ Ymodem::Code YmodemFileReceive::callback(Status status, uint8_t *buff, uint32_t
|
||||
{
|
||||
YmodemFileReceive::status = StatusError;
|
||||
|
||||
writeTimer->start(WRITE_TIME_OUT);
|
||||
writeTimer.expires_from_now(boost::posix_time::millisec(WRITE_TIME_OUT));
|
||||
writeTimer.async_wait(writeTimeOut);
|
||||
|
||||
return CodeCan;
|
||||
}
|
||||
@@ -155,13 +159,13 @@ Ymodem::Code YmodemFileReceive::callback(Status status, uint8_t *buff, uint32_t
|
||||
{
|
||||
if((fileSize - fileCount) > *len)
|
||||
{
|
||||
file->write((char *)buff, *len);
|
||||
file.write((char *)buff, *len);
|
||||
|
||||
fileCount += *len;
|
||||
}
|
||||
else
|
||||
{
|
||||
file->write((char *)buff, fileSize - fileCount);
|
||||
file.write((char *)buff, fileSize - fileCount);
|
||||
|
||||
fileCount += fileSize - fileCount;
|
||||
}
|
||||
@@ -178,22 +182,25 @@ Ymodem::Code YmodemFileReceive::callback(Status status, uint8_t *buff, uint32_t
|
||||
|
||||
case StatusFinish:
|
||||
{
|
||||
file->close();
|
||||
file.close();
|
||||
|
||||
YmodemFileReceive::status = StatusFinish;
|
||||
|
||||
writeTimer->start(WRITE_TIME_OUT);
|
||||
writeTimer.expires_from_now(boost::posix_time::millisec(WRITE_TIME_OUT));
|
||||
writeTimer.async_wait(writeTimeOut);
|
||||
|
||||
return CodeAck;
|
||||
}
|
||||
|
||||
case StatusAbort:
|
||||
{
|
||||
file->close();
|
||||
file.close();
|
||||
|
||||
YmodemFileReceive::status = StatusAbort;
|
||||
|
||||
writeTimer->start(WRITE_TIME_OUT);
|
||||
|
||||
writeTimer.expires_from_now(boost::posix_time::millisec(WRITE_TIME_OUT));
|
||||
writeTimer.async_wait(writeTimeOut);
|
||||
|
||||
return CodeCan;
|
||||
}
|
||||
@@ -202,18 +209,20 @@ Ymodem::Code YmodemFileReceive::callback(Status status, uint8_t *buff, uint32_t
|
||||
{
|
||||
YmodemFileReceive::status = StatusTimeout;
|
||||
|
||||
writeTimer->start(WRITE_TIME_OUT);
|
||||
writeTimer.expires_from_now(boost::posix_time::millisec(WRITE_TIME_OUT));
|
||||
writeTimer.async_wait(writeTimeOut);
|
||||
|
||||
return CodeCan;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
file->close();
|
||||
file.close();
|
||||
|
||||
YmodemFileReceive::status = StatusError;
|
||||
|
||||
writeTimer->start(WRITE_TIME_OUT);
|
||||
writeTimer.expires_from_now(boost::posix_time::millisec(WRITE_TIME_OUT));
|
||||
writeTimer.async_wait(writeTimeOut);
|
||||
|
||||
return CodeCan;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user