run(): download device controller using some older (home-grown) algorithm.
This commit is contained in:
parent
15151a9df4
commit
5cfc346317
@ -109,6 +109,116 @@ void DownloadThread::run() {
|
||||
qCritical() << QDateTime::currentDateTime().time().toString(Qt::ISODateWithMs)
|
||||
<< " DownloadThread::run(): Filename:" << m_hw->dcDownloadFileName();
|
||||
|
||||
QDateTime const start = QDateTime::currentDateTime();
|
||||
|
||||
#if 1
|
||||
QFile fn(m_hw->dcDownloadFileName());
|
||||
|
||||
if (!fn.exists()) {
|
||||
// output via CONSOLE() etc
|
||||
qCritical() << QDateTime::currentDateTime().time().toString(Qt::ISODateWithMs)
|
||||
<< " DownloadThread::run(): Filename:" << m_hw->dcDownloadFileName() << "DOES NOT EXIST";;
|
||||
} else {
|
||||
|
||||
qCritical() << QDateTime::currentDateTime().time().toString(Qt::ISODateWithMs)
|
||||
<< "DownloadThread::run(): DC-CONTROLLER SW-VERSION BEFORE"
|
||||
<< m_hw->dc_getSWversion();
|
||||
|
||||
// load binary device controller file into memory
|
||||
QByteArray ba = loadBinaryDCFile(m_hw->dcDownloadFileName());
|
||||
if (ba.size() > 0) {
|
||||
uint16_t const totalBlocks = (((ba.size())%64)==0) ? (ba.size()/64) : (ba.size()/64)+1;
|
||||
m_hw->dcDownloadSetTotalBlockNumber(totalBlocks);
|
||||
|
||||
// fill last block of data to be sent with 0xFF
|
||||
ba = ba.leftJustified(totalBlocks*64, (char)(0xFF));
|
||||
|
||||
qCritical() << QDateTime::currentDateTime().time().toString(Qt::ISODateWithMs)
|
||||
<< "DownloadThread::run(): TOTAL NUMBER OF BYTES TO SEND TO DC" << ba.size();
|
||||
qCritical() << QDateTime::currentDateTime().time().toString(Qt::ISODateWithMs)
|
||||
<< "DownloadThread::run(): TOTAL NUMBER OF BLOCKS" << totalBlocks;
|
||||
|
||||
m_hw->dc_autoRequest(true); // turn auto-request setting on
|
||||
|
||||
m_hw->request_DC2_HWversion();
|
||||
m_hw->request_DC2_SWversion();
|
||||
QThread::sleep(1);
|
||||
|
||||
// m_hw->dc_autoRequest(false); // turn auto-request setting on
|
||||
|
||||
resetDeviceController();
|
||||
|
||||
qCritical() << QDateTime::currentDateTime().time().toString(Qt::ISODateWithMs)
|
||||
<< "DownloadThread::run(): RESET DEVICE-CONTROLLER";
|
||||
|
||||
if (startBootloader()) {
|
||||
|
||||
qCritical() << QDateTime::currentDateTime().time().toString(Qt::ISODateWithMs)
|
||||
<< "DownloadThread::run(): STARTED BOOT-LOADER";
|
||||
|
||||
m_hw->dc_autoRequest(false);// turn auto-request setting off for
|
||||
// download of binary dc
|
||||
|
||||
qCritical() << QDateTime::currentDateTime().time().toString(Qt::ISODateWithMs)
|
||||
<< "DownloadThread::run(): TOTAL NUMBER OF FIRMWARE BLOCKS" << totalBlocks;
|
||||
|
||||
int currentBlock = 0; // download of binary dc
|
||||
DownloadResult res = DownloadResult::OK;
|
||||
|
||||
while (res != DownloadResult::ERROR && currentBlock < totalBlocks) {
|
||||
if ((res = sendNextAddress(currentBlock)) != DownloadResult::ERROR) {
|
||||
if ((res = sendNextDataBlock(ba, currentBlock)) != DownloadResult::ERROR) {
|
||||
m_hw->dcDownloadSetCurrentBlockNumber(currentBlock);
|
||||
|
||||
qCritical() << QDateTime::currentDateTime().time().toString(Qt::ISODateWithMs)
|
||||
<< "DownloadThread::run(): currentBlockNumber ..." << currentBlock;
|
||||
|
||||
currentBlock += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
qCritical() << QDateTime::currentDateTime().time().toString(Qt::ISODateWithMs)
|
||||
<< QString("DownloadThread::run(): last 64-byte block %1").arg(currentBlock);
|
||||
|
||||
int const rest = ba.size() % 64;
|
||||
int const offset = ba.size() - rest;
|
||||
char const *startAddress = ba.constData() + offset;
|
||||
|
||||
if (rest > 0) {
|
||||
// SHOULD NEVER HAPPEN !!!
|
||||
uint8_t local[66];
|
||||
memset(local, 0xFF, sizeof(local));
|
||||
memcpy(local, startAddress, rest);
|
||||
qCritical() << "DownloadThread::run(): ERROR SEND REMAINING" << rest << "BYTES";
|
||||
m_hw->bl_sendDataBlock(64, local);
|
||||
} else {
|
||||
m_hw->bl_sendLastBlock();
|
||||
m_hw->dcDownloadSetCurrentBlockNumber(currentBlock);
|
||||
|
||||
qCritical() << "DownloadThread::run(): currentBlockNumber" << currentBlock;
|
||||
// QThread::msleep(250);
|
||||
}
|
||||
qCritical() << "DownloadThread::run(): last result" << (int)sendStatus(m_hw->bl_wasSendingDataOK());
|
||||
|
||||
stopBootloader(); // stop bootloader several times: if it
|
||||
QThread::sleep(1); // is not stopped, then the PSA has to be
|
||||
}
|
||||
// restarted manually (!!!)
|
||||
stopBootloader();
|
||||
QThread::sleep(1);
|
||||
}
|
||||
|
||||
qCritical() << QDateTime::currentDateTime().time().toString(Qt::ISODateWithMs)
|
||||
<< "DownloadThread::run(): STOPPED BOOT-LOADER";
|
||||
|
||||
stopBootloader(); // there is no harm in stopping the bootloader even
|
||||
// if it was not started at all
|
||||
|
||||
m_hw->dc_autoRequest(true);
|
||||
}
|
||||
|
||||
#else // test
|
||||
// load binary device controller file into memory
|
||||
QByteArray ba = loadBinaryDCFile(m_hw->dcDownloadFileName());
|
||||
if (ba.size() > 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user