MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); this->ui->b_disconnect->setEnabled(false); this->ui->b_send->setEnabled(false); this->ui->b_sendlast->setEnabled(false); this->ui->b_receive->setEnabled(false); this->ui->b_verify->setEnabled(false); this->stlink = new stlinkv2(); this->devices = new DeviceList(this); this->tfThread = new transferThread(); if (this->devices->IsLoaded()) { this->ui->gb_top->setEnabled(true); this->log(QString::number(this->devices->getDevicesCount())+" Device descriptions loaded."); QObject::connect(this->ui->b_quit,SIGNAL(clicked()),this,SLOT(Quit())); QObject::connect(this->ui->b_qt,SIGNAL(clicked()),qApp,SLOT(aboutQt())); QObject::connect(this->ui->b_connect, SIGNAL(clicked()), this, SLOT(Connect())); QObject::connect(this->ui->b_disconnect, SIGNAL(clicked()), this, SLOT(Disconnect())); QObject::connect(this->ui->b_send, SIGNAL(clicked()), this, SLOT(Send())); QObject::connect(this->ui->b_sendlast, SIGNAL(clicked()), this, SLOT(SendLast())); QObject::connect(this->ui->b_receive, SIGNAL(clicked()), this, SLOT(Receive())); QObject::connect(this->ui->b_verify, SIGNAL(clicked()), this, SLOT(Verify())); QObject::connect(this->ui->b_halt, SIGNAL(clicked()), this, SLOT(HaltMCU())); QObject::connect(this->ui->b_run, SIGNAL(clicked()), this, SLOT(RunMCU())); QObject::connect(this->ui->b_reset, SIGNAL(clicked()), this, SLOT(ResetMCU())); QObject::connect(this->ui->r_jtag, SIGNAL(clicked()), this, SLOT(setModeJTAG())); QObject::connect(this->ui->r_swd, SIGNAL(clicked()), this, SLOT(setModeSWD())); QObject::connect(this->ui->b_hardReset, SIGNAL(clicked()), this, SLOT(HardReset())); // Thread QObject::connect(this->tfThread, SIGNAL(sendProgress(quint32)), this, SLOT(updateProgress(quint32))); QObject::connect(this->tfThread, SIGNAL(sendStatus(QString)), this, SLOT(updateStatus(QString))); QObject::connect(this->tfThread, SIGNAL(sendLoaderStatus(QString)), this, SLOT(updateLoaderStatus(QString))); QObject::connect(this->stlink, SIGNAL(bufferPct(quint32)), this, SLOT(updateLoaderPct(quint32))); QObject::connect(this->tfThread, SIGNAL(sendLock(bool)), this, SLOT(lockUI(bool))); QObject::connect(this->ui->b_stop, SIGNAL(clicked()), this->tfThread, SLOT(halt())); QObject::connect(this->tfThread, SIGNAL(sendLog(QString)), this, SLOT(log(QString))); // Help QObject::connect(this->ui->b_help, SIGNAL(clicked()), this, SLOT(showHelp())); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), mUi(new Ui::MainWindow) { mUi->setupUi(this); mUi->b_disconnect->setEnabled(false); this->lockUI(true); mStlink = new stlinkv2(); mDevices = new DeviceInfoList(this); mTfThread = new transferThread(); mLastAction = ACTION_NONE; if (mDevices->IsLoaded()) { this->log(QString::number(mDevices->getDevicesCount())+" Device descriptions loaded."); QObject::connect(mUi->b_quit,SIGNAL(clicked()),this,SLOT(quit())); QObject::connect(mUi->b_connect, SIGNAL(clicked()), this, SLOT(connect())); QObject::connect(mUi->b_disconnect, SIGNAL(clicked()), this, SLOT(disconnect())); QObject::connect(mUi->b_send, SIGNAL(clicked()), this, SLOT(send())); QObject::connect(mUi->b_receive, SIGNAL(clicked()), this, SLOT(receive())); QObject::connect(mUi->b_verify, SIGNAL(clicked()), this, SLOT(verify())); QObject::connect(mUi->b_repeat, SIGNAL(clicked()), this, SLOT(repeat())); QObject::connect(mUi->b_halt, SIGNAL(clicked()), this, SLOT(haltMCU())); QObject::connect(mUi->b_run, SIGNAL(clicked()), this, SLOT(runMCU())); QObject::connect(mUi->b_reset, SIGNAL(clicked()), this, SLOT(resetMCU())); QObject::connect(mUi->r_jtag, SIGNAL(clicked()), this, SLOT(setModeJTAG())); QObject::connect(mUi->r_swd, SIGNAL(clicked()), this, SLOT(setModeSWD())); QObject::connect(mUi->b_hardReset, SIGNAL(clicked()), this, SLOT(hardReset())); // Thread QObject::connect(mTfThread, SIGNAL(sendProgress(quint32)), this, SLOT(updateProgress(quint32))); QObject::connect(mTfThread, SIGNAL(sendStatus(QString)), this, SLOT(updateStatus(QString))); QObject::connect(mTfThread, SIGNAL(sendLoaderStatus(QString)), this, SLOT(updateLoaderStatus(QString))); QObject::connect(mStlink, SIGNAL(bufferPct(quint32)), this, SLOT(updateLoaderPct(quint32))); QObject::connect(mTfThread, SIGNAL(sendLock(bool)), this, SLOT(lockUI(bool))); QObject::connect(mUi->b_stop, SIGNAL(clicked()), mTfThread, SLOT(halt())); QObject::connect(mTfThread, SIGNAL(sendLog(QString)), this, SLOT(log(QString))); // Help QObject::connect(mUi->b_help, SIGNAL(clicked()), this, SLOT(showHelp())); // Usb stuff QObject::connect(mStlink, SIGNAL(deviceDetected(QString)), this, SLOT(log(QString))); }
void transferThread::send(const QString &filename) { QFile file(filename); if (!file.open(QIODevice::ReadOnly)) { qCritical("Could not open the file."); return; } emit sendLock(true); this->m_stop = false; quint32 step_size = 116; const quint32 from = 0; const quint32 to = file.size(); quint32 progress, oldprogress; qint32 read; char *buf2 = new char[step_size]; qDebug() << "File size" << file.size(); if (!this->m_btl->eraseFlash(file.size())) { emit sendStatus("Erase failed"); emit sendLog("Erase failed"); qDebug() << "Erase failed"; emit sendLock(false); return; } else { emit sendStatus("Erase OK"); emit sendLog("Erase OK"); qDebug() << "Erase OK"; } qInformal() << "Writing from" << "0x"+QString::number(from, 16) << "to" << "0x"+QString::number(to, 16); emit sendStatus("Transfering"); emit sendLog("Transfering"); progress = 0; for (int i=0; i<=file.size(); i+=step_size) { if (this->m_stop) break; if (file.atEnd()) { qDebug() << "End Of File"; break; } memset(buf2, 0, step_size); if ((read = file.read(buf2, step_size)) <= 0) break; qDebug() << "Read" << read << "Bytes from disk"; QByteArray buf(buf2, read); if (this->m_btl->writeFlash(i, &buf, step_size) < read){ emit sendStatus("Transfer failed"); emit sendLog("Transfer failed"); break; } oldprogress = progress; progress = (i*100)/file.size(); if (progress > oldprogress) { // Push only if number has increased emit sendProgress(progress); qInformal() << "Progress:"<< QString::number(progress)+"%"; } } emit sendLoaderStatus("Idle"); file.close(); delete buf2; emit sendProgress(100); emit sendStatus("Transfer done"); emit sendLog("Transfer done"); qInformal() << "Transfer done"; emit sendLock(false); }