diff --git a/src/download_thread.cpp b/src/download_thread.cpp index a5f0e9e..2f6c603 100644 --- a/src/download_thread.cpp +++ b/src/download_thread.cpp @@ -104,8 +104,10 @@ void DownloadThread::run() { m_hw->dcDownloadRequestAck(); - qCritical() << "DownloadThread::run(): DOWNLOAD THREAD STARTED"; + qCritical() << "DownloadThread::run(): DOWNLOAD THREAD STARTED:"; + qCritical() << " DownloadThread::run(): Filename:" << m_hw->dcDownloadFileName(); +#if 1 // load binary device controller file into memory QByteArray ba = loadBinaryDCFile(m_hw->dcDownloadFileName()); if (ba.size() > 0) { @@ -115,13 +117,17 @@ void DownloadThread::run() { // fill last block of data to be sent with 0xFF ba = ba.leftJustified(totalBlocks*64, (char)(0xFF)); + qCritical() << "DownloadThread::run(): TOTAL NUMBER OF BYTES TO SEND TO DC" << ba.size(); + qCritical() << "DownloadThread::run(): TOTAL NUMBER OF BLOCKS" << totalBlocks; + + m_hw->dc_autoRequest(true); // turn auto-request setting on + resetDeviceController(); + QThread::sleep(1); if (startBootloader()) { - - qCritical() << "DownloadThread::run(): TOTAL NUMBER OF BYTES TO SEND TO DC" << ba.size(); - qCritical() << "DownloadThread::run(): TOTAL NUMBER OF BLOCKS" << totalBlocks; - - int currentBlock = 0; + m_hw->dc_autoRequest(false);// turn auto-request setting off for +#if 0 + int currentBlock = 0; // download of binary dc DownloadResult res = DownloadResult::OK; qCritical() << "64-byte block " << currentBlock; while (res != DownloadResult::ERROR && currentBlock < totalBlocks) { @@ -149,20 +155,32 @@ void DownloadThread::run() { } 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()); +#endif + m_hw->dc_autoRequest(true); // turn auto-request setting on again } stopBootloader(); // there is no harm in stopping the bootloader even } // if it was not started at all -#if 0 - // test code: - uint16_t const totalBlocks = 100; - m_hw->dcDownloadSetTotalBlockNumber(totalBlocks); +#else + // 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); - for (uint16_t currentBlock = 0; currentBlock <= totalBlocks; ++currentBlock) { - m_hw->dcDownloadSetCurrentBlockNumber(currentBlock); - QThread::msleep(100); + // fill last block of data to be sent with 0xFF + ba = ba.leftJustified(totalBlocks*64, (char)(0xFF)); + + for (uint16_t currentBlock = 0; currentBlock <= totalBlocks; ++currentBlock) { + m_hw->dcDownloadSetCurrentBlockNumber(currentBlock); + qCritical() << "DownloadThread::run(): currentBlockNumber" << currentBlock; + QThread::msleep(250); + } } #endif @@ -265,11 +283,12 @@ bool DownloadThread::startBootloader() const { int nTry = 5; while (--nTry >= 0) { m_hw->bl_startBL(); - QThread::msleep(5000); + QThread::msleep(1000); m_hw->bl_checkBL(); + QThread::msleep(1000); if (m_hw->bl_isUp()) { qInfo() << "starting bootloader...OK"; - QThread::msleep(5000); + QThread::msleep(1000); return true; } else { qCritical() << "bootloader not up (" << nTry << ")";