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