Esempio n. 1
0
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);
}
Esempio n. 3
0
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);
}