diff --git a/README.md b/README.md index eb2c156..e4f9165 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ miniSProg ========= +![image](https://github.com/vgegok/miniSProg/blob/vgegok/Screenshot/Screenshot.png) GUI programmer for miniSpartan6+ development board @@ -37,4 +38,4 @@ user. - When compiling xc3sprog you might get "fatal error: ftdi.h: No such file or directory" Make sure you have (libftdi 0.x) installed, some new Linux distributions have moved to (libftdi 1.x) if that is the case with your distribution then fix the -source code of xc3sprog to use the new library instead. \ No newline at end of file +source code of xc3sprog to use the new library instead. diff --git a/Screenshot/Screenshot.png b/Screenshot/Screenshot.png new file mode 100644 index 0000000..5d665e1 Binary files /dev/null and b/Screenshot/Screenshot.png differ diff --git a/bscan/bscan_spi_s6lx25_ftg256.bit b/bscan/bscan_spi_s6lx25_ftg256.bit new file mode 100755 index 0000000..9eaf918 Binary files /dev/null and b/bscan/bscan_spi_s6lx25_ftg256.bit differ diff --git a/bscan/bscan_spi_s6lx9_ftg256.bit b/bscan/bscan_spi_s6lx9_ftg256.bit new file mode 100644 index 0000000..2c7e9d3 Binary files /dev/null and b/bscan/bscan_spi_s6lx9_ftg256.bit differ diff --git a/miniSProg/mainwindow.cpp b/miniSProg/mainwindow.cpp index 99d0609..99dac01 100644 --- a/miniSProg/mainwindow.cpp +++ b/miniSProg/mainwindow.cpp @@ -47,6 +47,11 @@ MainWindow::MainWindow(QWidget *parent) : if (xc3sprog_file.exists() && xc3sprog_file.isFile()) { ui->lineEdit_xc3sprog->setText(xc3sprog_file.canonicalFilePath()); } + + ui->toolBtnBscan->setEnabled(false); + ui->lineEdit_bscanfile->setEnabled(false); + ui->checkBoxRbt->setEnabled(false); + ui->checkBoxRbt->setText("Reboot is defalt"); } MainWindow::~MainWindow() @@ -77,10 +82,10 @@ void MainWindow::procError(QProcess::ProcessError procError) ui->textEdit->append(proc->errorString()); switch (procError) { - case QProcess::FailedToStart: + case QProcess::FailedToStart: ui->textEdit->append(tr("Failed to start")); break; - case QProcess::Crashed: + case QProcess::Crashed: ui->textEdit->append(tr("Crashed")); break; case QProcess::Timedout: @@ -88,9 +93,9 @@ void MainWindow::procError(QProcess::ProcessError procError) break; case QProcess::UnknownError: ui->textEdit->append(tr("Unknown Error")); - default: + default: ui->textEdit->append(tr("REALLY! Unknown Error")); - } + } setDefaultConsoleColor(); } @@ -100,18 +105,18 @@ void MainWindow::procExited(int exitCode, QProcess::ExitStatus exitStatus) ui->textEdit->append("Done."); //ui->textEdit->append(QString::number(exitCode)); -// if ( myProcess->exitStatus() == 0) -// { -// qDebug () << "Program ran successfully"; -// } -// if ( myProcess->exitStatus() == 2) -// { -// qDebug () << "Customized message"; -// } -// if ( myProcess->exitStatus() == 3) -// { -// qDebug () << "Another text warning message"; -// } + // if ( myProcess->exitStatus() == 0) + // { + // qDebug () << "Program ran successfully"; + // } + // if ( myProcess->exitStatus() == 2) + // { + // qDebug () << "Customized message"; + // } + // if ( myProcess->exitStatus() == 3) + // { + // qDebug () << "Another text warning message"; + // } } @@ -142,6 +147,12 @@ void MainWindow::on_toolBtnBit_clicked() ui->lineEdit_bitfile->setText(bitfile_path); } +void MainWindow::on_toolBtnBscan_clicked() +{ + QString bscanfile_path = QFileDialog::getOpenFileName(this, tr("Select the Bscan file"),"./",tr("bit Files (*.bit)")); + ui->lineEdit_bscanfile->setText(bscanfile_path); +} + void MainWindow::on_checkBox_details_stateChanged(int status) { // status 0 => Hide, 2 => Show @@ -155,6 +166,23 @@ void MainWindow::on_checkBox_details_stateChanged(int status) } } +void MainWindow::on_pushButton_Reboot_clicked() +{ + if (ui->lineEdit_xc3sprog->text().isEmpty()) { + ui->textEdit->setTextColor(Qt::red); + ui->textEdit->append(tr("ERROR: Select the xc3sprog path first.")); + setDefaultConsoleColor(); + } else { + QString program = ui->lineEdit_xc3sprog->text(); + QStringList arguments_reboot; + arguments_reboot.append("-c"); + arguments_reboot.append("ftdi"); + arguments_reboot.append("-R"); + proc->start(program,arguments_reboot); + } + +} + void MainWindow::on_pushButton_Program_clicked() { if (ui->lineEdit_xc3sprog->text().isEmpty()) { @@ -167,11 +195,33 @@ void MainWindow::on_pushButton_Program_clicked() setDefaultConsoleColor(); } else { QString program = ui->lineEdit_xc3sprog->text(); - QStringList arguments; - arguments.append("-c"); - arguments.append("ftdi"); - arguments.append(ui->lineEdit_bitfile->text()); - proc->start(program, arguments); + QStringList arguments_load; + QStringList arguments_prog; + QStringList arguments_reboot; + arguments_load.append("-c"); + arguments_load.append("ftdi"); + if(ui->radioBtnLoader->isChecked()){ + arguments_load.append(ui->lineEdit_bitfile->text()); + }else{ + arguments_load.append(ui->lineEdit_bscanfile->text()); + } + proc->start(program, arguments_load); + proc->waitForFinished(); + if(ui->radioBtnProg->isChecked()){ + arguments_prog.append("-c"); + arguments_prog.append("ftdi"); + arguments_prog.append("-I"); + arguments_prog.append(ui->lineEdit_bitfile->text()); + ui->textEdit->append("Program Done, FPGA Will Reboot!\n"); + proc->start(program,arguments_prog); + proc->waitForFinished(); + if(ui->checkBoxRbt->isChecked()){ + arguments_reboot.append("-c"); + arguments_reboot.append("ftdi"); + arguments_reboot.append("-R"); + proc->start(program,arguments_reboot); + } + } } } @@ -183,6 +233,26 @@ void MainWindow::on_actionAbout_triggered() "the FPGA board miniSpartan6+.

" "Source code: https://github.com/fduraibi/miniSProg
" "Developed by: Fahad Alduraibi
" - "v1.0"); + "Updated by: Vgegok
" + "v2.0 2021.02.19"); QMessageBox::about(this, myTitle, myBody); } + + + +void MainWindow::on_radioBtnLoader_clicked() +{ + ui->toolBtnBscan->setEnabled(false); + ui->lineEdit_bscanfile->setEnabled(false); + ui->checkBoxRbt->setEnabled(false); + ui->checkBoxRbt->setText("Reboot is defalt"); + +} + +void MainWindow::on_radioBtnProg_clicked() +{ + ui->toolBtnBscan->setEnabled(true); + ui->lineEdit_bscanfile->setEnabled(true); + ui->checkBoxRbt->setEnabled(true); + ui->checkBoxRbt->setText("Reboot when finshed"); +} diff --git a/miniSProg/mainwindow.h b/miniSProg/mainwindow.h index 2321bba..4901f27 100644 --- a/miniSProg/mainwindow.h +++ b/miniSProg/mainwindow.h @@ -47,13 +47,19 @@ private slots: void on_toolBtnProg_clicked(); void on_toolBtnBit_clicked(); + void on_toolBtnBscan_clicked(); void on_checkBox_details_stateChanged(int status); + void on_pushButton_Reboot_clicked(); void on_pushButton_Program_clicked(); void on_actionAbout_triggered(); + void on_radioBtnLoader_clicked(); + + void on_radioBtnProg_clicked(); + private: Ui::MainWindow *ui; QProcess * proc; diff --git a/miniSProg/mainwindow.ui b/miniSProg/mainwindow.ui index 80b6ccf..45ebaf8 100644 --- a/miniSProg/mainwindow.ui +++ b/miniSProg/mainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 495 - 373 + 512 + 513 @@ -25,6 +25,41 @@ + + + + true + + + QFrame::NoFrame + + + QFrame::Raised + + + + + + false + + + Loader to RAM + + + true + + + + + + + Program to SPI Flash + + + + + + @@ -69,19 +104,6 @@ - - - - .bit file - - - Qt::AutoText - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - @@ -102,6 +124,46 @@ + + + + ... + + + + + + + .bit file + + + Qt::AutoText + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + true + + + + + + + .bit Bscan file + + + Qt::AutoText + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + @@ -189,6 +251,23 @@ QCheckBox::indicator:checked { + + + + Reboot when finshed + + + true + + + + + + + Reboot + + + @@ -246,8 +325,8 @@ QCheckBox::indicator:checked { 0 0 - 495 - 20 + 512 + 19