void ProgramTab::sendProgram() { if (m_programmerPath.isEmpty()) return; if (isModified()) { QMessageBox::information(NULL, QObject::tr("Fritzing"), tr("The file '%1' must be saved before it can be sent to the programmer.").arg(m_filename)); return; } m_programButton->setEnabled(false); QString language = m_languageComboBox->currentText(); if (language.compare("picaxe", Qt::CaseInsensitive) == 0) { QProcess * process = new QProcess(this); process->setProcessChannelMode(QProcess::MergedChannels); process->setReadChannel(QProcess::StandardOutput); connect(process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(programProcessFinished(int, QProcess::ExitStatus))); connect(process, SIGNAL(readyReadStandardOutput()), this, SLOT(programProcessReadyRead())); QStringList args; args.append(QString("-c%1").arg(m_portComboBox->currentText())); args.append(m_filename); m_console->setPlainText(""); process->start(m_programmerPath, args); }
void PlatformPicaxe::upload(QWidget *source, const QString &port, const QString &board, const QString &fileLocation) { // see http://www.picaxe.com/docs/beta_compiler.pdf QProcess * process = new QProcess(this); process->setProcessChannelMode(QProcess::MergedChannels); process->setReadChannel(QProcess::StandardOutput); connect(process, SIGNAL(finished(int, QProcess::ExitStatus)), source, SLOT(programProcessFinished(int, QProcess::ExitStatus))); connect(process, SIGNAL(readyReadStandardOutput()), source, SLOT(programProcessReadyRead())); QFileInfo cmdFileInfo(getCommandLocation()); QString cmd(cmdFileInfo.absoluteDir().absolutePath().append("/").append(getBoards().value(board))); QStringList args; args.append(QString("-c%1").arg(port)); args.append(fileLocation); ProgramTab *tab = qobject_cast<ProgramTab *>(source); if (tab) tab->appendToConsole(tr("Running %1 %2").arg(cmd).arg(args.join(" "))); process->start(cmd, args); }
void PlatformArduino::upload(QWidget *source, const QString &port, const QString &board, const QString &fileLocation) { QProcess * process = new QProcess(this); process->setProcessChannelMode(QProcess::MergedChannels); process->setReadChannel(QProcess::StandardOutput); connect(process, SIGNAL(finished(int, QProcess::ExitStatus)), source, SLOT(programProcessFinished(int, QProcess::ExitStatus))); connect(process, SIGNAL(readyReadStandardOutput()), source, SLOT(programProcessReadyRead())); // Make sure .ino is in its own folder with same name (as required by Arduino compiler), // otherwise create a subfolder and copy the file there. QFileInfo fileInfo(fileLocation); QString tmpFilePath = fileInfo.absoluteFilePath(); QString dirName = fileInfo.dir().dirName(); QString sketchName = fileInfo.baseName(); if (dirName.compare(sketchName, Qt::CaseInsensitive) != 0) { QString tmpSketchName(sketchName.append("_TMP")); fileInfo.dir().mkdir(tmpSketchName); tmpFilePath = fileInfo.absolutePath().append("/").append(tmpSketchName).append("/") .append(fileInfo.baseName().append("_TMP.").append(fileInfo.suffix())); if (QFile::exists(tmpFilePath)) QFile::remove(tmpFilePath); QFile::copy(fileInfo.absoluteFilePath(), tmpFilePath); } QStringList args; // see https://github.com/arduino/Arduino/blob/ide-1.5.x/build/shared/manpage.adoc //args.append(QString("--verbose")); args.append(QString("--board")); args.append(getBoards().value(board)); args.append(QString("--port")); args.append(port); args.append(QString("--upload")); args.append(QDir::toNativeSeparators(tmpFilePath)); ProgramTab *tab = qobject_cast<ProgramTab *>(source); if (tab) tab->appendToConsole(tr("Running %1 %2").arg(getCommandLocation()).arg(args.join(" "))); process->start(getCommandLocation(), args); }