1 #include "platformpicaxe.h"
2
3 #include <QProcess>
4 #include <QFileInfo>
5 #include <QSettings>
6
7 #include "programtab.h"
8
PlatformPicaxe()9 PlatformPicaxe::PlatformPicaxe() : Platform(QString("PICAXE"))
10 {
11 setReferenceUrl(QUrl("http://www.picaxe.com/BASIC-Commands"));
12 setCanProgram(true);
13 setIdeName("PICAXE Compilers");
14 setDownloadUrl(QUrl("http://www.picaxe.com/Software/Drivers/PICAXE-Compilers/"));
15 setMinVersion("2.0");
16 setExtensions(QStringList() << ".bas" << ".BAS");
17
18 QMap<QString, QString> boards;
19 boards.insert("PICAXE-08", "picaxe08");
20 boards.insert("PICAXE-08M", "picaxe08m");
21 boards.insert("PICAXE-08M2", "picaxe08m2");
22 boards.insert("PICAXE-08M2LE", "picaxe08m2le");
23 boards.insert("PICAXE-14M", "picaxe14m");
24 boards.insert("PICAXE-14M2", "picaxe14m2");
25 boards.insert("PICAXE-18", "picaxe18");
26 boards.insert("PICAXE-18A", "picaxe18a");
27 boards.insert("PICAXE-18M", "picaxe18m");
28 boards.insert("PICAXE-18M2", "picaxe18m2");
29 boards.insert("PICAXE-18X", "picaxe18x");
30 boards.insert("PICAXE-20", "picaxe20");
31 boards.insert("PICAXE-20M2", "picaxe20m2");
32 boards.insert("PICAXE-20X2", "picaxe20x2");
33 boards.insert("PICAXE-28", "picaxe28");
34 boards.insert("PICAXE-28A", "picaxe28a");
35 boards.insert("PICAXE-28X", "picaxe28x");
36 boards.insert("PICAXE-28X1", "picaxe28x1");
37 boards.insert("PICAXE-28X2", "picaxe28x2");
38 boards.insert("PICAXE-40X", "picaxe28x");
39 boards.insert("PICAXE-40X1", "picaxe28x1");
40 boards.insert("PICAXE-40X2", "picaxe28x2");
41 setBoards(boards);
42
43 setDefaultBoardName("PICAXE-08M");
44 }
45
upload(QWidget * source,const QString & port,const QString & board,const QString & fileLocation)46 void PlatformPicaxe::upload(QWidget *source, const QString &port, const QString &board, const QString &fileLocation)
47 {
48 // see http://www.picaxe.com/docs/beta_compiler.pdf
49 QProcess * process = new QProcess(this);
50 process->setProcessChannelMode(QProcess::MergedChannels);
51 process->setReadChannel(QProcess::StandardOutput);
52
53 connect(process, SIGNAL(finished(int, QProcess::ExitStatus)), source, SLOT(programProcessFinished(int, QProcess::ExitStatus)));
54 connect(process, SIGNAL(readyReadStandardOutput()), source, SLOT(programProcessReadyRead()));
55
56 QFileInfo cmdFileInfo(getCommandLocation());
57 QString cmd(cmdFileInfo.absoluteDir().absolutePath().append("/").append(getBoards().value(board)));
58
59 QStringList args;
60 args.append(QString("-c%1").arg(port));
61 args.append(fileLocation);
62
63 ProgramTab *tab = qobject_cast<ProgramTab *>(source);
64 if (tab)
65 tab->appendToConsole(tr("Running %1 %2").arg(cmd).arg(args.join(" ")));
66 process->start(cmd, args);
67 }
68